Implement UserStartedSpeakingFrame handling in voice pipeline
- Added support for UserStartedSpeakingFrame to enhance user interaction tracking. - Updated the pipeline to reset idle prompt count when a user starts speaking, improving responsiveness during conversations. - Integrated new event handlers for better management of user turn events and upstream frame processing.
This commit is contained in:
@@ -10,6 +10,7 @@ from pipecat.frames.frames import (
|
|||||||
LLMRunFrame,
|
LLMRunFrame,
|
||||||
OutputTransportMessageUrgentFrame,
|
OutputTransportMessageUrgentFrame,
|
||||||
TTSSpeakFrame,
|
TTSSpeakFrame,
|
||||||
|
UserStartedSpeakingFrame,
|
||||||
)
|
)
|
||||||
from pipecat.pipeline.pipeline import Pipeline
|
from pipecat.pipeline.pipeline import Pipeline
|
||||||
from pipecat.pipeline.runner import PipelineRunner
|
from pipecat.pipeline.runner import PipelineRunner
|
||||||
@@ -168,6 +169,7 @@ async def run_pipeline_with_serializer(
|
|||||||
),
|
),
|
||||||
idle_timeout_secs=config.session.inactivity_timeout_sec,
|
idle_timeout_secs=config.session.inactivity_timeout_sec,
|
||||||
)
|
)
|
||||||
|
task.set_reached_upstream_filter((UserStartedSpeakingFrame,))
|
||||||
idle_prompt_count = 0
|
idle_prompt_count = 0
|
||||||
|
|
||||||
@transport.event_handler("on_client_connected")
|
@transport.event_handler("on_client_connected")
|
||||||
@@ -199,6 +201,11 @@ async def run_pipeline_with_serializer(
|
|||||||
logger.info(f"{client_label} websocket session timed out")
|
logger.info(f"{client_label} websocket session timed out")
|
||||||
await task.cancel()
|
await task.cancel()
|
||||||
|
|
||||||
|
@task.event_handler("on_frame_reached_upstream")
|
||||||
|
async def on_frame_reached_upstream(_task, _frame: UserStartedSpeakingFrame):
|
||||||
|
nonlocal idle_prompt_count
|
||||||
|
idle_prompt_count = 0
|
||||||
|
|
||||||
@user_aggregator.event_handler("on_user_turn_started")
|
@user_aggregator.event_handler("on_user_turn_started")
|
||||||
async def on_user_turn_started(_aggregator, _strategy):
|
async def on_user_turn_started(_aggregator, _strategy):
|
||||||
nonlocal idle_prompt_count
|
nonlocal idle_prompt_count
|
||||||
|
|||||||
Reference in New Issue
Block a user