From a6e34d7dbf233ede950437cd0e7bbca93d934d6c Mon Sep 17 00:00:00 2001 From: mashiro3000 <760254236@qq.com> Date: Mon, 23 Mar 2026 13:14:25 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20grok-420=20=E4=BD=BF=E7=94=A8=E6=96=B0?= =?UTF-8?q?=E7=9A=84=20modeId=20API=20=E6=A0=BC=E5=BC=8F=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=20Super=20=E8=B4=A6=E5=8F=B7=E7=A9=BA=E5=93=8D=E5=BA=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit grok.com 官方 web 端已将 grok-420 模型从 modelName/modelMode 格式 切换为 modeId 格式,旧的 MODEL_MODE_GROK_420 已被后端标记为 MODEL_MODE_UNKNOWN 并返回 sampling engine 连接错误。 变更内容: - app_chat.py: grok-420 模型使用 modeId 替代 modelName/modelMode, 移除旧字段并设置 responseMetadata 为空(与官方 web 端一致) - model.py: grok-4.20-beta 改用 MODEL_MODE_EXPERT(多 Agent 深度思考), 新增 grok-4.20-fast 模型(MODEL_MODE_FAST,快速回答) 测试验证: - modeId=expert: 4 Agent 并行思考 + 真实内容输出 - modeId=fast: 直接回答,无思考过程 - 其他模型(grok-4、grok-3 等)不受影响 Closes #339 --- app/services/grok/services/model.py | 15 +++++++++++++-- app/services/reverse/app_chat.py | 12 ++++++++++++ 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/app/services/grok/services/model.py b/app/services/grok/services/model.py index 24dbb708e..a539ff4ef 100644 --- a/app/services/grok/services/model.py +++ b/app/services/grok/services/model.py @@ -155,14 +155,25 @@ class ModelService: ModelInfo( model_id="grok-4.20-beta", grok_model="grok-420", - model_mode="MODEL_MODE_GROK_420", + model_mode="MODEL_MODE_EXPERT", tier=Tier.BASIC, - cost=Cost.LOW, + cost=Cost.HIGH, display_name="GROK-4.20-BETA", is_image=False, is_image_edit=False, is_video=False, ), + ModelInfo( + model_id="grok-4.20-fast", + grok_model="grok-420", + model_mode="MODEL_MODE_FAST", + tier=Tier.BASIC, + cost=Cost.LOW, + display_name="GROK-4.20-FAST", + is_image=False, + is_image_edit=False, + is_video=False, + ), ModelInfo( model_id="grok-imagine-1.0-fast", grok_model="grok-3", diff --git a/app/services/reverse/app_chat.py b/app/services/reverse/app_chat.py index 40594781b..8aa445305 100644 --- a/app/services/reverse/app_chat.py +++ b/app/services/reverse/app_chat.py @@ -18,6 +18,13 @@ CHAT_API = "https://grok.com/rest/app-chat/conversations/new" _LAST_PROXY_LOG_STATE: tuple[str, str] | None = None +# grok-420 使用新的 modeId API 格式(替代 modelName/modelMode) +# 官方 web 端已将 grok-420 切换为 modeId 字段,旧的 MODEL_MODE_GROK_420 已废弃 +_GROK420_MODE_ID_MAP = { + "MODEL_MODE_EXPERT": "expert", + "MODEL_MODE_FAST": "fast", +} + def _normalize_chat_proxy(proxy_url: str) -> str: """Normalize proxy URL for curl-cffi app-chat requests.""" @@ -114,6 +121,11 @@ def build_payload( } if model == "grok-420": + # grok-420: 使用新的 modeId 格式,移除旧的 modelName/modelMode + payload.pop("modelName", None) + payload.pop("modelMode", None) + payload["responseMetadata"] = {} + payload["modeId"] = _GROK420_MODE_ID_MAP.get(mode, "expert") payload["enable420"] = True custom_personality = AppChatReverse._resolve_custom_personality()