There are three clocks here. The model can generate speech ahead of playback. The user can start speaking before we have a final transcription. The refund provider can accept a request before our cancellation reaches it. Treating these as one “cancel the response” button is how the agent tells the caller nothing happened when money already moved.

On barge-in, stop local playback immediately and prevent further model output from being heard. Cancel the in-progress model response, then remove unplayed audio from the conversation state so the next turn does not treat an unheard promise as something the caller heard. In OpenAI's Realtime conversation guide, the WebSocket client handles playback stop and sends conversation.item.truncate, while WebRTC and SIP have server-managed output buffering. That is a transport-specific example of the broader rule: conversation history should reflect what was actually presented. Do not assume generated text is identical to heard text, especially when audio and transcript are not exactly aligned.

Interruption stops speech but must reconcile an already submitted refund
Stopping speech does not cancel a submitted refund.

The refund is a separate operation with a stable identity. Before submission, the action broker needs the actual confirmation and current authority for the exact account and amount. If the caller has not confirmed those details, speech such as “I can submit” is not an approval. No refund call should be sent. If the caller already gave valid confirmation and the call was submitted before the interruption was observed, record submitted, outcome unknown until the provider receipt or status query resolves it. A local response.cancel cannot withdraw a provider request. If the provider offers cancellation, that is another operation with its own result. Do not resend the refund under a new key while the first is unresolved.

Ordering matters. Give speech turns, tool proposals, user confirmation, and submitted effects distinct IDs and timestamps or sequence numbers. The broker checks a turn's authorization at the commit boundary, with a rule for which event wins if the interruption and submission race. For instance, once a server-side interruption event is ordered before broker commit, reject a still-pending refund. Once the broker has submitted it, move to reconciliation. A word spoken earlier but detected only after commit cannot retroactively stop that call, so the user-facing status must admit that timing limit. This rule belongs at the broker, not in a later guess from transcript arrival order. Voice activity detection can fire on noise, so an early interruption signal can freeze a proposed effect while the user turn is confirmed. That may cost a moment of latency. It is cheaper than guessing about an $80 effect.

If the tool returns “refund succeeded” after the caller has said stop, tell the truth in the next spoken turn: “I stopped speaking. The $80 refund had already been submitted and is confirmed. I can explain the next step.” Do not say it was cancelled. If its result is still unknown, say the refund status is being checked and give a durable follow-up route. If the caller's stop preceded the broker's commit and the effect never went out, say it was not submitted. Keep the words tied to the operation ledger, not to what the model predicted a few audio chunks earlier.

What if “stop” came during readback of the amount, before the caller explicitly confirmed it? Then the write must not have been eligible at all. An implementation that starts a refund optimistically during readback has crossed its approval boundary early. For low-risk informational tools we can cancel and start over. For money, require an affirmative confirmation turn whose content and amount are sufficiently established before broker commit. If transcription confidence is weak or the caller corrects the amount mid-turn, clarify. Measure interrupted turns, post-interruption audible speech, effects submitted after an ordered stop, unknown effects left unresolved, and whether the next response accurately states the provider outcome. This is more than a speech latency test.