o
    iV                     @  s   d dl mZ d dlZd dlmZ d dl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 d	d
lmZmZmZmZmZ ed e
jdZG dd deZG dd deZdS )    )annotationsN)AsyncIterable)Any   )utils)DEFAULT_API_CONNECT_OPTIONS	NOT_GIVENAPIConnectOptions
NotGivenOr)VADVADEventType   )STTRecognizeStreamSpeechEventSpeechEventTypeSTTCapabilities)	max_retrytimeoutc                      s   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e	dd'ddZ
ee	dd(ddZd)d d!Zd*d"d#Z  ZS )+StreamAdaptersttr   vadr   returnNonec                  s8   t  jtddddd || _|| _| jd| j d S )NTF)	streaminginterim_resultsdiarization)capabilitiesmetrics_collected)super__init__r   _vad_stton_on_metrics_collected)selfr   r   	__class__ c/var/www/html/livekit_bhavya/venv/lib/python3.10/site-packages/livekit/agents/stt/stream_adapter.pyr       s   zStreamAdapter.__init__c                 C  s   | j S N)r"   r%   r(   r(   r)   wrapped_stt!   s   zStreamAdapter.wrapped_sttstrc                 C     | j jS r*   )r"   modelr+   r(   r(   r)   r/   %      zStreamAdapter.modelc                 C  r.   r*   )r"   providerr+   r(   r(   r)   r1   )   r0   zStreamAdapter.provider)languageconn_optionsbufferutils.AudioBufferr2   NotGivenOr[str]r3   r	   r   c                  s   | j j|||dI d H S )Nr4   r2   r3   )r"   	recognize)r%   r4   r2   r3   r(   r(   r)   _recognize_impl-   s   zStreamAdapter._recognize_implr   c                C  s   t | | j| j||dS )N)r   r,   r2   r3   )StreamAdapterWrapperr!   r"   )r%   r2   r3   r(   r(   r)   stream8   s   zStreamAdapter.streamargsr   kwargsc                 O  s   | j dg|R i | d S Nr   )emit)r%   r<   r=   r(   r(   r)   r$   F   s   z#StreamAdapter._on_metrics_collectedc                   s   | j d| j d S r>   )r"   offr$   r+   r(   r(   r)   acloseI   s   zStreamAdapter.aclose)r   r   r   r   r   r   )r   r   )r   r-   )r4   r5   r2   r6   r3   r	   r   r   )r2   r6   r3   r	   r   r   )r<   r   r=   r   r   r   r   r   )__name__
__module____qualname__r    propertyr,   r/   r1   r   r   r9   r;   r$   rA   __classcell__r(   r(   r&   r)   r      s     
r   c                      s2   e Zd Zd fddZdddZdddZ  ZS )r:   r   r   r   r   r,   r2   r6   r3   r	   r   r   c                  s,   t  j|td || _|| _|| _|| _d S )N)r   r3   )r   r    *DEFAULT_STREAM_ADAPTER_API_CONNECT_OPTIONSr!   _wrapped_stt_wrapped_stt_conn_options	_language)r%   r   r   r,   r2   r3   r&   r(   r)   r    N   s
   	
zStreamAdapterWrapper.__init__event_aiterAsyncIterable[SpeechEvent]c                   s   |2 z3 d H W }q6 d S r*   r(   )r%   rL   _r(   r(   r)   _metrics_monitor_task]   s   z*StreamAdapterWrapper._metrics_monitor_taskc                   s    j  d
 fdd}d
 fdd}tj| ddtj| d	dg}ztj| I d H  W tjj| I d H   I d H  d S tjj| I d H   I d H  w )Nr   r   c                    sD    j 2 z3 dH W } t|  jr  q|  q6   dS )zforward input to vadN)	_input_ch
isinstance_FlushSentinelflush
push_frame	end_input)inputr%   
vad_streamr(   r)   _forward_inputd   s   z1StreamAdapterWrapper._run.<locals>._forward_inputc                    s   2 zX3 dH W } | j tjkr jttj q| j tjkr[ jttjd t	| j
} jj| j jdI dH }t|jdkrEq|jd jsLq jttj|jd gd q6 dS )zrecognize speech from vadN)typer7   r   )rZ   alternatives)rZ   r   START_OF_SPEECH	_event_chsend_nowaitr   r   END_OF_SPEECHr   merge_framesframesrI   r8   rK   rJ   lenr[   textFINAL_TRANSCRIPT)eventmerged_framest_eventrW   r(   r)   
_recognizen   s8   
z-StreamAdapterWrapper._run.<locals>._recognizeforward_input)namer8   rB   )	r!   r;   asynciocreate_taskgatherr   aiocancel_and_waitrA   )r%   rY   rh   tasksr(   rW   r)   _runa   s   

 zStreamAdapterWrapper._run)r   r   r   r   r,   r   r2   r6   r3   r	   r   r   )rL   rM   r   r   rB   )rC   rD   rE   r    rO   rq   rG   r(   r(   r&   r)   r:   M   s    
r:   )
__future__r   rk   collections.abcr   typingr    r   typesr   r   r	   r
   r   r   r   r   r   r   r   r   r   r   rH   r   r:   r(   r(   r(   r)   <module>   s    ;