Fix bilingual initial greeting playback
This commit is contained in:
@@ -97,25 +97,32 @@ def _single_initial_greeting_enabled() -> bool:
|
||||
return raw in {"1", "true", "yes", "on"}
|
||||
|
||||
|
||||
def _env_text_or_default(name: str, default: str) -> str:
|
||||
value = os.getenv(name)
|
||||
if value is None or not str(value).strip():
|
||||
return default
|
||||
return str(value).strip()
|
||||
|
||||
|
||||
def _initial_greeting_segments() -> tuple[tuple[str, str | None], ...]:
|
||||
raw = str(os.getenv("REALTIME_VOICE_INITIAL_GREETING_TEXT", "")).strip()
|
||||
if raw and _single_initial_greeting_enabled():
|
||||
language = str(os.getenv("REALTIME_VOICE_INITIAL_GREETING_LANGUAGE_CODE", "")).strip() or None
|
||||
return ((raw, language),)
|
||||
|
||||
ru_text = (
|
||||
str(os.getenv("REALTIME_VOICE_INITIAL_GREETING_RU_TEXT") or "").strip()
|
||||
or (
|
||||
ru_text = _env_text_or_default(
|
||||
"REALTIME_VOICE_INITIAL_GREETING_RU_TEXT",
|
||||
(
|
||||
"Здравствуйте! Меня зовут Айнур, я эй-ай-ассистент компании ДиджиОпс. "
|
||||
"Как я могу к вам обращаться и на каком языке вам удобнее продолжить: на русском или на казахском?"
|
||||
)
|
||||
),
|
||||
)
|
||||
kk_text = (
|
||||
str(os.getenv("REALTIME_VOICE_INITIAL_GREETING_KK_TEXT") or "").strip()
|
||||
or (
|
||||
kk_text = _env_text_or_default(
|
||||
"REALTIME_VOICE_INITIAL_GREETING_KK_TEXT",
|
||||
(
|
||||
"Сәлеметсіз бе! Менің атым Айнұр, мен ДиджиОпс компаниясының эй-ай ассистентімін. "
|
||||
"Сізге қалай жүгінсем болады және қай тілде сөйлескен ыңғайлы: орысша ма, қазақша ма?"
|
||||
)
|
||||
),
|
||||
)
|
||||
segments: list[tuple[str, str | None]] = []
|
||||
if ru_text:
|
||||
@@ -213,12 +220,32 @@ class RealtimeVoiceService:
|
||||
len(greeting_text),
|
||||
greeting_text[:120],
|
||||
)
|
||||
clip = await self._filler_audio.synthesize_segments(self._tts, greeting_segments)
|
||||
if not clip:
|
||||
LOGGER.warning("initial greeting audio preload produced empty clip")
|
||||
total_bytes = 0
|
||||
for index, (segment_text, language_code) in enumerate(greeting_segments, start=1):
|
||||
segment_clip = await self._filler_audio.synthesize_segments(
|
||||
self._tts,
|
||||
((segment_text, language_code),),
|
||||
)
|
||||
if not segment_clip:
|
||||
LOGGER.warning(
|
||||
"initial greeting segment preload produced empty clip: index=%s language=%s",
|
||||
index,
|
||||
language_code,
|
||||
)
|
||||
continue
|
||||
clip_key = f"initial_greeting_{index}_{language_code or 'default'}"
|
||||
self._filler_audio.add_clip(clip_key, segment_clip)
|
||||
total_bytes += len(segment_clip)
|
||||
LOGGER.info(
|
||||
"initial greeting segment preload done: key=%s language=%s bytes=%s",
|
||||
clip_key,
|
||||
language_code,
|
||||
len(segment_clip),
|
||||
)
|
||||
if total_bytes <= 0:
|
||||
LOGGER.warning("initial greeting audio preload produced no segment clips")
|
||||
return
|
||||
self._filler_audio.add_clip("initial_greeting", clip)
|
||||
LOGGER.info("initial greeting audio preload done: bytes=%s", len(clip))
|
||||
LOGGER.info("initial greeting audio preload done: bytes=%s", total_bytes)
|
||||
except Exception:
|
||||
LOGGER.exception("failed to preload initial greeting audio")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user