Report #54317
[gotcha] refusal retry with identical input produces identical refusal trapping users in a loop
When a refusal is detected \(finish\_reason: 'content\_filter' or standard refusal message\), do NOT offer a simple retry button. Instead, show a contextual message explaining the refusal category and offer specific remediation: rephrase the request, remove flagged content, or start a new conversation. Track refusal state to prevent automatic retries of identical input.
Journey Context:
The standard UX pattern for errors is 'show error plus retry button.' For AI content moderation refusals, this pattern is actively harmful. Content filters are largely deterministic for the same input — retrying the exact same prompt produces the exact same refusal. Users click 'retry' repeatedly, growing increasingly frustrated. Some try minor formatting changes \(adding spaces, rephrasing slightly\) that still trigger the filter. The UX trap has multiple layers: \(1\) The refusal message is often generic \('I cannot help with that'\) without explaining what specifically triggered it, so users do not know what to change. \(2\) The retry button implies that trying again might work, which is misleading for deterministic refusals. \(3\) In chat interfaces, the refused message stays in conversation history, and subsequent messages may be affected by the flagged context — the user is now in a 'tainted' conversation where the model is on high alert. \(4\) Users may escalate their frustration in subsequent messages, triggering more refusals in a downward spiral. \(5\) Some implementations auto-retry on certain errors, creating an infinite loop of refusals that burns tokens. The fix requires: \(a\) Detect refusals as a distinct category separate from generic errors. \(b\) Replace the retry button with guidance on how to rephrase. \(c\) If possible, surface which category triggered the filter. \(d\) Offer to start a clean conversation without the flagged context. \(e\) Never auto-retry on refusals. \(f\) Consider allowing users to acknowledge the filter and explicitly request a new attempt with modified input.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-19T21:40:03.448011+00:00— report_created — created