test(voice): wait on sidecar runtime events

This commit is contained in:
Yera All
2026-04-12 02:31:51 +05:00
parent adc7d4babb
commit e581d48c44
+15 -7
View File
@@ -99,7 +99,6 @@ def test_media_runtime_streams_greeting_and_turn():
language="ru",
media_uuid=media_uuid,
)
runtime = AudioSocketMediaRuntime(
enabled=True,
host="127.0.0.1",
@@ -1233,6 +1232,9 @@ def test_media_runtime_voice_v2_uses_streaming_sidecar_for_partial_and_final_asr
registrations: dict[str, MediaRegistration] = {}
reply_starts: list[tuple[str, str | None, float]] = []
turns: list[str] = []
turn_ready = threading.Event()
finalize_ready = threading.Event()
replies_ready = threading.Event()
delivered: list[tuple[str, bool]] = []
class _ExplodingBatchASRProvider(ASRProvider):
@@ -1275,6 +1277,7 @@ def test_media_runtime_voice_v2_uses_streaming_sidecar_for_partial_and_final_asr
def finalize(self, stream_id: str) -> ASRTranscription:
del stream_id
self.events.append(("finalize", time.monotonic()))
finalize_ready.set()
time.sleep(0.2)
return ASRTranscription(text="мне нужен график работы", language="ru", confidence=0.84)
@@ -1302,6 +1305,12 @@ def test_media_runtime_voice_v2_uses_streaming_sidecar_for_partial_and_final_asr
)
streaming_provider = _FakeStreamingASRProvider()
def _mark_reply_started(session_id, text, is_greeting, phase):
del session_id, is_greeting
reply_starts.append((text, phase, time.monotonic()))
if len(reply_starts) >= 2:
replies_ready.set()
runtime = AudioSocketMediaRuntime(
enabled=True,
host="127.0.0.1",
@@ -1321,11 +1330,12 @@ def test_media_runtime_voice_v2_uses_streaming_sidecar_for_partial_and_final_asr
touch_media_frame=lambda session_id: None,
set_state=lambda session_id, state, handoff_reason, metadata: None,
get_pending_greeting=lambda session_id: None,
mark_reply_started=lambda session_id, text, is_greeting, phase: reply_starts.append((text, phase, time.monotonic())),
mark_reply_started=_mark_reply_started,
mark_reply_delivered=lambda session_id, text, is_greeting: delivered.append((text, is_greeting)),
plan_reply=lambda session_id, text, metadata, kind: None,
process_turn=lambda session_id, transcript_text, language, barge_in, metadata: (
turns.append(transcript_text)
or turn_ready.set()
or VoiceAITurnDecisionOut(
language=language or "ru",
intent="clarification",
@@ -1361,11 +1371,9 @@ def test_media_runtime_voice_v2_uses_streaming_sidecar_for_partial_and_final_asr
writer.write(encode_audio_packet(silence_frame))
await writer.drain()
deadline = time.time() + 2.5
while time.time() < deadline:
if len(reply_starts) >= 2 and turns:
break
await asyncio.sleep(0.05)
assert await asyncio.to_thread(finalize_ready.wait, 10.0)
assert await asyncio.to_thread(turn_ready.wait, 10.0)
assert await asyncio.to_thread(replies_ready.wait, 10.0)
writer.close()
await writer.wait_closed()