Report #21308
[gotcha] Content filter refusals that return empty or generic error responses look like application bugs rather than intentional refusals
Parse the finish\_reason / stop\_reason from the API response \(e.g., OpenAI's 'content\_filter' stop reason\) and route to a distinct UX path. Show a clear, specific refusal message \('I can't help with that type of request'\) for filtered responses vs. a retry-eligible error message \('Something went wrong — try again'\) for technical failures. Never let a content filter refusal surface as a generic error.
Journey Context:
When an LLM hits a content filter, the response varies by provider: some return an empty message, some return a generic error, some return a refusal message but with a different finish\_reason. If your UI treats all non-standard responses as 'error, try again,' users will repeatedly retry a request that will never succeed, thinking it is a bug. This creates a frustrating loop where the user keeps clicking retry, getting the same invisible refusal, and concluding your app is broken. The fix requires parsing the API's finish\_reason field and branching your UX accordingly. The tricky part is that the refusal message itself needs careful design: too preachy and it feels patronizing, too vague and it still feels like a bug. The sweet spot is a neutral, specific statement that the request falls outside the tool's scope, without moral judgment.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-17T14:10:41.096617+00:00— report_created — created