smgc commited on
Commit
dfc5bc0
1 Parent(s): c4f2070

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +34 -29
app.py CHANGED
@@ -5,8 +5,10 @@ from datetime import datetime
5
  from flask import Flask, request, Response, jsonify
6
  import socketio
7
  import requests
 
8
 
9
  app = Flask(__name__)
 
10
 
11
  # 从环境变量中获取API密钥
12
  API_KEY = os.environ.get('PPLX_KEY')
@@ -25,11 +27,11 @@ if proxy_url:
25
  else:
26
  transport = None
27
 
28
- sio = socketio.Client(http_session=transport)
29
 
30
  # 连接选项
31
  connect_opts = {
32
- 'transports': ['websocket'],
33
  }
34
 
35
  # 其他选项
@@ -50,7 +52,7 @@ def log_request(req, status):
50
  timestamp = datetime.now().isoformat()
51
  ip = req.remote_addr
52
  route = req.path
53
- print(f"{timestamp} - {ip} - {route} - {status}")
54
 
55
  def validate_api_key():
56
  api_key = request.headers.get('x-api-key')
@@ -122,8 +124,9 @@ def messages():
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
- @sio.on('connect')
126
- def on_connect():
 
127
  sio.emit('perplexity_ask', previous_messages, {
128
  "version": "2.9",
129
  "source": "default",
@@ -141,8 +144,8 @@ def messages():
141
  "query_source": "home"
142
  })
143
 
144
- @sio.on('query_progress')
145
- def on_query_progress(data):
146
  if 'text' in data:
147
  text = json.loads(data['text'])
148
  chunk = text['chunks'][-1] if text['chunks'] else None
@@ -153,30 +156,32 @@ def messages():
153
  "delta": {"type": "text_delta", "text": chunk},
154
  })
155
 
156
- @sio.on('disconnect')
157
- def on_disconnect():
158
- print(" > [Disconnected]")
159
 
160
- @sio.on('error')
161
- def on_error(error):
162
- print(f"Socket error: {error}")
163
  yield create_event("content_block_delta", {
164
  "type": "content_block_delta",
165
  "index": 0,
166
- "delta": {"type": "text_delta", "text": "Error occurred while fetching output 输出时出现错误\nPlease refer to the log for more information 请查看日志以获取更多信息"},
167
  })
168
- yield create_event("content_block_stop", {"type": "content_block_stop", "index": 0})
169
- yield create_event("message_delta", {
170
- "type": "message_delta",
171
- "delta": {"stop_reason": "end_turn", "stop_sequence": None},
172
- "usage": {"output_tokens": 12},
173
- })
174
- yield create_event("message_stop", {"type": "message_stop"})
175
- log_request(request, 500)
176
 
177
- sio.connect('wss://www.perplexity.ai/', **connect_opts, headers=sio_opts['extraHeaders'])
178
- sio.wait()
179
- sio.disconnect()
 
 
 
 
 
 
 
 
 
 
180
 
181
  yield create_event("content_block_stop", {"type": "content_block_stop", "index": 0})
