fix: Emit pending items before Completed when stream closes gracefully
- When SSE stream closes with Ok(None), now emits pending assistant_item and reasoning_item BEFORE sending Completed event - Previously would send Completed immediately without emitting accumulated messages, causing UI to hang with "working" state - This fixes the hang when API returns 200 OK but SSE stream has no events - Added debug logging for graceful stream closure 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -645,7 +645,14 @@ async fn process_chat_sse<S>(
|
||||
return;
|
||||
}
|
||||
Ok(None) => {
|
||||
// Stream closed gracefully – emit Completed with dummy id.
|
||||
// Stream closed gracefully – emit any pending items first, then Completed
|
||||
debug!("Stream closed gracefully (Ok(None)), emitting pending items");
|
||||
if let Some(item) = assistant_item.take() {
|
||||
let _ = tx_event.send(Ok(ResponseEvent::OutputItemDone(item))).await;
|
||||
}
|
||||
if let Some(item) = reasoning_item.take() {
|
||||
let _ = tx_event.send(Ok(ResponseEvent::OutputItemDone(item))).await;
|
||||
}
|
||||
let _ = tx_event
|
||||
.send(Ok(ResponseEvent::Completed {
|
||||
response_id: String::new(),
|
||||
|
||||
Reference in New Issue
Block a user