o
    i                     @  s  d dl mZ d dlZd dlZd dlmZmZ d dlmZm	Z	 d dl
mZmZ d dlmZmZ d dlmZ d dlmZ d d	lmZ d
dlmZ d
dlmZ eG dd deeZeG dd dZeG dd dZG dd deejed  ZG dd deZ dS )    )annotationsN)ABCabstractmethod)AsyncIterableAsyncIterator)	dataclassfield)Enumunique)Literal)rtc)Metadata   )
VADMetrics)aioc                   @  s   e Zd ZdZdZdZdS )VADEventTypestart_of_speechinference_doneend_of_speechN)__name__
__module____qualname__START_OF_SPEECHINFERENCE_DONEEND_OF_SPEECH r   r   T/var/www/html/livekit_bhavya/venv/lib/python3.10/site-packages/livekit/agents/vad.pyr      s    r   c                   @  s   e Zd ZU dZded< 	 ded< 	 ded< 	 ded< 	 ded	< 	 eed
Zded< 	 dZded< 	 dZ	ded< 	 dZ
ded< 	 dZded< 	 dZded< dS )VADEventzL
    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_speechN)r   r   r   __doc____annotations__r   listr&   r(   r)   r+   r,   r-   r   r   r   r   r      s0   
 r   c                   @  s   e Zd ZU ded< dS )VADCapabilitiesr!   update_intervalN)r   r   r   r/   r   r   r   r   r1   G   s   
 r1   c                      sV   e Zd Zd fddZeddd	Zedd
dZedddZedddZ	  Z
S )VADcapabilitiesr1   returnNonec                  s0   t    || _t| j dt| j | _d S )N.)super__init___capabilitiesr   r   r   _label)selfr4   	__class__r   r   r9   M   s   
 zVAD.__init__strc                 C     dS Nunknownr   r<   r   r   r   modelR      z	VAD.modelc                 C  r@   rA   r   rC   r   r   r   providerV   rE   zVAD.providerc                 C  s   | j S N)r:   rC   r   r   r   r4   Z   s   zVAD.capabilities	VADStreamc                 C  s   d S rG   r   rC   r   r   r   stream^      z
VAD.stream)r4   r1   r5   r6   )r5   r?   )r5   r1   )r5   rH   )r   r   r   r9   propertyrD   rF   r4   r   rI   __classcell__r   r   r=   r   r3   L   s    r3   metrics_collectedc                   @  s   e Zd ZG dd dZd$ddZed%d	d
Zd&ddZd'ddZd%ddZ	d%ddZ
d%ddZd(ddZd)ddZd%dd Zd%d!d"Zd#S )*rH   c                   @  s   e Zd ZdS )zVADStream._FlushSentinelN)r   r   r   r   r   r   r   _FlushSentinelc   s    rN   vadr3   r5   r6   c                   s   | _ t  _tjtjtj	B    _
tjt   _tj jd _ j\ _}tj |dd _t   _ j fdd d S )N   zTTS._metrics_task)namec                   s
    j  S rG   )	_event_chclose)_rC   r   r   <lambda>s   s   
 z$VADStream.__init__.<locals>.<lambda>)_vadtimeperf_counter_last_activity_timer   Chanr   
AudioFramerH   rN   	_input_chr   rR   	itertoolstee
_tee_aiter_event_aiterasynciocreate_task_metrics_monitor_task_metrics_task
_main_task_taskadd_done_callback)r<   rO   monitor_aiterr   rC   r   r9   f   s   

zVADStream.__init__c                   s   d S rG   r   rC   r   r   r   re   u   s   zVADStream._main_taskevent_aiterAsyncIterable[VADEvent]c                   s   d}d}|2 zS3 dH W }|j tjkrL||j7 }|d7 }|d| jjj krKtt t	 | j
 ||| jjt| jj| jjdd}| jd| d}d}q|j tjtjfv rZt	 | _
q6 dS )zTask used to collect metricsr'   r   Nr   )
model_namemodel_provider)r"   	idle_timeinference_duration_totalinference_countlabelmetadatarM   )r   r   r   r)   rV   r4   r2   r   rW   rX   rY   r;   r   rD   rF   emitr   r   )r<   ri   rn   ro   evvad_metricsr   r   r   rc   x   s4   


zVADStream._metrics_monitor_taskframertc.AudioFramec                 C  s    |    |   | j| dS )z Push some text to be synthesizedN)_check_input_not_ended_check_not_closedr\   send_nowait)r<   ru   r   r   r   
push_frame   s   zVADStream.push_framec                 C  s$   |    |   | j|   dS )z#Mark the end of the current segmentN)rw   rx   r\   ry   rN   rC   r   r   r   flush   s   zVADStream.flushc                 C  s   |    | j  dS )z2Mark the end of input, no more text will be pushedN)r{   r\   rS   rC   r   r   r   	end_input   s   zVADStream.end_inputc                   sH   | j   t| jI dH  | j  | jI dH  | j I dH  dS )zClose the stream immediatelyN)	r\   rS   r   cancel_and_waitrf   rR   rd   r_   acloserC   r   r   r   r~      s   

zVADStream.acloser   c                   sJ   z| j  I d H }W |S  ty$   | j s!| j  }r!|td w rG   )r`   	__anext__StopAsyncIterationrf   	cancelled	exception)r<   valexcr   r   r   r      s   zVADStream.__anext__AsyncIterator[VADEvent]c                 C  s   | S rG   r   rC   r   r   r   	__aiter__   rJ   zVADStream.__aiter__c                 C  ,   | j jrt| }t|j d|j dd S )Nr7   z
 is closed)rR   closedr   RuntimeErrorr   r   r<   clsr   r   r   rx         zVADStream._check_not_closedc                 C  r   )Nr7   z input ended)r\   r   r   r   r   r   r   r   r   r   rw      r   z VADStream._check_input_not_endedN)rO   r3   r5   r6   )r5   r6   )ri   rj   r5   r6   )ru   rv   r5   r6   )r5   r   )r5   r   )r   r   r   rN   r9   r   re   rc   rz   r{   r|   r~   r   r   rx   rw   r   r   r   r   rH   b   s    








rH   )!
__future__r   ra   rW   abcr   r   collections.abcr   r   dataclassesr   r   enumr	   r
   typingr   livekitr   livekit.agents.metrics.baser   metricsr   utilsr   r?   r   r   r1   EventEmitterr3   rH   r   r   r   r   <module>   s(    -