
    qig	                         d Z ddlmZ ddlmZmZ ddlmZ ddlm	Z	m
Z
mZmZ ddlmZmZmZ e G d d             Ze G d	 d
e             Zy)z"Turn start strategy configuration.    )	dataclass)ListOptional)LocalSmartTurnAnalyzerV3)BaseUserTurnStartStrategyExternalUserTurnStartStrategy"TranscriptionUserTurnStartStrategyVADUserTurnStartStrategy)BaseUserTurnStopStrategyExternalUserTurnStopStrategy TurnAnalyzerUserTurnStopStrategyc                   L    e Zd ZU dZdZeee      ed<   dZ	eee
      ed<   d Zy)UserTurnStrategiesa  Container for user turn start and stop strategies.

    If no strategies are specified, the following defaults are used:

        start: [VADUserTurnStartStrategy, TranscriptionUserTurnStartStrategy]
         stop: [TurnAnalyzerUserTurnStopStrategy(LocalSmartTurnAnalyzerV3)]

    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.

    Nstartstopc                     | j                   st               t               g| _         | j                  st	        t                     g| _        y y )N)turn_analyzer)r   r
   r	   r   r   r   selfs    T/opt/pipecat/venv/lib/python3.12/site-packages/pipecat/turns/user_turn_strategies.py__post_init__z UserTurnStrategies.__post_init__.   s;    zz246X6Z[DJyy9H`HbcdDI     )__name__
__module____qualname____doc__r   r   r   r   __annotations__r   r   r    r   r   r   r      s9     8<E8D234;59D(401
29er   r   c                       e Zd ZdZd Zy)ExternalUserTurnStrategiesar  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.

    c                 D    t               g| _        t               g| _        y )N)r   r   r   r   r   s    r   r   z(ExternalUserTurnStrategies.__post_init__F   s    356
134	r   N)r   r   r   r   r   r   r   r   r    r    5   s    5r   r    N)r   dataclassesr   typingr   r   1pipecat.audio.turn.smart_turn.local_smart_turn_v3r   pipecat.turns.user_startr   r   r	   r
   pipecat.turns.user_stopr   r   r   r   r    r   r   r   <module>r'      s_    ) ! ! V   e e e4 5!3 5 5r   