feat: add voice selector for Dograh model configs

This commit is contained in:
Abhishek Kumar 2026-06-23 18:33:04 +05:30
parent 40e34994fd
commit 0956157029
10 changed files with 694 additions and 86 deletions

View file

@ -388,9 +388,18 @@ class VoiceInfo(BaseModel):
preview_url: Optional[str] = None
class VoiceFacets(BaseModel):
"""Distinct selector values across a provider's full voice catalog."""
genders: List[str] = []
accents: List[str] = []
languages: List[str] = []
class VoicesResponse(BaseModel):
provider: str
voices: List[VoiceInfo]
facets: Optional[VoiceFacets] = None
@router.get("/configurations/voices/{provider}")
@ -398,6 +407,9 @@ async def get_voices(
provider: TTSProvider,
model: Optional[str] = None,
language: Optional[str] = None,
q: Optional[str] = None,
gender: Optional[str] = None,
accent: Optional[str] = None,
user: UserModel = Depends(get_user),
) -> VoicesResponse:
"""Get available voices for a TTS provider."""
@ -406,12 +418,16 @@ async def get_voices(
provider=provider,
model=model,
language=language,
q=q,
gender=gender,
accent=accent,
organization_id=user.selected_organization_id,
created_by=user.provider_id,
)
return VoicesResponse(
provider=result.get("provider", provider),
voices=[VoiceInfo(**voice) for voice in result.get("voices", [])],
facets=result.get("facets"),
)
except Exception as e:
logger.error(f"Failed to fetch voices for {provider}: {e}")

View file

@ -720,6 +720,9 @@ class MPSServiceKeyClient:
provider: str,
model: Optional[str] = None,
language: Optional[str] = None,
q: Optional[str] = None,
gender: Optional[str] = None,
accent: Optional[str] = None,
organization_id: Optional[int] = None,
created_by: Optional[str] = None,
) -> dict:
@ -745,6 +748,12 @@ class MPSServiceKeyClient:
params["model"] = model
if language:
params["language"] = language
if q:
params["q"] = q
if gender:
params["gender"] = gender
if accent:
params["accent"] = accent
response = await client.get(
f"{self.base_url}/api/v1/voice-proxy/{provider}/voices",
headers=self._get_headers(organization_id, created_by),