ka1kuk commited on
Commit
3090644
1 Parent(s): ae63957

Update networks/message_streamer.py

Browse files
Files changed (1) hide show
  1. 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
- self.model_fullname = self.MODEL_MAP[self.model]
30
- self.message_outputer = OpenaiStreamOutputer()
31
- self.stop_sequences = self.STOP_SEQUENCES_MAP.get(self.model, "")
32
 
33
  def parse_line(self, line):
34
- try:
35
- line = line.decode("utf-8")
36
- line = re.sub(r"data:\s*", "", line)
37
- data = json.loads(line)
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
- # Check if content is None before calling strip()
132
- if content is not None:
133
- if content.strip() == self.stop_sequences:
134
- logger.success("\n[Finished]")
135
- break
136
- else:
137
- logger.back(content, end="")
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
- stop_sequence = getattr(self, 'stop_sequences', '') # Default value if not set
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")