+
    ~j                    Z   ^ RI Ht ^ RIt^ RIt^ RIHtHt ^ RIHtH	t	 ^ RI
HtHt ^ RIHtHt ^ RIHt ^ RIHt ^ R	IHt ^R
IHt ^RIHt ] ! R R]]4      4       t] ! R R4      4       t] ! R R4      4       t ! R R]]P<                  ]R,          ,          4      t ! R R]4      t R# )    )annotationsN)ABCabstractmethod)AsyncIterableAsyncIterator)	dataclassfield)Enumunique)Literal)rtc)Metadata)
VADMetrics)aioc                  "    ] tR t^tRtRtRtRtR# )VADEventTypestart_of_speechinference_doneend_of_speech N)__name__
__module____qualname____firstlineno__START_OF_SPEECHINFERENCE_DONEEND_OF_SPEECH__static_attributes__r       g/Users/mitch_tango/dev/rabbit-r1-livekit/agent/.venv/lib/python3.14/site-packages/livekit/agents/vad.pyr   r      s    'O%N#Mr   r   c                      ] tR t^t$ RtR]R&    R]R&    R]R&    R]R&    R]R	&    ]! ]R
7      tR]R&    Rt	R]R&    Rt
R]R&    RtR]R&    RtR]R&    RtR]R&   RtR# )VADEventzD
Represents an event detected by the Voice Activity Detector (VAD).
r   typeintsamples_indexfloat	timestampspeech_durationsilence_duration)default_factoryzlist[rtc.AudioFrame]frames        probabilityinference_durationFboolspeakingraw_accumulated_silenceraw_accumulated_speechr   N)r   r   r   r   __doc____annotations__r	   listr+   r-   r.   r0   r1   r2   r   r   r   r    r"   r"      s     Wd:45#(#>F > KP ##]Hd>%(U(+$'E'*r   r"   c                  "    ] tR t^Gt$ R]R&   RtR# )VADCapabilitiesr&   update_intervalr   N)r   r   r   r   r4   r   r   r   r    r7   r7   G   s    r   r7   c                     a  ] tR t^LtR V 3R llt]R R l4       t]R R l4       t]R R l4       t]	R	 R
 l4       t
RtV ;t# )VADc                    V ^8  d   QhRRRR/# )   capabilitiesr7   returnNoner   )formats   "r    __annotate__VAD.__annotate__M   s     G G GD Gr   c               	   < \         SV `  4        Wn        \        V 4      P                   R \        V 4      P
                   2V n        R# ).N)super__init___capabilitiesr#   r   r   _label)selfr=   	__class__s   &$r    rF   VAD.__init__M   s<    )d../qd1D1D0EFr   c                   V ^8  d   QhRR/# r<   r>   strr   )r@   s   "r    rA   rB   S   s      s r   c                	    R # unknownr   rI   s   &r    model	VAD.modelR       r   c                   V ^8  d   QhRR/# rM   r   )r@   s   "r    rA   rB   W   s      # r   c                	    R # rP   r   rR   s   &r    providerVAD.providerV   rU   r   c                   V ^8  d   QhRR/# )r<   r>   r7   r   )r@   s   "r    rA   rB   [   s     " "o "r   c                	    V P                   # N)rG   rR   s   &r    r=   VAD.capabilitiesZ   s    !!!r   c                   V ^8  d   QhRR/# )r<   r>   	VADStreamr   )r@   s   "r    rA   rB   _   s    &&	&r   c                	    R # r\   r   rR   s   &r    stream
VAD.stream^   s    #&r   )rG   rH   )r   r   r   r   rF   propertyrS   rX   r=   r   ra   r   __classcell__)rJ   s   @r    r:   r:   L   s[    G G
     " " & &r   r:   metrics_collectedc                      ] tR t^bt ! R R4      tR R lt]R R l4       tR R ltR	 R
 lt	R R lt
R R ltR R ltR R ltR R ltR R ltR R ltRtR# )r_   c                      ] tR t^ctRtR# )VADStream._FlushSentinelr   N)r   r   r   r   r   r   r   r    _FlushSentinelrh   c   s    r   ri   c                    V ^8  d   QhRRRR/# )r<   vadr:   r>   r?   r   )r@   s   "r    rA   VADStream.__annotate__f   s     G GC GD Gr   c                	  a  VS n         \        P                  ! 4       S n        \        P
                  \        P                  \        P                  ,          ,          ! 4       S n
        \        P
                  \        ,          ! 4       S n        \        P                  P                  S P                  ^4      S n        S P                  w  S n        p\"        P$                  ! S P'                  V4      RR7      S n        \"        P$                  ! S P+                  4       4      S n        S P,                  P/                  V 3R l4       R# )r<   zTTS._metrics_task)namec                8   < SP                   P                  4       # r\   )	_event_chclose)_rI   s   &r    <lambda>$VADStream.__init__.<locals>.<lambda>s   s    t~~/C/C/Er   N)_vadtimeperf_counter_last_activity_timer   Chanr   
AudioFramer_   ri   	_input_chr"   rp   	itertoolstee
_tee_aiter_event_aiterasynciocreate_task_metrics_monitor_task_metrics_task
_main_task_taskadd_done_callback)rI   rk   monitor_aiters   f& r    rF   VADStream.__init__f   s    	#'#4#4#6 #..93K3K"KLN(+---++DNNA>+/??(=$00&&}5<O
 (():;


$$%EFr   c                   V ^8  d   QhRR/# r<   r>   r?   r   )r@   s   "r    rA   rl   v   s    ++$+r   c                	   "   R # 5ir\   r   rR   s   &r    r   VADStream._main_tasku   s     (+s   c                    V ^8  d   QhRRRR/# )r<   event_aiterzAsyncIterable[VADEvent]r>   r?   r   )r@   s   "r    rA   rl   x   s     ? ?7N ?SW ?r   c                  "   Rp^ pV  Rj  xL
  pVP                   \        P                  8X  d   W$P                  ,          pV^,          pV^V P                  P
                  P                  ,          8  d   \        \        P                  ! 4       \        P                  ! 4       V P                  ,
          VVV P                  P                  \        V P                  P                  V P                  P                  R7      R7      pV P                  P                  RV4       Rp^ pEK"  EK%  VP                   \        P                   \        P"                  39   g   EKW  \        P                  ! 4       V n
        EKt   ELpEDrR# 5i)zTask used to collect metricsr,   N)
model_namemodel_provider)r'   	idle_timeinference_duration_totalinference_countlabelmetadatare   )r#   r   r   r.   ru   r=   r8   r   rv   rw   rx   rH   r   rS   rX   emitr   r   )rI   r   r   r   evvad_metricss   &&    r    r   VADStream._metrics_monitor_taskx   s"     $' # 	? 	?"ww,555(,A,AA(1$"a$))*@*@*P*P&PP","&))+"&"3"3"58P8P"P1I(7"ii..!)'+yytyyGYGY"	#K IINN#6D/2,&'O Q \99<;U;UVV+/+<+<+>(+	?s,   FF E=F E	F F=F  Fc                    V ^8  d   QhRRRR/# )r<   framezrtc.AudioFramer>   r?   r   )r@   s   "r    rA   rl      s     * * *4 *r   c                |    V P                  4        V P                  4        V P                  P                  V4       R# )z$Push some audio frame to be analyzedN)_check_input_not_ended_check_not_closedr{   send_nowait)rI   r   s   &&r    
push_frameVADStream.push_frame   s,    ##% ""5)r   c                   V ^8  d   QhRR/# r   r   )r@   s   "r    rA   rl      s     : :t :r   c                    V P                  4        V P                  4        V P                  P                  V P	                  4       4       R# )z#Mark the end of the current segmentN)r   r   r{   r   ri   rR   s   &r    flushVADStream.flush   s5    ##% ""4#6#6#89r   c                   V ^8  d   QhRR/# r   r   )r@   s   "r    rA   rl      s      4 r   c                Z    V P                  4        V P                  P                  4        R# )z3Mark the end of input, no more audio will be pushedN)r   r{   rq   rR   s   &r    	end_inputVADStream.end_input   s    

r   c                   V ^8  d   QhRR/# r   r   )r@   s   "r    rA   rl      s     ' 'd 'r   c                >  "   V P                   P                  4        \        P                  ! V P                  4      G Rj  xL
  V P
                  P                  4        V P                  G Rj  xL
  V P                  P                  4       G Rj  xL
  R#  LV L* L
5i)zClose the stream immediatelyN)	r{   rq   r   cancel_and_waitr   rp   r   r~   acloserR   s   &r    r   VADStream.aclose   sm     !!$**---    oo$$&&& 	. &s5   >B B-B.B/!BBBBBc                   V ^8  d   QhRR/# )r<   r>   r"   r   )r@   s   "r    rA   rl      s     	 	 	r   c                	  "    V P                   P                  4       G R j  xL
 pV#  L  \         dM    T P                  P	                  4       '       g%   T P                  P                  4       ;p'       d   Th\        R hi ; i5ir\   )r   	__anext__StopAsyncIterationr   	cancelled	exception)rI   valexcs   &  r    r   VADStream.__anext__   sr     	/))3355C 
 6! 	/::''))djj6J6J6L/Ls/L	$$.		/s1   B* (* B* *B!B7
BBc                   V ^8  d   QhRR/# )r<   r>   zAsyncIterator[VADEvent]r   )r@   s   "r    rA   rl      s      2 r   c                	    V # r\   r   rR   s   &r    	__aiter__VADStream.__aiter__   s    r   c                   V ^8  d   QhRR/# r   r   )r@   s   "r    rA   rl      s     M M4 Mr   c                	    V P                   P                  '       d1   \        V 4      p\        VP                   R VP
                   R24      hR# )rD   z
 is closedN)rp   closedr#   RuntimeErrorr   r   rI   clss   & r    r   VADStream._check_not_closed   sA    >>   t*C#..!13<<.
KLL !r   c                   V ^8  d   QhRR/# r   r   )r@   s   "r    rA   rl      s     O O Or   c                	    V P                   P                  '       d1   \        V 4      p\        VP                   R VP
                   R24      hR# )rD   z input endedN)r{   r   r#   r   r   r   r   s   & r    r    VADStream._check_input_not_ended   sA    >>   t*C#..!13<<.MNN !r   )r   rp   r{   rx   r   r   r~   ru   N)r   r   r   r   ri   rF   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r_   r_   b   sW     G + +?:*:
'	M
O Or   r_   )!
__future__r   r   rv   abcr   r   collections.abcr   r   dataclassesr   r	   enumr
   r   typingr   livekitr   livekit.agents.metrics.baser   metricsr   utilsr   rN   r   r"   r7   EventEmitterr:   r_   r   r   r    <module>r      s    "   # 8 (    0   $3 $ $ *+ *+ *+Z   '#s(; <= ',bO bOr   