[真实全双工运行时]:完成run-agent-live可打断语音闭环,包含持续监听、软件回声抑制和播放取消验证
This commit is contained in:
@@ -261,6 +261,40 @@ def silence_frames(start_id: int, start_ms: int, count: int) -> list[AudioFrame]
|
||||
|
||||
|
||||
class LiveRuntimeTests(unittest.TestCase):
|
||||
def test_agent_runtime_listens_without_wake_word(self) -> None:
|
||||
frames = segment_frames(1, 20, partials=["直接提问", "直接提问"])
|
||||
transport = MemoryAudioTransport(frames, flush_clears_input=False)
|
||||
stt = QueueSttProvider(["直接提问"])
|
||||
llm = QueueLlmProvider([["这是全双工回答。"]])
|
||||
reporter = RecordingReporter()
|
||||
runtime = VoiceAssistantPipeline(
|
||||
config=AppConfig(
|
||||
assistant_mode="full_duplex_agent",
|
||||
llm_api_key="secret",
|
||||
speech_provider="cloud",
|
||||
wake_ack_text="",
|
||||
),
|
||||
transport=transport,
|
||||
wakeword=KeywordWakeWordProvider(),
|
||||
vad_recorder=VadRecorder(EnergyVadProvider(), min_duration_ms=40, end_silence_ms=40),
|
||||
stt=stt,
|
||||
realtime_stt=MetadataSttProvider(),
|
||||
llm=llm,
|
||||
tts=SineTtsProvider(),
|
||||
context=ConversationContext(),
|
||||
reporter=reporter,
|
||||
event_bus=PipelineEventBus(),
|
||||
)
|
||||
|
||||
summary = runtime.run_agent(once=True)
|
||||
|
||||
self.assertEqual(summary.completed_turns, 1)
|
||||
self.assertEqual(stt.calls[0].metadata["end_reason"], "silence")
|
||||
self.assertEqual(reporter.transcripts, ["直接提问"])
|
||||
self.assertIn("监听中:请直接说话", reporter.statuses)
|
||||
self.assertNotIn("唤醒命中", reporter.statuses)
|
||||
self.assertIn("恢复监听:可直接说话", reporter.statuses)
|
||||
|
||||
def test_repeated_runtime_runs_two_turns_and_returns_to_standby(self) -> None:
|
||||
runtime, stt, llm, transport, reporter = make_runtime(["第一问", "第二问"])
|
||||
self.assertIsInstance(runtime, VoiceAssistantPipeline)
|
||||
|
||||
Reference in New Issue
Block a user