182
  yield create_event("message_delta", {
@@ -190,7 +195,7 @@ def messages():
190
  return Response(generate(), content_type='text/event-stream')
191
 
192
  except Exception as e:
193
- print(f"Request error: {str(e)}")
194
  log_request(request, 400)
195
  return jsonify({"error": str(e)}), 400
196
 
@@ -201,7 +206,7 @@ def not_found(error):
201
 
202
  @app.errorhandler(500)
203
  def server_error(error):
204
- print(f"Server error: {str(error)}")
205
  log_request(request, 500)
206
  return "Something broke!", 500
207
 
@@ -212,7 +217,7 @@ def create_event(event, data):
212
 
213
  if __name__ == '__main__':
214
  port = int(os.environ.get('PORT', 8081))
215
- print(f"Perplexity proxy listening on port {port}")
216
  if not API_KEY:
217
- print("Warning: PPLX_KEY environment variable is not set. API key validation will fail.")
218
  app.run(host='0.0.0.0', port=port)
 
5
  from flask import Flask, request, Response, jsonify
6
  import socketio
7
  import requests
8
+ import logging
9
 
10
  app = Flask(__name__)
11
+ logging.basicConfig(level=logging.INFO)
12
 
13
  # 从环境变量中获取API密钥
14
  API_KEY = os.environ.get('PPLX_KEY')
 
27
  else:
28
  transport = None
29
 
30
+ sio = socketio.Client(http_session=transport, logger=True, engineio_logger=True)
31
 
32
  # 连接选项
33
  connect_opts = {
34
+ 'transports': ['websocket', 'polling'], # 允许回退到轮询
35
  }
36
 
37
  # 其他选项
 
52
  timestamp = datetime.now().isoformat()
53
  ip = req.remote_addr
54
  route = req.path
55
+ logging.info(f"{timestamp} - {ip} - {route} - {status}")
56
 
57
  def validate_api_key():
58
  api_key = request.headers.get('x-api-key')
 
124
  yield create_event("content_block_start", {"type": "content_block_start", "index": 0, "content_block": {"type": "text", "text": ""}})
125
  yield create_event("ping", {"type": "ping"})
126
 
127
+ @sio.event
128
+ def connect():
129
+ logging.info("Connected to Perplexity AI")
130
  sio.emit('perplexity_ask', previous_messages, {
131
  "version": "2.9",
132
  "source": "default",
 
144
  "query_source": "home"
145
  })
146
 
147
+ @sio.event
148
+ def query_progress(data):
149
  if 'text' in data:
150
  text = json.loads(data['text'])
151
  chunk = text['chunks'][-1] if text['chunks'] else None
 
156
  "delta": {"type": "text_delta", "text": chunk},
157
  })
158
 
159
+ @sio.event
160
+ def disconnect():
161
+ logging.info("Disconnected from Perplexity AI")
162
 
163
+ @sio.event
164
+ def connect_error(data):
165
+ logging.error(f"Connection error: {data}")
166
  yield create_event("content_block_delta", {
167
  "type": "content_block_delta",
168
  "index": 0,
169
+ "delta": {"type": "text_delta", "text": f"Error connecting to Perplexity AI: {data}"},
170
  })
 
 
 
 
 
 
 
 
171
 
172
+ try:
173
+ sio.connect('wss://www.perplexity.ai/', **connect_opts, headers=sio_opts['extraHeaders'])
174
+ sio.wait()
175
+ except Exception as e:
176
+ logging.error(f"Error during socket connection: {str(e)}")
177
+ yield create_event("content_block_delta", {
178
+ "type": "content_block_delta",
179
+ "index": 0,
180
+ "delta": {"type": "text_delta", "text": f"Error during socket connection: {str(e)}"},
181
+ })
182
+ finally:
183
+ if sio.connected:
184
+ sio.disconnect()
185
 
186
  yield create_event("content_block_stop", {"type": "content_block_stop", "index": 0})
187
  yield create_event("message_delta", {
 
195
  return Response(generate(), content_type='text/event-stream')
196
 
197
  except Exception as e:
198
+ logging.error(f"Request error: {str(e)}")
199
  log_request(request, 400)
200
  return jsonify({"error": str(e)}), 400
201
 
 
206
 
207
  @app.errorhandler(500)
208
  def server_error(error):
209
+ logging.error(f"Server error: {str(error)}")
210
  log_request(request, 500)
211
  return "Something broke!", 500
212
 
 
217
 
218
  if __name__ == '__main__':
219
  port = int(os.environ.get('PORT', 8081))
220
+ logging.info(f"Perplexity proxy listening on port {port}")
221
  if not API_KEY:
222
+ logging.warning("Warning: PPLX_KEY environment variable is not set. API key validation will fail.")
223
  app.run(host='0.0.0.0', port=port)