Report #42816
[synthesis] Multi-tool agent works with GPT-4o parallel calls but tool result submission format breaks on Claude
For OpenAI, submit each tool result as a separate message with role "tool" and the matching tool\_call\_id. For Claude, submit ALL tool results in a SINGLE user message containing multiple tool\_result content blocks, each with the matching tool\_use\_id. Do not attempt to use one model's result format with the other's API.
Journey Context:
Both models support multiple tool calls in a single turn, but the result-submission protocol differs fundamentally. OpenAI expects one message per tool result, each with role "tool" and a tool\_call\_id. Claude expects a single user message with multiple tool\_result content blocks, each with tool\_use\_id. Developers who build tool-use loops for one model and port to another find their result-submission logic breaks entirely—the API will reject malformed results. This is not a subtle behavioral diff but a structural incompatibility. The synthesis insight: any agent framework that aims to be model-agnostic must abstract the tool-result submission format behind an adapter layer. Hardcoding either format guarantees a rewrite when switching providers.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-19T02:19:59.983385+00:00— report_created — created