smgc commited on
Commit
4a50c43
1 Parent(s): 5beee5c

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +26 -30
app.py CHANGED
@@ -57,22 +57,15 @@ def validate_api_key():
57
  return jsonify({"error": "Invalid API key"}), 401
58
  return None
59
 
60
- def normalize_content(content):
61
  """
62
- 递归处理 msg['content'],确保其为字符串。
63
- 如果 content 是字典或列表,将其转换为字符串。
64
  """
65
- if isinstance(content, str):
66
- return content
67
- elif isinstance(content, dict):
68
- # 将字典转化为 JSON 字符串
69
- return json.dumps(content, ensure_ascii=False)
70
- elif isinstance(content, list):
71
- # 对于列表,递归处理每个元素
72
- return " ".join([normalize_content(item) for item in content])
73
- else:
74
- # 如果是其他类型,返回空字符串
75
- return ""
76
 
77
  @app.route('/')
78
  def root():
@@ -159,10 +152,14 @@ def messages():
159
  def on_query_progress(data):
160
  nonlocal response_text
161
  if 'text' in data:
162
- text = json.loads(data['text'])
163
- chunk = text['chunks'][-1] if text['chunks'] else None
164
- if chunk:
165
- response_text.append(chunk)
 
 
 
 
166
 
167
  # 检查是否是最终响应
168
  if data.get('final', False):
@@ -227,7 +224,7 @@ def messages():
227
 
228
  def handle_non_stream(previous_messages, msg_id, model):
229
  """
230
- 处理 stream 为 false 的情况,返回符合 Claude API 格式的完整响应。
231
  """
232
  try:
233
  response_event = Event()
@@ -254,10 +251,14 @@ def handle_non_stream(previous_messages, msg_id, model):
254
  def on_query_progress(data):
255
  nonlocal response_text
256
  if 'text' in data:
257
- text = json.loads(data['text'])
258
- chunk = text['chunks'][-1] if text['chunks'] else None
259
- if chunk:
260
- response_text.append(chunk)
 
 
 
 
261
 
262
  # 检查是否是最终响应
263
  if data.get('final', False):
@@ -282,18 +283,13 @@ def handle_non_stream(previous_messages, msg_id, model):
282
  # 等待响应完成
283
  response_event.wait(timeout=30)
284
 
285
- # 生成符合 Claude API 格式的完整响应
286
- if not response_text:
287
- response_text = [""]
288
-
289
  full_response = {
290
  "id": msg_id,
291
- "content": [{"text": ''.join(response_text), "type": "text"}], # 合并所有文本块,并设置类型
292
  "model": model, # 动态模型
293
- "role": "assistant", # Claude 的角色
294
  "stop_reason": "end_turn",
295
  "stop_sequence": None,
296
- "type": "message",
297
  "usage": {
298
  "input_tokens": 8,
299
  "output_tokens": len(''.join(response_text)),
 
57
  return jsonify({"error": "Invalid API key"}), 401
58
  return None
59
 
60
+ def is_valid_json(response_text):
61
  """
62
+ 检查响应是否为有效的 JSON 格式。
 
63
  """
64
+ try:
65
+ json.loads(response_text)
66
+ return True
67
+ except ValueError:
68
+ return False
 
 
 
 
 
 
69
 
70
  @app.route('/')
71
  def root():
 
152
  def on_query_progress(data):
153
  nonlocal response_text
154
  if 'text' in data:
155
+ text = data['text'] # 不再使用 json.loads() 解析
156
+ if is_valid_json(text):
157
+ text = json.loads(text) # 确保是有效的 JSON
158
+ chunk = text['chunks'][-1] if text['chunks'] else None
159
+ if chunk:
160
+ response_text.append(chunk)
161
+ else:
162
+ logging.error(f"Received non-JSON response: {text}")
163
 
164
  # 检查是否是最终响应
165
  if data.get('final', False):
 
224
 
225
  def handle_non_stream(previous_messages, msg_id, model):
226
  """
227
+ 处理 stream 为 false 的情况,返回完整的响应。
228
  """
229
  try:
230
  response_event = Event()
 
251
  def on_query_progress(data):
252
  nonlocal response_text
253
  if 'text' in data:
254
+ text = data['text'] # 不再使用 json.loads() 解析
255
+ if is_valid_json(text):
256
+ text = json.loads(text) # 确保是有效的 JSON
257
+ chunk = text['chunks'][-1] if text['chunks'] else None
258
+ if chunk:
259
+ response_text.append(chunk)
260
+ else:
261
+ logging.error(f"Received non-JSON response: {text}")
262
 
263
  # 检查是否是最终响应
264
  if data.get('final', False):
 
283
  # 等待响应完成
284
  response_event.wait(timeout=30)
285
 
286
+ # 生成完整的响应
 
 
 
287
  full_response = {
288
  "id": msg_id,
289
+ "content": [{"text": ''.join(response_text)}], # 合并所有文本块
290
  "model": model, # 动态模型
 
291
  "stop_reason": "end_turn",
292
  "stop_sequence": None,
 
293
  "usage": {
294
  "input_tokens": 8,
295
  "output_tokens": len(''.join(response_text)),