A stop generation button is available during generation
Why it matters
Without a stop button the user is held hostage by every generation they regret starting: a prompt that is clearly going off the rails, a response already too long, a hallucination cascading into more hallucinations. They cannot terminate the stream, cannot re-prompt, and the product burns their tokens and wall-clock time on output they will immediately delete. This is one of the most-cited usability gaps in AI chat products and directly affects token-spend efficiency for paying users.
Severity rationale
High because users cannot recover from a bad generation and the product wastes their tokens on discarded output.
Remediation
In src/components/chat/ChatInput.tsx, swap the Send button for a Stop button while isLoading is true and wire it to the stop() function from useChat (or to controller.abort() for custom AbortController-based fetches). The partial response should remain visible after stopping.
{isLoading ? (
<Button onClick={stop} variant="destructive">Stop</Button>
) : (
<Button type="submit">Send</Button>
)}
DetectionPro
The detection method for this pattern is part of AuditBuffet Pro.
The full method (what to look for, pass and fail conditions, and how results get reported) ships inside the AI Chat Visibility Audit. The pattern definition, severity rationale, and remediation remain openly licensed under CC-BY-4.0.
Taxons
History
- 2026-04-18·v1.0.0·Initial import from ai-chat-visibility·automated