Update networks/message_streamer.py
Browse files- networks/message_streamer.py +23 -38
networks/message_streamer.py
CHANGED
|
@@ -26,24 +26,15 @@ class MessageStreamer:
|
|
| 26 |
self.model = model
|
| 27 |
else:
|
| 28 |
self.model = "default"
|
| 29 |
-
|
| 30 |
-
|
| 31 |
-
self.stop_sequences = self.STOP_SEQUENCES_MAP.get(self.model, "")
|
| 32 |
|
| 33 |
def parse_line(self, line):
|
| 34 |
-
|
| 35 |
-
|
| 36 |
-
|
| 37 |
-
|
| 38 |
-
|
| 39 |
-
# Check if 'token' key exists and return its 'text' value
|
| 40 |
-
if 'token' in data:
|
| 41 |
-
return data['token'].get('text', '') # Return an empty string if 'text' is not found
|
| 42 |
-
else:
|
| 43 |
-
return None # Return None if 'token' key is not present
|
| 44 |
-
except Exception as e:
|
| 45 |
-
print(f"An error occurred: {e}")
|
| 46 |
-
return None
|
| 47 |
|
| 48 |
def chat_response(
|
| 49 |
self,
|
|
@@ -107,6 +98,7 @@ class MessageStreamer:
|
|
| 107 |
return stream_response
|
| 108 |
|
| 109 |
def chat_return_dict(self, stream_response):
|
|
|
|
| 110 |
final_output = self.message_outputer.default_data.copy()
|
| 111 |
final_output["choices"] = [
|
| 112 |
{
|
|
@@ -118,28 +110,24 @@ class MessageStreamer:
|
|
| 118 |
},
|
| 119 |
}
|
| 120 |
]
|
| 121 |
-
|
| 122 |
logger.back(final_output)
|
| 123 |
-
|
| 124 |
final_content = ""
|
| 125 |
for line in stream_response.iter_lines():
|
| 126 |
if not line:
|
| 127 |
continue
|
| 128 |
-
|
| 129 |
content = self.parse_line(line)
|
| 130 |
-
|
| 131 |
-
|
| 132 |
-
|
| 133 |
-
|
| 134 |
-
|
| 135 |
-
|
| 136 |
-
|
| 137 |
-
|
| 138 |
-
final_content += content
|
| 139 |
-
|
| 140 |
if self.model in self.STOP_SEQUENCES_MAP.keys():
|
| 141 |
final_content = final_content.replace(self.stop_sequences, "")
|
| 142 |
-
|
| 143 |
final_output["choices"][0]["message"]["content"] = final_content
|
| 144 |
return final_output
|
| 145 |
|
|
@@ -148,24 +136,21 @@ class MessageStreamer:
|
|
| 148 |
for line in stream_response.iter_lines():
|
| 149 |
if not line:
|
| 150 |
continue
|
| 151 |
-
|
| 152 |
content = self.parse_line(line)
|
| 153 |
|
| 154 |
-
|
| 155 |
-
|
| 156 |
-
if content is not None and content.strip() == self.stop_sequences:
|
| 157 |
content_type = "Finished"
|
| 158 |
logger.success("\n[Finished]")
|
| 159 |
is_finished = True
|
| 160 |
else:
|
| 161 |
content_type = "Completions"
|
| 162 |
logger.back(content, end="")
|
| 163 |
-
|
| 164 |
output = self.message_outputer.output(
|
| 165 |
content=content, content_type=content_type
|
| 166 |
)
|
| 167 |
yield output
|
| 168 |
-
|
| 169 |
-
if not is_finished:
|
| 170 |
-
yield self.message_outputer.output(content="", content_type="Finished")
|
| 171 |
|
|
|
|
|
|
|
|
|
| 26 |
self.model = model
|
| 27 |
else:
|
| 28 |
self.model = "default"
|
| 29 |
+
self.model_fullname = self.MODEL_MAP[self.model]
|
| 30 |
+
self.message_outputer = OpenaiStreamOutputer()
|
|
|
|
| 31 |
|
| 32 |
def parse_line(self, line):
|
| 33 |
+
line = line.decode("utf-8")
|
| 34 |
+
line = re.sub(r"data:\s*", "", line)
|
| 35 |
+
data = json.loads(line)
|
| 36 |
+
content = data["token"]["text"]
|
| 37 |
+
return content
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 38 |
|
| 39 |
def chat_response(
|
| 40 |
self,
|
|
|
|
| 98 |
return stream_response
|
| 99 |
|
| 100 |
def chat_return_dict(self, stream_response):
|
| 101 |
+
# https://platform.openai.com/docs/guides/text-generation/chat-completions-response-format
|
| 102 |
final_output = self.message_outputer.default_data.copy()
|
| 103 |
final_output["choices"] = [
|
| 104 |
{
|
|
|
|
| 110 |
},
|
| 111 |
}
|
| 112 |
]
|
|
|
|
| 113 |
logger.back(final_output)
|
| 114 |
+
|
| 115 |
final_content = ""
|
| 116 |
for line in stream_response.iter_lines():
|
| 117 |
if not line:
|
| 118 |
continue
|
|
|
|
| 119 |
content = self.parse_line(line)
|
| 120 |
+
|
| 121 |
+
if content.strip() == self.stop_sequences:
|
| 122 |
+
logger.success("\n[Finished]")
|
| 123 |
+
break
|
| 124 |
+
else:
|
| 125 |
+
logger.back(content, end="")
|
| 126 |
+
final_content += content
|
| 127 |
+
|
|
|
|
|
|
|
| 128 |
if self.model in self.STOP_SEQUENCES_MAP.keys():
|
| 129 |
final_content = final_content.replace(self.stop_sequences, "")
|
| 130 |
+
|
| 131 |
final_output["choices"][0]["message"]["content"] = final_content
|
| 132 |
return final_output
|
| 133 |
|
|
|
|
| 136 |
for line in stream_response.iter_lines():
|
| 137 |
if not line:
|
| 138 |
continue
|
| 139 |
+
|
| 140 |
content = self.parse_line(line)
|
| 141 |
|
| 142 |
+
if content.strip() == self.stop_sequences:
|
|
|
|
|
|
|
| 143 |
content_type = "Finished"
|
| 144 |
logger.success("\n[Finished]")
|
| 145 |
is_finished = True
|
| 146 |
else:
|
| 147 |
content_type = "Completions"
|
| 148 |
logger.back(content, end="")
|
| 149 |
+
|
| 150 |
output = self.message_outputer.output(
|
| 151 |
content=content, content_type=content_type
|
| 152 |
)
|
| 153 |
yield output
|
|
|
|
|
|
|
|
|
|
| 154 |
|
| 155 |
+
if not is_finished:
|
| 156 |
+
yield self.message_outputer.output(content="", content_type="Finished")
|