Fix bilingual initial greeting playback
This commit is contained in:
+35
-15
@@ -1840,30 +1840,50 @@ class CallSession:
|
||||
) -> None:
|
||||
first_audio_seen = False
|
||||
started_monotonic = time.perf_counter()
|
||||
cached_greeting = (
|
||||
self._filler_audio.pick("initial_greeting", allow_fallback=False)
|
||||
if self._filler_audio is not None
|
||||
else None
|
||||
)
|
||||
if cached_greeting:
|
||||
await self._play_cached_initial_greeting(
|
||||
epoch=epoch,
|
||||
greeting_text=greeting_text,
|
||||
pcm_audio=cached_greeting,
|
||||
started_monotonic=started_monotonic,
|
||||
)
|
||||
return
|
||||
try:
|
||||
audio_chunk_count = 0
|
||||
audio_byte_count = 0
|
||||
for segment_text, language_code in greeting_segments:
|
||||
for segment_index, (segment_text, language_code) in enumerate(greeting_segments, start=1):
|
||||
cached_segment = (
|
||||
self._filler_audio.pick(
|
||||
f"initial_greeting_{segment_index}_{language_code or 'default'}",
|
||||
allow_fallback=False,
|
||||
)
|
||||
if self._filler_audio is not None
|
||||
else None
|
||||
)
|
||||
if cached_segment:
|
||||
self._ensure_generation(epoch)
|
||||
audio_chunk_count += 1
|
||||
audio_byte_count += len(cached_segment)
|
||||
if not first_audio_seen:
|
||||
first_audio_seen = True
|
||||
self._log_latency(
|
||||
"initial_greeting_cached_ttfa",
|
||||
started_monotonic,
|
||||
epoch=epoch,
|
||||
message="session start -> cached initial greeting first audio",
|
||||
)
|
||||
self._set_state(SessionState.ASSISTANT_SPEAKING, reason="cached initial greeting started")
|
||||
LOGGER.info(
|
||||
"realtime session %s initial greeting cached segment: epoch=%s index=%s language=%s bytes=%s",
|
||||
self.session_id,
|
||||
epoch,
|
||||
segment_index,
|
||||
language_code,
|
||||
len(cached_segment),
|
||||
)
|
||||
await self.transport.send_audio(cached_segment)
|
||||
continue
|
||||
|
||||
async def one_shot_text_stream() -> AsyncGenerator[str, None]:
|
||||
yield segment_text
|
||||
|
||||
LOGGER.info(
|
||||
"realtime session %s initial greeting segment start: epoch=%s language=%s chars=%s text=%r",
|
||||
"realtime session %s initial greeting segment start: epoch=%s index=%s language=%s chars=%s text=%r",
|
||||
self.session_id,
|
||||
epoch,
|
||||
segment_index,
|
||||
language_code,
|
||||
len(segment_text),
|
||||
_preview_text(segment_text),
|
||||
|
||||
Reference in New Issue
Block a user