Repository navigation
fix(grpc): deliver the final stream transcript under backpressure - #1
Merged
Merged
Conversation
StreamTranscribe sent the committed final transcript with try_send, so a full output queue turned a successful commit into RESOURCE_EXHAUSTED and the final text was lost. Await queue capacity like interim updates do.
autoantohaki
force-pushed
the
fix/grpc-stream-final-under-backpressure
branch
from
October 22, 2026 01:27
0958bf0 to
28f10b0
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Requested by mau
Before: when a
StreamTranscribeclient read responses more slowly than the server produced interim updates, the committed final transcript could be dropped. The output queue (8 events) was full at commit time,try_sendfailed, and the client receivedRESOURCE_EXHAUSTED: voice capacity is busyinstead of its final text.After: the final transcript waits for queue capacity, the same way interim updates already do, so every successful commit delivers its final event.
How: the commit arm now awaits
sender.send(...)and returns. If the receiver is gone, the stream simply ends. A new network test (stream_final_transcript_waits_for_a_full_output_queue) uses a fake session that emits a multiple of the queue size in interims before commit. It fails onmainwithResourceExhaustedand passes with this change.