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.
