feat: ensure thinking blocks for deepseek models in history

This commit is contained in:
Jiaqing Liang committed 2026-04-27 15:11:09 +08:00
1 parent 624058d25c
commit eb3fa0041f
1 file changed
+14 -3
+14 -3
View File
@@ -563,6 +563,17 @@ def _drop_unsigned_thinking(messages):
if isinstance(c, list): m["content"] = [b for b in c if _keep_claude_block(b)]
return messages
def _ensure_thinking_blocks(messages, model):
"""deepseek needs thinking in history!"""
if 'deepseek' not in model.lower(): return messages
for m in messages:
if m.get("role") != "assistant": continue
c = m.get("content")
if not isinstance(c, list): continue
has_thinking = any(isinstance(b, dict) and b.get("type") == "thinking" for b in c)
if not has_thinking: m["content"] = [{"type": "thinking", "thinking": "...", "signature": "placeholder"}, *c]
return messages
class ClaudeSession(BaseSession):
def raw_ask(self, messages):
if self.max_tokens is None: self.max_tokens = 8192
@@ -586,8 +597,7 @@ class ClaudeSession(BaseSession):
return msgs
class LLMSession(BaseSession):
def raw_ask(self, messages):
return (yield from _openai_stream(self, messages))
def raw_ask(self, messages): return (yield from _openai_stream(self, messages))
def make_messages(self, raw_list): return _msgs_claude2oai(raw_list)
def _fix_messages(messages):
@@ -617,7 +627,7 @@ class NativeClaudeSession(BaseSession):
self._device_id = uuid.uuid4().hex + uuid.uuid4().hex[:32]
self.tools = None
def raw_ask(self, messages):
messages = _drop_unsigned_thinking(_fix_messages(messages))
messages = _ensure_thinking_blocks(_drop_unsigned_thinking(_fix_messages(messages)), self.model)
if self.max_tokens is None: self.max_tokens = 8192
model = self.model
beta_parts = ["claude-code-20250219", "interleaved-thinking-2025-05-14", "redact-thinking-2026-02-12", "prompt-caching-scope-2026-01-05"]
@@ -690,6 +700,7 @@ class NativeClaudeSession(BaseSession):
class NativeOAISession(NativeClaudeSession):
def raw_ask(self, messages):
messages = _fix_messages(messages)
messages = _ensure_thinking_blocks(messages, self.model)
return (yield from _openai_stream(self, _msgs_claude2oai(messages)))
def openai_tools_to_claude(tools):