diff --git a/src/owner_voice_pet/assistant_pipeline.py b/src/owner_voice_pet/assistant_pipeline.py index efa5367..87d3122 100644 --- a/src/owner_voice_pet/assistant_pipeline.py +++ b/src/owner_voice_pet/assistant_pipeline.py @@ -542,8 +542,10 @@ class TurnController: result = self.vad_recorder.provider.analyze(frame) if result.is_speech: speech_ms += int(frame.metadata.get("duration_ms", 20)) - if realtime_session is not None and self._emit_realtime_transcript(realtime_session, frame, turn_id): - partial_seen = True + if realtime_session is not None: + transcript = realtime_session.accept_frame(frame) + if transcript is not None and is_valid_transcript_text(transcript.normalized_text): + partial_seen = True else: speech_ms = 0 detected = speech_ms >= self.config.barge_in_min_speech_ms and partial_seen diff --git a/tests/test_live_runtime.py b/tests/test_live_runtime.py index 0adda7f..1e4a336 100644 --- a/tests/test_live_runtime.py +++ b/tests/test_live_runtime.py @@ -541,10 +541,12 @@ class LiveRuntimeTests(unittest.TestCase): summary = runtime.run(max_turns=2) event_types = [event.type for event in runtime.event_bus.events] context_texts = [message.content for message in runtime.context.messages()] + playback_window = event_types[event_types.index(TTS_STARTED) : event_types.index(PLAYBACK_INTERRUPTED)] self.assertEqual(summary.completed_turns, 2) self.assertIn(BARGE_IN_DETECTED, event_types) self.assertIn(PLAYBACK_INTERRUPTED, event_types) + self.assertNotIn(TRANSCRIPT_PARTIAL, playback_window) self.assertIn("已播出一句。", context_texts) self.assertNotIn("这是一段需要被打断的很长很长很长很长很长很长很长很长的回复内容,没有播放完。", context_texts) self.assertEqual(reporter.transcripts[-1], "打断问题")