feat(voice): start replies from stable streaming partials

This commit is contained in:
Yera All
2026-04-19 00:13:58 +05:00
parent 770ba4e925
commit 9cd553bf92
8 changed files with 748 additions and 53 deletions
@@ -36,7 +36,7 @@ class _StubTTSProvider(TTSProvider):
def test_media_runtime_voice_v2_uses_streaming_sidecar_for_partial_and_final_asr_stable():
reply_starts: list[tuple[str, str | None, float]] = []
turns: list[str] = []
turns: list[tuple[str, str]] = []
class _BatchASRProvider(ASRProvider):
name = "batch-asr"
@@ -131,7 +131,7 @@ def test_media_runtime_voice_v2_uses_streaming_sidecar_for_partial_and_final_asr
plan_reply=lambda session_id, text, metadata, kind: None,
record_latency=lambda session_id, metric, latency_ms: None,
process_turn=lambda session_id, transcript_text, language, barge_in, metadata: (
turns.append(transcript_text)
turns.append((str((metadata or {}).get("reply_phase") or "final"), transcript_text))
or VoiceAITurnDecisionOut(
language=language or "ru",
intent="schedule",
@@ -191,7 +191,7 @@ def test_media_runtime_voice_v2_uses_streaming_sidecar_for_partial_and_final_asr
phases = [phase for _, phase, _ in reply_starts]
finalize_started_at = next(ts for name, ts in streaming_provider.events if name == "finalize")
assert turns == ["need work schedule"]
assert [text for phase, text in turns if phase == "final"] == ["need work schedule"]
assert "open" in [name for name, _ in streaming_provider.events]
assert "close" in [name for name, _ in streaming_provider.events]
assert phases[:2] == ["ack", "main"]