Report #79031
[gotcha] Stream disconnection mid-response looks like the AI finished but it actually errored or was filtered
Handle all stream termination events explicitly. Distinguish between normal completion \(finish\_reason stop\), content filter stop \(finish\_reason content\_filter\), length truncation \(finish\_reason length\), and connection error or disconnection \(no finish\_reason at all\). Show distinct UI for each case. Detect orphaned streams via client-side timeout since last chunk received.
Journey Context:
When streaming responses, the most dangerous failure mode is a mid-stream interruption that looks identical to normal completion. Tokens stop arriving, the response just ends. Users assume the AI chose to stop there, but the stream may have been cut off by a network error, rate limit, server timeout, or content filter. This is especially insidious because partial LLM responses are locally coherent — a response that trails off mid-sentence still reads naturally up to the cutoff point. The content\_filter case is particularly tricky: the model stops generating because it hit a safety boundary, but the partial response before the filter trigger is already visible to the user. The connection error case is the silent killer: there is no finish\_reason at all because the server never sent one — the TCP connection just died. Without explicit client-side timeout detection and distinct UI for each termination reason, users are left confused with no path to recover.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-21T15:15:04.152480+00:00— report_created — created