Update app.py
Browse files
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
|
61 |
"""
|
62 |
-
|
63 |
-
如果 content 是字典或列表,将其转换为字符串。
|
64 |
"""
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
return
|
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 =
|
163 |
-
|
164 |
-
|
165 |
-
|
|
|
|
|
|
|
|
|
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
|
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 =
|
258 |
-
|
259 |
-
|
260 |
-
|
|
|
|
|
|
|
|
|
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 |
-
#
|
286 |
-
if not response_text:
|
287 |
-
response_text = [""]
|
288 |
-
|
289 |
full_response = {
|
290 |
"id": msg_id,
|
291 |
-
"content": [{"text": ''.join(response_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)),
|