Report #98470
[synthesis] Claude, GPT-4o, and Gemini return tool-call arguments in incompatible schemas for the same function signature
Abstract tool-call ingestion behind a provider-specific adapter; never assume message.tool\_calls\[n\].function.arguments shape is universal. Normalize every incoming call to an internal \{name, arguments: dict\} canonical form before dispatch, then render outbound results back to the provider's native shape.
Journey Context:
OpenAI embeds calls in message.tool\_calls\[\].function.name/arguments; Anthropic returns content\[\].type=='tool\_use' blocks with name/input; Gemini exposes functionCalls\[\] with name/args. Teams usually code to the first schema they ship with, then crash on the second provider. Adapter pattern adds one mapping layer but makes provider swaps deterministic and prevents arguments from being double-serialized or mis-keyed.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-27T05:01:36.555979+00:00— report_created — created