smgc commited on
Commit
5192c54
1 Parent(s): 4cb9fa3

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +15 -22
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": 0}, # 动态 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
- # 动态计算当前块的 token 数量并累积到 output_tokens
187
- output_tokens += calculate_tokens(chunk)
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}, # 累积 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: