From d252ac5de36326345f38bd287236d0127686456e Mon Sep 17 00:00:00 2001 From: Leon Date: Mon, 27 Jul 2026 18:05:53 +0800 Subject: [PATCH] fix: thinking mode was never actually disabled (extra_body bug) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit _add_thinking_mode set data["extra_body"]={"enable_thinking": False}, but extra_body is an OpenAI Python SDK convention that gets unwrapped to top-level by the SDK. This project sends requests via httpx, so extra_body was sent as a literal nested key that DashScope ignores — qwen3.6-plus kept thinking ON, wasting 96% of output tokens on reasoning (measured: 0.54K reasoning / 0.56K output) and inflating a 3-min translation to 24-min. Fix: when the field is extra_body (aliyuncs/google providers), merge its dict into the top-level request body instead of nesting it. --- docutranslate/agents/agent.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/docutranslate/agents/agent.py b/docutranslate/agents/agent.py index 9b2ceb5..a009315 100644 --- a/docutranslate/agents/agent.py +++ b/docutranslate/agents/agent.py @@ -570,10 +570,13 @@ class Agent: if thinking_mode_result is None: return field_thinking, val_enable, val_disable = thinking_mode_result - if self.thinking == "enable": - data[field_thinking] = val_enable - elif self.thinking == "disable": - data[field_thinking] = val_disable + value = val_enable if self.thinking == "enable" else val_disable + # extra_body 是 OpenAI SDK 约定;本项目用 httpx 直接发请求, + # 必须把里面的字段提到顶层,DashScope / GLM 等才会识别。 + if field_thinking == "extra_body" and isinstance(value, dict): + data.update(value) + else: + data[field_thinking] = value def _normalize_mt_lang(self, lang: str | None) -> str | None: if lang is None: