Update app.py
Browse files
app.py
CHANGED
|
@@ -15,7 +15,7 @@ import os
|
|
| 15 |
from dotenv import load_dotenv
|
| 16 |
|
| 17 |
from apscheduler.schedulers.background import BackgroundScheduler
|
| 18 |
-
|
| 19 |
# 加载环境变量
|
| 20 |
load_dotenv()
|
| 21 |
|
|
@@ -50,22 +50,22 @@ TOKEN_INDEX = 0
|
|
| 50 |
# 模型映射表
|
| 51 |
MODEL_MAPPING = {
|
| 52 |
"gpt-4o-mini": "openai/gpt-4o-mini",
|
| 53 |
-
|
| 54 |
-
|
| 55 |
-
|
| 56 |
-
|
| 57 |
-
|
| 58 |
-
|
| 59 |
-
|
| 60 |
-
|
| 61 |
-
|
| 62 |
-
|
| 63 |
-
|
| 64 |
-
|
| 65 |
-
|
| 66 |
-
|
| 67 |
-
|
| 68 |
-
|
| 69 |
}
|
| 70 |
|
| 71 |
# Token负载均衡状态
|
|
@@ -131,15 +131,17 @@ class ChatCompletionRequest(BaseModel):
|
|
| 131 |
frequency_penalty: Optional[float] = 0
|
| 132 |
user: Optional[str] = None
|
| 133 |
|
|
|
|
| 134 |
def reset_task():
|
| 135 |
try:
|
| 136 |
-
for key,value in token_status.items():
|
| 137 |
token_status[key]["total"] = value["count"]
|
| 138 |
token_status[key]["active"] = True
|
| 139 |
print(f"执行重置任务... 当前时间: {datetime.now()}")
|
| 140 |
except Exception as e:
|
| 141 |
print(f"任务执行出错: {e}")
|
| 142 |
|
|
|
|
| 143 |
# 初始化token状态
|
| 144 |
async def initialize_token_status():
|
| 145 |
"""初始化检查所有token的状态和余额"""
|
|
@@ -228,7 +230,8 @@ def format_messages_for_deepsider(messages: List[ChatMessage]) -> str:
|
|
| 228 |
next_code = False
|
| 229 |
continue
|
| 230 |
|
| 231 |
-
if msg.role == 'assistant' and (
|
|
|
|
| 232 |
next_code = True
|
| 233 |
continue
|
| 234 |
|
|
@@ -241,7 +244,7 @@ def format_messages_for_deepsider(messages: List[ChatMessage]) -> str:
|
|
| 241 |
prompt += f"Human: {msg.content}\n\n"
|
| 242 |
elif role == "assistant":
|
| 243 |
content = msg.content
|
| 244 |
-
re.sub(r'\[clId:(.*)]',''
|
| 245 |
prompt += f"Assistant: {msg.content}\n\n"
|
| 246 |
|
| 247 |
else:
|
|
@@ -363,7 +366,7 @@ async def stream_openai_response(response, request_id: str, model: str, token: s
|
|
| 363 |
|
| 364 |
elif data.get('code') == 203:
|
| 365 |
# 尾巴
|
| 366 |
-
if codeFlag:
|
| 367 |
chunk = {
|
| 368 |
"id": f"chatcmpl-{request_id}",
|
| 369 |
"object": "chat.completion.chunk",
|
|
@@ -471,19 +474,24 @@ async def create_chat_completion(
|
|
| 471 |
|
| 472 |
# 映射模型
|
| 473 |
deepsider_model = map_openai_to_deepsider_model(chat_request.model)
|
| 474 |
-
|
| 475 |
# 验证验证码
|
| 476 |
isCode = False
|
| 477 |
clId = None
|
| 478 |
|
| 479 |
if len(chat_request.messages) > 1:
|
| 480 |
msg = chat_request.messages[-2]
|
| 481 |
-
if msg.role == 'assistant' and
|
|
|
|
| 482 |
isCode = True
|
| 483 |
-
|
| 484 |
-
|
| 485 |
-
|
| 486 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 487 |
prompt = chat_request.messages[-1].content
|
| 488 |
else:
|
| 489 |
prompt = format_messages_for_deepsider(chat_request.messages)
|
|
@@ -496,7 +504,7 @@ async def create_chat_completion(
|
|
| 496 |
"timezone": "Asia/Shanghai"
|
| 497 |
}
|
| 498 |
|
| 499 |
-
if isCode:
|
| 500 |
payload["clId"] = clId
|
| 501 |
|
| 502 |
# 获取当前token
|
|
@@ -632,6 +640,7 @@ async def startup_event():
|
|
| 632 |
active_tokens = sum(1 for s in token_status.values() if s["active"])
|
| 633 |
logger.info(f"初始化完成 活跃token: {active_tokens}/{len(DEEPSIDER_TOKEN)}")
|
| 634 |
|
|
|
|
| 635 |
# 主程序
|
| 636 |
if __name__ == "__main__":
|
| 637 |
scheduler = BackgroundScheduler()
|
|
|
|
| 15 |
from dotenv import load_dotenv
|
| 16 |
|
| 17 |
from apscheduler.schedulers.background import BackgroundScheduler
|
| 18 |
+
|
| 19 |
# 加载环境变量
|
| 20 |
load_dotenv()
|
| 21 |
|
|
|
|
| 50 |
# 模型映射表
|
| 51 |
MODEL_MAPPING = {
|
| 52 |
"gpt-4o-mini": "openai/gpt-4o-mini",
|
| 53 |
+
"gpt-4o": "openai/gpt-4o",
|
| 54 |
+
"o1": "openai/o1",
|
| 55 |
+
"o3-mini": "openai/o3-mini",
|
| 56 |
+
"claude-3.5-sonnet": "anthropic/claude-3.5-sonnet",
|
| 57 |
+
"claude-3.7-sonnet": "anthropic/claude-3.7-sonnet",
|
| 58 |
+
"grok-3": "x-ai/grok-3",
|
| 59 |
+
"grok-3-reasoner": "x-ai/grok-3-reasoner",
|
| 60 |
+
"deepseek-v3": "deepseek/deepseek-chat",
|
| 61 |
+
"deepseek-r1": "deepseek/deepseek-r1",
|
| 62 |
+
"gemini-2.0-flash": "google/gemini-2.0-flash",
|
| 63 |
+
"gemini-2.0-pro-exp": "google/gemini-2.0-pro-exp-02-05",
|
| 64 |
+
"gemini-2.0-flash-thinking-exp": "google/gemini-2.0-flash-thinking-exp-1219",
|
| 65 |
+
"qwq-32b": "qwen/qwq-32b",
|
| 66 |
+
"qwen-max": "qwen/qwen-max",
|
| 67 |
+
"DeepSeek-V3-0324": "deepseek/deepseek-chat-v3-0324",
|
| 68 |
+
"gpt-4o-image": "openai/gpt-4o-image"
|
| 69 |
}
|
| 70 |
|
| 71 |
# Token负载均衡状态
|
|
|
|
| 131 |
frequency_penalty: Optional[float] = 0
|
| 132 |
user: Optional[str] = None
|
| 133 |
|
| 134 |
+
|
| 135 |
def reset_task():
|
| 136 |
try:
|
| 137 |
+
for key, value in token_status.items():
|
| 138 |
token_status[key]["total"] = value["count"]
|
| 139 |
token_status[key]["active"] = True
|
| 140 |
print(f"执行重置任务... 当前时间: {datetime.now()}")
|
| 141 |
except Exception as e:
|
| 142 |
print(f"任务执行出错: {e}")
|
| 143 |
|
| 144 |
+
|
| 145 |
# 初始化token状态
|
| 146 |
async def initialize_token_status():
|
| 147 |
"""初始化检查所有token的状态和余额"""
|
|
|
|
| 230 |
next_code = False
|
| 231 |
continue
|
| 232 |
|
| 233 |
+
if msg.role == 'assistant' and (
|
| 234 |
+
'验证码提示' in msg.content or '验证码已发送至您的邮箱' in msg.content) and 'clId' in msg.content:
|
| 235 |
next_code = True
|
| 236 |
continue
|
| 237 |
|
|
|
|
| 244 |
prompt += f"Human: {msg.content}\n\n"
|
| 245 |
elif role == "assistant":
|
| 246 |
content = msg.content
|
| 247 |
+
re.sub(r'\[clId:(.*)]', '', content)
|
| 248 |
prompt += f"Assistant: {msg.content}\n\n"
|
| 249 |
|
| 250 |
else:
|
|
|
|
| 366 |
|
| 367 |
elif data.get('code') == 203:
|
| 368 |
# 尾巴
|
| 369 |
+
if codeFlag or model == 'gpt-4o-image':
|
| 370 |
chunk = {
|
| 371 |
"id": f"chatcmpl-{request_id}",
|
| 372 |
"object": "chat.completion.chunk",
|
|
|
|
| 474 |
|
| 475 |
# 映射模型
|
| 476 |
deepsider_model = map_openai_to_deepsider_model(chat_request.model)
|
| 477 |
+
model = chat_request.model
|
| 478 |
# 验证验证码
|
| 479 |
isCode = False
|
| 480 |
clId = None
|
| 481 |
|
| 482 |
if len(chat_request.messages) > 1:
|
| 483 |
msg = chat_request.messages[-2]
|
| 484 |
+
if msg.role == 'assistant' and (
|
| 485 |
+
'验证码提示' in msg.content or '验证码已发送至您的邮箱' in msg.content) and 'clId' in msg.content:
|
| 486 |
isCode = True
|
| 487 |
+
|
| 488 |
+
pattern = r'\[clId:(.*)]'
|
| 489 |
+
match = re.search(pattern, msg.content)
|
| 490 |
+
if match:
|
| 491 |
+
clId = match.group(1)
|
| 492 |
+
|
| 493 |
+
# 准备DeepSider API所需的提示
|
| 494 |
+
if isCode or model == 'gpt-4o-image':
|
| 495 |
prompt = chat_request.messages[-1].content
|
| 496 |
else:
|
| 497 |
prompt = format_messages_for_deepsider(chat_request.messages)
|
|
|
|
| 504 |
"timezone": "Asia/Shanghai"
|
| 505 |
}
|
| 506 |
|
| 507 |
+
if isCode or model == 'gpt-4o-image':
|
| 508 |
payload["clId"] = clId
|
| 509 |
|
| 510 |
# 获取当前token
|
|
|
|
| 640 |
active_tokens = sum(1 for s in token_status.values() if s["active"])
|
| 641 |
logger.info(f"初始化完成 活跃token: {active_tokens}/{len(DEEPSIDER_TOKEN)}")
|
| 642 |
|
| 643 |
+
|
| 644 |
# 主程序
|
| 645 |
if __name__ == "__main__":
|
| 646 |
scheduler = BackgroundScheduler()
|