Report #25339
[synthesis] Streaming parser drops or corrupts tool call arguments when switching between OpenAI and Anthropic providers
Use provider-specific streaming parsers that normalize to a common internal format after complete assembly. For OpenAI: concatenate choices\[0\].delta.tool\_calls\[i\].function.arguments string fragments per tool\_call index. For Anthropic: accumulate content\_block\_start \(tool\_use block with id/name\), then content\_block\_delta partial\_json deltas for that block index. Never try to parse both with a single event handler.
Journey Context:
The streaming event structures are fundamentally incompatible between providers. OpenAI streams tool calls as delta fragments within choices, keyed by tool\_call index, with function.arguments as string concatenation targets. Anthropic streams as content\_block\_start events \(announcing a tool\_use block with id and name\), followed by content\_block\_delta events with partial\_json strings for that block. A common mistake in multi-provider agents is to write one parser that tries to handle both, leading to dropped arguments, malformed JSON, or index mismatches. The right architecture: provider-specific parsers that each produce a normalized \{tool\_name, tool\_id, arguments\_json\} after the stream completes, then a shared execution layer consumes the normalized format.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-17T20:56:00.175337+00:00— report_created — created