
    /jS                        S SK Jr  S SKrS SKJrJr  SSKJr  SSKJ	r	  Sr
 " S S	\R                  R                  5      r " S
 S\R                  R                  5      rg)    )annotationsN)agentsrtc   logger) FRAME_USERDATA_AIC_VAD_ATTRIBUTEi  c                  b   ^  \ rS rSrSrSU 4S jjr\S	S j5       r\S	S j5       rS
S jr	Sr
U =r$ )VAD   z
A VAD implementation that relies on the accompanying ai-coustics
:func:`~livekit.plugins.ai_coustics.audio_enhancement` FrameProcessor
instead of performing its own inference.
c                   > [         TU ]  [        R                  R	                  SS9S9  [
        R                  [           " 5       U l        g )NgMb?)update_interval)capabilities)	super__init__r   vadVADCapabilitiesweakrefWeakSet	VADStream_streams)self	__class__s    P/app/agent/.venv/lib/python3.13/site-packages/livekit/plugins/ai_coustics/vad.pyr   VAD.__init__   s9    fjj&@&@QV&@&WX	24    c                    gNzai-coustics r   s    r   model	VAD.model       r   c                    gr   r   r    s    r   providerVAD.provider   r#   r   c                R    [        U 5      nU R                  R                  U5        U$ )N)r   r   add)r   streams     r   r)   
VAD.stream#   s"    4&!r   )r   returnNone)r,   str)r,   r   )__name__
__module____qualname____firstlineno____doc__r   propertyr!   r%   r)   __static_attributes____classcell__r   s   @r   r   r      s?    5     r   r   c                  n   ^  \ rS rSrSU 4S jjr\R                  R                  \S9SS j5       r	Sr
U =r$ )r   )   c                2   > [         TU ]  U5        SU l        g )Nr   )r   r   _has_no_metadata_counter)r   r   r   s     r   r   VADStream.__init__*   s    ()%r   r   c                >  #    SnSnSnSn/ nSnSnSnSn	U R                     S h  vN n
[        U
[        R                  5      (       d  M*  U(       d  U
R                  nO(U
R                  U:w  a  [
        R                  " S5        Mf  U
R                  R                  [        5      nUc[  [        U
R                  5      S:  a@  U R                  S:  a  [
        R                  " S[        5        U =R                  S-  sl        M  SU l        UnU
R                  nXjR                  -  nX}-  nU(       a  X-  nOX-  n	U R                  R!                  ["        R$                  R'                  ["        R$                  R(                  R*                  UUUU	SSU
/UUUS	95        UR-                  U
5        U(       a  US-  nSnU(       d  S
nSn	U R                  R!                  ["        R$                  R'                  ["        R$                  R(                  R.                  UUUU R0                  R2                  R4                  -  SSS[7        U5      S
SUS	95        OUS-  nSnU(       a  SnSnU R                  R!                  ["        R$                  R'                  ["        R$                  R(                  R8                  UUSUU R0                  R2                  R4                  -  SS[7        U5      SUSS	95        / n[        U5      [:        :  d  GM  U[:        * S  nGM   GN
 g 7f)Nr   Fg        z3a frame with another sample rate was already pushed
   zNo VAD metadata found in frame.userdata['%s'] make sure that you are using noise_cancellation=audio_enhancement() on the audio input. This VAD plugin relies on its preprocessing.r   g      ?)typesamples_index	timestampspeech_durationsilence_durationprobabilityinference_durationframesspeakingraw_accumulated_silenceraw_accumulated_speechT)	_input_ch
isinstancer   
AudioFramesample_rater   erroruserdatagetr	   lendatar;   durationsamples_per_channel	_event_chsend_nowaitr   r   VADEventVADEventTypeINFERENCE_DONEappendSTART_OF_SPEECH_vadr   r   listEND_OF_SPEECHSPEECH_BUFFER_MAX_FRAMES)r   rM   rG   speech_frame_countsilence_frame_countspeech_buffercurrent_samplerA   rB   rC   input_framevad_metadatais_speakingframe_durations                 r   
_main_taskVADStream._main_task.   s    .0	!% n	J+k3>>::)55((K7RS&//334TUL#{''(1,44r9K =	 11Q6101- ,K(11N===N'I1 2  NN&&

##00??"0'$3%5 #'*'=%,?+= $     -"a'"&'##H'*$NN..

++!'!8!8!H!H*8&/,>"ii44DD-E-0(+/2#'#6%)453E , " $q(#%&"$H&)ONN..

++!'!8!8!F!F*8&/,/-@"ii44DD.E(+/2#'#6%*4G34 , " %'M =!$<< -/G.G.H I]n	Js,   LLLLKLLLL)r;   )r   r   r,   r-   r+   )r/   r0   r1   r2   r   r   utilslog_exceptionsr   rh   r5   r6   r7   s   @r   r   r   )   s2    * \\   /yJ 0yJr   r   )
__future__r   r   livekitr   r   logr   pluginr	   r_   r   r   r   r   r   r   <module>rp      sJ    #    4 &**.. 2J

$$ Jr   