toolCallCancellation never sent for an interrupted tool call on gemini-3.8-live (30 sessions, text and speech). Expected?

Setup: gemini-3.8-live through the Gemini API (AI Studio endpoint), google-genai 2.25.0 (Python). One tool, book_slot, backed by a fake in-process service that commits 4 s after the call. A scripted user asks for a booking; 1 s after the toolCall arrives, the user says “Actually, stop. Don’t book it.” Input as typed text and, separately, as synthesized speech streamed in real time with VAD at its default. Variants: behavior unset (NON_BLOCKING default) and BLOCKING; stop before the call, during, and after the commit; scheduling SILENT on the response. 30 sessions, all timelines logged at millisecond resolution.

Observed:

  1. toolCallCancellation never arrived, in any variant. That includes BLOCKING calls where interrupted: true was received 16 to 18 ms (text) or 139 to 152 ms (speech) after the stop.
  2. After an interrupted BLOCKING call, the FunctionResponse sent for that call id looked ignored: the model either issued the same call again with a new id (two bookings), or told the user nothing had been booked although the response said status: booked.
  3. In the default mode, with the model silent after emitting the call, the stop produced no interrupted and no cancellation. The model answered the stop as a new turn and, in text mode, said the booking was already made before any tool response had been sent.

The reference says the cancellation “occurs only in cases where the clients interrupt server turns”, which matches observation 3. Questions:

  • With NON_BLOCKING as the default, is there any server-side signal that a pending tool call has been abandoned, or is that entirely the client’s responsibility?
  • For BLOCKING, is the pending call discarded on interruption? If so, is the client supposed to receive a cancellation for it, and is the FunctionResponse for that id expected to be dropped?

Harness, raw JSONL timelines and the audio clips: GitHub - frontier-on-cloud/gemini-live-stop-test · GitHub
Caveats: fake service, synthetic single voice, N=3 per scenario.

Update from the same harness, evening of 30 September.

  1. Barging in while the model was speaking with a NON_BLOCKING call still pending (3 runs, spoken stop 1 s after the model’s first audio chunk, 7 s tool): interrupted arrived 144 to 235 ms after speech onset, still no toolCallCancellation, no second call, and the pending call completed normally.
  2. A speech re-run of the BLOCKING case with the model’s audio saved: in 2 of 3 runs the model said “The booking was not made, so nothing has been scheduled” about 1.2 s after receiving the tool response status: booked. The third run issued the call again and booked twice. Real-time clip of run 1, with the model’s own audio: https://github.com/frontier-on-cloud/gemini-live-stop-test/raw/main/results/clip/stop-test-C1.mp4

41 sessions in total now, none with a toolCallCancellation. Scenario G and the saved audio are in the repo linked above.