Gemini-3.8-flash-lite-tts conversational mode: speaker A's third turn is voiced by

, ,

Title: gemini-3.8-flash-lite-tts conversational mode: speaker A’s third turn is voiced by speaker B (reproducible, position-dependent)

Model: gemini-3.8-flash-lite-tts (also seen on gemini-3.8-flash-tts)
API: Interactions API, POST /v1beta/interactions
Mode: speech_config mode “conversational”, two speakers (Kore and Enceladus; also seen with Kore and Charon)

What happens

We send one dialogue chapter (6 to 11 turns, about 60 to 130 seconds of audio) as one request. Each turn is its own text content item with a speech_metadata annotation naming the speaker. The speaker list maps each name to a voice.

Speaker A’s turn that starts about 35 to 65 seconds into the audio is often spoken partly or wholly in speaker B’s voice. In our chapters this is almost always line 5, A’s third turn. The voice switches back to the right speaker by the next turn. The words are correct. Only the voice is wrong.

How often

We measured pitch per second on 40 one-request renders, covering 3 scripts and several takes each:

Turn from B to A Wrong voice
Line 5 (35 to 65 s in) 11 of 20
Every other line 0 of 58

It happens whether B’s previous turn is a question or a statement. Changing B’s voice (Enceladus to Charon) did not help. Moving from flash-lite to gemini-3.8-flash did not help. Adding a short pause tag at the start of A’s turns did not help. Rewriting the script so A’s turns open with her own sentence did not help.

It seems to have become more frequent from about November 6, 2026. Our request code has not changed since October 30.

Repro

POST this body to https://generativelanguage.googleapis.com/v1beta/interactions with an x-goog-api-key header, several times. In a bad take, the seconds after Theo says “…dressed up as ordinary.” are in a male voice where Ada (Kore) is speaking, about 50 to 57 s into the audio. We saw it in both of two takes of this chapter.

{
  "model": "gemini-3.8-flash-lite-tts",
  "input": [
    {
      "type": "user_input",
      "content": [
        {
          "type": "text",
          "text": "It's just before nine on the morning of December sixth, nineteen seventeen, and Halifax Harbour is crowded with ice-grey water and ship traffic. On the deck of a French steamer called the Mont-Blanc, barrels of benzol are lashed in the open air, and below them sit twenty-three hundred tons of picric acid and five hundred tons of TNT.",
          "annotations": [
            {
              "type": "speech_metadata",
              "speaker": "Ada",
              "style": "Warm, assured storyteller telling a friend a story she knows cold; unhurried, taking a beat between thoughts, engaged, never a documentary read"
            }
          ]
        },
        {
          "type": "text",
          "text": "And none of the people on shore have the faintest idea what's in that hull, right?",
          "annotations": [
            {
              "type": "speech_metadata",
              "speaker": "Theo",
              "style": "Curious, engaged co-host; light and lively but unhurried, taking a beat between thoughts, reacts in the moment, a touch amused, and sure of himself when he adds something of his own"
            }
          ]
        },
        {
          "type": "text",
          "text": "Not a soul. The ship was forbidden to fly the red explosive flag, because a flag would tip off German U-boats to a floating arsenal. So it looks like any other tramp steamer coming in to join a convoy.",
          "annotations": [
            {
              "type": "speech_metadata",
              "speaker": "Ada",
              "style": "Warm, assured storyteller telling a friend a story she knows cold; unhurried, taking a beat between thoughts, engaged, never a documentary read"
            }
          ]
        },
        {
          "type": "text",
          "text": "That's chilling. A ship carrying the largest bomb anyone had ever built, dressed up as ordinary.",
          "annotations": [
            {
              "type": "speech_metadata",
              "speaker": "Theo",
              "style": "Curious, engaged co-host; light and lively but unhurried, taking a beat between thoughts, reacts in the moment, a touch amused, and sure of himself when he adds something of his own"
            }
          ]
        },
        {
          "type": "text",
          "text": "And in the next hour it becomes the biggest man-made explosion on Earth before the atomic age. I'm Ada.",
          "annotations": [
            {
              "type": "speech_metadata",
              "speaker": "Ada",
              "style": "Warm, assured storyteller telling a friend a story she knows cold; unhurried, taking a beat between thoughts, engaged, never a documentary read"
            }
          ]
        },
        {
          "type": "text",
          "text": "And I'm Theo. Welcome to the show. Let's get back to those two ships bearing down on each other.",
          "annotations": [
            {
              "type": "speech_metadata",
              "speaker": "Theo",
              "style": "Curious, engaged co-host; light and lively but unhurried, taking a beat between thoughts, reacts in the moment, a touch amused, and sure of himself when he adds something of his own"
            }
          ]
        }
      ]
    }
  ],
  "response_format": {
    "type": "audio",
    "mime_type": "audio/l16"
  },
  "generation_config": {
    "speech_config": {
      "mode": "conversational",
      "speakers": [
        {
          "speaker": "Ada",
          "voice": "Kore"
        },
        {
          "speaker": "Theo",
          "voice": "Enceladus"
        }
      ]
    }
  }
}

