From e0948a3e7f96f2d637b3db878aface14aff0fee8 Mon Sep 17 00:00:00 2001 From: hobokenchicken Date: Tue, 3 Mar 2026 13:30:37 -0500 Subject: [PATCH] fix(streaming): use repeat_with + take for [DONE] marker --- src/server/mod.rs | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/server/mod.rs b/src/server/mod.rs index 23722dd4..bcff3be7 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -246,7 +246,7 @@ async fn chat_completions( let stream_id = format!("chatcmpl-{}", Uuid::new_v4()); let stream_created = chrono::Utc::now().timestamp() as u64; - // Create the SSE event stream + // Map chunks to SSE events let sse_stream = aggregating_stream .map(move |chunk_result| { match chunk_result { @@ -274,10 +274,9 @@ async fn chat_completions( } }); - // Chain [DONE] event - this should work now with the corrected stream type - let done_stream = futures::stream::once(async { - Ok::(Event::default().data("[DONE]")) - }); + // Chain [DONE] - using repeat_with to ensure it gets polled + let done_stream = futures::stream::repeat_with(|| Ok::(Event::default().data("[DONE]"))) + .take(1); let out = sse_stream.chain(done_stream); Ok(Sse::new(out).into_response())