coderai broker: actually stream responses (don't wait for done before yielding)
Streaming was scaffolded (stream_queue, _publish_stream_response,
wait_for_stream_event, _iter_broker_stream_chunks) but send_request always awaited
the terminal future and then popped the pending entry in finally — so by the time
_broker_stream began consuming, the stream was over and its queue was gone. Result:
the whole reply arrived at once.
Fixes:
- send_request: for streaming requests, return a {event:"stream_start"} immediately
and do NOT pop _pending in finally — the consumer drives it. Pop on error.
- _publish_stream_response: queue EVERY event (chunks AND the terminal done) so the
consumer's loop receives the end marker; still resolves the future for safety.
- finish_stream(): new — removes the streaming request's _pending once drained.
- wait_for_stream_event: simplified to a queue.get (dropped the event_log path).
- providers/coderai._iter_broker_stream_chunks: wrap in try/finally that calls
finish_stream(request_id) on completion/error; treat stream_start as a no-data
continue.
Pairs with the coderai-side change that emits chunk/done envelopes.
Co-Authored-By:
Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011DDv7BchtZQWsnPG6Jm49m
Showing
Please
register
or
sign in
to comment