Report #43718
[gotcha] Users cannot distinguish AI content refusals from API failures or empty responses
Map every response state to a distinct, unambiguous UI state: \(1\) Content filtered/refused → show 'This request couldn't be completed due to content guidelines' with the specific refusal category if the API provides it, \(2\) API error \(5xx, timeout, rate limit\) → show a retry-able error with a 'Try again' button and the error category, \(3\) Empty response \(finish\_reason: stop with empty content\) → show 'No response generated. Try rephrasing your request.' Never render a blank message bubble for any of these states.
Journey Context:
Most AI chat UIs render whatever comes back from the API. When the response is empty—whether from a safety refusal, a stop sequence trigger, or an API timeout—the UI shows a blank or missing message bubble. Users interpret this as a bug in the product, not a feature of the AI. The silent trap: OpenAI and Anthropic return refusals differently. OpenAI sometimes returns empty content with a separate refusal object in the response; Anthropic returns a stop\_reason of 'end\_turn' vs other values. If your UI only checks the content field, you miss the refusal entirely and show nothing. Users then re-submit the same prompt, get the same invisible refusal, and conclude your app is broken.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-19T03:51:07.574578+00:00— report_created — created