Update app.py
Browse files
app.py
CHANGED
@@ -2,7 +2,7 @@ import os
|
|
2 |
import json
|
3 |
import uuid
|
4 |
from datetime import datetime
|
5 |
-
from flask import Flask, request, Response, jsonify
|
6 |
import socketio
|
7 |
import requests
|
8 |
import logging
|
@@ -31,7 +31,7 @@ class CustomFormatter(logging.Formatter):
|
|
31 |
|
32 |
def setup_logging():
|
33 |
logger = logging.getLogger()
|
34 |
-
logger.setLevel(logging.
|
35 |
handler = logging.StreamHandler()
|
36 |
handler.setFormatter(CustomFormatter())
|
37 |
logger.addHandler(handler)
|
@@ -164,16 +164,15 @@ def messages():
|
|
164 |
def generate():
|
165 |
nonlocal total_output_tokens
|
166 |
|
|
|
|
|
167 |
def send_event(event_type, data):
|
168 |
event = create_event(event_type, data)
|
169 |
-
logger.
|
170 |
-
|
171 |
-
'data': {'content': event}
|
172 |
-
})
|
173 |
-
yield event
|
174 |
|
175 |
-
#
|
176 |
-
yield
|
177 |
"type": "message_start",
|
178 |
"message": {
|
179 |
"id": msg_id,
|
@@ -186,8 +185,8 @@ def messages():
|
|
186 |
"usage": {"input_tokens": input_tokens, "output_tokens": total_output_tokens},
|
187 |
},
|
188 |
})
|
189 |
-
yield
|
190 |
-
yield
|
191 |
|
192 |
def on_query_progress(data):
|
193 |
nonlocal total_output_tokens, response_text
|
@@ -258,14 +257,14 @@ def messages():
|
|
258 |
sio.sleep(0.1)
|
259 |
while response_text:
|
260 |
chunk = response_text.pop(0)
|
261 |
-
yield
|
262 |
"type": "content_block_delta",
|
263 |
"index": 0,
|
264 |
"delta": {"type": "text_delta", "text": chunk},
|
265 |
})
|
266 |
|
267 |
if timeout_event.is_set():
|
268 |
-
yield
|
269 |
"type": "content_block_delta",
|
270 |
"index": 0,
|
271 |
"delta": {"type": "text_delta", "text": "Request timed out"},
|
@@ -273,7 +272,7 @@ def messages():
|
|
273 |
|
274 |
except Exception as e:
|
275 |
logger.error(f"Error during socket connection: {str(e)}", exc_info=True)
|
276 |
-
yield
|
277 |
"type": "content_block_delta",
|
278 |
"index": 0,
|
279 |
"delta": {"type": "text_delta", "text": f"Error during socket connection: {str(e)}"},
|
@@ -283,16 +282,21 @@ def messages():
|
|
283 |
if sio.connected:
|
284 |
sio.disconnect()
|
285 |
|
286 |
-
#
|
287 |
-
yield
|
288 |
-
yield
|
289 |
"type": "message_delta",
|
290 |
"delta": {"stop_reason": "end_turn", "stop_sequence": None},
|
291 |
"usage": {"output_tokens": total_output_tokens},
|
292 |
})
|
293 |
-
yield
|
294 |
|
295 |
-
|
|
|
|
|
|
|
|
|
|
|
296 |
|
297 |
except Exception as e:
|
298 |
logger.error(f"Request error: {str(e)}", exc_info=True)
|
@@ -394,4 +398,5 @@ if __name__ == '__main__':
|
|
394 |
})
|
395 |
if not API_KEY:
|
396 |
logger.warning("PPLX_KEY environment variable is not set", extra={'event_type': 'config_warning'})
|
397 |
-
app.run(host='0.0.0.0', port=port)
|
|
|
|
2 |
import json
|
3 |
import uuid
|
4 |
from datetime import datetime
|
5 |
+
from flask import Flask, request, Response, jsonify, stream_with_context
|
6 |
import socketio
|
7 |
import requests
|
8 |
import logging
|
|
|
31 |
|
32 |
def setup_logging():
|
33 |
logger = logging.getLogger()
|
34 |
+
logger.setLevel(logging.DEBUG) # 设置为DEBUG级别以捕获更多信息
|
35 |
handler = logging.StreamHandler()
|
36 |
handler.setFormatter(CustomFormatter())
|
37 |
logger.addHandler(handler)
|
|
|
164 |
def generate():
|
165 |
nonlocal total_output_tokens
|
166 |
|
167 |
+
yield 'retry: 1000\n\n' # 设置重试间隔
|
168 |
+
|
169 |
def send_event(event_type, data):
|
170 |
event = create_event(event_type, data)
|
171 |
+
logger.debug(f"Sending event: {event_type}")
|
172 |
+
return event
|
|
|
|
|
|
|
173 |
|
174 |
+
# 发送初始事件
|
175 |
+
yield send_event("message_start", {
|
176 |
"type": "message_start",
|
177 |
"message": {
|
178 |
"id": msg_id,
|
|
|
185 |
"usage": {"input_tokens": input_tokens, "output_tokens": total_output_tokens},
|
186 |
},
|
187 |
})
|
188 |
+
yield send_event("content_block_start", {"type": "content_block_start", "index": 0, "content_block": {"type": "text", "text": ""}})
|
189 |
+
yield send_event("ping", {"type": "ping"})
|
190 |
|
191 |
def on_query_progress(data):
|
192 |
nonlocal total_output_tokens, response_text
|
|
|
257 |
sio.sleep(0.1)
|
258 |
while response_text:
|
259 |
chunk = response_text.pop(0)
|
260 |
+
yield send_event("content_block_delta", {
|
261 |
"type": "content_block_delta",
|
262 |
"index": 0,
|
263 |
"delta": {"type": "text_delta", "text": chunk},
|
264 |
})
|
265 |
|
266 |
if timeout_event.is_set():
|
267 |
+
yield send_event("content_block_delta", {
|
268 |
"type": "content_block_delta",
|
269 |
"index": 0,
|
270 |
"delta": {"type": "text_delta", "text": "Request timed out"},
|
|
|
272 |
|
273 |
except Exception as e:
|
274 |
logger.error(f"Error during socket connection: {str(e)}", exc_info=True)
|
275 |
+
yield send_event("content_block_delta", {
|
276 |
"type": "content_block_delta",
|
277 |
"index": 0,
|
278 |
"delta": {"type": "text_delta", "text": f"Error during socket connection: {str(e)}"},
|
|
|
282 |
if sio.connected:
|
283 |
sio.disconnect()
|
284 |
|
285 |
+
# 发送最终事件
|
286 |
+
yield send_event("content_block_stop", {"type": "content_block_stop", "index": 0})
|
287 |
+
yield send_event("message_delta", {
|
288 |
"type": "message_delta",
|
289 |
"delta": {"stop_reason": "end_turn", "stop_sequence": None},
|
290 |
"usage": {"output_tokens": total_output_tokens},
|
291 |
})
|
292 |
+
yield send_event("message_stop", {"type": "message_stop"})
|
293 |
|
294 |
+
headers = {
|
295 |
+
'Content-Type': 'text/event-stream',
|
296 |
+
'Cache-Control': 'no-cache',
|
297 |
+
'X-Accel-Buffering': 'no',
|
298 |
+
}
|
299 |
+
return Response(stream_with_context(generate()), headers=headers)
|
300 |
|
301 |
except Exception as e:
|
302 |
logger.error(f"Request error: {str(e)}", exc_info=True)
|
|
|
398 |
})
|
399 |
if not API_KEY:
|
400 |
logger.warning("PPLX_KEY environment variable is not set", extra={'event_type': 'config_warning'})
|
401 |
+
app.run(host='0.0.0.0', port=port, debug=False)
|
402 |
+
|