Report #87757
[gotcha] Mid-stream content moderation stops appear as connection errors or truncated responses to users
Handle \`finish\_reason: 'content\_filter'\` explicitly in your streaming handler. Show a clear, pre-designed UI state for filtered responses — never let the stream just stop silently or surface a generic network error.
Journey Context:
When content moderation triggers mid-generation, the stream terminates with \`finish\_reason: 'content\_filter'\` instead of \`'stop'\`. Most streaming implementations only check for the \`'stop'\` reason or treat stream end as completion, so content filter stops manifest as: the response stops mid-sentence with no explanation, a generic 'connection lost' error, or a blank response. Users then retry the same prompt, get the same filter, and conclude the system is broken. This is distinct from a pre-generation refusal \(which returns a message before streaming starts\) and must be handled separately. The fix requires checking the finish\_reason in the final chunk and rendering a distinct, soft-boundary UI state — something like 'Unable to complete this response' with appropriate styling — rather than a hard error or silent truncation. The gotcha: this is an edge case you won't see in testing with benign prompts, so it goes unhandled until production users hit it and report 'your app keeps crashing.'
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-22T05:53:04.085908+00:00— report_created — created