MCPcopy Create free account
hub / github.com/Nativu5/Gemini-FastAPI / process

Method process

app/server/chat.py:1023–1073  ·  view source on GitHub ↗
(self, chunk: str)

Source from the content-addressed store, hash-verified

1021 return self.state == "NORMAL" or (self.state == "IN_BLOCK" and self.current_role != "tool")
1022
1023 def process(self, chunk: str) -> str:
1024 self.buffer += chunk
1025 output = []
1026
1027 while self.buffer:
1028 if self.state == "IN_TAG_HEADER":
1029 nl_idx = self.buffer.find("\n")
1030 if nl_idx != -1:
1031 self.current_role = self.buffer[:nl_idx].strip().lower()
1032 self.buffer = self.buffer[nl_idx + 1 :]
1033 self.stack[-1] = "IN_BLOCK"
1034 continue
1035 else:
1036 break
1037
1038 match = STREAM_MASTER_RE.search(self.buffer)
1039 if not match:
1040 tail_match = STREAM_TAIL_RE.search(self.buffer)
1041 keep_len = len(tail_match.group(0)) if tail_match else 0
1042 yield_len = len(self.buffer) - keep_len
1043 if yield_len > 0:
1044 if self._is_outputting():
1045 output.append(self.buffer[:yield_len])
1046 self.buffer = self.buffer[yield_len:]
1047 break
1048
1049 start, end = match.span()
1050 matched_group = match.lastgroup
1051 pre_text = self.buffer[:start]
1052
1053 if self._is_outputting():
1054 output.append(pre_text)
1055
1056 if matched_group.endswith("_START"):
1057 m_type = matched_group.split("_")[0]
1058 if m_type == "TAG":
1059 self.stack.append("IN_TAG_HEADER")
1060 else:
1061 self.stack.append(f"IN_{m_type}")
1062 elif matched_group in ("PROTOCOL_EXIT", "TAG_EXIT", "HINT_EXIT"):
1063 if len(self.stack) > 1:
1064 self.stack.pop()
1065 else:
1066 self.stack = ["NORMAL"]
1067
1068 if self.state == "NORMAL":
1069 self.current_role = ""
1070
1071 self.buffer = self.buffer[end:]
1072
1073 return "".join(output)
1074
1075 def flush(self) -> str:
1076 """Release remaining buffer content and perform final cleanup at stream end."""

Callers 1

generate_streamFunction · 0.95

Calls 2

_is_outputtingMethod · 0.95
findMethod · 0.80

Tested by

no test coverage detected