Merge pull request #4151 from ajmeraharsh/fix/livekit-clear-audio-queue-on-interruption
fix(livekit): clear AudioSource buffer on interruption
This commit is contained in:
1
changelog/4151.fixed.md
Normal file
1
changelog/4151.fixed.md
Normal file
@@ -0,0 +1 @@
|
|||||||
|
- Fixed `LiveKitOutputTransport` not clearing the `rtc.AudioSource` internal buffer on interruption, causing the bot to continue speaking for several seconds after being interrupted.
|
||||||
@@ -27,7 +27,9 @@ from pipecat.frames.frames import (
|
|||||||
CancelFrame,
|
CancelFrame,
|
||||||
ClientConnectedFrame,
|
ClientConnectedFrame,
|
||||||
EndFrame,
|
EndFrame,
|
||||||
|
Frame,
|
||||||
ImageRawFrame,
|
ImageRawFrame,
|
||||||
|
InterruptionFrame,
|
||||||
OutputAudioRawFrame,
|
OutputAudioRawFrame,
|
||||||
OutputDTMFFrame,
|
OutputDTMFFrame,
|
||||||
OutputDTMFUrgentFrame,
|
OutputDTMFUrgentFrame,
|
||||||
@@ -880,6 +882,21 @@ class LiveKitOutputTransport(BaseOutputTransport):
|
|||||||
await super().cancel(frame)
|
await super().cancel(frame)
|
||||||
await self._client.disconnect()
|
await self._client.disconnect()
|
||||||
|
|
||||||
|
async def process_frame(self, frame: Frame, direction: FrameDirection):
|
||||||
|
"""Process frames, clearing the LiveKit AudioSource buffer on interruption.
|
||||||
|
|
||||||
|
When an InterruptionFrame arrives, any audio already submitted to the
|
||||||
|
LiveKit AudioSource (but not yet played out) is cleared immediately so
|
||||||
|
the bot stops speaking without delay.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
frame: The frame to process.
|
||||||
|
direction: The direction of frame flow in the pipeline.
|
||||||
|
"""
|
||||||
|
await super().process_frame(frame, direction)
|
||||||
|
if isinstance(frame, InterruptionFrame) and self._client._audio_source is not None:
|
||||||
|
self._client._audio_source.clear_queue()
|
||||||
|
|
||||||
async def setup(self, setup: FrameProcessorSetup):
|
async def setup(self, setup: FrameProcessorSetup):
|
||||||
"""Setup the output transport with shared client setup.
|
"""Setup the output transport with shared client setup.
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user