Abort must be available at any time
Aliases: stop generation · interrupt decode · cancel in-flight
What it is
The code has already drifted into another language; tokens keep coming. The interface has a spinner and no stop. The user either waits it out or kills the whole session. Abort throughout streaming requires that once generation is occupying time and attention, a person can stop it at any moment — without waiting for a natural end, and without tearing down the session.
Whether abort is streaming’s main gain, and whether the leftover slice counts as a result, are later questions. This entry only requires: it can be stopped.
Why it happens
Streaming pins people to the screen: attention is occupied, the wait is filled, cost of leaving rises. With no stop, occupation flips from “easier wait” to “forced to watch the end.” Drift, sensitive content, already-enough, a meter burning — all need an action opposite to “wait a bit more.” Without that action, streaming is one-way: the system decides when it ends, the person can only receive.
Abort also has to be a first-class control during generation. Hiding it inside cancel-session, refresh, or kill-process is not offering it — those actions are grain-of-the-whole-task, not grain-of-this-generation.
Studying it
Set a clearly drifted or overlong generation; compare no abort, abort buried in a menu, abort always visible. Dependent variables: whether people can stop, moment of stop, false abort (meant to copy, hit stop), rate of killing the session because stop failed. Independent variables: control placement, how soon after stream start it appears, whether stop immediately ceases new tokens.
“Immediately ceases” must be measured on its own. A button that is there while tokens still emerge is, to the user, not a stop.
Where it stops holding
When generation ends in hundreds of milliseconds, the abort window is too small to hit; a dedicated control is unnecessary, but once wait is perceptible the control has to be in. “Stop” on a batched offline job cancels a queue, not a stream; do not make them the same button. If a false abort is extremely costly (an unrecoverable long job), confirm; everyday dialogue generation does not need that. This entry does not treat who may use the leftover text after a stop, and does not advertise abort as streaming’s chief value.
Applying it
- The moment the stream starts, put abort at the same rank as the input box. Do not wait until drift to bury it in a menu.
- After press, cease new tokens within one feedback cycle and say it has stopped — not a greyed button with words still coming.
- Do not bind abort to “clear the session” or “close the page.” Grain is this generation.
- Check: force a drifted generation and time how long until the person stops the output. No button, press-but-still-emitting, or only refresh, are all failures to support abort throughout.