mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-05-18 04:41:56 +00:00
fix(agent): add Xiaomi MiMo to reasoning_content echo-back providers
Xiaomi MiMo emits reasoning via OpenAI's reasoning_content field and requires reasoning_content on every assistant tool-call message when replaying history. Without echo-back, subsequent API calls fail with HTTP 400 — same shape as DeepSeek and Kimi/Moonshot thinking modes. Adds _needs_mimo_tool_reasoning() detection (provider == 'xiaomi', 'mimo' in model, or xiaomimimo.com base url) and wires it into the _needs_thinking_reasoning_pad() check. Salvage of #25358 by @ephron-ren (manually re-applied — original branch was severely stale against current main).
This commit is contained in:
parent
8de26e280e
commit
efa97af7e2
1 changed files with 18 additions and 1 deletions
19
run_agent.py
19
run_agent.py
|
|
@ -10049,11 +10049,12 @@ class AIAgent:
|
|||
|
||||
DeepSeek v4 thinking and Kimi / Moonshot thinking both reject replays
|
||||
of assistant tool-call messages that omit ``reasoning_content`` (refs
|
||||
#15250, #17400).
|
||||
#15250, #17400). Xiaomi MiMo thinking mode has the same requirement.
|
||||
"""
|
||||
return (
|
||||
self._needs_deepseek_tool_reasoning()
|
||||
or self._needs_kimi_tool_reasoning()
|
||||
or self._needs_mimo_tool_reasoning()
|
||||
)
|
||||
|
||||
def _needs_kimi_tool_reasoning(self) -> bool:
|
||||
|
|
@ -10085,6 +10086,22 @@ class AIAgent:
|
|||
or base_url_host_matches(self.base_url, "api.deepseek.com")
|
||||
)
|
||||
|
||||
def _needs_mimo_tool_reasoning(self) -> bool:
|
||||
"""Return True when the current provider is Xiaomi MiMo thinking mode.
|
||||
|
||||
MiMo thinking mode requires ``reasoning_content`` on every assistant
|
||||
tool-call message when replaying history; omitting it causes HTTP 400.
|
||||
Refs: https://platform.xiaomimimo.com/docs/zh-CN/usage-guide/passing-back-reasoning_content
|
||||
"""
|
||||
provider = (self.provider or "").lower()
|
||||
model = (self.model or "").lower()
|
||||
return (
|
||||
provider == "xiaomi"
|
||||
or "mimo" in model
|
||||
or base_url_host_matches(self.base_url, "api.xiaomimimo.com")
|
||||
or base_url_host_matches(self.base_url, "xiaomimimo.com")
|
||||
)
|
||||
|
||||
def _copy_reasoning_content_for_api(self, source_msg: dict, api_msg: dict) -> None:
|
||||
"""Copy provider-facing reasoning fields onto an API replay message."""
|
||||
if source_msg.get("role") != "assistant":
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue