+
    ~j1                         ^RI Ht ^RIHtHt ^RIHt ^RIHt ^RI	H
t
 Rt ! R R4      t ! R	 R
]4      tR R ltR# )   )logger)	NOT_GIVEN
NotGivenOr)is_given)	ExpFilter)EndpointingOptionsg      ?c                      a  ] tR t^
t o V 3R lR ltR]R]/V 3R lR llt]V 3R lR l4       t]V 3R	 lR
 l4       t	]V 3R lR l4       t
RV 3R lR lltRV 3R lR lltV 3R lR ltV 3R lR ltRtV tR# )BaseEndpointingc                &   < V ^8  d   QhRS[ RS[ /# )r   	min_delay	max_delayfloat)format__classdict__s   "u/Users/mitch_tango/dev/rabbit-r1-livekit/agent/.venv/lib/python3.14/site-packages/livekit/agents/voice/endpointing.py__annotate__BaseEndpointing.__annotate__   s     " "% "E "    c                ,    Wn         W n        R V n        R# FN)
_min_delay
_max_delay_overlappingselfr   r   s   &&&r   __init__BaseEndpointing.__init__   s    ##!r   r   r   c                J   < V ^8  d   QhRS[ S[,          RS[ S[,          RR/# )r   r   r   returnNr   r   )r   r   s   "r   r   r      s0     ( (&u-(FPQVFW(	(r   c               f    \        V4      '       d   Wn        \        V4      '       d	   W n        R # R # N)r   r   r   r   s   &$$r   update_optionsBaseEndpointing.update_options   s)     I'OI'O r   c                    < V ^8  d   QhRS[ /# r   r    r   )r   r   s   "r   r   r            5 r   c                    V P                   # r#   )r   r   s   &r   r   BaseEndpointing.min_delay       r   c                    < V ^8  d   QhRS[ /# r'   r   )r   r   s   "r   r   r      r(   r   c                    V P                   # r#   )r   r*   s   &r   r   BaseEndpointing.max_delay   r,   r   c                    < V ^8  d   QhRS[ /# r'   )bool)r   r   s   "r   r   r   !   s     ! !T !r   c                    V P                   # r#   r   r*   s   &r   overlappingBaseEndpointing.overlapping    s       r   c                *   < V ^8  d   QhRS[ RS[RR/# r   
started_atr4   r    Nr   r1   )r   r   s   "r   r   r   $   s#     ( (U ( (RV (r   c                    W n         R # r#   r3   r   r8   r4   s   &&&r   on_start_of_speech"BaseEndpointing.on_start_of_speech$   s    'r   c                *   < V ^8  d   QhRS[ RS[RR/# r   ended_atshould_ignorer    Nr9   )r   r   s   "r   r   r   '   s#     " " "t "PT "r   c                    R V n         R# r   r3   )r   r@   rA   s   &&&r   on_end_of_speech BaseEndpointing.on_end_of_speech'   s
    !r   c                $   < V ^8  d   QhRS[ RR/# r   r8   r    Nr   )r   r   s   "r   r   r   *   s      5 T r   c                    R # r#    r   r8   s   &&r   on_start_of_agent_speech(BaseEndpointing.on_start_of_agent_speech*       r   c                $   < V ^8  d   QhRS[ RR/# r   r@   r    Nr   )r   r   s   "r   r   r   -   s      u  r   c                    R # r#   rH   r   r@   s   &&r   on_end_of_agent_speech&BaseEndpointing.on_end_of_agent_speech-   rL   r   )r   r   r   NF)__name__
__module____qualname____firstlineno__r   r   r$   propertyr   r   r4   r<   rC   rJ   rQ   __static_attributes____classdictcell__)r   s   @r   r
   r
   
   s     " "
(09(Zc( (     ! !( (" "  r   r
   c                   @  a a ] tR t^1t oRV3R lV 3R lllt]V3R lR l4       t]V3R lR l4       t]V3R lR l4       t]V3R	 lR
 l4       t	]V3R lR l4       t
V3R lR ltV3R lR ltRV3R lR lltRV3R lR lltR]R]R]/V3R lR lltRtVtV ;t# )DynamicEndpointingc                ,   < V ^8  d   QhRS[ RS[ RS[ /# )r   r   r   alphar   )r   r   s   "r   r   DynamicEndpointing.__annotate__2   s"     ' '% 'E '% 'r   c                   < \         SV `  WR7       \        W1WR7      V n        \        W2WR7      V n        RV n        RV n        RV n        RV n        RV n	        R# )a  
Dynamically adjust the endpointing delay based on the speech activity.

Args:
    min_delay: Minimum delay in seconds.
    max_delay: Maximum delay in seconds.
    alpha: Exponential moving average coefficient. The higher the value, the more weight is given to the history. Defaults to 0.9.

The endpointing delay is adjusted based on the following information:

1. Pauses between utterances:

[utterance] [pause] [utterance] [pause] [utterance] (<- min delay should cover this)

2. Pauses between an utterance and next immediate interruption:

[utterance] [   pause   ] [immediate interruption] (<- this should be a false EOT, and min delay should cover this)
                [agent speech interrupted]

3. Pauses between a user utterance and agent speech:

[utterance] [pause]                  (<- max delay should cover this)
                   [agent speech]    (this could be interrupted later, but that would be the next turn)
r   r   )r^   initialmin_valmax_valNF)
superr   r   _utterance_pause_turn_pause_utterance_started_at_utterance_ended_at_agent_speech_started_at_agent_speech_ended_at	_speaking)r   r   r   r^   	__class__s   &&&&r   r   DynamicEndpointing.__init__2   sd    4 	9B )I!
 %I
 48"15 6:%48#r   c                    < V ^8  d   QhRS[ /# r'   r   )r   r   s   "r   r   r_   \   s     
 
5 
r   c                v    V P                   P                  e   V P                   P                  # V P                  # r#   )rf   valuer   r*   s   &r   r   DynamicEndpointing.min_delay[   s:     $$**6 !!''	
 	
r   c                    < V ^8  d   QhRS[ /# r'   r   )r   r   s   "r   r   r_   d   s     - -5 -r   c                    V P                   P                  e   V P                   P                  MV P                  p\        WP                  4      # r#   )rg   rq   r   maxr   )r   turn_vals   & r   r   DynamicEndpointing.max_delayc   s<    -1-=-=-C-C-O4##))UYUdUd8^^,,r   c                    < V ^8  d   QhRS[ /# r'   r   )r   r   s   "r   r   r_   i   s     M M Mr   c                    V P                   f   R# V P                  f   R# \        ^ V P                  V P                   ,
          4      # N        )ri   rh   ru   r*   s   &r   between_utterance_delay*DynamicEndpointing.between_utterance_delayh   s>    ##+%%-1d0043K3KKLLr   c                    < V ^8  d   QhRS[ /# r'   r   )r   r   s   "r   r   r_   r   s     P PE Pr   c                    V P                   f   R# V P                  f   R# \        ^ V P                   V P                  ,
          4      # rz   )rj   ri   ru   r*   s   &r   between_turn_delay%DynamicEndpointing.between_turn_delayq   s>    ((0##+1d33d6N6NNOOr   c                6   < V ^8  d   QhRS[ S[S[3,          /# r'   )tupler   )r   r   s   "r   r   r_   {   s     
 
eE5L.A 
r   c                    V P                   f   R# V P                  f   R# V P                  \        V P                  V P                  ,
          4      3# )z
Returns the two pauses in the following case:
[utterance] [first val][second val] [immediate interruption]
                       [agent speech interrupted]
)r{   r{   )rh   rj   r   absr|   r*   s   &r   immediate_interruption_delay/DynamicEndpointing.immediate_interruption_delayz   sT     %%-O((0O ##,,t/F/FFG
 	
r   c                $   < V ^8  d   QhRS[ RR/# rF   r   )r   r   s   "r   r   r_      s     " "5 "T "r   c                .    Wn         R V n        RV n        R # NFrj   rk   r   rI   s   &&r   rJ   +DynamicEndpointing.on_start_of_agent_speech   s    (2%&*#!r   c                $   < V ^8  d   QhRS[ RR/# rN   r   )r   r   s   "r   r   r_      s     	" 	"u 	" 	"r   c                    V P                   e0   V P                  e   V P                  V P                   8  d   Wn        RV n        R # r   r   rP   s   &&r   rQ   )DynamicEndpointing.on_end_of_agent_speech   s>     ((4''/**T-J-JJ*2'!r   c                *   < V ^8  d   QhRS[ RS[RR/# r7   r9   )r   r   s   "r   r   r_      s#      U  RV r   c                `   V P                   '       d   R # V P                  ey   V P                  ek   V P                  e]   V P                  V P                  8  dB   V'       d:   V P                  R,
          V n        \        P
                  ! RV P                  4       Wn        W n         RV n        R # )NgMbP?zutterance ended at adjusted: %sT)r   rh   ri   rj   r   tracerl   r;   s   &&&r   r<   %DynamicEndpointing.on_start_of_speech   s    
 &&2((4--9((4+E+EE'+'D'Dt'KD$LL1((
 &0"'r   c                *   < V ^8  d   QhRS[ RS[RR/# r?   r9   )r   r   s   "r   r   r_      s(     k" k" k"t k"PT k"r   c                   V'       d   V P                   '       d   V P                  e   V P                  eq   \        V P                  V P                  ,
          4      \        8  dB   \
        P                  ! R\        V P                  V P                  ,
          4      \        4       MRV n         RV n        R V n        R V n        R # V P                   '       g   V P                  Eel   V P                  Ef]   V P                  w  r4^ Tu;8  d   V P                  8:  d   M M^ Tu;8  d   V P                  8:  d   M MV P                  ;p^ 8  do   V P                  pV P                  P                  RV4       \
        P                   ! RVV P                  RRRVRVR	VR
V P                  RV P                  /R7       EMV P"                  ;p^ 8  d   V P                  pV P$                  P                  RV4       \
        P                   ! RVV P                  RRRVR
V P                  RV P                  RV P                  RV P"                  /R7       EMV P"                  ;p^ 8  dj   V P                  pV P$                  P                  RV4       \
        P                   ! RVV P                  RRRVR
V P                  RV P                  /R7       MV P                  ;p^ 8  d   V P                  fw   V P                  fi   V P                  pV P                  P                  RV4       \
        P                   ! RVV P                  RRRVR
V P                  RV P                  /R7       Wn        R V n        R V n	        RV n        RV n         R # )Nzlignoring should_ignore=True: user speech started within %.3fs of agent speech (within grace period of %.3fs)Fg      ?z'min endpointing delay updated: %s -> %sreasonzimmediate interruptionpauseinterruption_delay
turn_delayr   r   )extraz'max endpointing delay updated: %s -> %sznew turn (interruption)r|   r   z4max endpointing delay updated due to pause: %s -> %sznew turnzpause between utterances)r   rh   rj   r   *_AGENT_SPEECH_LEADING_SILENCE_GRACE_PERIODr   r   rl   ri   rk   r   r   r   r|   rf   applydebugr   rg   )r   r@   rA   r   r   r   prev_vals   &&&    r   rC   #DynamicEndpointing.on_end_of_speech   s   T... **611=22T5R5RRS<= 522T5R5RRS>	 %*!!&-1*+/())5$:U:U:] .2-N-N*J'94>>95t~~5":::Ua?>>%%++C7=NN ":,.@$j#T^^#T^^	  222%a7>>  &&sE2=NN ";#T^^#T^^143O3O,d.E.E	 000A5>>  &&sE2JNN *#T^^#T^^		
 666!;//7119>>%%++C7=NN "<#T^^#T^^		
 $, (,%&*#!r   r   r   r^   c                `   < V ^8  d   QhRS[ S[,          RS[ S[,          RS[ S[,          RR/# )r   r   r   r^   r    Nr!   )r   r   s   "r   r   r_      sD     0 0 e$0 e$	0
 % 0 
0r   c               T   \        V4      '       d^   Wn        V P                  P                  V P                  V P                  R 7       V P                  P                  V P                  R7       \        V4      '       d^   W n        V P                  P                  V P
                  V P
                  R7       V P                  P                  V P
                  R7       \        V4      '       d;   V P                  P                  VR7       V P                  P                  VR7       R# R# ))rb   rc   )rc   )rb   rd   )rd   )r^   N)r   r   rf   resetrg   r   )r   r   r   r^   s   &$$$r   r$   !DynamicEndpointing.update_options   s     I'O!!'''Y""4??";I'O""4??DOO"T!!'''@E??!!''e'4"""/ r   )
rk   rj   r   r   r   rl   rg   ri   rf   rh   )g?rS   )rT   rU   rV   rW   r   rX   r   r   r|   r   r   rJ   rQ   r<   rC   r   r$   rY   rZ   __classcell__)rm   r   s   @@r   r\   r\   1   s     ' 'R 
 
 - - M M P P 
 
 " "
	" 	" 0k" k"Z0 (10 (1	0
 $-0 0 0r   r\   c                0    V ^8  d   QhR\         R\        /# )r   optionsr    )r   r
   )r   s   "r   r   r   6  s       2  r   c                     V P                  R R4      R8X  d$   \        V R,          V R,          V R,          R7      #  \        V R,          V R,          R7      # )modefixeddynamicr   r   r^   )r   r   r^   ra   )getr\   r
   )r   s   &r   create_endpointingr   6  sZ    
++fg
&%!+.!+.g& 
 "!+.!+. r   N)logr   typesr   r   utilsr   utils.exp_filterr   turnr   r   r
   r\   r   rH   r   r   <module>r      s9     )  ( $-1 *$ $NB0 B0Jr   