Skip to content

Commit 76b4259

Browse files
authored
deeper模型更新和增加本地配置文件
1 parent 6817cbc commit 76b4259

1 file changed

Lines changed: 74 additions & 12 deletions

File tree

app.py

Lines changed: 74 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ async def request_logger(self, request):
9090
"grok-3-search": "grok-3",
9191
"grok-3-imageGen": "grok-3",
9292
"grok-3-deepsearch": "grok-3",
93+
"grok-3-deepersearch": "grok-3",
9394
"grok-3-reasoning": "grok-3"
9495
},
9596
"API": {
@@ -116,6 +117,7 @@ async def request_logger(self, request):
116117
"RETRYSWITCH": False,
117118
"MAX_ATTEMPTS": 2
118119
},
120+
"TOKEN_STATUS_FILE": "token_status.json",
119121
"SHOW_THINKING": os.environ.get("SHOW_THINKING") == "true",
120122
"IS_THINKING": False,
121123
"IS_IMG_GEN": False,
@@ -161,15 +163,35 @@ def __init__(self):
161163
"RequestFrequency": 10,
162164
"ExpirationTime": 24 * 60 * 60 * 1000 # 24小时
163165
},
166+
"grok-3-deepersearch": {
167+
"RequestFrequency": 3,
168+
"ExpirationTime": 24 * 60 * 60 * 1000 # 24小时
169+
},
164170
"grok-3-reasoning": {
165171
"RequestFrequency": 10,
166172
"ExpirationTime": 24 * 60 * 60 * 1000 # 24小时
167173
}
168174
}
169175
self.token_reset_switch = False
170176
self.token_reset_timer = None
171-
172-
def add_token(self, token):
177+
self.load_token_status() # 加载令牌状态
178+
def save_token_status(self):
179+
try:
180+
with open(CONFIG["TOKEN_STATUS_FILE"], 'w', encoding='utf-8') as f:
181+
json.dump(self.token_status_map, f, indent=2, ensure_ascii=False)
182+
logger.info("令牌状态已保存到配置文件", "TokenManager")
183+
except Exception as error:
184+
logger.error(f"保存令牌状态失败: {str(error)}", "TokenManager")
185+
186+
def load_token_status(self):
187+
try:
188+
if os.path.exists(CONFIG["TOKEN_STATUS_FILE"]):
189+
with open(CONFIG["TOKEN_STATUS_FILE"], 'r', encoding='utf-8') as f:
190+
self.token_status_map = json.load(f)
191+
logger.info("已从配置文件加载令牌状态", "TokenManager")
192+
except Exception as error:
193+
logger.error(f"加载令牌状态失败: {str(error)}", "TokenManager")
194+
def add_token(self, token,isinitialization=False):
173195
sso = token.split("sso=")[1].split(";")[0]
174196
for model in self.model_config.keys():
175197
if model not in self.token_model_map:
@@ -193,6 +215,8 @@ def add_token(self, token):
193215
"invalidatedTime": None,
194216
"totalRequestCount": 0
195217
}
218+
if not isinitialization:
219+
self.save_token_status()
196220

197221
def set_token(self, token):
198222
models = list(self.model_config.keys())
@@ -218,6 +242,8 @@ def delete_token(self, token):
218242

219243
if sso in self.token_status_map:
220244
del self.token_status_map[sso]
245+
246+
self.save_token_status()
221247

222248
logger.info(f"令牌已成功移除: {token}", "TokenManager")
223249
return True
@@ -289,6 +315,8 @@ def get_next_token_for_model(self, model_id, is_return=False):
289315
self.token_status_map[sso][normalized_model]["invalidatedTime"] = int(time.time() * 1000)
290316
self.token_status_map[sso][normalized_model]["totalRequestCount"] += 1
291317

318+
self.save_token_status()
319+
292320
return token_entry["token"]
293321

294322
return None
@@ -578,13 +606,33 @@ def upload_base64_image(self, base64_data, url):
578606
except Exception as error:
579607
logger.error(str(error), "Server")
580608
return ''
581-
609+
# def convert_system_messages(self, messages):
610+
# try:
611+
# system_prompt = []
612+
# i = 0
613+
# while i < len(messages):
614+
# if messages[i].get('role') != 'system':
615+
# break
616+
617+
# system_prompt.append(self.process_message_content(messages[i].get('content')))
618+
# i += 1
619+
620+
# messages = messages[i:]
621+
# system_prompt = '\n'.join(system_prompt)
622+
623+
# if not messages:
624+
# raise ValueError("没有找到用户或者AI消息")
625+
# return {"system_prompt":system_prompt,"messages":messages}
626+
# except Exception as error:
627+
# logger.error(str(error), "Server")
628+
# raise ValueError(error)
582629
def prepare_chat_request(self, request):
583630
if ((request["model"] == 'grok-2-imageGen' or request["model"] == 'grok-3-imageGen') and
584631
not CONFIG["API"]["PICGO_KEY"] and not CONFIG["API"]["TUMY_KEY"] and
585632
request.get("stream", False)):
586633
raise ValueError("该模型流式输出需要配置PICGO或者TUMY图床密钥!")
587634

