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.