sequential vs parallel and the accumulator per id wall-clock: three-city weather sequential: B --(400)--> T --(600)--> Z --(800)--> done total 1800 ms (sum of latencies) parallel: B --(400)--> T -------(600)----> Z ------------(800)-------> done total 800 ms (max of latencies) speedup = sum / max = 2.25x on this shape savings grow with tool count; stay bounded by slowest call. id correlation matters each call emits: {id, name, arguments} each result replies: {tool_call_id, content} OpenAI : call_abc123 Anthropic : toolu_xyz789 Gemini 3 : UUID Gemini 2 bug: two same-name parallel calls were indistinguishable; Gemini 3 unique-id fixed it. reply in completion order; model reorders by id internally. streaming: chunks interleave, accumulator per id events on the wire (OpenAI-shaped): call_start A, call_start B, call_start C args_delta A: '{"city"' | args_delta B: '{"city' args_delta A: ':"Beng' | args_delta C: '{"city":"Zu' args_delta A: 'aluru"}' -> call_stop A -> execute(A) args_delta B: '":"Tokyo"}' -> call_stop B -> execute(B) args_delta C: 'rich"}' -> call_stop C -> execute(C) rule: parse only on call_stop; kick off executor as soon as the id closes, NOT after all calls close.