635+
# system_message, todo_messages = self.convert_system_messages(request["messages"]).values()
588636
todo_messages = request["messages"]
589637
if request["model"] in ['grok-2-imageGen', 'grok-3-imageGen', 'grok-3-deepsearch']:
590638
last_message = todo_messages[-1]
@@ -599,6 +647,11 @@ def prepare_chat_request(self, request):
599647
convert_to_file = False
600648
last_message_content = ''
601649
search = request["model"] in ['grok-2-search', 'grok-3-search']
650+
deepsearchPreset = ''
651+
if request["model"] == 'grok-3-deepsearch':
652+
deepsearchPreset = 'default'
653+
elif request["model"] == 'grok-3-deepersearch':
654+
deepsearchPreset = 'deeper'
602655

603656
# 移除<think>标签及其内容和base64图片
604657
def remove_think_tags(text):
@@ -622,7 +675,6 @@ def process_content(content):
622675
elif content["type"] == 'text':
623676
return remove_think_tags(content["text"])
624677
return remove_think_tags(self.process_message_content(content))
625-
626678
for current in todo_messages:
627679
role = 'assistant' if current["role"] == 'assistant' else 'user'
628680
is_last_message = current == todo_messages[-1]
@@ -694,11 +746,11 @@ def process_content(content):
694746
"xPostAnalyze": search
695747
},
696748
"enableSideBySide": True,
697-
"isPreset": False,
698749
"sendFinalMetadata": True,
699-
"customInstructions": "",
700-
"deepsearchPreset": "default" if request["model"] == 'grok-3-deepsearch' else "",
701-
"isReasoning": request["model"] == 'grok-3-reasoning'
750+
"customPersonality": "",
751+
"deepsearchPreset": deepsearchPreset,
752+
"isReasoning": request["model"] == 'grok-3-reasoning',
753+
"disableTextFollowUps": True
702754
}
703755

704756
class MessageProcessor:
@@ -753,7 +805,7 @@ def process_model_response(response, model):
753805
result["token"] = response.get("token")
754806
elif model == 'grok-3':
755807
result["token"] = response.get("token")
756-
elif model == 'grok-3-deepsearch':
808+
elif model in ['grok-3-deepsearch', 'grok-3-deepersearch']:
757809
if response.get("messageStepId") and not CONFIG["SHOW_THINKING"]:
758810
return result
759811
if response.get("messageStepId") and not CONFIG["IS_THINKING"]:
@@ -763,7 +815,11 @@ def process_model_response(response, model):
763815
result["token"] = "</think>" + response.get("token", "")
764816
CONFIG["IS_THINKING"] = False
765817
elif (response.get("messageStepId") and CONFIG["IS_THINKING"] and response.get("messageTag") == "assistant") or response.get("messageTag") == "final":
766-
result["token"] = response.get("token")
818+
result["token"] = response.get("token","")
819+
elif (CONFIG["IS_THINKING"] and response.get("token","").get("action","") == "webSearch"):
820+
result["token"] = response.get("token","").get("action_input","").get("query","")
821+
elif (CONFIG["IS_THINKING"] and response.get("webSearchResults")):
822+
result["token"] = Utils.organize_search_results(response['webSearchResults'])
767823
elif model == 'grok-3-reasoning':
768824
if response.get("isThinking") and not CONFIG["SHOW_THINKING"]:
769825
return result
@@ -927,6 +983,7 @@ def generate():
927983
continue
928984
try:
929985
line_json = json.loads(chunk.decode("utf-8").strip())
986+
print(line_json)
930987
if line_json.get("error"):
931988
logger.error(json.dumps(line_json, indent=2), "Server")
932989
yield json.dumps({"error": "RateLimitError"}) + "\n\n"
@@ -961,9 +1018,11 @@ def generate():
9611018
def initialization():
9621019
sso_array = os.environ.get("SSO", "").split(',')
9631020
logger.info("开始加载令牌", "Server")
1021+
token_manager.load_token_status()
9641022
for sso in sso_array:
9651023
if sso:
966-
token_manager.add_token(f"sso-rw={sso};sso={sso}")
1024+
token_manager.add_token(f"sso-rw={sso};sso={sso}",True)
1025+
token_manager.save_token_status()
9671026

9681027
logger.info(f"成功加载令牌: {json.dumps(token_manager.get_all_tokens(), indent=2)}", "Server")
9691028
logger.info(f"令牌加载完成,共加载: {len(token_manager.get_all_tokens())}个令牌", "Server")
@@ -1138,7 +1197,7 @@ def chat_completions():
11381197
retry_count = 0
11391198
grok_client = GrokApiClient(model)
11401199
request_payload = grok_client.prepare_chat_request(data)
1141-
1200+
logger.info(json.dumps(request_payload,indent=2))
11421201

11431202
while retry_count < CONFIG["RETRY"]["MAX_ATTEMPTS"]:
11441203
retry_count += 1
@@ -1196,6 +1255,9 @@ def chat_completions():
11961255
token_manager.reduce_token_request_count(model,1)#重置去除当前因为错误未成功请求的次数,确保不会因为错误未成功请求的次数导致次数上限
11971256
if token_manager.get_token_count_for_model(model) == 0:
11981257
raise ValueError(f"{model} 次数已达上限,请切换其他模型或者重新对话")
1258+
print("状态码:", response.status_code)
1259+
print("响应头:", response.headers)
1260+
print("响应内容:", response.text)
11991261
raise ValueError(f"IP暂时被封无法破盾,请稍后重试或者更换ip")
12001262
elif response.status_code == 429:
12011263
response_status_code = 429

0 commit comments

Comments
 (0)