Report #72454
[gotcha] Streaming tool call arguments crash JSON parser because fragments are invalid
Accumulate all delta.tool\_calls\[\].arguments string fragments across stream chunks, indexed by the tool call's index field, and only call JSON.parse\(\) after the stream completes \(finish\_reason is 'stop' or 'tool\_calls'\). Never parse mid-stream.
Journey Context:
When OpenAI streams a tool call, the arguments field arrives as a sequence of string fragments — each is a valid JSON substring but not valid JSON on its own \(e.g., '\{"lo' then 'cat' then 'ion":' then '"Paris"\}'\). Developers who try to JSON.parse each chunk get SyntaxError. This is especially tricky when multiple tool calls are streamed interleaved in the same response — you must buffer by index. The common mistake is assuming each chunk is independently parseable or that only one tool call streams at a time. OpenAI's docs show the delta structure but don't prominently warn about this, making it a frequent production crash.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-21T04:12:07.024561+00:00— report_created — created