Update app.py
Browse files
app.py
CHANGED
@@ -142,6 +142,7 @@ def messages():
|
|
142 |
log_request(request.remote_addr, request.path, 200)
|
143 |
|
144 |
def generate():
|
|
|
145 |
yield create_event("message_start", {
|
146 |
"type": "message_start",
|
147 |
"message": {
|
@@ -152,7 +153,7 @@ def messages():
|
|
152 |
"model": model, # 动态模型
|
153 |
"stop_reason": None,
|
154 |
"stop_sequence": None,
|
155 |
-
"usage": {"input_tokens": input_tokens, "output_tokens":
|
156 |
},
|
157 |
})
|
158 |
yield create_event("content_block_start", {"type": "content_block_start", "index": 0, "content_block": {"type": "text", "text": ""}})
|
@@ -177,33 +178,24 @@ def messages():
|
|
177 |
sio.emit('perplexity_ask', (previous_messages, emit_data))
|
178 |
|
179 |
def on_query_progress(data):
|
180 |
-
nonlocal response_text, output_tokens
|
181 |
if 'text' in data:
|
182 |
text = json.loads(data['text'])
|
183 |
chunk = text['chunks'][-1] if text['chunks'] else None
|
184 |
if chunk:
|
185 |
response_text.append(chunk)
|
186 |
-
|
187 |
-
output_tokens += calculate_tokens(chunk)
|
188 |
|
189 |
-
#
|
190 |
yield create_event("message_delta", {
|
191 |
"type": "message_delta",
|
192 |
"delta": {"stop_reason": None, "stop_sequence": None},
|
193 |
-
"usage": {"input_tokens": input_tokens, "output_tokens": output_tokens},
|
194 |
})
|
195 |
|
196 |
# 检查是否是最终响应
|
197 |
if data.get('final', False):
|
198 |
-
|
199 |
-
yield create_event("content_block_stop", {"type": "content_block_stop", "index": 0})
|
200 |
-
yield create_event("message_delta", {
|
201 |
-
"type": "message_delta",
|
202 |
-
"delta": {"stop_reason": "end_turn", "stop_sequence": None},
|
203 |
-
"usage": {"input_tokens": input_tokens, "output_tokens": output_tokens}, # 最终 output_tokens
|
204 |
-
})
|
205 |
-
yield create_event("message_stop", {"type": "message_stop"}) # 确保发送 message_stop 事件
|
206 |
-
response_event.set() # 触发响应结束
|
207 |
|
208 |
def on_query_complete(data):
|
209 |
response_event.set()
|
@@ -228,13 +220,6 @@ def messages():
|
|
228 |
|
229 |
while not response_event.is_set():
|
230 |
sio.sleep(0.1)
|
231 |
-
while response_text:
|
232 |
-
chunk = response_text.pop(0)
|
233 |
-
yield create_event("content_block_delta", {
|
234 |
-
"type": "content_block_delta",
|
235 |
-
"index": 0,
|
236 |
-
"delta": {"type": "text_delta", "text": chunk},
|
237 |
-
})
|
238 |
|
239 |
except Exception as e:
|
240 |
logging.error(f"Error during socket connection: {str(e)}")
|
@@ -247,6 +232,14 @@ def messages():
|
|
247 |
if sio.connected:
|
248 |
sio.disconnect()
|
249 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
250 |
return Response(generate(), content_type='text/event-stream')
|
251 |
|
252 |
except Exception as e:
|
|
|
142 |
log_request(request.remote_addr, request.path, 200)
|
143 |
|
144 |
def generate():
|
145 |
+
nonlocal output_tokens # 使用 nonlocal 声明 output_tokens
|
146 |
yield create_event("message_start", {
|
147 |
"type": "message_start",
|
148 |
"message": {
|
|
|
153 |
"model": model, # 动态模型
|
154 |
"stop_reason": None,
|
155 |
"stop_sequence": None,
|
156 |
+
"usage": {"input_tokens": input_tokens, "output_tokens": 1}, # 动态 input_tokens
|
157 |
},
|
158 |
})
|
159 |
yield create_event("content_block_start", {"type": "content_block_start", "index": 0, "content_block": {"type": "text", "text": ""}})
|
|
|
178 |
sio.emit('perplexity_ask', (previous_messages, emit_data))
|
179 |
|
180 |
def on_query_progress(data):
|
181 |
+
nonlocal response_text, output_tokens # 使用 nonlocal 声明 response_text 和 output_tokens
|
182 |
if 'text' in data:
|
183 |
text = json.loads(data['text'])
|
184 |
chunk = text['chunks'][-1] if text['chunks'] else None
|
185 |
if chunk:
|
186 |
response_text.append(chunk)
|
187 |
+
output_tokens = calculate_tokens(''.join(response_text)) # 更新 output_tokens
|
|
|
188 |
|
189 |
+
# 在 message_delta 事件中包含 output_tokens
|
190 |
yield create_event("message_delta", {
|
191 |
"type": "message_delta",
|
192 |
"delta": {"stop_reason": None, "stop_sequence": None},
|
193 |
+
"usage": {"input_tokens": input_tokens, "output_tokens": output_tokens},
|
194 |
})
|
195 |
|
196 |
# 检查是否是最终响应
|
197 |
if data.get('final', False):
|
198 |
+
response_event.set()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
199 |
|
200 |
def on_query_complete(data):
|
201 |
response_event.set()
|
|
|
220 |
|
221 |
while not response_event.is_set():
|
222 |
sio.sleep(0.1)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
223 |
|
224 |
except Exception as e:
|
225 |
logging.error(f"Error during socket connection: {str(e)}")
|
|
|
232 |
if sio.connected:
|
233 |
sio.disconnect()
|
234 |
|
235 |
+
yield create_event("content_block_stop", {"type": "content_block_stop", "index": 0})
|
236 |
+
yield create_event("message_delta", {
|
237 |
+
"type": "message_delta",
|
238 |
+
"delta": {"stop_reason": "end_turn", "stop_sequence": None},
|
239 |
+
"usage": {"input_tokens": input_tokens, "output_tokens": output_tokens}, # 动态 output_tokens
|
240 |
+
})
|
241 |
+
yield create_event("message_stop", {"type": "message_stop"}) # 确保发送 message_stop 事件
|
242 |
+
|
243 |
return Response(generate(), content_type='text/event-stream')
|
244 |
|
245 |
except Exception as e:
|