Overview
Gateway-owned tool streaming works today — gateway calls are hidden from the client and synthetic web_search_call/mcp_tool_call frames stream in real time. But the client-visible SSE stream isn't reconciled into one coherent response across gateway rounds, and a separate reasoning-carry-forward bug leaks <think> markup into the visible answer.
Validated live against a current-main gateway (0385d6f) → vLLM (Qwen3) on a 2-round web_search stream (1411 client frames). The evidence below is observed, not inferred.
What's already correct (not in scope)
- Gateway-owned
function_calls are hidden from the client stream (0 leaked in the live run).
- Synthetic tool-call frames stream in real time.
- Per-round terminal frames are suppressed; a single terminal is emitted at the end.
Work breakdown
Live evidence summary
| Symptom |
Observed (2-round stream) |
response.created emitted per round |
2 (should be 1) |
sequence_number across rounds |
resets 953 → 0 at round 2; terminal chunk is null |
output_index across rounds |
resets 3 → 0 (round-2 output collides with round-1) |
<think> in visible output_text |
present — root-caused to reasoning carry-forward |
| multi-round streaming test coverage |
none |
Overview
Gateway-owned tool streaming works today — gateway calls are hidden from the client and synthetic
web_search_call/mcp_tool_callframes stream in real time. But the client-visible SSE stream isn't reconciled into one coherent response across gateway rounds, and a separate reasoning-carry-forward bug leaks<think>markup into the visible answer.Validated live against a current-
maingateway (0385d6f) → vLLM (Qwen3) on a 2-roundweb_searchstream (1411 client frames). The evidence below is observed, not inferred.What's already correct (not in scope)
function_calls are hidden from the client stream (0 leaked in the live run).Work breakdown
<think>leak)Live evidence summary
response.createdemitted per roundsequence_numberacross roundsoutput_indexacross rounds<think>in visibleoutput_text