mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-08-20 06:02:14 +03:00
HTTP 400 "invalid argument" was triggered when OmniRoute translated tool calls to Gemini format, because thoughtSignature was injected onto every functionCall part unconditionally. Affects two code paths: 1. openai-to-gemini.ts — OpenAI tool_calls → Gemini functionCall 2. claude-to-gemini.ts — Claude tool_use blocks → Gemini functionCall thoughtSignature is only valid on thinking/reasoning parts (those with thought: true or thoughtSignature as their primary field). When present on a functionCall part, the Gemini API returns HTTP 400 'invalid argument'. The thinking parts that legitimately carry thoughtSignature (emitted when a message has reasoning_content / thinking blocks) are untouched. Regression tests (T43) cover: - single tool call: no thoughtSignature on functionCall part (openai path) - multiple tool calls: none carry thoughtSignature (openai path) - thinking regression guard: thoughtSignature still on thought parts - claude-to-gemini path: tool_use blocks produce clean functionCall parts Fixes #724