Update app.py
Browse files
app.py
CHANGED
|
@@ -2,6 +2,7 @@ import os
|
|
| 2 |
import time
|
| 3 |
import logging
|
| 4 |
import requests
|
|
|
|
| 5 |
import concurrent.futures
|
| 6 |
from datetime import datetime, timedelta
|
| 7 |
from apscheduler.schedulers.background import BackgroundScheduler
|
|
@@ -308,8 +309,6 @@ def check_tokens():
|
|
| 308 |
|
| 309 |
return jsonify(results)
|
| 310 |
|
| 311 |
-
import json
|
| 312 |
-
|
| 313 |
@app.route('/handsome/v1/chat/completions', methods=['POST'])
|
| 314 |
def handsome_chat_completions():
|
| 315 |
if not check_authorization(request):
|
|
@@ -369,28 +368,28 @@ def handsome_chat_completions():
|
|
| 369 |
continue
|
| 370 |
try:
|
| 371 |
response_json = json.loads(line)
|
| 372 |
-
|
| 373 |
if "usage" in response_json and "completion_tokens" in response_json["usage"]:
|
| 374 |
completion_tokens = response_json["usage"]["completion_tokens"]
|
| 375 |
-
|
| 376 |
if "choices" in response_json and len(response_json["choices"]) > 0 and "delta" in response_json["choices"][0] and "content" in response_json["choices"][0]["delta"]:
|
| 377 |
response_content += response_json["choices"][0]["delta"]["content"]
|
| 378 |
-
|
| 379 |
if "usage" in response_json and "prompt_tokens" in response_json["usage"]:
|
| 380 |
prompt_tokens = response_json["usage"]["prompt_tokens"]
|
| 381 |
|
| 382 |
except (KeyError, ValueError, IndexError) as e:
|
| 383 |
logging.error(f"解析流式响应单行 JSON 失败: {e}, 行内容: {line}")
|
| 384 |
-
|
| 385 |
user_content = ""
|
| 386 |
messages = data.get("messages", [])
|
| 387 |
for message in messages:
|
| 388 |
-
if message["role"] == "user":
|
| 389 |
user_content += message["content"] + " "
|
| 390 |
user_content = user_content.strip()
|
| 391 |
|
| 392 |
logging.info(
|
| 393 |
-
f"使用的key: {api_key}, 提示token: {prompt_tokens}, 输出token: {completion_tokens}, 首字用时: {first_token_time:.4f}秒, 总共用时: {total_time:.4f}秒, 使用的模型: {model_name}, 用户的内容: {user_content}, 输出的内容: {response_content}"
|
| 394 |
)
|
| 395 |
return Response(stream_with_context(generate()), content_type=response.headers['Content-Type'])
|
| 396 |
else:
|
|
@@ -412,12 +411,12 @@ def handsome_chat_completions():
|
|
| 412 |
user_content = ""
|
| 413 |
messages = data.get("messages", [])
|
| 414 |
for message in messages:
|
| 415 |
-
if message["role"] == "user":
|
| 416 |
user_content += message["content"] + " "
|
| 417 |
user_content = user_content.strip()
|
| 418 |
|
| 419 |
logging.info(
|
| 420 |
-
f"使用的key: {api_key}, 提示token: {prompt_tokens}, 输出token: {completion_tokens}, 首字用时: 0, 总共用时: {total_time:.4f}秒, 使用的模型: {model_name}, 用户的内容: {user_content}, 输出的内容: {response_content}"
|
| 421 |
)
|
| 422 |
return jsonify(response_json)
|
| 423 |
|
|
|
|
| 2 |
import time
|
| 3 |
import logging
|
| 4 |
import requests
|
| 5 |
+
import json
|
| 6 |
import concurrent.futures
|
| 7 |
from datetime import datetime, timedelta
|
| 8 |
from apscheduler.schedulers.background import BackgroundScheduler
|
|
|
|
| 309 |
|
| 310 |
return jsonify(results)
|
| 311 |
|
|
|
|
|
|
|
| 312 |
@app.route('/handsome/v1/chat/completions', methods=['POST'])
|
| 313 |
def handsome_chat_completions():
|
| 314 |
if not check_authorization(request):
|
|
|
|
| 368 |
continue
|
| 369 |
try:
|
| 370 |
response_json = json.loads(line)
|
| 371 |
+
|
| 372 |
if "usage" in response_json and "completion_tokens" in response_json["usage"]:
|
| 373 |
completion_tokens = response_json["usage"]["completion_tokens"]
|
| 374 |
+
|
| 375 |
if "choices" in response_json and len(response_json["choices"]) > 0 and "delta" in response_json["choices"][0] and "content" in response_json["choices"][0]["delta"]:
|
| 376 |
response_content += response_json["choices"][0]["delta"]["content"]
|
| 377 |
+
|
| 378 |
if "usage" in response_json and "prompt_tokens" in response_json["usage"]:
|
| 379 |
prompt_tokens = response_json["usage"]["prompt_tokens"]
|
| 380 |
|
| 381 |
except (KeyError, ValueError, IndexError) as e:
|
| 382 |
logging.error(f"解析流式响应单行 JSON 失败: {e}, 行内容: {line}")
|
| 383 |
+
|
| 384 |
user_content = ""
|
| 385 |
messages = data.get("messages", [])
|
| 386 |
for message in messages:
|
| 387 |
+
if message["role"] == "user" and isinstance(message["content"], str):
|
| 388 |
user_content += message["content"] + " "
|
| 389 |
user_content = user_content.strip()
|
| 390 |
|
| 391 |
logging.info(
|
| 392 |
+
f"使用的key: {api_key}, 提示token: {prompt_tokens}, 输出token: {completion_tokens}, 首字用时: {first_token_time:.4f}秒, 总共用时: {total_time:.4f}秒, 使用的模型: {model_name}, 用户的内容: {user_content.replace(chr(10), '\\n').replace(chr(13), '\\n')}, 输出的内容: {response_content.replace(chr(10), '\\n').replace(chr(13), '\\n')}"
|
| 393 |
)
|
| 394 |
return Response(stream_with_context(generate()), content_type=response.headers['Content-Type'])
|
| 395 |
else:
|
|
|
|
| 411 |
user_content = ""
|
| 412 |
messages = data.get("messages", [])
|
| 413 |
for message in messages:
|
| 414 |
+
if message["role"] == "user" and isinstance(message["content"], str):
|
| 415 |
user_content += message["content"] + " "
|
| 416 |
user_content = user_content.strip()
|
| 417 |
|
| 418 |
logging.info(
|
| 419 |
+
f"使用的key: {api_key}, 提示token: {prompt_tokens}, 输出token: {completion_tokens}, 首字用时: 0, 总共用时: {total_time:.4f}秒, 使用的模型: {model_name}, 用户的内容: {user_content.replace(chr(10), '\\n').replace(chr(13), '\\n')}, 输出的内容: {response_content.replace(chr(10), '\\n').replace(chr(13), '\\n')}"
|
| 420 |
)
|
| 421 |
return jsonify(response_json)
|
| 422 |
|