feat(voice): add admin-configurable elevenlabs tts

This commit is contained in:
Yera All
2026-04-11 16:46:43 +05:00
parent 9d0b76deca
commit fc976804e4
14 changed files with 1342 additions and 32 deletions
+9 -3
View File
@@ -17,7 +17,7 @@ from sqlalchemy.exc import OperationalError
from services.ai_voice_runtime_service.audiosocket import normalize_media_uuid
from services.ai_voice_runtime_service.media_runtime import AudioSocketMediaRuntime, MediaRegistration
from services.ai_voice_runtime_service.providers.asr import build_asr_provider
from services.ai_voice_runtime_service.providers.tts import build_tts_provider
from services.ai_voice_runtime_service.runtime_tts_provider import RuntimeConfiguredTTSProvider
from services.shared.core import Role, new_id, utc_now_iso
from services.shared.db import get_session
from services.shared.models import (
@@ -249,7 +249,11 @@ def _default_voice_greeting(language: str | None, *, agent_profile: str = "voice
_ASR_PROVIDER = build_asr_provider(_asr_provider_name())
_TTS_PROVIDER = build_tts_provider(_tts_provider_name())
_TTS_PROVIDER = RuntimeConfiguredTTSProvider(default_provider_name=_tts_provider_name())
def _current_tts_provider_name() -> str:
return _TTS_PROVIDER.current_provider_name()
def _load_voice_session(session, session_id: str) -> VoiceAISessionRow:
@@ -1185,6 +1189,7 @@ def create_voice_ai_session(
voice_session.language if voice_session is not None else None,
)
payload_metadata = payload.metadata if isinstance(payload.metadata, dict) else {}
effective_tts_provider_name = _current_tts_provider_name()
is_voice_start = (
str(payload.agent_profile or "").strip() == "voice_start"
or str(payload_metadata.get("stage") or "").strip() == "voice_start"
@@ -1201,7 +1206,7 @@ def create_voice_ai_session(
agent_profile=payload.agent_profile,
language=language,
asr_provider=_ASR_PROVIDER.name,
tts_provider=_TTS_PROVIDER.name,
tts_provider=effective_tts_provider_name,
status="greeting",
handoff_reason=None,
handoff_target_queue_id=payload.handoff_queue_id or payload.queue_id,
@@ -1229,6 +1234,7 @@ def create_voice_ai_session(
voice_session.queue_id = payload.queue_id
voice_session.agent_profile = payload.agent_profile
voice_session.language = language
voice_session.tts_provider = effective_tts_provider_name
voice_session.status = "greeting"
voice_session.handoff_reason = None
voice_session.handoff_target_queue_id = payload.handoff_queue_id or voice_session.handoff_target_queue_id or payload.queue_id