Fix Responses API background=true + stream=true panic (#1945)#2068
Closed
glaziermag wants to merge 1 commit into
Closed
Fix Responses API background=true + stream=true panic (#1945)#2068glaziermag wants to merge 1 commit into
glaziermag wants to merge 1 commit into
Conversation
1bf58be to
5cd2631
Compare
5cd2631 to
ad592d6
Compare
Code Metrics Report━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Language Files Lines Code Comments Blanks ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ C Header 5 305 210 52 43 CSS 2 1181 1036 34 111 CUDA 59 17706 13869 1637 2200 Dockerfile 1 39 22 8 9 HTML 2 235 197 14 24 JavaScript 16 3580 2702 486 392 Jinja2 7 694 656 5 33 JSON 21 409 406 0 3 Makefile 1 6 5 0 1 Metal Shading Lan| 31 11647 9007 1064 1576 PowerShell 1 300 227 30 43 Python 125 8316 6808 412 1096 Shell 2 485 329 95 61 Plain Text 3 3723 0 2413 1310 TOML 27 1290 1124 35 131 YAML 3 25 23 2 0 ───────────────────────────────────────────────────────────────────────────────── Jupyter Notebooks 3 122 83 23 16 |- Markdown 1 60 30 22 8 |- Python 1 122 113 1 8 (Total) 304 226 46 32 ───────────────────────────────────────────────────────────────────────────────── Markdown 105 11197 0 8067 3130 |- BASH 72 934 691 149 94 |- Dockerfile 1 1 1 0 0 |- JSON 20 719 719 0 0 |- PowerShell 3 3 3 0 0 |- Python 23 1038 862 60 116 |- Rust 51 2048 1718 54 276 |- TOML 6 207 164 0 43 |- YAML 2 9 8 1 0 (Total) 16156 4166 8331 3659 ───────────────────────────────────────────────────────────────────────────────── Rust 547 236072 207590 6565 21917 |- Markdown 361 8962 452 7385 1125 (Total) 245034 208042 13950 23042 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Total 961 311435 249055 28614 33766 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ |
Contributor
Author
|
Update (2026-04-15): Rebased onto |
Contributor
Author
|
Closing in favor of #2114, which is a clean reimplementation against current master with a minimal diff (no extraneous reindentation changes). The fix is the same: loop-drain Response::Chunk events in the background task handler. |
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.
Fixes #1945. Alternative to closed PR #1989.
Problem
The
/v1/responsesendpoint supports abackground=truemode that spawns a Tokio task to process the request asynchronously. Whenstream=truewas also set, the pipeline emitted a sequence ofResponse::Chunk(…)messages followed by a terminalResponse::Done. The background receiver used a singlematch bg_rx.recv().await— it hit the firstChunkmessage, fell into the_ =>catch-all, and marked the task as failed with"Unexpected response type".Fix
Replace the single
matchwith awhile let Some(msg) = bg_rx.recv().awaitloop.Response::Chunk(_)armscontinueto drain stream chunks; the terminal variants (Done,ModelError,ValidationError,InternalError) break the loop with the appropriate outcome.Scope
This fix applies to background (
background=true) chat completion requests. Non-background streaming requests go through a different path and are unaffected. Other response variants (CompletionDone,ImageGeneration, etc.) not applicable to this endpoint fall into the_ =>arm as before — that is pre-existing behavior for endpoint misuse, not a regression.Files changed
mistralrs-server-core/src/responses.rs