[全双工打断]:完成常驻打断控制器,包含播放取消、推理取消和低延迟验收
This commit is contained in:
@@ -5,6 +5,7 @@ import unittest
|
||||
from pathlib import Path
|
||||
|
||||
from owner_voice_pet.agent_memory import FakeMemoryManager, MemoryRecordInput, SQLiteMemoryManager
|
||||
from owner_voice_pet.config import AppConfig
|
||||
from owner_voice_pet.full_duplex_audio import FakeWebRtcAudioProcessingProvider, RenderReferenceRingBuffer
|
||||
from owner_voice_pet.full_duplex_control import CancellationGraph, FullDuplexStateMachine
|
||||
from owner_voice_pet.full_duplex_response import (
|
||||
@@ -15,6 +16,7 @@ from owner_voice_pet.full_duplex_response import (
|
||||
SentenceSegmenter,
|
||||
)
|
||||
from owner_voice_pet.full_duplex_speech import FakeStreamingSttProvider, FakeVadProvider, InterruptionDetector, TranscriptEvent
|
||||
from owner_voice_pet.full_duplex_runtime import FullDuplexAgentRuntime
|
||||
from owner_voice_pet.full_duplex_testing import (
|
||||
PerformanceMetricRecorder,
|
||||
build_fake_full_duplex_audio_fixture,
|
||||
@@ -70,6 +72,27 @@ class FullDuplexIntegrationTests(unittest.TestCase):
|
||||
self.assertTrue(graph.root.cancelled)
|
||||
self.assertEqual(machine.current_state, PipelineState.LISTENING)
|
||||
|
||||
def test_full_duplex_runtime_interrupt_fixture_uses_audio_hub_and_buffers_user_audio(self) -> None:
|
||||
runtime = FullDuplexAgentRuntime(
|
||||
config=AppConfig(
|
||||
audio_apm_provider="fake",
|
||||
audio_apm_required=False,
|
||||
barge_in_min_speech_ms=200,
|
||||
)
|
||||
)
|
||||
fixture = build_fake_full_duplex_audio_fixture()[1:3]
|
||||
|
||||
summary = runtime.run_interrupt_fixture(fixture, initial_state=PipelineState.SPEAKING)
|
||||
|
||||
self.assertTrue(summary.interrupted)
|
||||
self.assertTrue(runtime.cancellation_graph.root.cancelled)
|
||||
self.assertEqual(runtime.state_machine.current_state, PipelineState.LISTENING)
|
||||
self.assertIsNotNone(runtime.interrupt_controller)
|
||||
self.assertEqual(
|
||||
[item.frame_id for item in runtime.interrupt_controller.buffered_user_frames],
|
||||
[2, 3],
|
||||
)
|
||||
|
||||
def test_streaming_stt_llm_tts_playback_order(self) -> None:
|
||||
stt = FakeStreamingSttProvider(
|
||||
scripted_events=[
|
||||
|
||||
Reference in New Issue
Block a user