Update app.py
Browse files
app.py
CHANGED
@@ -2,12 +2,11 @@ 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
|
9 |
from threading import Event
|
10 |
-
from functools import partial
|
11 |
|
12 |
app = Flask(__name__)
|
13 |
logging.basicConfig(level=logging.INFO)
|
@@ -123,7 +122,6 @@ def messages():
|
|
123 |
yield create_event("content_block_start", {"type": "content_block_start", "index": 0, "content_block": {"type": "text", "text": ""}})
|
124 |
yield create_event("ping", {"type": "ping"})
|
125 |
|
126 |
-
@copy_current_request_context
|
127 |
def on_connect():
|
128 |
logging.info("Connected to Perplexity AI")
|
129 |
sio.emit('perplexity_ask', previous_messages, {
|
@@ -143,8 +141,8 @@ def messages():
|
|
143 |
"query_source": "home"
|
144 |
})
|
145 |
|
146 |
-
@copy_current_request_context
|
147 |
def on_query_progress(data):
|
|
|
148 |
if 'text' in data:
|
149 |
text = json.loads(data['text'])
|
150 |
chunk = text['chunks'][-1] if text['chunks'] else None
|
@@ -156,16 +154,13 @@ def messages():
|
|
156 |
"delta": {"type": "text_delta", "text": chunk},
|
157 |
})
|
158 |
|
159 |
-
@copy_current_request_context
|
160 |
def on_query_complete(data):
|
161 |
response_event.set()
|
162 |
|
163 |
-
@copy_current_request_context
|
164 |
def on_disconnect():
|
165 |
logging.info("Disconnected from Perplexity AI")
|
166 |
response_event.set()
|
167 |
|
168 |
-
@copy_current_request_context
|
169 |
def on_connect_error(data):
|
170 |
logging.error(f"Connection error: {data}")
|
171 |
return create_event("content_block_delta", {
|
@@ -183,6 +178,18 @@ def messages():
|
|
183 |
try:
|
184 |
sio.connect('wss://www.perplexity.ai/', **connect_opts, headers=sio_opts['extraHeaders'])
|
185 |
response_event.wait(timeout=30) # 等待响应,最多30秒
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
186 |
except Exception as e:
|
187 |
logging.error(f"Error during socket connection: {str(e)}")
|
188 |
yield create_event("content_block_delta", {
|
|
|
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
|
9 |
from threading import Event
|
|
|
10 |
|
11 |
app = Flask(__name__)
|
12 |
logging.basicConfig(level=logging.INFO)
|
|
|
122 |
yield create_event("content_block_start", {"type": "content_block_start", "index": 0, "content_block": {"type": "text", "text": ""}})
|
123 |
yield create_event("ping", {"type": "ping"})
|
124 |
|
|
|
125 |
def on_connect():
|
126 |
logging.info("Connected to Perplexity AI")
|
127 |
sio.emit('perplexity_ask', previous_messages, {
|
|
|
141 |
"query_source": "home"
|
142 |
})
|
143 |
|
|
|
144 |
def on_query_progress(data):
|
145 |
+
nonlocal response_text
|
146 |
if 'text' in data:
|
147 |
text = json.loads(data['text'])
|
148 |
chunk = text['chunks'][-1] if text['chunks'] else None
|
|
|
154 |
"delta": {"type": "text_delta", "text": chunk},
|
155 |
})
|
156 |
|
|
|
157 |
def on_query_complete(data):
|
158 |
response_event.set()
|
159 |
|
|
|
160 |
def on_disconnect():
|
161 |
logging.info("Disconnected from Perplexity AI")
|
162 |
response_event.set()
|
163 |
|
|
|
164 |
def on_connect_error(data):
|
165 |
logging.error(f"Connection error: {data}")
|
166 |
return create_event("content_block_delta", {
|
|
|
178 |
try:
|
179 |
sio.connect('wss://www.perplexity.ai/', **connect_opts, headers=sio_opts['extraHeaders'])
|
180 |
response_event.wait(timeout=30) # 等待响应,最多30秒
|
181 |
+
|
182 |
+
# 处理接收到的响应
|
183 |
+
while not response_event.is_set():
|
184 |
+
sio.sleep(0.1)
|
185 |
+
if response_text:
|
186 |
+
chunk = response_text.pop(0)
|
187 |
+
yield create_event("content_block_delta", {
|
188 |
+
"type": "content_block_delta",
|
189 |
+
"index": 0,
|
190 |
+
"delta": {"type": "text_delta", "text": chunk},
|
191 |
+
})
|
192 |
+
|
193 |
except Exception as e:
|
194 |
logging.error(f"Error during socket connection: {str(e)}")
|
195 |
yield create_event("content_block_delta", {
|