test(voice): wait on sidecar runtime events
This commit is contained in:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user