Description of the bug:
Hi all,
I'm seeing a consistent issue where prebuiltVoiceConfig.voiceName configured for a Live API session is never actually applied to the output audio - the session always uses the same fixed voice regardless of what's configured, tested across Kore/Leda/Aoede/Zephyr/Fenrir.
Setup: ephemeral AuthToken (authTokens.create) → BidiGenerateContentConstrained WebSocket, model gemini-3.1-flash-live-preview.
What I've verified:
- Server-side logging confirms the correct voiceId reaches our authTokens.create call every time (e.g. "Leda"), so the value being sent is correct.
- Tried baking speechConfig into bidiGenerateContentSetup with an empty field_mask (the documented "fully locks the session, client setup message ignored" approach) - voice still wrong every time.
- Tried a non-empty field_mask naming every field except speechConfig, while still including speechConfig in the object - rejected with 400 "BidiGenerateContentSetup contains fields that are not specified in field_mask".
- Tried omitting speechConfig entirely from the token and sending voiceConfig only via the client's own WebSocket setup message instead - connects fine, but voice is still the same fixed default, not what was configured.
systemInstruction set the same way (baked into the token) IS being honored correctly - it's specifically speechConfig/voiceConfig that seems to be ignored.
Is this a known limitation of ephemeral tokens + prebuilt voice selection on this model? Anyone found a working combination?
Thanks!
Actual vs expected behavior:
No response
Any other information you'd like to share?
No response
Description of the bug:
Hi all,
I'm seeing a consistent issue where
prebuiltVoiceConfig.voiceNameconfigured for a Live API session is never actually applied to the output audio - the session always uses the same fixed voice regardless of what's configured, tested across Kore/Leda/Aoede/Zephyr/Fenrir.Setup: ephemeral AuthToken (authTokens.create) → BidiGenerateContentConstrained WebSocket, model
gemini-3.1-flash-live-preview.What I've verified:
systemInstruction set the same way (baked into the token) IS being honored correctly - it's specifically speechConfig/voiceConfig that seems to be ignored.
Is this a known limitation of ephemeral tokens + prebuilt voice selection on this model? Anyone found a working combination?
Thanks!
Actual vs expected behavior:
No response
Any other information you'd like to share?
No response