mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-08-04 06:12:10 +03:00
prepareClaudeRequest already injects a synthetic thinking content block
when body.thinking is enabled, an assistant turn contains a tool_use,
and no precursor thinking block exists in content[]. The injection was
gated by `provider === "claude" || provider?.startsWith?.("anthropic-
compatible-")`, which excluded other Anthropic-shape upstreams:
- kimi-coding (api.kimi.com/coding/v1/messages)
- glmt (z.ai coding plan Anthropic endpoint)
- zai, agentrouter, and any future provider registered with format: "claude"
These providers enforce the same body-shape contract for thinking mode
and reject multi-turn requests with errors like:
kimi-coding: "thinking is enabled but reasoning_content is missing in
assistant tool call message at index N"
claude (cross-provider replay): "Invalid signature in thinking block"
prepareClaudeRequest is only invoked when targetFormat === FORMATS.CLAUDE
(translator/index.ts:165-168), so the outer provider gate is redundant:
any body reaching this function is destined for a Claude-shape upstream.
Drop the gate; the body of the block executes uniformly for all Claude-
shape targets.
Net effect:
- Single-turn requests unchanged (no tool_use in history yet)
- Multi-turn requests with assistant tool_use turns get a placeholder
thinking block ("." with DEFAULT_THINKING_CLAUDE_SIGNATURE) prepended
- Existing thinking blocks get their signature replaced with the default
(already the case for claude/anthropic-compatible-*; now applied to
kimi-coding and similar — same defensive cross-provider posture)
The `supportsPromptCaching` gate at line 152 (for cache_control insertion)
remains unchanged — that one still wants to be conservative about which
providers support prompt caching.
Includes 5 unit test cases covering: claude native injection (regression),
kimi-coding injection (new), existing-thinking signature replacement,
thinking-off pass-through, and single-turn no-inject.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>