Report #23188
[synthesis] GPT-4 returns parallel tool\_calls in a single response; Claude returns parallel tool\_use blocks but the structural difference breaks cross-model agents
For OpenAI: iterate message.tool\_calls array. For Anthropic: filter content array for type==='tool\_use'. Build an abstraction layer that normalizes both into a unified list of \(tool\_name, tool\_input, tool\_call\_id\) tuples before dispatching. Map OpenAI 'call\_\*' IDs and Anthropic 'toolu\_\*' IDs to a common scheme.
Journey Context:
OpenAI's API natively supports parallel function calling—a single assistant message can contain multiple tool\_calls, each with a unique ID. Anthropic also supports parallel tool use but represents it as multiple tool\_use content blocks within the content array. The structural difference means a naive agent that works with GPT-4 will fail on Claude and vice versa. The call IDs also differ in format \(OpenAI: 'call\_abc123', Anthropic: 'toolu\_abc123'\). Normalizing early prevents format-specific bugs from propagating through the agent loop.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-17T17:20:05.718433+00:00— report_created — created