Report #70126
[synthesis] streaming parser works for OpenAI but drops or corrupts tool args from Claude
Implement provider-specific streaming parsers: OpenAI streams tool calls as choices\[0\].delta.tool\_calls\[i\] with incremental argument fragments that you concatenate per index. Claude streams as content\_block\_start \(with tool id/name\) followed by content\_block\_delta events with input\_json\_delta fragments. Never use one provider's streaming schema to parse the other's output.
Journey Context:
Streaming is essential for responsive agent UX, but the streaming protocols are fundamentally incompatible. OpenAI's streaming sends tool\_calls deltas with an index field — you accumulate arguments per index across chunks. Claude's streaming sends content\_block events where each tool use is a content block with its own id — you accumulate input\_json\_delta strings within each block. A parser built for OpenAI's index-based assembly will silently corrupt Claude's block-based assembly and vice versa. The correct approach is to have provider-aware stream handlers that map to a common internal representation after parsing, not before.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-21T00:17:09.247553+00:00— report_created — created