Expected

Every turn is spoken in the voice mapped to its speaker in speech_config.

Workaround we tested

Rendering each of A’s turns in its own request keeps her voice right every time. But her replies then lose the conversation’s context and sound flat. So that isn’t a usable fix for us.

Hello @xXHomelanderXx ,

Thank you for sharing the detailed comparison tests and audio samples. We have reproduced this behavior and are looking into it.

Thank you Sai! I made a deeper analysis on my end on over 7000 calls from Oct 9th to November 10th. The issue seemed to have appeared on Nov 5th around 15:00 UTC. I hope this helps, please keep me posted on your finding.

Here is my report:

This is a regression that started on November 5, 2026, around 15:00 UTC, and it is tied to the clock inside the take (it starts at about 41 s)

We measured every two-speaker chapter we rendered with gemini-3.8-flash-lite-tts in the last month: 2,045 requests, 8,335 turns where speaker B hands over to speaker A. Same request code the whole time (unchanged since October 30), conversational mode, one request per chapter, 60 to 150 s of audio each.

Method: pitch (autocorrelation f0, 20 ms frames, median per second) inside each of speaker A’s turns. Speaker A is Kore (median 160 Hz in her own register). A second counts as “low” under 110 Hz, which is the male speaker’s register. A turn is flagged when 4 or more of its seconds are low. Control: speaker A’s first turn of a request, 2 of 1,873 flagged (0.1%).

1. It started on a specific day

Rendered Hand-overs B to A A’s turn in B’s voice
Oct 9 to Nov 5, 14:59 UTC 5,831 17 (0.3%)
of which Nov 4 and Nov 5 until 14:59 UTC 175 0
Nov 5, 15:00 UTC onward 2,504 314 (12.5%)

Last clean render: Nov 5, 14:44 UTC. First bad one: Nov 5, 15:03 UTC. Every day since then is between 10% and 15%.

2. It depends on the position in the audio, not on the text

Share of speaker A’s voiced seconds that are in speaker B’s register, by time into the response audio (requests rendered since Nov 5, 764 chapters):

Seconds into the audio Since Nov 5 Before Nov 5
0 to 21 1.2% 1.2%
21 to 42 3.3% 1.9%
42 to 63 14.3% 1.8%
63 to 84 4.7% 1.7%
84 to 105 11.7% 1.2%
105 to 126 9.2% 1.7%
126 to 147 11.9% 2.0%

The rise is a step: 3% at 34 s, 6% at 38 s, 14% at 42 s, 16% until about 56 s, back to 3 or 4% by 68 s, up again from about 86 s. In one request out of three, speaker A has 3 or more seconds in the wrong voice between 42 s and 63 s (235 of 708; before Nov 5 it was 4 of 988).

The first 40 seconds of a request are as clean as before. So it looks like something in how the model carries the speaker identity past about 41 s of generated audio (roughly 1,300 audio tokens), and again about every 42 s after that.

3. What does not matter

Speaker B’s voice (Charon 12.2%, Enceladus 12.9%) and inline reaction tags in the turn (12.1% with, 13.0% without). It happens after a question (9.3%) and after a statement (14.2%), and with openers of every length (8% to 16%). The words are always right. Only the voice is wrong.

4. Possibly the same change: speech_config.mode is now rejected

Our requests send "mode": "conversational" in speech_config, as the speech generation guide described until early November. That parameter now returns 400, “Unknown parameter ‘mode’ at ‘generation_config.speech_config’”, on both gemini-3.8-flash-lite-tts and gemini-3.8-flash-tts (checked 2026-11-11, lower and upper case). Our client retries without it, so every render since the rejection began is a plain two-speaker request. This is the thread about the removal: Interactions API: speech_config.mode "conversational" (documented) now rejected with 400 for gemini-3.8-flash-tts. We cannot tell from our side whether the rejection reached our project on November 5 or earlier, but the wrong voices appear in requests without the mode, and we never saw them while the mode was accepted.

5. Workaround that holds so far

Keeping each request under about 38 s of audio: 4 of 4 renders clean, against 2 of 2 single-request renders of the same two chapters with the wrong voice at 41 to 63 s (2026-11-11).

Repro body is in the first post (remove the mode line, the API now refuses it). A request that produces more than 45 s of audio is needed to see it.

Questions: Was there a model or serving update to the 3.8 TTS models on November 5? Is conversational mode coming back, under this name or another? Is there a pinned version id we can use to get the earlier behaviour back?