cancelCurrent() to stop generation for the current turn immediately —
without closing the WebSocket.
This differs from endSession() / {"close": true}, which ends the turn
gracefully: it flushes whatever text is still buffered and drains the
remaining audio (see Turn lifecycle).
A barge-in does the opposite — it abandons the turn:
- The actively-generating sentence is cancelled mid-stream.
- Any text that was buffered or queued but not yet spoken is dropped.
- No further audio chunks for the cancelled turn are emitted after the
acknowledgement. No
final(end-of-audio) frame is sent for a cancelled turn — theinterruptedack takes its place. - The WebSocket stays open, so you can
send()the next user turn immediately (session config is re-sent automatically on that firstsend).
{"interrupted": true}
(or after a short quiet timeout if the server has gone silent).
Stop your local audio playback as soon as you call
cancelCurrent() — don’t
wait for the acknowledgement. A few audio frames already in transit may still
arrive before the server confirms the cancel; the onInterrupted callback
(JS/Java) marks the point after which no more frames for the cancelled turn
will come.Barge-in on multi-context sessions
For multi-context sessions, barge-in is per context: callcloseContext(contextId, true) (JS/Java) /
close_context(context_id, immediate=True) (Python), or send
{"close_context": true, "context_id": "...", "immediate": true} on the raw
socket. The targeted context’s in-flight generation is cancelled and its
buffered text dropped; other contexts and the connection stay open.