11from pydantic import BaseModel
22
33from app .domain .enums import Gender , Quality
4- from app .schemas .voice import Controls , Voice
5-
6-
7- class ControlsOverride (BaseModel ):
8- """Partial per-voice override of a provider's default Controls. Unset (None)
9- fields fall back to the provider default — see merge_controls()."""
10-
11- pitch : bool | None = None
12- speed : bool | None = None
13- ssml : bool | None = None
14- boundary : bool | None = None
4+ from app .schemas .voice import Voice
155
166
177class VoiceEntry (BaseModel ):
@@ -25,7 +15,6 @@ class VoiceEntry(BaseModel):
2515 otherLanguages : list [str ] = []
2616 gender : Gender | None = None
2717 quality : Quality | None = None
28- controls : ControlsOverride | None = None
2918
3019
3120def _lang_prefix (lang : str ) -> str :
@@ -84,23 +73,11 @@ def plan_install(
8473 return default_lang , installed
8574
8675
87- def merge_controls (default : Controls , override : ControlsOverride | None ) -> Controls :
88- if override is None :
89- return default
90- return Controls (
91- pitch = override .pitch if override .pitch is not None else default .pitch ,
92- speed = override .speed if override .speed is not None else default .speed ,
93- ssml = override .ssml if override .ssml is not None else default .ssml ,
94- boundary = override .boundary if override .boundary is not None else default .boundary ,
95- )
96-
97-
9876def build_voice (
9977 entry : VoiceEntry ,
10078 provider_id : str ,
10179 installed_other : frozenset [str ],
10280 default_quality : Quality | None ,
103- default_controls : Controls ,
10481) -> Voice :
10582 """The merge point where 'possible' (voices.json) becomes 'installed'
10683 (served via /voices): otherLanguages is installed_other, not entry.otherLanguages."""
@@ -113,5 +90,4 @@ def build_voice(
11390 otherLanguages = sorted (installed_other ),
11491 gender = entry .gender ,
11592 quality = entry .quality or default_quality ,
116- controls = merge_controls (default_controls , entry .controls ),
11793 )
0 commit comments