diff --git a/changelog/3045.added.md b/changelog/3045.added.md index beadd0e51..0dda476c7 100644 --- a/changelog/3045.added.md +++ b/changelog/3045.added.md @@ -1,10 +1,10 @@ -- Introducing user and bot turn start strategies. Turn start strategies indicate when user and bot turns begin. In conversational agents, these are often referred to as start/stop speaking or turn-taking plans or policies. +- Introducing user turn strategies. User turn strategies indicate when the user turn starts or stops. In conversational agents, these are often referred to as start/stop speaking or turn-taking plans or policies. User turn start strategies indicate when the user starts speaking (e.g. using VAD events or when a user says one or more words). - Bot turn start strategies indicate when the bot should start speaking (e.g. using an end-of-turn detection model or by observing incoming transcriptions). + User turn stop strategies indicate when the user stops speaking (e.g. using an end-of-turn detection model or by observing incoming transcriptions). - A list of strategies can be specified for both the user and the bot; strategies are evaluated in order until one evaluates to true. + A list of strategies can be specified for both strategies; strategies are evaluated in order until one evaluates to true. Available user turn start strategies: - VADUserTurnStartStrategy @@ -12,25 +12,25 @@ - MinWordsUserTurnStartStrategy - ExternalUserTurnStartStrategy - Available bot turn start strategies: - - TranscriptionBotTurnStartStrategy - - TurnAnalyzerBotTurnStartStrategy - - ExternalBotTurnStartStrategy + Available user turn stop strategies: + - TranscriptionUserTurnStopStrategy + - TurnAnalyzerUserTurnStopStrategy + - ExternalUserTurnStopStrategy The default strategies are: - - user: [VADUserTurnStartStrategy, TranscriptionUserTurnStartStrategy] - - bot: [TranscriptionBotTurnStartStrategy] + - start: [VADUserTurnStartStrategy, TranscriptionUserTurnStartStrategy] + - stop: [TranscriptionUserTurnStopStrategy] - Turn start strategies are configured when setting up `LLMContextAggregatorPair`. For example: + Turn strategies are configured when setting up `LLMContextAggregatorPair`. For example: ```python context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[ - TurnAnalyzerBotTurnStartStrategy( + user_turn_strategies=UserTurnStrategies( + stop=[ + TurnAnalyzerUserTurnStopStrategy( turn_analyzer=LocalSmartTurnAnalyzerV3(params=SmartTurnParams()) ) ], @@ -39,4 +39,4 @@ ) ``` - In order to use the turn start strategies you should update to the new universal `LLMContext` and `LLMContextAggregatorPair`. + In order to use the user turn strategies you must update to the new universal `LLMContext` and `LLMContextAggregatorPair`. diff --git a/changelog/3045.deprecated.md b/changelog/3045.deprecated.md index 277c42db0..471126f58 100644 --- a/changelog/3045.deprecated.md +++ b/changelog/3045.deprecated.md @@ -1 +1 @@ -- `pipecat.audio.interruptions.MinWordsInterruptionStrategy` is deprecated. Use `pipecat.turns.user.MinWordsUserTurnStartStrategy` with `LLMUserAggregator`'s new `turn_start_strategies` parameter instead. +- `pipecat.audio.interruptions.MinWordsInterruptionStrategy` is deprecated. Use `pipecat.turns.user_start.MinWordsUserTurnStartStrategy` with `LLMUserAggregator`'s new `turn_start_strategies` parameter instead. diff --git a/changelog/3291.added.md b/changelog/3291.added.md index da7a0d47c..dacfd4f12 100644 --- a/changelog/3291.added.md +++ b/changelog/3291.added.md @@ -1,4 +1,4 @@ - `LLMUserAggregator` now exposes the following events: - `on_user_turn_started`: triggered when a user turn starts - - `on_bot_turn_started`: triggered when a user turn ends and a bot turn starts - - `on_user_turn_end_timeout`: triggered when a user turn does not stop and times out + - `on_user_turn_stopped`: triggered when a user turn ends + - `on_user_turn_stop_timeout`: triggered when a user turn does not stop and times out diff --git a/changelog/3297.deprecated.md b/changelog/3297.deprecated.md index f3745ba1a..79da04814 100644 --- a/changelog/3297.deprecated.md +++ b/changelog/3297.deprecated.md @@ -4,8 +4,8 @@ context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - user=[TranscriptionUserTurnStartStrategy(enable_interruptions=False)], + user_turn_strategies=UserTurnStrategies( + start=[TranscriptionUserTurnStartStrategy(enable_interruptions=False)], ), ), ) diff --git a/examples/foundational/04-transports-small-webrtc.py b/examples/foundational/04-transports-small-webrtc.py index 37cef45ca..f74e73170 100644 --- a/examples/foundational/04-transports-small-webrtc.py +++ b/examples/foundational/04-transports-small-webrtc.py @@ -35,8 +35,8 @@ from pipecat.services.openai.llm import OpenAILLMService from pipecat.transports.base_transport import TransportParams from pipecat.transports.smallwebrtc.connection import IceServer, SmallWebRTCConnection from pipecat.transports.smallwebrtc.transport import SmallWebRTCTransport -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -88,8 +88,8 @@ async def run_example(webrtc_connection: SmallWebRTCConnection): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/04a-transports-daily.py b/examples/foundational/04a-transports-daily.py index 99c33e8ac..0a05e5142 100644 --- a/examples/foundational/04a-transports-daily.py +++ b/examples/foundational/04a-transports-daily.py @@ -28,8 +28,8 @@ from pipecat.runner.daily import configure from pipecat.services.cartesia.tts import CartesiaTTSService from pipecat.services.openai.llm import OpenAILLMService from pipecat.transports.daily.transport import DailyParams, DailyTransport -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -71,8 +71,10 @@ async def main(): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[ + TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3()) + ] ), ), ) diff --git a/examples/foundational/04b-transports-livekit.py b/examples/foundational/04b-transports-livekit.py index 5f4aa92d2..ce08889be 100644 --- a/examples/foundational/04b-transports-livekit.py +++ b/examples/foundational/04b-transports-livekit.py @@ -35,8 +35,8 @@ from pipecat.services.cartesia.tts import CartesiaTTSService from pipecat.services.deepgram.stt import DeepgramSTTService from pipecat.services.openai.llm import OpenAILLMService from pipecat.transports.livekit.transport import LiveKitParams, LiveKitTransport -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -81,8 +81,8 @@ async def main(): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/06-listen-and-respond.py b/examples/foundational/06-listen-and-respond.py index 1bee0ed54..adc6ccd60 100644 --- a/examples/foundational/06-listen-and-respond.py +++ b/examples/foundational/06-listen-and-respond.py @@ -36,8 +36,8 @@ from pipecat.services.openai.llm import OpenAILLMService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -109,8 +109,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/06a-image-sync.py b/examples/foundational/06a-image-sync.py index 1a67d8d52..d5b4419bd 100644 --- a/examples/foundational/06a-image-sync.py +++ b/examples/foundational/06a-image-sync.py @@ -36,8 +36,8 @@ from pipecat.services.deepgram.stt import DeepgramSTTService from pipecat.services.openai.llm import OpenAILLMService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -123,8 +123,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/07-interruptible-cartesia-http.py b/examples/foundational/07-interruptible-cartesia-http.py index 193b56b4b..8b212d208 100644 --- a/examples/foundational/07-interruptible-cartesia-http.py +++ b/examples/foundational/07-interruptible-cartesia-http.py @@ -29,8 +29,8 @@ from pipecat.services.openai.llm import OpenAILLMService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -80,8 +80,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/07-interruptible.py b/examples/foundational/07-interruptible.py index 957a59c4b..12ba2d0a5 100644 --- a/examples/foundational/07-interruptible.py +++ b/examples/foundational/07-interruptible.py @@ -29,8 +29,8 @@ from pipecat.services.openai.llm import OpenAILLMService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -79,8 +79,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/07a-interruptible-speechmatics-vad.py b/examples/foundational/07a-interruptible-speechmatics-vad.py index ce88ffe92..b9d13ee32 100644 --- a/examples/foundational/07a-interruptible-speechmatics-vad.py +++ b/examples/foundational/07a-interruptible-speechmatics-vad.py @@ -29,7 +29,7 @@ from pipecat.transcriptions.language import Language from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.turn_start_strategies import ExternalTurnStartStrategies +from pipecat.turns.user_turn_strategies import ExternalUserTurnStrategies load_dotenv(override=True) @@ -133,9 +133,7 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context = LLMContext(messages) context_aggregator = LLMContextAggregatorPair( context, - user_params=LLMUserAggregatorParams( - turn_start_strategies=ExternalTurnStartStrategies() - ), + user_params=LLMUserAggregatorParams(user_turn_strategies=ExternalUserTurnStrategies()), ) pipeline = Pipeline( diff --git a/examples/foundational/07a-interruptible-speechmatics.py b/examples/foundational/07a-interruptible-speechmatics.py index ab5cccd46..184a768a0 100644 --- a/examples/foundational/07a-interruptible-speechmatics.py +++ b/examples/foundational/07a-interruptible-speechmatics.py @@ -32,8 +32,8 @@ from pipecat.transcriptions.language import Language from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -120,8 +120,10 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[ + TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3()) + ] ), ), ) diff --git a/examples/foundational/07aa-interruptible-soniox.py b/examples/foundational/07aa-interruptible-soniox.py index a623ea169..83103ca60 100644 --- a/examples/foundational/07aa-interruptible-soniox.py +++ b/examples/foundational/07aa-interruptible-soniox.py @@ -30,8 +30,8 @@ from pipecat.services.soniox.stt import SonioxSTTService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -79,8 +79,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/07ab-interruptible-inworld-http.py b/examples/foundational/07ab-interruptible-inworld-http.py index e1dab99fb..5276fabeb 100644 --- a/examples/foundational/07ab-interruptible-inworld-http.py +++ b/examples/foundational/07ab-interruptible-inworld-http.py @@ -33,8 +33,8 @@ from pipecat.transports.base_output import BaseOutputTransport from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -85,8 +85,10 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[ + TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3()) + ] ), ), ) diff --git a/examples/foundational/07ab-interruptible-inworld.py b/examples/foundational/07ab-interruptible-inworld.py index 21e7f6993..bbf6b76c4 100644 --- a/examples/foundational/07ab-interruptible-inworld.py +++ b/examples/foundational/07ab-interruptible-inworld.py @@ -32,8 +32,8 @@ from pipecat.transports.base_output import BaseOutputTransport from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -82,8 +82,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/07ac-interruptible-asyncai-http.py b/examples/foundational/07ac-interruptible-asyncai-http.py index 9838e5bad..55ee898ad 100644 --- a/examples/foundational/07ac-interruptible-asyncai-http.py +++ b/examples/foundational/07ac-interruptible-asyncai-http.py @@ -31,8 +31,8 @@ from pipecat.services.openai.llm import OpenAILLMService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -85,8 +85,10 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[ + TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3()) + ] ), ), ) diff --git a/examples/foundational/07ac-interruptible-asyncai.py b/examples/foundational/07ac-interruptible-asyncai.py index 275834240..f09ceedf4 100644 --- a/examples/foundational/07ac-interruptible-asyncai.py +++ b/examples/foundational/07ac-interruptible-asyncai.py @@ -30,8 +30,8 @@ from pipecat.services.openai.llm import OpenAILLMService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -81,8 +81,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/07ad-interruptible-aicoustics.py b/examples/foundational/07ad-interruptible-aicoustics.py index 4bf3a0199..e70a785f0 100644 --- a/examples/foundational/07ad-interruptible-aicoustics.py +++ b/examples/foundational/07ad-interruptible-aicoustics.py @@ -32,8 +32,8 @@ from pipecat.services.openai.llm import OpenAILLMService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -108,8 +108,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/07ae-interruptible-hume.py b/examples/foundational/07ae-interruptible-hume.py index 4f6bcf31c..1c4e6dc1d 100644 --- a/examples/foundational/07ae-interruptible-hume.py +++ b/examples/foundational/07ae-interruptible-hume.py @@ -32,8 +32,8 @@ from pipecat.transports.base_output import BaseOutputTransport from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -84,8 +84,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/07af-interruptible-gradium.py b/examples/foundational/07af-interruptible-gradium.py index 488502a2e..9fd7d6e01 100644 --- a/examples/foundational/07af-interruptible-gradium.py +++ b/examples/foundational/07af-interruptible-gradium.py @@ -29,8 +29,8 @@ from pipecat.services.openai.llm import OpenAILLMService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -79,8 +79,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/07b-interruptible-langchain.py b/examples/foundational/07b-interruptible-langchain.py index b6905632e..63cd1dcf0 100644 --- a/examples/foundational/07b-interruptible-langchain.py +++ b/examples/foundational/07b-interruptible-langchain.py @@ -35,8 +35,8 @@ from pipecat.services.deepgram.stt import DeepgramSTTService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -106,8 +106,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/07c-interruptible-deepgram-flux.py b/examples/foundational/07c-interruptible-deepgram-flux.py index e0175b335..1dcbe90ab 100644 --- a/examples/foundational/07c-interruptible-deepgram-flux.py +++ b/examples/foundational/07c-interruptible-deepgram-flux.py @@ -27,7 +27,7 @@ from pipecat.services.openai.llm import OpenAILLMService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.turn_start_strategies import ExternalTurnStartStrategies +from pipecat.turns.user_turn_strategies import ExternalUserTurnStrategies load_dotenv(override=True) @@ -73,7 +73,7 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context = LLMContext(messages) context_aggregator = LLMContextAggregatorPair( context, - user_params=LLMUserAggregatorParams(turn_start_strategies=ExternalTurnStartStrategies()), + user_params=LLMUserAggregatorParams(user_turn_strategies=ExternalUserTurnStrategies()), ) pipeline = Pipeline( diff --git a/examples/foundational/07c-interruptible-deepgram-http.py b/examples/foundational/07c-interruptible-deepgram-http.py index 7a1f06c07..1a454fbfc 100644 --- a/examples/foundational/07c-interruptible-deepgram-http.py +++ b/examples/foundational/07c-interruptible-deepgram-http.py @@ -31,8 +31,8 @@ from pipecat.services.openai.llm import OpenAILLMService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -84,8 +84,10 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[ + TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3()) + ] ), ), ) diff --git a/examples/foundational/07c-interruptible-deepgram-sagemaker.py b/examples/foundational/07c-interruptible-deepgram-sagemaker.py index 4978c1d5f..176930434 100644 --- a/examples/foundational/07c-interruptible-deepgram-sagemaker.py +++ b/examples/foundational/07c-interruptible-deepgram-sagemaker.py @@ -30,8 +30,8 @@ from pipecat.services.deepgram.tts import DeepgramTTSService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -89,8 +89,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/07c-interruptible-deepgram-vad.py b/examples/foundational/07c-interruptible-deepgram-vad.py index 9814fc01d..3e6277ac3 100644 --- a/examples/foundational/07c-interruptible-deepgram-vad.py +++ b/examples/foundational/07c-interruptible-deepgram-vad.py @@ -28,7 +28,7 @@ from pipecat.services.openai.llm import OpenAILLMService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.turn_start_strategies import ExternalTurnStartStrategies +from pipecat.turns.user_turn_strategies import ExternalUserTurnStrategies load_dotenv(override=True) @@ -74,7 +74,7 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context = LLMContext(messages) context_aggregator = LLMContextAggregatorPair( context, - user_params=LLMUserAggregatorParams(turn_start_strategies=ExternalTurnStartStrategies()), + user_params=LLMUserAggregatorParams(user_turn_strategies=ExternalUserTurnStrategies()), ) pipeline = Pipeline( diff --git a/examples/foundational/07c-interruptible-deepgram.py b/examples/foundational/07c-interruptible-deepgram.py index c9d5bb3ce..7041e7e9e 100644 --- a/examples/foundational/07c-interruptible-deepgram.py +++ b/examples/foundational/07c-interruptible-deepgram.py @@ -30,8 +30,8 @@ from pipecat.services.openai.llm import OpenAILLMService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -78,8 +78,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/07d-interruptible-elevenlabs-http.py b/examples/foundational/07d-interruptible-elevenlabs-http.py index 12898d8ce..d977e187a 100644 --- a/examples/foundational/07d-interruptible-elevenlabs-http.py +++ b/examples/foundational/07d-interruptible-elevenlabs-http.py @@ -31,8 +31,8 @@ from pipecat.services.openai.llm import OpenAILLMService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -88,8 +88,10 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[ + TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3()) + ] ), ), ) diff --git a/examples/foundational/07d-interruptible-elevenlabs.py b/examples/foundational/07d-interruptible-elevenlabs.py index 9d75346fe..3f41c8b45 100644 --- a/examples/foundational/07d-interruptible-elevenlabs.py +++ b/examples/foundational/07d-interruptible-elevenlabs.py @@ -30,8 +30,8 @@ from pipecat.services.openai.llm import OpenAILLMService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -81,8 +81,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/07e-interruptible-playht-http.py b/examples/foundational/07e-interruptible-playht-http.py index f59cc1a1c..2d5fb51e6 100644 --- a/examples/foundational/07e-interruptible-playht-http.py +++ b/examples/foundational/07e-interruptible-playht-http.py @@ -30,8 +30,8 @@ from pipecat.services.playht.tts import PlayHTHttpTTSService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -81,8 +81,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/07e-interruptible-playht.py b/examples/foundational/07e-interruptible-playht.py index d0ba39034..bac8f4345 100644 --- a/examples/foundational/07e-interruptible-playht.py +++ b/examples/foundational/07e-interruptible-playht.py @@ -31,8 +31,8 @@ from pipecat.transcriptions.language import Language from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -83,8 +83,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/07f-interruptible-azure-http.py b/examples/foundational/07f-interruptible-azure-http.py index 404976b67..98f0de8d1 100644 --- a/examples/foundational/07f-interruptible-azure-http.py +++ b/examples/foundational/07f-interruptible-azure-http.py @@ -30,8 +30,8 @@ from pipecat.services.azure.tts import AzureHttpTTSService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -87,8 +87,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/07f-interruptible-azure.py b/examples/foundational/07f-interruptible-azure.py index 434e4e97b..32e680632 100644 --- a/examples/foundational/07f-interruptible-azure.py +++ b/examples/foundational/07f-interruptible-azure.py @@ -30,8 +30,8 @@ from pipecat.services.azure.tts import AzureTTSService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -87,8 +87,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/07g-interruptible-openai.py b/examples/foundational/07g-interruptible-openai.py index 41677018d..cc595f270 100644 --- a/examples/foundational/07g-interruptible-openai.py +++ b/examples/foundational/07g-interruptible-openai.py @@ -30,8 +30,8 @@ from pipecat.services.openai.tts import OpenAITTSService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -81,8 +81,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/07h-interruptible-openpipe.py b/examples/foundational/07h-interruptible-openpipe.py index 6f8feab37..a057de0b9 100644 --- a/examples/foundational/07h-interruptible-openpipe.py +++ b/examples/foundational/07h-interruptible-openpipe.py @@ -31,8 +31,8 @@ from pipecat.services.openpipe.llm import OpenPipeLLMService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -86,8 +86,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/07i-interruptible-xtts.py b/examples/foundational/07i-interruptible-xtts.py index b4fa19930..fffea45f9 100644 --- a/examples/foundational/07i-interruptible-xtts.py +++ b/examples/foundational/07i-interruptible-xtts.py @@ -31,8 +31,8 @@ from pipecat.services.xtts.tts import XTTSService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -84,8 +84,10 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[ + TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3()) + ] ), ), ) diff --git a/examples/foundational/07j-interruptible-gladia.py b/examples/foundational/07j-interruptible-gladia.py index 75c05dcef..6bb19f1a7 100644 --- a/examples/foundational/07j-interruptible-gladia.py +++ b/examples/foundational/07j-interruptible-gladia.py @@ -32,8 +32,8 @@ from pipecat.transcriptions.language import Language from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -90,8 +90,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/07k-interruptible-lmnt.py b/examples/foundational/07k-interruptible-lmnt.py index 0eab168ab..03cbbdaf8 100644 --- a/examples/foundational/07k-interruptible-lmnt.py +++ b/examples/foundational/07k-interruptible-lmnt.py @@ -31,8 +31,8 @@ from pipecat.services.openai.llm import OpenAILLMService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -78,8 +78,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/07l-interruptible-groq.py b/examples/foundational/07l-interruptible-groq.py index 43b5689bf..1545c6c58 100644 --- a/examples/foundational/07l-interruptible-groq.py +++ b/examples/foundational/07l-interruptible-groq.py @@ -30,8 +30,8 @@ from pipecat.services.groq.tts import GroqTTSService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -79,8 +79,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/07m-interruptible-aws-strands.py b/examples/foundational/07m-interruptible-aws-strands.py index 34aba8083..48f5c2d09 100644 --- a/examples/foundational/07m-interruptible-aws-strands.py +++ b/examples/foundational/07m-interruptible-aws-strands.py @@ -27,8 +27,8 @@ from pipecat.services.aws.tts import AWSPollyTTSService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies # Strands agent setup try: @@ -123,8 +123,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/07m-interruptible-aws.py b/examples/foundational/07m-interruptible-aws.py index b6987183f..c8fdd789f 100644 --- a/examples/foundational/07m-interruptible-aws.py +++ b/examples/foundational/07m-interruptible-aws.py @@ -28,8 +28,8 @@ from pipecat.services.aws.tts import AWSPollyTTSService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -83,8 +83,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/07n-interruptible-gemini-image.py b/examples/foundational/07n-interruptible-gemini-image.py index 5b765f406..925bea878 100644 --- a/examples/foundational/07n-interruptible-gemini-image.py +++ b/examples/foundational/07n-interruptible-gemini-image.py @@ -46,8 +46,8 @@ from pipecat.transcriptions.language import Language from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -105,8 +105,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/07n-interruptible-gemini.py b/examples/foundational/07n-interruptible-gemini.py index 500cc98da..3a66db973 100644 --- a/examples/foundational/07n-interruptible-gemini.py +++ b/examples/foundational/07n-interruptible-gemini.py @@ -31,8 +31,8 @@ from pipecat.transcriptions.language import Language from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -110,8 +110,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/07n-interruptible-google-http.py b/examples/foundational/07n-interruptible-google-http.py index 52165bd8b..21f42dbbc 100644 --- a/examples/foundational/07n-interruptible-google-http.py +++ b/examples/foundational/07n-interruptible-google-http.py @@ -31,8 +31,8 @@ from pipecat.transcriptions.language import Language from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -93,8 +93,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/07n-interruptible-google.py b/examples/foundational/07n-interruptible-google.py index e5e8451d1..ba132d5b5 100644 --- a/examples/foundational/07n-interruptible-google.py +++ b/examples/foundational/07n-interruptible-google.py @@ -31,8 +31,8 @@ from pipecat.transcriptions.language import Language from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -93,8 +93,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/07o-interruptible-assemblyai.py b/examples/foundational/07o-interruptible-assemblyai.py index 4b63003fc..4bb949566 100644 --- a/examples/foundational/07o-interruptible-assemblyai.py +++ b/examples/foundational/07o-interruptible-assemblyai.py @@ -30,8 +30,8 @@ from pipecat.services.openai.llm import OpenAILLMService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -83,8 +83,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/07p-interruptible-krisp-viva.py b/examples/foundational/07p-interruptible-krisp-viva.py index 6916073e9..b5e8a0726 100644 --- a/examples/foundational/07p-interruptible-krisp-viva.py +++ b/examples/foundational/07p-interruptible-krisp-viva.py @@ -31,8 +31,8 @@ from pipecat.services.openai.llm import OpenAILLMService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -81,8 +81,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/07p-interruptible-krisp.py b/examples/foundational/07p-interruptible-krisp.py index f2a113a26..08adaf95f 100644 --- a/examples/foundational/07p-interruptible-krisp.py +++ b/examples/foundational/07p-interruptible-krisp.py @@ -31,8 +31,8 @@ from pipecat.services.openai.llm import OpenAILLMService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -81,8 +81,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/07q-interruptible-rime-http.py b/examples/foundational/07q-interruptible-rime-http.py index 22cdf22fb..fdf33db78 100644 --- a/examples/foundational/07q-interruptible-rime-http.py +++ b/examples/foundational/07q-interruptible-rime-http.py @@ -31,8 +31,8 @@ from pipecat.services.rime.tts import RimeHttpTTSService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -86,8 +86,10 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[ + TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3()) + ] ), ), ) diff --git a/examples/foundational/07q-interruptible-rime.py b/examples/foundational/07q-interruptible-rime.py index 555788084..1aa1e7af3 100644 --- a/examples/foundational/07q-interruptible-rime.py +++ b/examples/foundational/07q-interruptible-rime.py @@ -30,8 +30,8 @@ from pipecat.services.rime.tts import RimeTTSService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -80,8 +80,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/07r-interruptible-nvidia.py b/examples/foundational/07r-interruptible-nvidia.py index 9d1942fa5..8718682cd 100644 --- a/examples/foundational/07r-interruptible-nvidia.py +++ b/examples/foundational/07r-interruptible-nvidia.py @@ -30,8 +30,8 @@ from pipecat.services.nvidia.tts import NvidiaTTSService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -79,8 +79,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/07s-interruptible-google-audio-in.py b/examples/foundational/07s-interruptible-google-audio-in.py index 3f245448e..9416c0685 100644 --- a/examples/foundational/07s-interruptible-google-audio-in.py +++ b/examples/foundational/07s-interruptible-google-audio-in.py @@ -44,8 +44,8 @@ from pipecat.transcriptions.language import Language from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -252,8 +252,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/07t-interruptible-fish.py b/examples/foundational/07t-interruptible-fish.py index 56fe1ae84..c0301140d 100644 --- a/examples/foundational/07t-interruptible-fish.py +++ b/examples/foundational/07t-interruptible-fish.py @@ -30,8 +30,8 @@ from pipecat.services.openai.llm import OpenAILLMService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -81,8 +81,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/07v-interruptible-neuphonic-http.py b/examples/foundational/07v-interruptible-neuphonic-http.py index 3ecdaac23..3ae663870 100644 --- a/examples/foundational/07v-interruptible-neuphonic-http.py +++ b/examples/foundational/07v-interruptible-neuphonic-http.py @@ -31,8 +31,8 @@ from pipecat.services.openai.llm import OpenAILLMService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -85,8 +85,10 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[ + TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3()) + ] ), ), ) diff --git a/examples/foundational/07v-interruptible-neuphonic.py b/examples/foundational/07v-interruptible-neuphonic.py index ab7c86a78..7d8050759 100644 --- a/examples/foundational/07v-interruptible-neuphonic.py +++ b/examples/foundational/07v-interruptible-neuphonic.py @@ -30,8 +30,8 @@ from pipecat.services.openai.llm import OpenAILLMService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -80,8 +80,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/07w-interruptible-fal.py b/examples/foundational/07w-interruptible-fal.py index aaa936593..33ac57854 100644 --- a/examples/foundational/07w-interruptible-fal.py +++ b/examples/foundational/07w-interruptible-fal.py @@ -30,8 +30,8 @@ from pipecat.services.openai.llm import OpenAILLMService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -83,8 +83,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/07x-interruptible-local.py b/examples/foundational/07x-interruptible-local.py index 7380d2be6..f1422094d 100644 --- a/examples/foundational/07x-interruptible-local.py +++ b/examples/foundational/07x-interruptible-local.py @@ -27,8 +27,8 @@ from pipecat.services.cartesia.tts import CartesiaTTSService from pipecat.services.deepgram.stt import DeepgramSTTService from pipecat.services.openai.llm import OpenAILLMService from pipecat.transports.local.audio import LocalAudioTransport, LocalAudioTransportParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -65,8 +65,8 @@ async def main(): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/07y-interruptible-minimax.py b/examples/foundational/07y-interruptible-minimax.py index 98108d327..8323254f7 100644 --- a/examples/foundational/07y-interruptible-minimax.py +++ b/examples/foundational/07y-interruptible-minimax.py @@ -32,8 +32,8 @@ from pipecat.transcriptions.language import Language from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -87,8 +87,10 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[ + TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3()) + ] ), ), ) diff --git a/examples/foundational/07z-interruptible-sarvam-http.py b/examples/foundational/07z-interruptible-sarvam-http.py index d219f5a45..faaf4253c 100644 --- a/examples/foundational/07z-interruptible-sarvam-http.py +++ b/examples/foundational/07z-interruptible-sarvam-http.py @@ -32,8 +32,8 @@ from pipecat.transcriptions.language import Language from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -89,8 +89,10 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[ + TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3()) + ] ), ), ) diff --git a/examples/foundational/07z-interruptible-sarvam.py b/examples/foundational/07z-interruptible-sarvam.py index 714663882..abd2c5bb4 100644 --- a/examples/foundational/07z-interruptible-sarvam.py +++ b/examples/foundational/07z-interruptible-sarvam.py @@ -29,8 +29,8 @@ from pipecat.services.sarvam.tts import SarvamTTSService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -83,8 +83,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/08-custom-frame-processor.py b/examples/foundational/08-custom-frame-processor.py index e115b664c..a7f8c8979 100644 --- a/examples/foundational/08-custom-frame-processor.py +++ b/examples/foundational/08-custom-frame-processor.py @@ -33,8 +33,8 @@ from pipecat.services.deepgram.stt import DeepgramSTTService from pipecat.services.openai.llm import OpenAILLMService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -118,8 +118,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/10-wake-phrase.py b/examples/foundational/10-wake-phrase.py index 84dc00bc9..f011c80cd 100644 --- a/examples/foundational/10-wake-phrase.py +++ b/examples/foundational/10-wake-phrase.py @@ -30,8 +30,8 @@ from pipecat.services.openai.llm import OpenAILLMService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -82,8 +82,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/11-sound-effects.py b/examples/foundational/11-sound-effects.py index e43fa1913..c51932628 100644 --- a/examples/foundational/11-sound-effects.py +++ b/examples/foundational/11-sound-effects.py @@ -38,8 +38,8 @@ from pipecat.services.openai.llm import OpenAILLMService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -130,8 +130,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/12-describe-image-openai.py b/examples/foundational/12-describe-image-openai.py index bf618a52f..1496bd29f 100644 --- a/examples/foundational/12-describe-image-openai.py +++ b/examples/foundational/12-describe-image-openai.py @@ -30,8 +30,8 @@ from pipecat.services.deepgram.stt import DeepgramSTTService from pipecat.services.openai.llm import OpenAILLMService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -76,8 +76,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/12a-describe-image-anthropic.py b/examples/foundational/12a-describe-image-anthropic.py index 03a2412c4..3c6e015d4 100644 --- a/examples/foundational/12a-describe-image-anthropic.py +++ b/examples/foundational/12a-describe-image-anthropic.py @@ -30,8 +30,8 @@ from pipecat.services.cartesia.tts import CartesiaTTSService from pipecat.services.deepgram.stt import DeepgramSTTService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -76,8 +76,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/12b-describe-image-aws.py b/examples/foundational/12b-describe-image-aws.py index 2651fdbf7..40faa59cf 100644 --- a/examples/foundational/12b-describe-image-aws.py +++ b/examples/foundational/12b-describe-image-aws.py @@ -30,8 +30,8 @@ from pipecat.services.cartesia.tts import CartesiaTTSService from pipecat.services.deepgram.stt import DeepgramSTTService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -83,8 +83,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/12c-describe-image-gemini-flash.py b/examples/foundational/12c-describe-image-gemini-flash.py index f34d79df7..3c8f7507e 100644 --- a/examples/foundational/12c-describe-image-gemini-flash.py +++ b/examples/foundational/12c-describe-image-gemini-flash.py @@ -30,8 +30,8 @@ from pipecat.services.deepgram.stt import DeepgramSTTService from pipecat.services.google.llm import GoogleLLMService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -76,8 +76,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/14-function-calling.py b/examples/foundational/14-function-calling.py index 4aa51595a..9bb659173 100644 --- a/examples/foundational/14-function-calling.py +++ b/examples/foundational/14-function-calling.py @@ -32,8 +32,8 @@ from pipecat.services.openai.llm import OpenAILLMService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -129,8 +129,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/14a-function-calling-anthropic.py b/examples/foundational/14a-function-calling-anthropic.py index b80ab5762..e9000375f 100644 --- a/examples/foundational/14a-function-calling-anthropic.py +++ b/examples/foundational/14a-function-calling-anthropic.py @@ -33,8 +33,8 @@ from pipecat.services.llm_service import FunctionCallParams from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -124,8 +124,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/14c-function-calling-together.py b/examples/foundational/14c-function-calling-together.py index 18fdd3b7b..36a3734c9 100644 --- a/examples/foundational/14c-function-calling-together.py +++ b/examples/foundational/14c-function-calling-together.py @@ -33,8 +33,8 @@ from pipecat.services.together.llm import TogetherLLMService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -115,8 +115,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/14d-function-calling-anthropic-video.py b/examples/foundational/14d-function-calling-anthropic-video.py index a6653ec66..926d9cfab 100644 --- a/examples/foundational/14d-function-calling-anthropic-video.py +++ b/examples/foundational/14d-function-calling-anthropic-video.py @@ -36,8 +36,8 @@ from pipecat.services.deepgram.stt import DeepgramSTTService from pipecat.services.llm_service import FunctionCallParams from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -129,8 +129,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/14d-function-calling-aws-video.py b/examples/foundational/14d-function-calling-aws-video.py index 453fdc2a8..53713d6cf 100644 --- a/examples/foundational/14d-function-calling-aws-video.py +++ b/examples/foundational/14d-function-calling-aws-video.py @@ -36,8 +36,8 @@ from pipecat.services.deepgram.stt import DeepgramSTTService from pipecat.services.llm_service import FunctionCallParams from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -136,8 +136,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/14d-function-calling-gemini-flash-video.py b/examples/foundational/14d-function-calling-gemini-flash-video.py index 8253b3a52..dfd677f7b 100644 --- a/examples/foundational/14d-function-calling-gemini-flash-video.py +++ b/examples/foundational/14d-function-calling-gemini-flash-video.py @@ -36,8 +36,8 @@ from pipecat.services.google.llm import GoogleLLMService from pipecat.services.llm_service import FunctionCallParams from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -129,8 +129,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/14d-function-calling-moondream-video.py b/examples/foundational/14d-function-calling-moondream-video.py index 78635893f..a373b7b67 100644 --- a/examples/foundational/14d-function-calling-moondream-video.py +++ b/examples/foundational/14d-function-calling-moondream-video.py @@ -45,8 +45,8 @@ from pipecat.services.moondream.vision import MoondreamService from pipecat.services.openai.llm import OpenAILLMService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -158,8 +158,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/14d-function-calling-openai-video.py b/examples/foundational/14d-function-calling-openai-video.py index 9ca8ca867..d2214a015 100644 --- a/examples/foundational/14d-function-calling-openai-video.py +++ b/examples/foundational/14d-function-calling-openai-video.py @@ -37,8 +37,8 @@ from pipecat.services.llm_service import FunctionCallParams from pipecat.services.openai.llm import OpenAILLMService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -129,8 +129,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/14e-function-calling-google.py b/examples/foundational/14e-function-calling-google.py index fbb2410f5..dc33b820e 100644 --- a/examples/foundational/14e-function-calling-google.py +++ b/examples/foundational/14e-function-calling-google.py @@ -37,8 +37,8 @@ from pipecat.services.google.llm import GoogleLLMService from pipecat.services.llm_service import FunctionCallParams from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -182,8 +182,8 @@ indicate you should use the get_image tool are: context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/14f-function-calling-groq.py b/examples/foundational/14f-function-calling-groq.py index 7609281cf..bb131fc39 100644 --- a/examples/foundational/14f-function-calling-groq.py +++ b/examples/foundational/14f-function-calling-groq.py @@ -33,8 +33,8 @@ from pipecat.services.llm_service import FunctionCallParams from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -112,8 +112,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/14g-function-calling-grok.py b/examples/foundational/14g-function-calling-grok.py index e3c2e3eb4..736f83c89 100644 --- a/examples/foundational/14g-function-calling-grok.py +++ b/examples/foundational/14g-function-calling-grok.py @@ -33,8 +33,8 @@ from pipecat.services.llm_service import FunctionCallParams from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -108,8 +108,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/14h-function-calling-azure.py b/examples/foundational/14h-function-calling-azure.py index fb508ebf7..aa8c19cd5 100644 --- a/examples/foundational/14h-function-calling-azure.py +++ b/examples/foundational/14h-function-calling-azure.py @@ -33,8 +33,8 @@ from pipecat.services.llm_service import FunctionCallParams from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -116,8 +116,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/14i-function-calling-fireworks.py b/examples/foundational/14i-function-calling-fireworks.py index 38e1e9202..158be3bb6 100644 --- a/examples/foundational/14i-function-calling-fireworks.py +++ b/examples/foundational/14i-function-calling-fireworks.py @@ -33,8 +33,8 @@ from pipecat.services.llm_service import FunctionCallParams from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -119,8 +119,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/14j-function-calling-nvidia.py b/examples/foundational/14j-function-calling-nvidia.py index 0fc81ea26..d08128d0f 100644 --- a/examples/foundational/14j-function-calling-nvidia.py +++ b/examples/foundational/14j-function-calling-nvidia.py @@ -33,8 +33,8 @@ from pipecat.services.nvidia.llm import NvidiaLLMService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -121,8 +121,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/14k-function-calling-cerebras.py b/examples/foundational/14k-function-calling-cerebras.py index b22b15c74..a9cc86914 100644 --- a/examples/foundational/14k-function-calling-cerebras.py +++ b/examples/foundational/14k-function-calling-cerebras.py @@ -33,8 +33,8 @@ from pipecat.services.llm_service import FunctionCallParams from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -122,8 +122,8 @@ Start by asking me for my location. Then, use 'get_weather_current' to give me a context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/14l-function-calling-deepseek.py b/examples/foundational/14l-function-calling-deepseek.py index f37616690..497af8609 100644 --- a/examples/foundational/14l-function-calling-deepseek.py +++ b/examples/foundational/14l-function-calling-deepseek.py @@ -33,8 +33,8 @@ from pipecat.services.llm_service import FunctionCallParams from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -122,8 +122,8 @@ Start by asking me for my location. Then, use 'get_weather_current' to give me a context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/14m-function-calling-openrouter.py b/examples/foundational/14m-function-calling-openrouter.py index cac9744e9..c4ac89b34 100644 --- a/examples/foundational/14m-function-calling-openrouter.py +++ b/examples/foundational/14m-function-calling-openrouter.py @@ -33,8 +33,8 @@ from pipecat.services.openrouter.llm import OpenRouterLLMService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -116,8 +116,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/14n-function-calling-perplexity.py b/examples/foundational/14n-function-calling-perplexity.py index 168e461cd..243dede1c 100644 --- a/examples/foundational/14n-function-calling-perplexity.py +++ b/examples/foundational/14n-function-calling-perplexity.py @@ -36,8 +36,8 @@ from pipecat.services.perplexity.llm import PerplexityLLMService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -86,8 +86,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/14p-function-calling-gemini-vertex-ai.py b/examples/foundational/14p-function-calling-gemini-vertex-ai.py index a3c41366c..6ca4e0282 100644 --- a/examples/foundational/14p-function-calling-gemini-vertex-ai.py +++ b/examples/foundational/14p-function-calling-gemini-vertex-ai.py @@ -33,8 +33,8 @@ from pipecat.services.llm_service import FunctionCallParams from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -117,8 +117,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/14q-function-calling-qwen.py b/examples/foundational/14q-function-calling-qwen.py index eaa6fa2f9..03e119081 100644 --- a/examples/foundational/14q-function-calling-qwen.py +++ b/examples/foundational/14q-function-calling-qwen.py @@ -33,8 +33,8 @@ from pipecat.services.qwen.llm import QwenLLMService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -114,8 +114,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/14r-function-calling-aws.py b/examples/foundational/14r-function-calling-aws.py index 1d61bb507..ec0ad92b5 100644 --- a/examples/foundational/14r-function-calling-aws.py +++ b/examples/foundational/14r-function-calling-aws.py @@ -31,8 +31,8 @@ from pipecat.services.llm_service import FunctionCallParams from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -129,8 +129,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/14s-function-calling-sambanova.py b/examples/foundational/14s-function-calling-sambanova.py index ea968487b..3c6b5653b 100644 --- a/examples/foundational/14s-function-calling-sambanova.py +++ b/examples/foundational/14s-function-calling-sambanova.py @@ -33,8 +33,8 @@ from pipecat.services.sambanova.stt import SambaNovaSTTService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -118,8 +118,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/14t-function-calling-direct.py b/examples/foundational/14t-function-calling-direct.py index 91535768a..6f682327c 100644 --- a/examples/foundational/14t-function-calling-direct.py +++ b/examples/foundational/14t-function-calling-direct.py @@ -32,8 +32,8 @@ from pipecat.services.openai.llm import OpenAILLMService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -115,8 +115,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/14u-function-calling-ollama.py b/examples/foundational/14u-function-calling-ollama.py index c1117ce72..fe2276d1f 100644 --- a/examples/foundational/14u-function-calling-ollama.py +++ b/examples/foundational/14u-function-calling-ollama.py @@ -33,8 +33,8 @@ from pipecat.services.ollama.llm import OLLamaLLMService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -130,8 +130,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/14v-function-calling-openai.py b/examples/foundational/14v-function-calling-openai.py index 8f312f5a0..ab1aab753 100644 --- a/examples/foundational/14v-function-calling-openai.py +++ b/examples/foundational/14v-function-calling-openai.py @@ -32,8 +32,8 @@ from pipecat.services.openai.tts import OpenAITTSService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -137,8 +137,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/14w-function-calling-mistral.py b/examples/foundational/14w-function-calling-mistral.py index d1714c96c..f2a295d84 100644 --- a/examples/foundational/14w-function-calling-mistral.py +++ b/examples/foundational/14w-function-calling-mistral.py @@ -32,8 +32,8 @@ from pipecat.services.mistral.llm import MistralLLMService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -125,8 +125,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/14x-function-calling-openpipe.py b/examples/foundational/14x-function-calling-openpipe.py index 118894d07..991694733 100644 --- a/examples/foundational/14x-function-calling-openpipe.py +++ b/examples/foundational/14x-function-calling-openpipe.py @@ -33,8 +33,8 @@ from pipecat.services.openpipe.llm import OpenPipeLLMService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -135,8 +135,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/15-switch-voices.py b/examples/foundational/15-switch-voices.py index 521af7f49..5ce4f5c79 100644 --- a/examples/foundational/15-switch-voices.py +++ b/examples/foundational/15-switch-voices.py @@ -35,8 +35,8 @@ from pipecat.services.openai.llm import OpenAILLMService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -147,8 +147,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/15a-switch-languages.py b/examples/foundational/15a-switch-languages.py index 7413978ef..138bd959c 100644 --- a/examples/foundational/15a-switch-languages.py +++ b/examples/foundational/15a-switch-languages.py @@ -36,8 +36,8 @@ from pipecat.services.openai.llm import OpenAILLMService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -137,8 +137,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/16-gpu-container-local-bot.py b/examples/foundational/16-gpu-container-local-bot.py index 68782c679..d27da7707 100644 --- a/examples/foundational/16-gpu-container-local-bot.py +++ b/examples/foundational/16-gpu-container-local-bot.py @@ -34,8 +34,8 @@ from pipecat.transports.daily.transport import ( DailyParams, ) from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -91,8 +91,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/17-detect-user-idle.py b/examples/foundational/17-detect-user-idle.py index b6026d977..7dbf17e19 100644 --- a/examples/foundational/17-detect-user-idle.py +++ b/examples/foundational/17-detect-user-idle.py @@ -31,8 +31,8 @@ from pipecat.services.openai.llm import OpenAILLMService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -81,8 +81,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/20a-persistent-context-openai.py b/examples/foundational/20a-persistent-context-openai.py index 2f135dc23..3380b37a0 100644 --- a/examples/foundational/20a-persistent-context-openai.py +++ b/examples/foundational/20a-persistent-context-openai.py @@ -35,8 +35,8 @@ from pipecat.services.openai.llm import OpenAILLMService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -204,8 +204,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/20c-persistent-context-anthropic.py b/examples/foundational/20c-persistent-context-anthropic.py index 217e0e2bf..97b85b847 100644 --- a/examples/foundational/20c-persistent-context-anthropic.py +++ b/examples/foundational/20c-persistent-context-anthropic.py @@ -35,8 +35,8 @@ from pipecat.services.llm_service import FunctionCallParams from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -215,8 +215,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/20d-persistent-context-gemini.py b/examples/foundational/20d-persistent-context-gemini.py index 40fa954ea..97e483ed3 100644 --- a/examples/foundational/20d-persistent-context-gemini.py +++ b/examples/foundational/20d-persistent-context-gemini.py @@ -38,8 +38,8 @@ from pipecat.services.google.llm import GoogleLLMService from pipecat.services.llm_service import FunctionCallParams from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -271,8 +271,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/21-tavus-transport.py b/examples/foundational/21-tavus-transport.py index 32294f82b..ba5994a69 100644 --- a/examples/foundational/21-tavus-transport.py +++ b/examples/foundational/21-tavus-transport.py @@ -28,8 +28,8 @@ from pipecat.services.cartesia.tts import CartesiaTTSService from pipecat.services.deepgram.stt import DeepgramSTTService from pipecat.services.google.llm import GoogleLLMService from pipecat.transports.tavus.transport import TavusParams, TavusTransport -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -72,8 +72,10 @@ async def main(): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[ + TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3()) + ] ), ), ) diff --git a/examples/foundational/21a-tavus-video-service.py b/examples/foundational/21a-tavus-video-service.py index 3baa4c247..65e2015da 100644 --- a/examples/foundational/21a-tavus-video-service.py +++ b/examples/foundational/21a-tavus-video-service.py @@ -31,8 +31,8 @@ from pipecat.services.google.llm import GoogleLLMService from pipecat.services.tavus.video import TavusVideoService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -90,8 +90,10 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[ + TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3()) + ] ), ), ) diff --git a/examples/foundational/22-natural-conversation.py b/examples/foundational/22-natural-conversation.py index 2a7651832..e7e2049d0 100644 --- a/examples/foundational/22-natural-conversation.py +++ b/examples/foundational/22-natural-conversation.py @@ -35,8 +35,8 @@ from pipecat.services.openai.llm import OpenAIContextAggregatorPair, OpenAILLMSe from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies from pipecat.utils.sync.event_notifier import EventNotifier load_dotenv(override=True) @@ -156,8 +156,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/22b-natural-conversation-proposal.py b/examples/foundational/22b-natural-conversation-proposal.py index ad46342b0..d6c681847 100644 --- a/examples/foundational/22b-natural-conversation-proposal.py +++ b/examples/foundational/22b-natural-conversation-proposal.py @@ -52,8 +52,8 @@ from pipecat.services.openai.llm import OpenAILLMService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies from pipecat.utils.sync.base_notifier import BaseNotifier from pipecat.utils.sync.event_notifier import EventNotifier from pipecat.utils.time import time_now_iso8601 @@ -341,8 +341,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/22c-natural-conversation-mixed-llms.py b/examples/foundational/22c-natural-conversation-mixed-llms.py index bda4b6c06..05364578c 100644 --- a/examples/foundational/22c-natural-conversation-mixed-llms.py +++ b/examples/foundational/22c-natural-conversation-mixed-llms.py @@ -53,8 +53,8 @@ from pipecat.services.openai.llm import OpenAILLMService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies from pipecat.utils.sync.base_notifier import BaseNotifier from pipecat.utils.sync.event_notifier import EventNotifier from pipecat.utils.time import time_now_iso8601 @@ -544,8 +544,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/22d-natural-conversation-gemini-audio.py b/examples/foundational/22d-natural-conversation-gemini-audio.py index 402eca9a1..7ed45027e 100644 --- a/examples/foundational/22d-natural-conversation-gemini-audio.py +++ b/examples/foundational/22d-natural-conversation-gemini-audio.py @@ -53,8 +53,8 @@ from pipecat.services.llm_service import LLMService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies from pipecat.utils.sync.base_notifier import BaseNotifier from pipecat.utils.sync.event_notifier import EventNotifier from pipecat.utils.time import time_now_iso8601 @@ -744,8 +744,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/23-bot-background-sound.py b/examples/foundational/23-bot-background-sound.py index 91aa87425..bf0fec5b3 100644 --- a/examples/foundational/23-bot-background-sound.py +++ b/examples/foundational/23-bot-background-sound.py @@ -32,8 +32,8 @@ from pipecat.services.openai.llm import OpenAILLMService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -99,8 +99,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/24-stt-mute-filter.py b/examples/foundational/24-stt-mute-filter.py index 578e9159f..bcbc82bce 100644 --- a/examples/foundational/24-stt-mute-filter.py +++ b/examples/foundational/24-stt-mute-filter.py @@ -35,8 +35,8 @@ from pipecat.services.openai.llm import OpenAILLMService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -120,8 +120,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/24-user-mute-strategy.py b/examples/foundational/24-user-mute-strategy.py index c833eccfb..8341a28af 100644 --- a/examples/foundational/24-user-mute-strategy.py +++ b/examples/foundational/24-user-mute-strategy.py @@ -34,12 +34,12 @@ from pipecat.services.openai.llm import OpenAILLMService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy from pipecat.turns.mute import ( FunctionCallUserMuteStrategy, MuteUntilFirstBotCompleteUserMuteStrategy, ) -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -113,8 +113,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), user_mute_strategies=[ MuteUntilFirstBotCompleteUserMuteStrategy(), diff --git a/examples/foundational/27-simli-layer.py b/examples/foundational/27-simli-layer.py index 2d5dadd7e..d019227e2 100644 --- a/examples/foundational/27-simli-layer.py +++ b/examples/foundational/27-simli-layer.py @@ -30,8 +30,8 @@ from pipecat.services.openai.llm import OpenAILLMService from pipecat.services.simli.video import SimliVideoService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -88,8 +88,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/28-transcription-processor.py b/examples/foundational/28-transcription-processor.py index 27a0bd504..6f9ffe0c0 100644 --- a/examples/foundational/28-transcription-processor.py +++ b/examples/foundational/28-transcription-processor.py @@ -31,8 +31,8 @@ from pipecat.services.openai.llm import OpenAILLMService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -143,8 +143,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/29-turn-tracking-observer.py b/examples/foundational/29-turn-tracking-observer.py index e5ea2bede..34a9fc4a4 100644 --- a/examples/foundational/29-turn-tracking-observer.py +++ b/examples/foundational/29-turn-tracking-observer.py @@ -31,8 +31,8 @@ from pipecat.services.openai.llm import OpenAILLMService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -81,8 +81,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/30-observer.py b/examples/foundational/30-observer.py index 91add43f8..9f61771df 100644 --- a/examples/foundational/30-observer.py +++ b/examples/foundational/30-observer.py @@ -44,8 +44,8 @@ from pipecat.transports.base_output import BaseOutputTransport from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -128,8 +128,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/32-gemini-grounding-metadata.py b/examples/foundational/32-gemini-grounding-metadata.py index 450626cc2..fb515b6af 100644 --- a/examples/foundational/32-gemini-grounding-metadata.py +++ b/examples/foundational/32-gemini-grounding-metadata.py @@ -34,8 +34,8 @@ from pipecat.services.llm_service import LLMService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies sys.path.append(str(Path(__file__).parent.parent)) @@ -128,8 +128,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/33-gemini-rag.py b/examples/foundational/33-gemini-rag.py index 1e6154ec1..62cf51331 100644 --- a/examples/foundational/33-gemini-rag.py +++ b/examples/foundational/33-gemini-rag.py @@ -78,8 +78,8 @@ from pipecat.services.llm_service import FunctionCallParams from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -229,8 +229,8 @@ Your response will be turned into speech so use only simple words and punctuatio context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/34-audio-recording.py b/examples/foundational/34-audio-recording.py index a536f1079..2dc333b52 100644 --- a/examples/foundational/34-audio-recording.py +++ b/examples/foundational/34-audio-recording.py @@ -71,8 +71,8 @@ from pipecat.services.openai.llm import OpenAILLMService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -139,8 +139,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/35-pattern-pair-voice-switching.py b/examples/foundational/35-pattern-pair-voice-switching.py index b90607c99..54feec321 100644 --- a/examples/foundational/35-pattern-pair-voice-switching.py +++ b/examples/foundational/35-pattern-pair-voice-switching.py @@ -64,8 +64,8 @@ from pipecat.services.openai.llm import OpenAILLMService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies from pipecat.utils.text.pattern_pair_aggregator import ( MatchAction, PatternMatch, @@ -204,8 +204,8 @@ Remember: Use narrator voice for EVERYTHING except the actual quoted dialogue."" context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/36-user-email-gathering.py b/examples/foundational/36-user-email-gathering.py index 13bb50c4a..9feab9d8f 100644 --- a/examples/foundational/36-user-email-gathering.py +++ b/examples/foundational/36-user-email-gathering.py @@ -33,8 +33,8 @@ from pipecat.services.openai.llm import OpenAILLMService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -120,8 +120,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/37-mem0.py b/examples/foundational/37-mem0.py index cdf13a915..be3af2fc3 100644 --- a/examples/foundational/37-mem0.py +++ b/examples/foundational/37-mem0.py @@ -69,8 +69,8 @@ from pipecat.services.openai.llm import OpenAILLMService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -250,8 +250,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/38-smart-turn-fal.py b/examples/foundational/38-smart-turn-fal.py index 559c69593..6e26c1b21 100644 --- a/examples/foundational/38-smart-turn-fal.py +++ b/examples/foundational/38-smart-turn-fal.py @@ -31,8 +31,8 @@ from pipecat.services.openai.llm import OpenAILLMService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -82,9 +82,9 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[ - TurnAnalyzerBotTurnStartStrategy( + user_turn_strategies=UserTurnStrategies( + stop=[ + TurnAnalyzerUserTurnStopStrategy( turn_analyzer=FalSmartTurnAnalyzer( api_key=os.getenv("FAL_SMART_TURN_API_KEY"), aiohttp_session=aiohttp.ClientSession(), diff --git a/examples/foundational/38a-smart-turn-local-coreml.py b/examples/foundational/38a-smart-turn-local-coreml.py index 0c8c15e45..2792b972c 100644 --- a/examples/foundational/38a-smart-turn-local-coreml.py +++ b/examples/foundational/38a-smart-turn-local-coreml.py @@ -30,8 +30,8 @@ from pipecat.services.openai.llm import OpenAILLMService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -97,9 +97,9 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[ - TurnAnalyzerBotTurnStartStrategy( + user_turn_strategies=UserTurnStrategies( + stop=[ + TurnAnalyzerUserTurnStopStrategy( turn_analyzer=LocalCoreMLSmartTurnAnalyzer( smart_turn_model_path=smart_turn_model_path ) diff --git a/examples/foundational/38b-smart-turn-local.py b/examples/foundational/38b-smart-turn-local.py index e98df0526..68732506f 100644 --- a/examples/foundational/38b-smart-turn-local.py +++ b/examples/foundational/38b-smart-turn-local.py @@ -31,8 +31,8 @@ from pipecat.services.openai.llm import OpenAILLMService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -81,8 +81,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/39-mcp-stdio.py b/examples/foundational/39-mcp-stdio.py index e3a2122be..603ac30cd 100644 --- a/examples/foundational/39-mcp-stdio.py +++ b/examples/foundational/39-mcp-stdio.py @@ -43,8 +43,8 @@ from pipecat.services.deepgram.stt import DeepgramSTTService from pipecat.services.mcp_service import MCPClient from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -195,8 +195,10 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[ + TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3()) + ] ), ), ) diff --git a/examples/foundational/39a-mcp-streamable-http.py b/examples/foundational/39a-mcp-streamable-http.py index 46332dcb2..923cfac26 100644 --- a/examples/foundational/39a-mcp-streamable-http.py +++ b/examples/foundational/39a-mcp-streamable-http.py @@ -32,8 +32,8 @@ from pipecat.services.mcp_service import MCPClient from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -108,8 +108,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/39b-mcp-streamable-http-gemini-live.py b/examples/foundational/39b-mcp-streamable-http-gemini-live.py index 18a632b12..5140147de 100644 --- a/examples/foundational/39b-mcp-streamable-http-gemini-live.py +++ b/examples/foundational/39b-mcp-streamable-http-gemini-live.py @@ -32,8 +32,8 @@ from pipecat.services.mcp_service import MCPClient from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -112,8 +112,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/39c-multiple-mcp.py b/examples/foundational/39c-multiple-mcp.py index d538d99f4..0f50a5ab4 100644 --- a/examples/foundational/39c-multiple-mcp.py +++ b/examples/foundational/39c-multiple-mcp.py @@ -46,8 +46,8 @@ from pipecat.services.deepgram.stt import DeepgramSTTService from pipecat.services.mcp_service import MCPClient from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -196,8 +196,10 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[ + TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3()) + ] ), ), ) diff --git a/examples/foundational/42-interruption-config.py b/examples/foundational/42-interruption-config.py index 7ebfd168f..530ba3d43 100644 --- a/examples/foundational/42-interruption-config.py +++ b/examples/foundational/42-interruption-config.py @@ -30,9 +30,9 @@ from pipecat.services.openai.llm import OpenAILLMService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies -from pipecat.turns.user import MinWordsUserTurnStartStrategy +from pipecat.turns.user_start import MinWordsUserTurnStartStrategy +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -83,9 +83,9 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - user=[MinWordsUserTurnStartStrategy(min_words=3)], - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())], + user_turn_strategies=UserTurnStrategies( + start=[MinWordsUserTurnStartStrategy(min_words=3)], + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())], ), ), ) diff --git a/examples/foundational/43-heygen-transport.py b/examples/foundational/43-heygen-transport.py index 8ba1a686a..6eb2e5e49 100644 --- a/examples/foundational/43-heygen-transport.py +++ b/examples/foundational/43-heygen-transport.py @@ -28,8 +28,8 @@ from pipecat.services.cartesia.tts import CartesiaTTSService from pipecat.services.deepgram.stt import DeepgramSTTService from pipecat.services.google.llm import GoogleLLMService from pipecat.transports.heygen.transport import HeyGenParams, HeyGenTransport -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -69,8 +69,10 @@ async def main(): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[ + TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3()) + ] ), ), ) diff --git a/examples/foundational/43a-heygen-video-service.py b/examples/foundational/43a-heygen-video-service.py index f6535eda2..b8ee2ea2a 100644 --- a/examples/foundational/43a-heygen-video-service.py +++ b/examples/foundational/43a-heygen-video-service.py @@ -31,8 +31,8 @@ from pipecat.services.heygen.client import ServiceType from pipecat.services.heygen.video import HeyGenVideoService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams, DailyTransport -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -91,8 +91,10 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[ + TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3()) + ] ), ), ) diff --git a/examples/foundational/44-voicemail-detection.py b/examples/foundational/44-voicemail-detection.py index a8f17a45f..92b76f360 100644 --- a/examples/foundational/44-voicemail-detection.py +++ b/examples/foundational/44-voicemail-detection.py @@ -30,8 +30,8 @@ from pipecat.services.openai.llm import OpenAILLMService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -83,8 +83,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/45-before-and-after-events.py b/examples/foundational/45-before-and-after-events.py index 52ddaedda..9ab8cf138 100644 --- a/examples/foundational/45-before-and-after-events.py +++ b/examples/foundational/45-before-and-after-events.py @@ -30,8 +30,8 @@ from pipecat.services.openai.llm import OpenAILLMService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -91,8 +91,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/46-video-processing.py b/examples/foundational/46-video-processing.py index 4da1ea86d..e2afc4d0e 100644 --- a/examples/foundational/46-video-processing.py +++ b/examples/foundational/46-video-processing.py @@ -28,8 +28,8 @@ from pipecat.runner.utils import create_transport from pipecat.services.google.gemini_live.llm import GeminiLiveLLMService from pipecat.transports.base_transport import TransportParams from pipecat.transports.daily.transport import DailyParams, DailyTransport -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -119,8 +119,8 @@ async def run_bot(pipecat_transport): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/47-sentry-metrics.py b/examples/foundational/47-sentry-metrics.py index a19d2c5db..a12e11cc7 100644 --- a/examples/foundational/47-sentry-metrics.py +++ b/examples/foundational/47-sentry-metrics.py @@ -31,8 +31,8 @@ from pipecat.services.openai.llm import OpenAILLMService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -94,8 +94,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/48-service-switcher.py b/examples/foundational/48-service-switcher.py index 045ab4a83..e1df5ece5 100644 --- a/examples/foundational/48-service-switcher.py +++ b/examples/foundational/48-service-switcher.py @@ -38,8 +38,8 @@ from pipecat.services.openai.llm import OpenAILLMService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -139,8 +139,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/49a-thinking-anthropic.py b/examples/foundational/49a-thinking-anthropic.py index 6949432b8..fe0d9ae3e 100644 --- a/examples/foundational/49a-thinking-anthropic.py +++ b/examples/foundational/49a-thinking-anthropic.py @@ -30,8 +30,8 @@ from pipecat.services.deepgram.stt import DeepgramSTTService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -87,8 +87,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/49b-thinking-google.py b/examples/foundational/49b-thinking-google.py index 025e65175..5163ab654 100644 --- a/examples/foundational/49b-thinking-google.py +++ b/examples/foundational/49b-thinking-google.py @@ -31,8 +31,8 @@ from pipecat.services.google.llm import GoogleLLMService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -93,8 +93,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/49c-thinking-functions-anthropic.py b/examples/foundational/49c-thinking-functions-anthropic.py index 3b75d4621..6938bac81 100644 --- a/examples/foundational/49c-thinking-functions-anthropic.py +++ b/examples/foundational/49c-thinking-functions-anthropic.py @@ -33,8 +33,8 @@ from pipecat.services.llm_service import FunctionCallParams from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -114,8 +114,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/49d-thinking-functions-google.py b/examples/foundational/49d-thinking-functions-google.py index 7914a2ca0..0833cb067 100644 --- a/examples/foundational/49d-thinking-functions-google.py +++ b/examples/foundational/49d-thinking-functions-google.py @@ -33,8 +33,8 @@ from pipecat.services.llm_service import FunctionCallParams from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -119,8 +119,8 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] + user_turn_strategies=UserTurnStrategies( + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())] ), ), ) diff --git a/examples/foundational/52-live-translation.py b/examples/foundational/52-live-translation.py index 8d2a8a27c..bb2c0b0a8 100644 --- a/examples/foundational/52-live-translation.py +++ b/examples/foundational/52-live-translation.py @@ -29,9 +29,9 @@ from pipecat.services.openai.llm import OpenAILLMService from pipecat.transports.base_transport import BaseTransport, TransportParams from pipecat.transports.daily.transport import DailyParams from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams -from pipecat.turns.bot import TurnAnalyzerBotTurnStartStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies -from pipecat.turns.user import TranscriptionUserTurnStartStrategy +from pipecat.turns.user_start import TranscriptionUserTurnStartStrategy +from pipecat.turns.user_stop import TurnAnalyzerUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies load_dotenv(override=True) @@ -86,9 +86,9 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): context_aggregator = LLMContextAggregatorPair( context, user_params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - user=[TranscriptionUserTurnStartStrategy(enable_interruptions=False)], - bot=[TurnAnalyzerBotTurnStartStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())], + user_turn_strategies=UserTurnStrategies( + start=[TranscriptionUserTurnStartStrategy(enable_interruptions=False)], + stop=[TurnAnalyzerUserTurnStopStrategy(turn_analyzer=LocalSmartTurnAnalyzerV3())], ), ), ) diff --git a/src/pipecat/audio/interruptions/min_words_interruption_strategy.py b/src/pipecat/audio/interruptions/min_words_interruption_strategy.py index 1ccdbd49e..4d41a8855 100644 --- a/src/pipecat/audio/interruptions/min_words_interruption_strategy.py +++ b/src/pipecat/audio/interruptions/min_words_interruption_strategy.py @@ -21,7 +21,7 @@ class MinWordsInterruptionStrategy(BaseInterruptionStrategy): .. deprecated:: 0.0.99 This class is deprecated, use - `pipecat.turns.user.MinWordsUserTurnStartStrategy` with `PipelineTask`'s + `pipecat.turns.user_start.MinWordsUserTurnStartStrategy` with `PipelineTask`'s new `turn_start_strategies` parameter instead. """ @@ -42,7 +42,7 @@ class MinWordsInterruptionStrategy(BaseInterruptionStrategy): warnings.simplefilter("always") warnings.warn( "'pipecat.audio.interruptions' is deprecated. " - "Use `pipecat.turns.user.MinWordsUserTurnStartStrategy` with `PipelineTask`'s " + "Use `pipecat.turns.user_start.MinWordsUserTurnStartStrategy` with `PipelineTask`'s " "new `turn_start_strategies` parameter instead.", DeprecationWarning, ) diff --git a/src/pipecat/extensions/voicemail/voicemail_detector.py b/src/pipecat/extensions/voicemail/voicemail_detector.py index e87c6339d..4a9c8470f 100644 --- a/src/pipecat/extensions/voicemail/voicemail_detector.py +++ b/src/pipecat/extensions/voicemail/voicemail_detector.py @@ -43,7 +43,7 @@ from pipecat.processors.aggregators.llm_response_universal import ( ) from pipecat.processors.frame_processor import FrameDirection, FrameProcessor, FrameProcessorSetup from pipecat.services.llm_service import LLMService -from pipecat.turns.turn_start_strategies import ExternalTurnStartStrategies +from pipecat.turns.user_turn_strategies import ExternalUserTurnStrategies from pipecat.utils.sync.base_notifier import BaseNotifier from pipecat.utils.sync.event_notifier import EventNotifier @@ -629,9 +629,7 @@ VOICEMAIL SYSTEM (respond "VOICEMAIL"): self._context = LLMContext(self._messages) self._context_aggregator = LLMContextAggregatorPair( self._context, - user_params=LLMUserAggregatorParams( - turn_start_strategies=ExternalTurnStartStrategies() - ), + user_params=LLMUserAggregatorParams(user_turn_strategies=ExternalUserTurnStrategies()), ) # Create notification system for coordinating between components diff --git a/src/pipecat/processors/aggregators/llm_response_universal.py b/src/pipecat/processors/aggregators/llm_response_universal.py index 65b57b782..339b52553 100644 --- a/src/pipecat/processors/aggregators/llm_response_universal.py +++ b/src/pipecat/processors/aggregators/llm_response_universal.py @@ -63,10 +63,10 @@ from pipecat.processors.aggregators.llm_context import ( NotGiven, ) from pipecat.processors.frame_processor import FrameDirection, FrameProcessor -from pipecat.turns.bot import BaseBotTurnStartStrategy, BotTurnStartedParams from pipecat.turns.mute import BaseUserMuteStrategy -from pipecat.turns.turn_start_strategies import ExternalTurnStartStrategies, TurnStartStrategies -from pipecat.turns.user import BaseUserTurnStartStrategy, UserTurnStartedParams +from pipecat.turns.user_start import BaseUserTurnStartStrategy, UserTurnStartedParams +from pipecat.turns.user_stop import BaseUserTurnStopStrategy, UserTurnStoppedParams +from pipecat.turns.user_turn_strategies import ExternalUserTurnStrategies, UserTurnStrategies from pipecat.utils.string import TextPartForConcatenation, concatenate_aggregated_text from pipecat.utils.time import time_now_iso8601 @@ -76,15 +76,15 @@ class LLMUserAggregatorParams: """Parameters for configuring LLM user aggregation behavior. Parameters: - turn_start_strategies: User and bot turn start strategies. + user_turn_strategies: User turn start and stop strategies. user_mute_strategies: List of user mute strategies. - user_turn_end_timeout: Time in seconds to wait before considering the - user's turn finished and starting the bot turn. + user_turn_stop_timeout: Time in seconds to wait before considering the + user's turn finished. """ - turn_start_strategies: Optional[TurnStartStrategies] = None + user_turn_strategies: Optional[UserTurnStrategies] = None user_mute_strategies: List[BaseUserMuteStrategy] = field(default_factory=list) - user_turn_end_timeout: float = 5.0 + user_turn_stop_timeout: float = 5.0 @dataclass @@ -232,8 +232,8 @@ class LLMUserAggregator(LLMContextAggregator): Event handlers available: - on_user_turn_started: Called when the user turn starts - - on_bot_turn_started: Called when the user turn ends and it is now the bot’s turn - - on_user_turn_end_timeout: Called when no bot turn start strategy triggers + - on_user_turn_stopped: Called when the user turn ends + - on_user_turn_stop_timeout: Called when no user turn stop strategy triggers Example:: @@ -241,12 +241,12 @@ class LLMUserAggregator(LLMContextAggregator): async def on_user_turn_started(aggregator, Optional[strategy]): ... - @aggregator.event_handler("on_bot_turn_started") - async def on_bot_turn_started(aggregator, Optional[strategy]): + @aggregator.event_handler("on_user_turn_stopped") + async def on_user_turn_stopped(aggregator, Optional[strategy]): ... - @aggregator.event_handler("on_user_turn_end_timeout") - async def on_user_turn_end_timeout(aggregator): + @aggregator.event_handler("on_user_turn_stop_timeout") + async def on_user_turn_stop_timeout(aggregator): ... """ @@ -268,19 +268,19 @@ class LLMUserAggregator(LLMContextAggregator): super().__init__(context=context, role="user", **kwargs) self._params = params or LLMUserAggregatorParams() - # Initialize default user and bot turn start strategies. - self._turn_start_strategies = self._params.turn_start_strategies or TurnStartStrategies() + # Initialize default user turn strategies. + self._user_turn_strategies = self._params.user_turn_strategies or UserTurnStrategies() self._vad_user_speaking = False self._user_turn = False self._user_is_muted = False - self._user_turn_end_timeout_event = asyncio.Event() - self._user_turn_end_timeout_task: Optional[asyncio.Task] = None + self._user_turn_stop_timeout_event = asyncio.Event() + self._user_turn_stop_timeout_task: Optional[asyncio.Task] = None self._register_event_handler("on_user_turn_started") - self._register_event_handler("on_user_turn_end_timeout") - self._register_event_handler("on_bot_turn_started") + self._register_event_handler("on_user_turn_stopped") + self._register_event_handler("on_user_turn_stop_timeout") async def cleanup(self): """Clean up processor resources.""" @@ -341,7 +341,7 @@ class LLMUserAggregator(LLMContextAggregator): else: await self.push_frame(frame, direction) - await self._turn_start_strategies_process_frame(frame) + await self._user_turn_strategies_process_frame(frame) async def push_aggregation(self): """Push the current aggregation.""" @@ -354,32 +354,32 @@ class LLMUserAggregator(LLMContextAggregator): await self.push_context_frame() async def _start(self, frame: StartFrame): - if not self._user_turn_end_timeout_task: - self._user_turn_end_timeout_task = self.create_task( - self._user_turn_end_timeout_task_handler() + if not self._user_turn_stop_timeout_task: + self._user_turn_stop_timeout_task = self.create_task( + self._user_turn_stop_timeout_task_handler() ) - await self._setup_turn_start_strategies() + await self._setup_user_turn_strategies() await self._setup_user_mute_strategies() async def _setup_user_mute_strategies(self): for s in self._params.user_mute_strategies: await s.setup(self.task_manager) - async def _setup_turn_start_strategies(self): - if self._turn_start_strategies.user: - for s in self._turn_start_strategies.user: + async def _setup_user_turn_strategies(self): + if self._user_turn_strategies.start: + for s in self._user_turn_strategies.start: await s.setup(self.task_manager) s.add_event_handler("on_push_frame", self._on_push_frame) s.add_event_handler("on_broadcast_frame", self._on_broadcast_frame) s.add_event_handler("on_user_turn_started", self._on_user_turn_started) - if self._turn_start_strategies.bot: - for s in self._turn_start_strategies.bot: + if self._user_turn_strategies.stop: + for s in self._user_turn_strategies.stop: await s.setup(self.task_manager) s.add_event_handler("on_push_frame", self._on_push_frame) s.add_event_handler("on_broadcast_frame", self._on_broadcast_frame) - s.add_event_handler("on_bot_turn_started", self._on_bot_turn_started) + s.add_event_handler("on_user_turn_stopped", self._on_user_turn_stopped) async def _stop(self, frame: EndFrame): await self._cleanup() @@ -388,20 +388,20 @@ class LLMUserAggregator(LLMContextAggregator): await self._cleanup() async def _cleanup(self): - if self._user_turn_end_timeout_task: - await self.cancel_task(self._user_turn_end_timeout_task) - self._user_turn_end_timeout_task = None + if self._user_turn_stop_timeout_task: + await self.cancel_task(self._user_turn_stop_timeout_task) + self._user_turn_stop_timeout_task = None - await self._cleanup_turn_start_strategies() + await self._cleanup_user_turn_strategies() await self._cleanup_user_mute_strategies() - async def _cleanup_turn_start_strategies(self): - if self._turn_start_strategies.user: - for s in self._turn_start_strategies.user: + async def _cleanup_user_turn_strategies(self): + if self._user_turn_strategies.start: + for s in self._user_turn_strategies.start: await s.cleanup() - if self._turn_start_strategies.bot: - for s in self._turn_start_strategies.bot: + if self._user_turn_strategies.stop: + for s in self._user_turn_strategies.stop: await s.cleanup() async def _cleanup_user_mute_strategies(self): @@ -436,13 +436,13 @@ class LLMUserAggregator(LLMContextAggregator): return should_mute_frame - async def _turn_start_strategies_process_frame(self, frame: Frame): - if self._turn_start_strategies.user: - for strategy in self._turn_start_strategies.user: + async def _user_turn_strategies_process_frame(self, frame: Frame): + if self._user_turn_strategies.start: + for strategy in self._user_turn_strategies.start: await strategy.process_frame(frame) - if self._turn_start_strategies.bot: - for strategy in self._turn_start_strategies.bot: + if self._user_turn_strategies.stop: + for strategy in self._user_turn_strategies.stop: await strategy.process_frame(frame) async def _handle_llm_run(self, frame: LLMRunFrame): @@ -465,15 +465,15 @@ class LLMUserAggregator(LLMContextAggregator): logger.warning( f"{self}: `turn_analyzer` in base input transport is deprecated and " "might result in unexpected behavior. Use `LLMUserAggregator`'s new `turn_start_strategies` " - "parameter with `TurnAnalyzerBotTurnStartStrategy` instead:\n" + "parameter with `TurnAnalyzerUserTurnStopStrategy` instead:\n" "\n" " context_aggregator = LLMContextAggregatorPair(\n" " context,\n" " user_params=LLMUserAggregatorParams(\n" " ...,\n" - " turn_start_strategies=TurnStartStrategies(\n" - " bot=[\n" - " TurnAnalyzerBotTurnStartStrategy(\n" + " user_turn_strategies=UserTurnStrategies(\n" + " stop=[\n" + " TurnAnalyzerUserTurnStopStrategy(\n" " turn_analyzer=LocalSmartTurnAnalyzerV3(params=SmartTurnParams())\n" " )\n" " ],\n" @@ -482,21 +482,21 @@ class LLMUserAggregator(LLMContextAggregator): " )" ) - await self._cleanup_turn_start_strategies() - self._turn_start_strategies = ExternalTurnStartStrategies() - await self._setup_turn_start_strategies() + await self._cleanup_user_turn_strategies() + self._turn_strategies = ExternalUserTurnStrategies() + await self._setup_user_turn_strategies() async def _handle_vad_user_started_speaking(self, frame: VADUserStartedSpeakingFrame): self._vad_user_speaking = True # The user started talking, let's reset the user turn timeout. - self._user_turn_end_timeout_event.set() + self._user_turn_stop_timeout_event.set() async def _handle_vad_user_stopped_speaking(self, frame: VADUserStoppedSpeakingFrame): self._vad_user_speaking = False # The user stopped talking, let's reset the user turn timeout. - self._user_turn_end_timeout_event.set() + self._user_turn_stop_timeout_event.set() async def _handle_transcription(self, frame: TranscriptionFrame): text = frame.text @@ -506,7 +506,7 @@ class LLMUserAggregator(LLMContextAggregator): return # We have creceived a transcription, let's reset the user turn timeout. - self._user_turn_end_timeout_event.set() + self._user_turn_stop_timeout_event.set() # Transcriptions never include inter-part spaces (so far). self._aggregation.append( @@ -522,14 +522,14 @@ class LLMUserAggregator(LLMContextAggregator): ): await self._trigger_user_turn_start(strategy, params) - async def _on_bot_turn_started( - self, strategy: BaseBotTurnStartStrategy, params: BotTurnStartedParams + async def _on_user_turn_stopped( + self, strategy: BaseUserTurnStopStrategy, params: UserTurnStoppedParams ): - await self._trigger_bot_turn_start(strategy, params) + await self._trigger_user_turn_stop(strategy, params) async def _on_push_frame( self, - strategy: BaseUserTurnStartStrategy | BaseBotTurnStartStrategy, + strategy: BaseUserTurnStartStrategy | BaseUserTurnStopStrategy, frame: Frame, direction: FrameDirection = FrameDirection.DOWNSTREAM, ): @@ -537,7 +537,7 @@ class LLMUserAggregator(LLMContextAggregator): async def _on_broadcast_frame( self, - strategy: BaseUserTurnStartStrategy | BaseBotTurnStartStrategy, + strategy: BaseUserTurnStartStrategy | BaseUserTurnStopStrategy, frame_cls: Type[Frame], **kwargs, ): @@ -553,11 +553,11 @@ class LLMUserAggregator(LLMContextAggregator): logger.debug(f"User started speaking (user turn start strategy: {strategy})") self._user_turn = True - self._user_turn_end_timeout_event.set() + self._user_turn_stop_timeout_event.set() # Reset all user turn start strategies to start fresh. - if self._turn_start_strategies.user: - for s in self._turn_start_strategies.user: + if self._user_turn_strategies.start: + for s in self._user_turn_strategies.start: await s.reset() if params.enable_user_speaking_frames: @@ -570,45 +570,45 @@ class LLMUserAggregator(LLMContextAggregator): await self._call_event_handler("on_user_turn_started", strategy) - async def _trigger_bot_turn_start( - self, strategy: Optional[BaseBotTurnStartStrategy], params: BotTurnStartedParams + async def _trigger_user_turn_stop( + self, strategy: Optional[BaseUserTurnStopStrategy], params: UserTurnStoppedParams ): - # Prevent two consecutive bot turn starts. + # Prevent two consecutive user turn stops. if not self._user_turn: return - logger.debug(f"User stopped speaking (bot turn start strategy: {strategy})") + logger.debug(f"User stopped speaking (user turn stop strategy: {strategy})") self._user_turn = False - self._user_turn_end_timeout_event.set() + self._user_turn_stop_timeout_event.set() - # Reset all bot turn start strategies to start fresh. - if self._turn_start_strategies.bot: - for s in self._turn_start_strategies.bot: + # Reset all user turn stop strategies to start fresh. + if self._user_turn_strategies.stop: + for s in self._user_turn_strategies.stop: await s.reset() if params.enable_user_speaking_frames: # TODO(aleix): This frame should really come from the top of the pipeline. await self.broadcast_frame(UserStoppedSpeakingFrame) - await self._call_event_handler("on_bot_turn_started", strategy) + await self._call_event_handler("on_user_turn_stopped", strategy) # Always push context frame. await self.push_aggregation() - async def _user_turn_end_timeout_task_handler(self): + async def _user_turn_stop_timeout_task_handler(self): while True: try: await asyncio.wait_for( - self._user_turn_end_timeout_event.wait(), - timeout=self._params.user_turn_end_timeout, + self._user_turn_stop_timeout_event.wait(), + timeout=self._params.user_turn_stop_timeout, ) - self._user_turn_end_timeout_event.clear() + self._user_turn_stop_timeout_event.clear() except asyncio.TimeoutError: if self._user_turn and not self._vad_user_speaking: - await self._call_event_handler("on_user_turn_end_timeout") - await self._trigger_bot_turn_start( - None, BotTurnStartedParams(enable_user_speaking_frames=True) + await self._call_event_handler("on_user_turn_stop_timeout") + await self._trigger_user_turn_stop( + None, UserTurnStoppedParams(enable_user_speaking_frames=True) ) diff --git a/src/pipecat/turns/bot/__init__.py b/src/pipecat/turns/bot/__init__.py deleted file mode 100644 index 3118c9f60..000000000 --- a/src/pipecat/turns/bot/__init__.py +++ /dev/null @@ -1,15 +0,0 @@ -# -# Copyright (c) 2024–2025, Daily -# -# SPDX-License-Identifier: BSD 2-Clause License -# - -from pipecat.turns.bot.base_bot_turn_start_strategy import ( - BaseBotTurnStartStrategy, - BotTurnStartedParams, -) -from pipecat.turns.bot.external_bot_turn_start_strategy import ExternalBotTurnStartStrategy -from pipecat.turns.bot.transcription_bot_turn_start_strategy import ( - TranscriptionBotTurnStartStrategy, -) -from pipecat.turns.bot.turn_analyzer_bot_turn_start_strategy import TurnAnalyzerBotTurnStartStrategy diff --git a/src/pipecat/turns/turn_start_strategies.py b/src/pipecat/turns/turn_start_strategies.py deleted file mode 100644 index 7f4650ad0..000000000 --- a/src/pipecat/turns/turn_start_strategies.py +++ /dev/null @@ -1,75 +0,0 @@ -# -# Copyright (c) 2024–2025, Daily -# -# SPDX-License-Identifier: BSD 2-Clause License -# - -"""Turn start strategy configuration.""" - -from dataclasses import dataclass -from typing import List, Optional - -from pipecat.turns.bot import ( - BaseBotTurnStartStrategy, - ExternalBotTurnStartStrategy, - TranscriptionBotTurnStartStrategy, -) -from pipecat.turns.user import ( - BaseUserTurnStartStrategy, - ExternalUserTurnStartStrategy, - TranscriptionUserTurnStartStrategy, - VADUserTurnStartStrategy, -) - - -@dataclass -class TurnStartStrategies: - """Container for user and bot turn start strategies. - - This class groups the configured turn start strategies for both the user - and the bot. - - If no strategies are specified for the user or the bot, the following - defaults are used: - - user: [VADUserTurnStartStrategy, TranscriptionUserTurnStartStrategy] - bot: [TranscriptionBotTurnStartStrategy] - - Attributes: - user: A list of user turn start strategies used to detect when the - user starts speaking. - bot: A list of bot turn start strategies used to decide when the bot - should start speaking. - - """ - - user: Optional[List[BaseUserTurnStartStrategy]] = None - bot: Optional[List[BaseBotTurnStartStrategy]] = None - - def __post_init__(self): - if not self.user: - self.user = [VADUserTurnStartStrategy(), TranscriptionUserTurnStartStrategy()] - if not self.bot: - self.bot = [TranscriptionBotTurnStartStrategy()] - - -@dataclass -class ExternalTurnStartStrategies(TurnStartStrategies): - """Default container for external user and bot turn start strategies. - - This class provides a convenience default for configuring external turn - control. It preconfigures `TurnStartStrategies` with - `ExternalUserTurnStartStrategy` and `ExternalBotTurnStartStrategy`, allowing - external processors (such as services) to control when user and bot turns - start. - - When using this container, the user aggregator does not push - `UserStartedSpeakingFrame` or `UserStoppedSpeakingFrame` frames, and does - not generate interruptions. These signals are expected to be provided by an - external processor. - - """ - - def __post_init__(self): - self.user = [ExternalUserTurnStartStrategy()] - self.bot = [ExternalBotTurnStartStrategy()] diff --git a/src/pipecat/turns/user/__init__.py b/src/pipecat/turns/user/__init__.py deleted file mode 100644 index a3ec3c744..000000000 --- a/src/pipecat/turns/user/__init__.py +++ /dev/null @@ -1,16 +0,0 @@ -# -# Copyright (c) 2024–2025, Daily -# -# SPDX-License-Identifier: BSD 2-Clause License -# - -from pipecat.turns.user.base_user_turn_start_strategy import ( - BaseUserTurnStartStrategy, - UserTurnStartedParams, -) -from pipecat.turns.user.external_user_turn_start_strategy import ExternalUserTurnStartStrategy -from pipecat.turns.user.min_words_user_turn_start_strategy import MinWordsUserTurnStartStrategy -from pipecat.turns.user.transcription_user_turn_start_strategy import ( - TranscriptionUserTurnStartStrategy, -) -from pipecat.turns.user.vad_user_turn_start_strategy import VADUserTurnStartStrategy diff --git a/src/pipecat/turns/user_start/__init__.py b/src/pipecat/turns/user_start/__init__.py new file mode 100644 index 000000000..55652344b --- /dev/null +++ b/src/pipecat/turns/user_start/__init__.py @@ -0,0 +1,18 @@ +# +# Copyright (c) 2024–2025, Daily +# +# SPDX-License-Identifier: BSD 2-Clause License +# + +from pipecat.turns.user_start.base_user_turn_start_strategy import ( + BaseUserTurnStartStrategy, + UserTurnStartedParams, +) +from pipecat.turns.user_start.external_user_turn_start_strategy import ExternalUserTurnStartStrategy +from pipecat.turns.user_start.min_words_user_turn_start_strategy import ( + MinWordsUserTurnStartStrategy, +) +from pipecat.turns.user_start.transcription_user_turn_start_strategy import ( + TranscriptionUserTurnStartStrategy, +) +from pipecat.turns.user_start.vad_user_turn_start_strategy import VADUserTurnStartStrategy diff --git a/src/pipecat/turns/user/base_user_turn_start_strategy.py b/src/pipecat/turns/user_start/base_user_turn_start_strategy.py similarity index 100% rename from src/pipecat/turns/user/base_user_turn_start_strategy.py rename to src/pipecat/turns/user_start/base_user_turn_start_strategy.py diff --git a/src/pipecat/turns/user/external_user_turn_start_strategy.py b/src/pipecat/turns/user_start/external_user_turn_start_strategy.py similarity index 92% rename from src/pipecat/turns/user/external_user_turn_start_strategy.py rename to src/pipecat/turns/user_start/external_user_turn_start_strategy.py index d22b148c7..87f47f24b 100644 --- a/src/pipecat/turns/user/external_user_turn_start_strategy.py +++ b/src/pipecat/turns/user_start/external_user_turn_start_strategy.py @@ -7,7 +7,7 @@ """User turn start strategy triggered by externally emitted frames.""" from pipecat.frames.frames import Frame, UserStartedSpeakingFrame -from pipecat.turns.user.base_user_turn_start_strategy import BaseUserTurnStartStrategy +from pipecat.turns.user_start.base_user_turn_start_strategy import BaseUserTurnStartStrategy class ExternalUserTurnStartStrategy(BaseUserTurnStartStrategy): diff --git a/src/pipecat/turns/user/min_words_user_turn_start_strategy.py b/src/pipecat/turns/user_start/min_words_user_turn_start_strategy.py similarity index 97% rename from src/pipecat/turns/user/min_words_user_turn_start_strategy.py rename to src/pipecat/turns/user_start/min_words_user_turn_start_strategy.py index 1412a4cd9..d8ee9935f 100644 --- a/src/pipecat/turns/user/min_words_user_turn_start_strategy.py +++ b/src/pipecat/turns/user_start/min_words_user_turn_start_strategy.py @@ -15,7 +15,7 @@ from pipecat.frames.frames import ( InterimTranscriptionFrame, TranscriptionFrame, ) -from pipecat.turns.user.base_user_turn_start_strategy import BaseUserTurnStartStrategy +from pipecat.turns.user_start.base_user_turn_start_strategy import BaseUserTurnStartStrategy class MinWordsUserTurnStartStrategy(BaseUserTurnStartStrategy): diff --git a/src/pipecat/turns/user/transcription_user_turn_start_strategy.py b/src/pipecat/turns/user_start/transcription_user_turn_start_strategy.py similarity index 93% rename from src/pipecat/turns/user/transcription_user_turn_start_strategy.py rename to src/pipecat/turns/user_start/transcription_user_turn_start_strategy.py index ed04c62d7..e520cfa7a 100644 --- a/src/pipecat/turns/user/transcription_user_turn_start_strategy.py +++ b/src/pipecat/turns/user_start/transcription_user_turn_start_strategy.py @@ -7,7 +7,7 @@ """User turn start strategy based on transcriptions.""" from pipecat.frames.frames import Frame, InterimTranscriptionFrame, TranscriptionFrame -from pipecat.turns.user.base_user_turn_start_strategy import BaseUserTurnStartStrategy +from pipecat.turns.user_start.base_user_turn_start_strategy import BaseUserTurnStartStrategy class TranscriptionUserTurnStartStrategy(BaseUserTurnStartStrategy): diff --git a/src/pipecat/turns/user/vad_user_turn_start_strategy.py b/src/pipecat/turns/user_start/vad_user_turn_start_strategy.py similarity index 89% rename from src/pipecat/turns/user/vad_user_turn_start_strategy.py rename to src/pipecat/turns/user_start/vad_user_turn_start_strategy.py index 3a0e491c2..48d8d5f12 100644 --- a/src/pipecat/turns/user/vad_user_turn_start_strategy.py +++ b/src/pipecat/turns/user_start/vad_user_turn_start_strategy.py @@ -7,7 +7,7 @@ """User turn start strategy based on VAD events.""" from pipecat.frames.frames import Frame, VADUserStartedSpeakingFrame -from pipecat.turns.user.base_user_turn_start_strategy import BaseUserTurnStartStrategy +from pipecat.turns.user_start.base_user_turn_start_strategy import BaseUserTurnStartStrategy class VADUserTurnStartStrategy(BaseUserTurnStartStrategy): diff --git a/src/pipecat/turns/user_stop/__init__.py b/src/pipecat/turns/user_stop/__init__.py new file mode 100644 index 000000000..f9adfb4cd --- /dev/null +++ b/src/pipecat/turns/user_stop/__init__.py @@ -0,0 +1,17 @@ +# +# Copyright (c) 2024–2025, Daily +# +# SPDX-License-Identifier: BSD 2-Clause License +# + +from pipecat.turns.user_stop.base_user_turn_stop_strategy import ( + BaseUserTurnStopStrategy, + UserTurnStoppedParams, +) +from pipecat.turns.user_stop.external_user_turn_stop_strategy import ExternalUserTurnStopStrategy +from pipecat.turns.user_stop.transcription_user_turn_stop_strategy import ( + TranscriptionUserTurnStopStrategy, +) +from pipecat.turns.user_stop.turn_analyzer_user_turn_stop_strategy import ( + TurnAnalyzerUserTurnStopStrategy, +) diff --git a/src/pipecat/turns/bot/base_bot_turn_start_strategy.py b/src/pipecat/turns/user_stop/base_user_turn_stop_strategy.py similarity index 69% rename from src/pipecat/turns/bot/base_bot_turn_start_strategy.py rename to src/pipecat/turns/user_stop/base_user_turn_stop_strategy.py index d4faad799..3572fbde5 100644 --- a/src/pipecat/turns/bot/base_bot_turn_start_strategy.py +++ b/src/pipecat/turns/user_stop/base_user_turn_stop_strategy.py @@ -4,7 +4,7 @@ # SPDX-License-Identifier: BSD 2-Clause License # -"""Base turn start strategy for determining when the bot should start speaking.""" +"""Base user turn stop strategy for determining when the user stopped speaking.""" from dataclasses import dataclass from typing import Optional, Type @@ -16,41 +16,41 @@ from pipecat.utils.base_object import BaseObject @dataclass -class BotTurnStartedParams: - """Parameters emitted when a bot turn starts. +class UserTurnStoppedParams: + """Parameters emitted when a user turn stops. - These parameters are passed to the `on_bot_turn_started` event and provide - contextual information about how the bot turn should be handled by the user - aggregator. + These parameters are passed to the `on_user_turn_stopped` event and provide + contextual information about how the end of user turn should be handled by + the user aggregator. Attributes: enable_user_speaking_frames: Whether the user aggregator should emit - frames indicating user speaking state (e.g., user stopped speaking) - during the bot's turn. This is typically enabled by default, but may - be disabled when another component (such as an STT service) is already - responsible for generating user speaking frames. + frames indicating user speaking state (e.g., user stopped speaking). + This is typically enabled by default, but may be disabled when another + component (such as an STT service) is already responsible for + generating user speaking frames. """ enable_user_speaking_frames: bool -class BaseBotTurnStartStrategy(BaseObject): - """Base class for strategies that determine when the bot should start speaking. +class BaseUserTurnStopStrategy(BaseObject): + """Base class for strategies that determine when the user stops speaking. - Subclasses should implement logic to detect when the bot should start + Subclasses should implement logic to detect when the user stops speaking. This could be based on analyzing incoming frames (such as transcriptions), conversation state, or other heuristics. - Events triggered by bot turn start strategies: + Events triggered by strategies: - `on_push_frame`: Indicates the strategy wants to push a frame. - - `on_bot_turn_started`: Signals that the bot should start speaking. + - `on_user_turn_stopped`: Signals that the user stopped speaking. """ def __init__(self, *, enable_user_speaking_frames: bool = True, **kwargs): - """Initialize the base bot turn start strategy. + """Initialize the base user turn stop strategy. Args: enable_user_speaking_frames: If True, the aggregator will emit frames @@ -64,13 +64,13 @@ class BaseBotTurnStartStrategy(BaseObject): self._task_manager: Optional[BaseTaskManager] = None self._register_event_handler("on_push_frame", sync=True) self._register_event_handler("on_broadcast_frame", sync=True) - self._register_event_handler("on_bot_turn_started", sync=True) + self._register_event_handler("on_user_turn_stopped", sync=True) @property def task_manager(self) -> BaseTaskManager: """Returns the configured task manager.""" if not self._task_manager: - raise RuntimeError(f"{self} bot turn start strategy was not properly setup") + raise RuntimeError(f"{self} user turn stop strategy was not properly setup") return self._task_manager async def setup(self, task_manager: BaseTaskManager): @@ -90,10 +90,10 @@ class BaseBotTurnStartStrategy(BaseObject): pass async def process_frame(self, frame: Frame): - """Process an incoming frame to decide whether the bot should speak. + """Process an incoming frame to decide whether the user stopped speaking. Subclasses should override this to implement logic that decides whether - the bot turn has started. + the user has stopped speaking. Args: frame: The frame to be analyzed. @@ -118,9 +118,9 @@ class BaseBotTurnStartStrategy(BaseObject): """ await self._call_event_handler("on_broadcast_frame", frame_cls, **kwargs) - async def trigger_bot_turn_started(self): - """Trigger the `on_bot_turn_started` event.""" + async def trigger_user_turn_stopped(self): + """Trigger the `on_user_turn_stopped` event.""" await self._call_event_handler( - "on_bot_turn_started", - BotTurnStartedParams(enable_user_speaking_frames=self._enable_user_speaking_frames), + "on_user_turn_stopped", + UserTurnStoppedParams(enable_user_speaking_frames=self._enable_user_speaking_frames), ) diff --git a/src/pipecat/turns/bot/external_bot_turn_start_strategy.py b/src/pipecat/turns/user_stop/external_user_turn_stop_strategy.py similarity index 81% rename from src/pipecat/turns/bot/external_bot_turn_start_strategy.py rename to src/pipecat/turns/user_stop/external_user_turn_stop_strategy.py index 8557c11ed..902f947dd 100644 --- a/src/pipecat/turns/bot/external_bot_turn_start_strategy.py +++ b/src/pipecat/turns/user_stop/external_user_turn_stop_strategy.py @@ -4,7 +4,7 @@ # SPDX-License-Identifier: BSD 2-Clause License # -"""Bot turn start strategy triggered by externally emitted frames.""" +"""User turn stop strategy triggered by externally emitted frames.""" import asyncio from typing import Optional @@ -16,12 +16,12 @@ from pipecat.frames.frames import ( UserStartedSpeakingFrame, UserStoppedSpeakingFrame, ) -from pipecat.turns.bot.base_bot_turn_start_strategy import BaseBotTurnStartStrategy +from pipecat.turns.user_stop.base_user_turn_stop_strategy import BaseUserTurnStopStrategy from pipecat.utils.asyncio.task_manager import BaseTaskManager -class ExternalBotTurnStartStrategy(BaseBotTurnStartStrategy): - """Bot turn start strategy controlled by an external processor. +class ExternalUserTurnStopStrategy(BaseUserTurnStopStrategy): + """User turn stop strategy controlled by an external processor. This strategy does not determine when a user turn ends on its own, it relies on a different processor in the pipeline which is responsible for emitting @@ -30,7 +30,7 @@ class ExternalBotTurnStartStrategy(BaseBotTurnStartStrategy): """ def __init__(self, *, timeout: float = 0.5, **kwargs): - """Initialize the external bot turn start strategy. + """Initialize the external user turn stop strategy. Args: timeout: A short delay used internally to handle consecutive or @@ -72,8 +72,8 @@ class ExternalBotTurnStartStrategy(BaseBotTurnStartStrategy): async def process_frame(self, frame: Frame): """Process an incoming frame to update strategy state. - Updates internal transcription text and VAD state. The bot turn will be - triggered when appropriate based on the collected frames. + Updates internal transcription text and VAD state. The user end turn + will be triggered when appropriate based on the collected frames. Args: frame: The frame to be analyzed. @@ -95,7 +95,7 @@ class ExternalBotTurnStartStrategy(BaseBotTurnStartStrategy): async def _handle_user_stopped_speaking(self, _: UserStoppedSpeakingFrame): """Handle when the external service indicates the user has stopped speaking.""" self._user_speaking = False - await self._maybe_trigger_bot_turn_started() + await self._maybe_trigger_user_turn_stopped() async def _handle_interim_transcription(self, frame: InterimTranscriptionFrame): self._seen_interim_results = True @@ -109,10 +109,10 @@ class ExternalBotTurnStartStrategy(BaseBotTurnStartStrategy): self._event.set() async def _task_handler(self): - """Asynchronously monitor transcriptions and trigger bot turn when ready. + """Asynchronously monitor transcriptions and trigger user end turn when ready. If transcription text exists and the user is not currently speaking, - triggers the bot turn. Handles multiple or delayed transcriptions + triggers the user end turn. Handles multiple or delayed transcriptions gracefully. """ @@ -121,8 +121,8 @@ class ExternalBotTurnStartStrategy(BaseBotTurnStartStrategy): await asyncio.wait_for(self._event.wait(), timeout=self._timeout) self._event.clear() except asyncio.TimeoutError: - await self._maybe_trigger_bot_turn_started() + await self._maybe_trigger_user_turn_stopped() - async def _maybe_trigger_bot_turn_started(self): + async def _maybe_trigger_user_turn_stopped(self): if not self._user_speaking and not self._seen_interim_results and self._text: - await self.trigger_bot_turn_started() + await self.trigger_user_turn_stopped() diff --git a/src/pipecat/turns/bot/transcription_bot_turn_start_strategy.py b/src/pipecat/turns/user_stop/transcription_user_turn_stop_strategy.py similarity index 77% rename from src/pipecat/turns/bot/transcription_bot_turn_start_strategy.py rename to src/pipecat/turns/user_stop/transcription_user_turn_stop_strategy.py index 6a91e93d1..f353c3e16 100644 --- a/src/pipecat/turns/bot/transcription_bot_turn_start_strategy.py +++ b/src/pipecat/turns/user_stop/transcription_user_turn_stop_strategy.py @@ -4,7 +4,7 @@ # SPDX-License-Identifier: BSD 2-Clause License # -"""Transcription time-based bot turn start strategy.""" +"""Transcription time-based user turn stop strategy.""" import asyncio from typing import Optional @@ -16,20 +16,20 @@ from pipecat.frames.frames import ( VADUserStartedSpeakingFrame, VADUserStoppedSpeakingFrame, ) -from pipecat.turns.bot.base_bot_turn_start_strategy import BaseBotTurnStartStrategy +from pipecat.turns.user_stop.base_user_turn_stop_strategy import BaseUserTurnStopStrategy from pipecat.utils.asyncio.task_manager import BaseTaskManager -class TranscriptionBotTurnStartStrategy(BaseBotTurnStartStrategy): - """Bot turn start strategy based on transcriptions. +class TranscriptionUserTurnStopStrategy(BaseUserTurnStopStrategy): + """User turn stop strategy based on transcriptions. + + This strategy assumes the user stops speaking once a transcription has been + received. It handles multiple or delayed transcription frames gracefully. - This strategy assumes the bot should start speaking once a transcription - has been received and the user is not actively speaking. It handles - multiple or delayed transcription frames gracefully. """ def __init__(self, *, timeout: float = 0.5, **kwargs): - """Initialize the transcription-based bot turn start strategy. + """Initialize the transcription-based user turn stop strategy. Args: timeout: A short delay used internally to handle consecutive or @@ -71,8 +71,8 @@ class TranscriptionBotTurnStartStrategy(BaseBotTurnStartStrategy): async def process_frame(self, frame: Frame): """Process an incoming frame to update strategy state. - Updates internal transcription text and VAD state. The bot turn will be - triggered when appropriate based on the collected frames. + Updates internal transcription text and VAD state. The user end turn + will be triggered when appropriate based on the collected frames. Args: frame: The frame to be analyzed. @@ -94,7 +94,7 @@ class TranscriptionBotTurnStartStrategy(BaseBotTurnStartStrategy): async def _handle_vad_user_stopped_speaking(self, _: VADUserStoppedSpeakingFrame): """Handle when the VAD indicates the user has stopped speaking.""" self._vad_user_speaking = False - await self._maybe_trigger_bot_turn_started() + await self._maybe_trigger_user_turn_stopped() async def _handle_interim_transcription(self, frame: InterimTranscriptionFrame): self._seen_interim_results = True @@ -108,10 +108,10 @@ class TranscriptionBotTurnStartStrategy(BaseBotTurnStartStrategy): self._event.set() async def _task_handler(self): - """Asynchronously monitor transcriptions and trigger bot turn when ready. + """Asynchronously monitor transcriptions and trigger user end turn when ready. If transcription text exists and the user is not currently speaking, - triggers the bot turn. Handles multiple or delayed transcriptions + triggers the user end turn. Handles multiple or delayed transcriptions gracefully. """ @@ -120,8 +120,8 @@ class TranscriptionBotTurnStartStrategy(BaseBotTurnStartStrategy): await asyncio.wait_for(self._event.wait(), timeout=self._timeout) self._event.clear() except asyncio.TimeoutError: - await self._maybe_trigger_bot_turn_started() + await self._maybe_trigger_user_turn_stopped() - async def _maybe_trigger_bot_turn_started(self): + async def _maybe_trigger_user_turn_stopped(self): if not self._vad_user_speaking and not self._seen_interim_results and self._text: - await self.trigger_bot_turn_started() + await self.trigger_user_turn_stopped() diff --git a/src/pipecat/turns/bot/turn_analyzer_bot_turn_start_strategy.py b/src/pipecat/turns/user_stop/turn_analyzer_user_turn_stop_strategy.py similarity index 88% rename from src/pipecat/turns/bot/turn_analyzer_bot_turn_start_strategy.py rename to src/pipecat/turns/user_stop/turn_analyzer_user_turn_stop_strategy.py index cbfe9a22a..1fcb9b37d 100644 --- a/src/pipecat/turns/bot/turn_analyzer_bot_turn_start_strategy.py +++ b/src/pipecat/turns/user_stop/turn_analyzer_user_turn_stop_strategy.py @@ -4,7 +4,7 @@ # SPDX-License-Identifier: BSD 2-Clause License # -"""Bot turn start strategy based on turn detection analyzers.""" +"""User turn stop strategy based on turn detection analyzers.""" import asyncio from typing import Optional @@ -22,21 +22,21 @@ from pipecat.frames.frames import ( VADUserStoppedSpeakingFrame, ) from pipecat.metrics.metrics import MetricsData -from pipecat.turns.bot.base_bot_turn_start_strategy import BaseBotTurnStartStrategy +from pipecat.turns.user_stop.base_user_turn_stop_strategy import BaseUserTurnStopStrategy from pipecat.utils.asyncio.task_manager import BaseTaskManager -class TurnAnalyzerBotTurnStartStrategy(BaseBotTurnStartStrategy): - """Bot turn start strategy using a turn detection model to detect end of user turn. +class TurnAnalyzerUserTurnStopStrategy(BaseUserTurnStopStrategy): + """User turn stop strategy using a turn detection model to detect end of user turn. This strategy uses the turn detection models to determine when the user has finished speaking, combining audio, VAD, and transcription frames. Once the - turn is considered complete, the bot turn is triggered. + turn is considered complete, the user end of turn is triggered. """ def __init__(self, *, turn_analyzer: BaseTurnAnalyzer, timeout: float = 0.5, **kwargs): - """Initialize the bot turn start strategy. + """Initialize the user turn stop strategy. Args: turn_analyzer: The turn detection analyzer instance to detect end of user turn. @@ -107,10 +107,11 @@ class TurnAnalyzerBotTurnStartStrategy(BaseBotTurnStartStrategy): state = self._turn_analyzer.append_audio(frame.audio, self._vad_user_speaking) # If at this point the model says the turn is complete it will be due to - # a timeout, so we mark turn as complete and we trigger the bot turn. + # a timeout, so we mark turn as complete and we trigger the user end of + # turn. if state == EndOfTurnState.COMPLETE: self._turn_complete = True - await self._maybe_trigger_bot_turn_started() + await self._maybe_trigger_user_turn_stopped() async def _handle_vad_user_started_speaking(self, _: VADUserStartedSpeakingFrame): """Handle when the VAD indicates the user is speaking.""" @@ -149,11 +150,11 @@ class TurnAnalyzerBotTurnStartStrategy(BaseBotTurnStartStrategy): await self.push_frame(MetricsFrame(data=[result])) async def _task_handler(self): - """Asynchronously monitor events and trigger bot turn when appropriate. + """Asynchronously monitor events and trigger user end of turn when appropriate. If we have not received a transcription in the specified amount of time (and we initially received one) and the turn analyzer said the turn is - done, then the bot is ready to speak. + done, then the user is done speaking. """ while True: @@ -161,8 +162,8 @@ class TurnAnalyzerBotTurnStartStrategy(BaseBotTurnStartStrategy): await asyncio.wait_for(self._event.wait(), timeout=self._timeout) self._event.clear() except asyncio.TimeoutError: - await self._maybe_trigger_bot_turn_started() + await self._maybe_trigger_user_turn_stopped() - async def _maybe_trigger_bot_turn_started(self): + async def _maybe_trigger_user_turn_stopped(self): if self._text and self._turn_complete: - await self.trigger_bot_turn_started() + await self.trigger_user_turn_stopped() diff --git a/src/pipecat/turns/user_turn_strategies.py b/src/pipecat/turns/user_turn_strategies.py new file mode 100644 index 000000000..1a47f652b --- /dev/null +++ b/src/pipecat/turns/user_turn_strategies.py @@ -0,0 +1,71 @@ +# +# Copyright (c) 2024–2025, Daily +# +# SPDX-License-Identifier: BSD 2-Clause License +# + +"""Turn start strategy configuration.""" + +from dataclasses import dataclass +from typing import List, Optional + +from pipecat.turns.user_start import ( + BaseUserTurnStartStrategy, + ExternalUserTurnStartStrategy, + TranscriptionUserTurnStartStrategy, + VADUserTurnStartStrategy, +) +from pipecat.turns.user_stop import ( + BaseUserTurnStopStrategy, + ExternalUserTurnStopStrategy, + TranscriptionUserTurnStopStrategy, +) + + +@dataclass +class UserTurnStrategies: + """Container for user turn start and stop strategies. + + If no strategies are specified, the following defaults are used: + + start: [VADUserTurnStartStrategy, TranscriptionUserTurnStartStrategy] + stop: [TranscriptionUserTurnStopStrategy] + + Attributes: + start: A list of user turn start strategies used to detect when + the user starts speaking. + stop: A list of user turn stop strategies used to decide when + the user stops speaking. + + """ + + start: Optional[List[BaseUserTurnStartStrategy]] = None + stop: Optional[List[BaseUserTurnStopStrategy]] = None + + def __post_init__(self): + if not self.start: + self.start = [VADUserTurnStartStrategy(), TranscriptionUserTurnStartStrategy()] + if not self.stop: + self.stop = [TranscriptionUserTurnStopStrategy()] + + +@dataclass +class ExternalUserTurnStrategies(UserTurnStrategies): + """Default container for external user turn start and stop strategies. + + This class provides a convenience default for configuring external turn + control. It preconfigures `UserTurnStrategies` with + `ExternalUserTurnStartStrategy` and `ExternalUserTurnStopStrategy`, allowing + external processors (such as services) to control when user turn starts and + stops. + + When using this container, the user aggregator does not push + `UserStartedSpeakingFrame` or `UserStoppedSpeakingFrame` frames, and does + not generate interruptions. These signals are expected to be provided by an + external processor. + + """ + + def __post_init__(self): + self.start = [ExternalUserTurnStartStrategy()] + self.stop = [ExternalUserTurnStopStrategy()] diff --git a/tests/test_bot_turn_start_strategy.py b/tests/test_bot_turn_start_strategy.py index d3867b746..b571d7a1d 100644 --- a/tests/test_bot_turn_start_strategy.py +++ b/tests/test_bot_turn_start_strategy.py @@ -15,25 +15,24 @@ from pipecat.frames.frames import ( VADUserStartedSpeakingFrame, VADUserStoppedSpeakingFrame, ) -from pipecat.turns.bot import TranscriptionBotTurnStartStrategy -from pipecat.turns.bot.external_bot_turn_start_strategy import ExternalBotTurnStartStrategy +from pipecat.turns.user_stop import ExternalUserTurnStopStrategy, TranscriptionUserTurnStopStrategy from pipecat.utils.asyncio.task_manager import TaskManager, TaskManagerParams AGGREGATION_TIMEOUT = 0.1 -class TestTranscriptionBotTurnStartStrategy(unittest.IsolatedAsyncioTestCase): +class TestTranscriptionUserTurnStopStrategy(unittest.IsolatedAsyncioTestCase): async def asyncSetUp(self) -> None: self.task_manager = TaskManager() self.task_manager.setup(TaskManagerParams(loop=asyncio.get_running_loop())) async def test_ste(self): - strategy = TranscriptionBotTurnStartStrategy() + strategy = TranscriptionUserTurnStopStrategy() should_start = None - @strategy.event_handler("on_bot_turn_started") - async def on_bot_turn_started(strategy, params): + @strategy.event_handler("on_user_turn_stopped") + async def on_user_turn_stopped(strategy, params): nonlocal should_start should_start = True @@ -53,12 +52,12 @@ class TestTranscriptionBotTurnStartStrategy(unittest.IsolatedAsyncioTestCase): self.assertTrue(should_start) async def test_site(self): - strategy = TranscriptionBotTurnStartStrategy() + strategy = TranscriptionUserTurnStopStrategy() should_start = None - @strategy.event_handler("on_bot_turn_started") - async def on_bot_turn_started(strategy, params): + @strategy.event_handler("on_user_turn_stopped") + async def on_user_turn_stopped(strategy, params): nonlocal should_start should_start = True @@ -84,12 +83,12 @@ class TestTranscriptionBotTurnStartStrategy(unittest.IsolatedAsyncioTestCase): self.assertTrue(should_start) async def test_st1iest2e(self): - strategy = TranscriptionBotTurnStartStrategy() + strategy = TranscriptionUserTurnStopStrategy() should_start = None - @strategy.event_handler("on_bot_turn_started") - async def on_bot_turn_started(strategy, params): + @strategy.event_handler("on_user_turn_stopped") + async def on_user_turn_stopped(strategy, params): nonlocal should_start should_start = True @@ -130,13 +129,13 @@ class TestTranscriptionBotTurnStartStrategy(unittest.IsolatedAsyncioTestCase): self.assertTrue(should_start) async def test_siet(self): - strategy = TranscriptionBotTurnStartStrategy(timeout=AGGREGATION_TIMEOUT) + strategy = TranscriptionUserTurnStopStrategy(timeout=AGGREGATION_TIMEOUT) await strategy.setup(self.task_manager) should_start = None - @strategy.event_handler("on_bot_turn_started") - async def on_bot_turn_started(strategy, params): + @strategy.event_handler("on_user_turn_stopped") + async def on_user_turn_stopped(strategy, params): nonlocal should_start should_start = True @@ -164,13 +163,13 @@ class TestTranscriptionBotTurnStartStrategy(unittest.IsolatedAsyncioTestCase): self.assertTrue(should_start) async def test_sieit(self): - strategy = TranscriptionBotTurnStartStrategy(timeout=AGGREGATION_TIMEOUT) + strategy = TranscriptionUserTurnStopStrategy(timeout=AGGREGATION_TIMEOUT) await strategy.setup(self.task_manager) should_start = None - @strategy.event_handler("on_bot_turn_started") - async def on_bot_turn_started(strategy, params): + @strategy.event_handler("on_user_turn_stopped") + async def on_user_turn_stopped(strategy, params): nonlocal should_start should_start = True @@ -206,13 +205,13 @@ class TestTranscriptionBotTurnStartStrategy(unittest.IsolatedAsyncioTestCase): self.assertTrue(should_start) async def test_set(self): - strategy = TranscriptionBotTurnStartStrategy(timeout=AGGREGATION_TIMEOUT) + strategy = TranscriptionUserTurnStopStrategy(timeout=AGGREGATION_TIMEOUT) await strategy.setup(self.task_manager) should_start = None - @strategy.event_handler("on_bot_turn_started") - async def on_bot_turn_started(strategy, params): + @strategy.event_handler("on_user_turn_stopped") + async def on_user_turn_stopped(strategy, params): nonlocal should_start should_start = True @@ -236,13 +235,13 @@ class TestTranscriptionBotTurnStartStrategy(unittest.IsolatedAsyncioTestCase): self.assertTrue(should_start) async def test_seit(self): - strategy = TranscriptionBotTurnStartStrategy(timeout=AGGREGATION_TIMEOUT) + strategy = TranscriptionUserTurnStopStrategy(timeout=AGGREGATION_TIMEOUT) await strategy.setup(self.task_manager) should_start = None - @strategy.event_handler("on_bot_turn_started") - async def on_bot_turn_started(strategy, params): + @strategy.event_handler("on_user_turn_stopped") + async def on_user_turn_stopped(strategy, params): nonlocal should_start should_start = True @@ -272,13 +271,13 @@ class TestTranscriptionBotTurnStartStrategy(unittest.IsolatedAsyncioTestCase): self.assertTrue(should_start) async def test_st1et2(self): - strategy = TranscriptionBotTurnStartStrategy(timeout=AGGREGATION_TIMEOUT) + strategy = TranscriptionUserTurnStopStrategy(timeout=AGGREGATION_TIMEOUT) await strategy.setup(self.task_manager) should_start = None - @strategy.event_handler("on_bot_turn_started") - async def on_bot_turn_started(strategy, params): + @strategy.event_handler("on_user_turn_stopped") + async def on_user_turn_stopped(strategy, params): nonlocal should_start should_start = True @@ -310,13 +309,13 @@ class TestTranscriptionBotTurnStartStrategy(unittest.IsolatedAsyncioTestCase): self.assertTrue(should_start) async def test_set1t2(self): - strategy = TranscriptionBotTurnStartStrategy(timeout=AGGREGATION_TIMEOUT) + strategy = TranscriptionUserTurnStopStrategy(timeout=AGGREGATION_TIMEOUT) await strategy.setup(self.task_manager) should_start = None - @strategy.event_handler("on_bot_turn_started") - async def on_bot_turn_started(strategy, params): + @strategy.event_handler("on_user_turn_stopped") + async def on_user_turn_stopped(strategy, params): nonlocal should_start should_start = True @@ -344,13 +343,13 @@ class TestTranscriptionBotTurnStartStrategy(unittest.IsolatedAsyncioTestCase): self.assertTrue(should_start) async def test_siet1it2(self): - strategy = TranscriptionBotTurnStartStrategy(timeout=AGGREGATION_TIMEOUT) + strategy = TranscriptionUserTurnStopStrategy(timeout=AGGREGATION_TIMEOUT) await strategy.setup(self.task_manager) should_start = None - @strategy.event_handler("on_bot_turn_started") - async def on_bot_turn_started(strategy, params): + @strategy.event_handler("on_user_turn_stopped") + async def on_user_turn_stopped(strategy, params): nonlocal should_start should_start = True @@ -389,13 +388,13 @@ class TestTranscriptionBotTurnStartStrategy(unittest.IsolatedAsyncioTestCase): self.assertTrue(should_start) async def test_t(self): - strategy = TranscriptionBotTurnStartStrategy(timeout=AGGREGATION_TIMEOUT) + strategy = TranscriptionUserTurnStopStrategy(timeout=AGGREGATION_TIMEOUT) await strategy.setup(self.task_manager) should_start = None - @strategy.event_handler("on_bot_turn_started") - async def on_bot_turn_started(strategy, params): + @strategy.event_handler("on_user_turn_stopped") + async def on_user_turn_stopped(strategy, params): nonlocal should_start should_start = True @@ -409,13 +408,13 @@ class TestTranscriptionBotTurnStartStrategy(unittest.IsolatedAsyncioTestCase): self.assertTrue(should_start) async def test_it(self): - strategy = TranscriptionBotTurnStartStrategy(timeout=AGGREGATION_TIMEOUT) + strategy = TranscriptionUserTurnStopStrategy(timeout=AGGREGATION_TIMEOUT) await strategy.setup(self.task_manager) should_start = None - @strategy.event_handler("on_bot_turn_started") - async def on_bot_turn_started(strategy, params): + @strategy.event_handler("on_user_turn_stopped") + async def on_user_turn_stopped(strategy, params): nonlocal should_start should_start = True @@ -434,13 +433,13 @@ class TestTranscriptionBotTurnStartStrategy(unittest.IsolatedAsyncioTestCase): self.assertTrue(should_start) async def test_sie_delay_it(self): - strategy = TranscriptionBotTurnStartStrategy(timeout=AGGREGATION_TIMEOUT) + strategy = TranscriptionUserTurnStopStrategy(timeout=AGGREGATION_TIMEOUT) await strategy.setup(self.task_manager) should_start = None - @strategy.event_handler("on_bot_turn_started") - async def on_bot_turn_started(strategy, params): + @strategy.event_handler("on_user_turn_stopped") + async def on_user_turn_stopped(strategy, params): nonlocal should_start should_start = True @@ -477,14 +476,14 @@ class TestTranscriptionBotTurnStartStrategy(unittest.IsolatedAsyncioTestCase): self.assertTrue(should_start) -class TestExternalBotTurnStartStrategy(unittest.IsolatedAsyncioTestCase): +class TestExternalUserTurnStopStrategy(unittest.IsolatedAsyncioTestCase): async def test_external_strategy(self): - strategy = ExternalBotTurnStartStrategy() + strategy = ExternalUserTurnStopStrategy() should_start = None - @strategy.event_handler("on_bot_turn_started") - async def on_bot_turn_started(strategy, params): + @strategy.event_handler("on_user_turn_stopped") + async def on_user_turn_stopped(strategy, params): nonlocal should_start should_start = True diff --git a/tests/test_context_aggregators_universal.py b/tests/test_context_aggregators_universal.py index e7361d771..edcd1c0ef 100644 --- a/tests/test_context_aggregators_universal.py +++ b/tests/test_context_aggregators_universal.py @@ -30,11 +30,11 @@ from pipecat.processors.aggregators.llm_response_universal import ( LLMUserAggregatorParams, ) from pipecat.tests.utils import SleepFrame, run_test -from pipecat.turns.bot import TranscriptionBotTurnStartStrategy from pipecat.turns.mute import FirstSpeechUserMuteStrategy, FunctionCallUserMuteStrategy -from pipecat.turns.turn_start_strategies import TurnStartStrategies +from pipecat.turns.user_stop import TranscriptionUserTurnStopStrategy +from pipecat.turns.user_turn_strategies import UserTurnStrategies -USER_TURN_END_TIMEOUT = 0.2 +USER_TURN_STOP_TIMEOUT = 0.2 TRANSCRIPTION_TIMEOUT = 0.1 @@ -163,18 +163,18 @@ class TestUserAggregator(unittest.IsolatedAsyncioTestCase): expected_down_frames=expected_down_frames, ) - async def test_user_turn_end_timeout_no_transcription(self): + async def test_user_turn_stop_timeout_no_transcription(self): context = LLMContext() user_aggregator = LLMUserAggregator( context, - params=LLMUserAggregatorParams(user_turn_end_timeout=USER_TURN_END_TIMEOUT), + params=LLMUserAggregatorParams(user_turn_stop_timeout=USER_TURN_STOP_TIMEOUT), ) timeout = False - @user_aggregator.event_handler("on_user_turn_end_timeout") - async def on_user_turn_end_timeout(aggregator): + @user_aggregator.event_handler("on_user_turn_stop_timeout") + async def on_user_turn_stop_timeout(aggregator): nonlocal timeout timeout = True @@ -183,7 +183,7 @@ class TestUserAggregator(unittest.IsolatedAsyncioTestCase): frames_to_send = [ VADUserStartedSpeakingFrame(), VADUserStoppedSpeakingFrame(), - SleepFrame(sleep=USER_TURN_END_TIMEOUT + 0.1), + SleepFrame(sleep=USER_TURN_STOP_TIMEOUT + 0.1), ] await run_test( pipeline, @@ -192,29 +192,29 @@ class TestUserAggregator(unittest.IsolatedAsyncioTestCase): self.assertTrue(timeout) - async def test_user_turn_end_timeout_transcription(self): + async def test_user_turn_stop_timeout_transcription(self): context = LLMContext() user_aggregator = LLMUserAggregator( context, params=LLMUserAggregatorParams( - turn_start_strategies=TurnStartStrategies( - bot=[TranscriptionBotTurnStartStrategy(timeout=TRANSCRIPTION_TIMEOUT)], + user_turn_strategies=UserTurnStrategies( + stop=[TranscriptionUserTurnStopStrategy(timeout=TRANSCRIPTION_TIMEOUT)], ), - user_turn_end_timeout=USER_TURN_END_TIMEOUT, + user_turn_stop_timeout=USER_TURN_STOP_TIMEOUT, ), ) timeout = False bot_turn = False - @user_aggregator.event_handler("on_bot_turn_started") - async def on_bot_turn_started(aggregator, strategy): + @user_aggregator.event_handler("on_user_turn_stopped") + async def on_user_turn_stopped(aggregator, strategy): nonlocal bot_turn bot_turn = True - @user_aggregator.event_handler("on_user_turn_end_timeout") - async def on_user_turn_end_timeout(aggregator): + @user_aggregator.event_handler("on_user_turn_stop_timeout") + async def on_user_turn_stop_timeout(aggregator): nonlocal timeout timeout = True @@ -223,9 +223,9 @@ class TestUserAggregator(unittest.IsolatedAsyncioTestCase): frames_to_send = [ VADUserStartedSpeakingFrame(), VADUserStoppedSpeakingFrame(), - SleepFrame(sleep=USER_TURN_END_TIMEOUT - 0.1), + SleepFrame(sleep=USER_TURN_STOP_TIMEOUT - 0.1), TranscriptionFrame(text="Hello!", user_id="", timestamp="now"), - SleepFrame(sleep=USER_TURN_END_TIMEOUT - 0.1), + SleepFrame(sleep=USER_TURN_STOP_TIMEOUT - 0.1), SleepFrame(sleep=TRANSCRIPTION_TIMEOUT), ] await run_test( diff --git a/tests/test_user_turn_start_strategy.py b/tests/test_user_turn_start_strategy.py index dcc9c0731..072a91858 100644 --- a/tests/test_user_turn_start_strategy.py +++ b/tests/test_user_turn_start_strategy.py @@ -14,7 +14,7 @@ from pipecat.frames.frames import ( VADUserStartedSpeakingFrame, VADUserStoppedSpeakingFrame, ) -from pipecat.turns.user import ( +from pipecat.turns.user_start import ( ExternalUserTurnStartStrategy, MinWordsUserTurnStartStrategy, TranscriptionUserTurnStartStrategy,