Expand realtime v3 voice support (#52363)

## Why

Realtime v3 voice validation used the v1 voice list, limiting the available voice choices.

## What changed

- Add a dedicated `v3` voice list containing the v1 voices and 16 additional voices, and use it to validate v3 requests.
- Expose `v3` in `RealtimeVoicesList`, defaulting to an empty list when omitted during deserialization.
- Update the configuration and app-server schemas, generated TypeScript and Python types, and voice-list test expectations.

GitOrigin-RevId: 7fc8060fe01d840f28eb92c3dfe49c5878c3c258
This commit is contained in:
Jackson Moody
2026-10-09 02:04:35 +00:00
committed by copyberry
parent 0ada5d8806
commit 03b761dca9
13 changed files with 168 additions and 7 deletions
@@ -3680,22 +3680,38 @@ class RealtimeVoice(Enum):
alloy = "alloy"
arbor = "arbor"
ash = "ash"
aube = "aube"
ballad = "ballad"
breeze = "breeze"
bubbie = "bubbie"
cedar = "cedar"
coral = "coral"
cove = "cove"
echo = "echo"
ember = "ember"
haetsal = "haetsal"
hanul = "hanul"
himari = "himari"
juniper = "juniper"
leher = "leher"
maple = "maple"
marin = "marin"
miko = "miko"
neer = "neer"
porto = "porto"
rindo = "rindo"
rio = "rio"
rivage = "rivage"
sage = "sage"
selva = "selva"
shimmer = "shimmer"
sol = "sol"
sonna = "sonna"
spruce = "spruce"
tinta = "tinta"
vale = "vale"
verse = "verse"
viola = "viola"
class RealtimeVoicesList(BaseModel):
@@ -3706,6 +3722,7 @@ class RealtimeVoicesList(BaseModel):
default_v2: Annotated[RealtimeVoice, Field(alias="defaultV2")]
v1: list[RealtimeVoice]
v2: list[RealtimeVoice]
v3: list[RealtimeVoice] | None = []
class ReasoningEffort(str, Enum):