chore(deepseek): trim comments to essentials

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Milan 2026-06-11 23:28:36 +03:00
parent 6aa6d40c5d
commit 7824dc07d3
No known key found for this signature in database
3 changed files with 9 additions and 39 deletions

View file

@ -49,14 +49,12 @@ class DeepSeekChatConfig(OpenAIGPTConfig):
thinking_value = optional_params.pop("thinking", None)
reasoning_effort = optional_params.pop("reasoning_effort", None)
# Handle thinking parameter - accept {"type": "enabled"} and
# {"type": "disabled"} (the latter opts out of V4's default-on thinking)
# DeepSeek only accepts the `type` key, ignore budget_tokens
if thinking_value is not None:
if isinstance(thinking_value, dict) and thinking_value.get("type") in (
"enabled",
"disabled",
):
# DeepSeek only accepts the `type` key, ignore budget_tokens
optional_params["thinking"] = {"type": thinking_value["type"]}
# Handle reasoning_effort - map to thinking enabled
@ -138,17 +136,9 @@ class DeepSeekChatConfig(OpenAIGPTConfig):
def _thinking_mode_active(self, model: str, optional_params: dict) -> bool:
"""
Returns True when thinking mode may be active for this request.
DeepSeek V4 models enable thinking BY DEFAULT (no `thinking` param
required - https://api-docs.deepseek.com/guides/thinking_mode), so any
reasoning-capable model counts unless the user explicitly disabled
thinking. Same approach as the Moonshot reasoning fix
(litellm/llms/moonshot/chat/transformation.py).
Injecting `reasoning_content` when thinking is NOT active is harmless:
the DeepSeek API ignores the field in non-thinking requests (verified
against the live API, including thinking={"type": "disabled"}).
DeepSeek V4 enables thinking by default, so any reasoning-capable model
counts unless thinking is explicitly disabled. The API ignores
`reasoning_content` in non-thinking requests, so over-injecting is safe.
"""
if (optional_params.get("thinking") or {}).get("type") == "disabled":
return False
@ -163,13 +153,8 @@ class DeepSeekChatConfig(OpenAIGPTConfig):
headers: dict,
) -> dict:
"""
Ensures `reasoning_content` is forwarded on assistant messages for
multi-turn thinking-mode conversations (issue #28045).
Only runs when thinking mode is actually active - guarded by both
supports_reasoning() (model capability) and optional_params["thinking"]
(user explicitly enabled it), preventing spurious injection on models
like deepseek-v3.2 that support thinking as opt-in but not always-on.
Forwards `reasoning_content` on assistant messages for multi-turn
thinking-mode conversations.
"""
if self._thinking_mode_active(model=model, optional_params=optional_params):
messages = self._fill_reasoning_content(messages)

View file

@ -168,8 +168,7 @@ class TestDeepSeekThinkingParams:
assert "thinking" not in result
def test_map_thinking_disabled_passed_through(self):
"""thinking={"type": "disabled"} must be forwarded so users can opt out
of DeepSeek V4's default-on thinking mode."""
"""thinking={"type": "disabled"} is forwarded (opt-out of V4 default thinking)."""
result = self.config.map_openai_params(
non_default_params={"thinking": {"type": "disabled"}},
optional_params={},
@ -181,11 +180,7 @@ class TestDeepSeekThinkingParams:
class TestDeepSeekV4DefaultThinkingMode:
"""
DeepSeek V4 models run in thinking mode BY DEFAULT and require
`reasoning_content` to be passed back on assistant messages
(https://github.com/BerriAI/litellm/issues/26395).
"""
"""DeepSeek V4 default-on thinking mode / reasoning_content pass-back."""
def setup_method(self):
self.config = DeepSeekChatConfig()
@ -221,10 +216,6 @@ class TestDeepSeekV4DefaultThinkingMode:
)
def test_reasoning_capable_models_active_by_default(self):
"""Any reasoning-capable DeepSeek model counts as potentially
thinking-mode (V4 enables thinking by default). Injection is harmless
when thinking is not actually active: the live API ignores
reasoning_content in non-thinking requests."""
assert self.config._thinking_mode_active(
model="deepseek-v3.2", optional_params={}
)

View file

@ -234,13 +234,7 @@ def test_deepseek_fill_reasoning_content_multiturn():
def test_deepseek_fill_reasoning_content_guard_in_transform_request():
"""
_fill_reasoning_content runs for any reasoning-capable DeepSeek model
unless thinking is explicitly disabled.
DeepSeek V4 enables thinking mode BY DEFAULT (no `thinking` param
required), so the guard cannot rely on an explicit opt-in (issue #26395).
Injecting reasoning_content when thinking is not actually active is
harmless: the DeepSeek API ignores the field in non-thinking requests
(verified against the live API, including thinking={"type": "disabled"}).
unless thinking is explicitly disabled (V4 enables thinking by default).
"""
from litellm.llms.deepseek.chat.transformation import DeepSeekChatConfig