o
    i                     @  s   d dl mZ d dlZd dlmZ d dlmZmZ ddlm	Z	m
Z
 ddlmZmZmZmZ dd	lmZ dd
lmZ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ClassVar   )tokenizeutils)DEFAULT_API_CONNECT_OPTIONS	NOT_GIVENAPIConnectOptions
NotGivenOr   )SentenceStreamPacer)TTSAudioEmitterChunkedStreamSynthesizedAudioSynthesizeStreamTTSCapabilities)	max_retrytimeoutc                      s   e Zd Zeddd% fddZed&ddZed&ddZedd'ddZ	edd(ddZ
d)ddZd*d!d"Zd)d#d$Z  ZS )+StreamAdapterF)sentence_tokenizertext_pacingttsr   r   &NotGivenOr[tokenize.SentenceTokenizer]r   SentenceStreamPacer | boolreturnNonec                  st   t  jtddd|j|jd || _|ptjjdd| _	d | _
|du r(t | _
nt|tr0|| _
| jd| j d S )NT)	streamingaligned_transcript)capabilitiessample_ratenum_channels)retain_formatmetrics_collected)super__init__r   r"   r#   _wrapped_ttsr   	blingfireSentenceTokenizer_sentence_tokenizer_stream_pacerr   
isinstanceon_on_metrics_collected)selfr   r   r   	__class__ c/var/www/html/livekit_bhavya/venv/lib/python3.10/site-packages/livekit/agents/tts/stream_adapter.pyr'      s   



zStreamAdapter.__init__strc                 C     | j jS N)r(   modelr0   r3   r3   r4   r8   2      zStreamAdapter.modelc                 C  r6   r7   )r(   providerr9   r3   r3   r4   r;   6   r:   zStreamAdapter.providerconn_optionstextr=   r   r   c                C  s   | j j||dS )N)r>   r=   )r(   
synthesize)r0   r>   r=   r3   r3   r4   r?   :   s   zStreamAdapter.synthesizeStreamAdapterWrapperc                C  s   t | |dS N)r   r=   )r@   )r0   r=   r3   r3   r4   stream?   s   zStreamAdapter.streamc                 C  s   | j   d S r7   )r(   prewarmr9   r3   r3   r4   rC   D   s   zStreamAdapter.prewarmargsr   kwargsc                 O  s   | j dg|R i | d S Nr%   )emit)r0   rD   rE   r3   r3   r4   r/   G   s   z#StreamAdapter._on_metrics_collectedc                   s   | j d| j d S rF   )r(   offr/   r9   r3   r3   r4   acloseJ   s   zStreamAdapter.aclose)r   r   r   r   r   r   r   r   )r   r5   )r>   r5   r=   r   r   r   )r=   r   r   r@   r   r   )rD   r   rE   r   r   r   )__name__
__module____qualname__r
   r'   propertyr8   r;   r	   r?   rB   rC   r/   rI   __classcell__r3   r3   r1   r4   r      s    

r   c                      s@   e Zd ZU dZded< d fd
dZdddZdddZ  ZS )r@   tts_stream_adapterzClassVar[str]_tts_request_span_namer   r   r=   r   r   r   c                  s    t  j|td || _|| _d S rA   )r&   r'   *DEFAULT_STREAM_ADAPTER_API_CONNECT_OPTIONS_tts_wrapped_tts_conn_options)r0   r   r=   r1   r3   r4   r'   Q   s   
zStreamAdapterWrapper.__init__event_aiterAsyncIterable[SynthesizedAudio]c                   s   d S r7   r3   )r0   rU   r3   r3   r4   _metrics_monitor_taskV   s   z*StreamAdapterWrapper._metrics_monitor_taskoutput_emitterr   c                   s   j j j jrj jj dt } j|j jj j	ddd t } j
|d dfdd	}d fd
d}t| t| g}ztj| I d H  W  I d H  tjj| I d H  d S  I d H  tjj| I d H  w )N)sent_streamaudio_emitterz	audio/pcmT)
request_idr"   r#   	mime_typerB   )
segment_idr   r   c                    sD    j 2 z3 d H W } t|  jr  q|  q6   d S r7   )	_input_chr-   _FlushSentinelflush	push_text	end_input)data)r0   rY   r3   r4   _forward_inputm   s   z1StreamAdapterWrapper._run.<locals>._forward_inputc               
     s   ddl m}  d}2 zY3 d H W } | |j|d |j  }s#qjjj|jd4 I d H (}|2 z3 d H W } 	|j
j  ||j
j7 }q46    W d   I d H  n1 I d H s_w   Y  q6 d S )Nr   )TimedStringg        )r>   
start_timer<   )voice.iore   push_timed_transcripttokenstriprS   r(   r?   rT   pushframerc   tobytesdurationr`   )re   rn   evr>   
tts_streamaudiorX   r0   rY   r3   r4   _synthesizew   s*   
(z.StreamAdapterWrapper._run.<locals>._synthesizerJ   )rS   r+   rB   r,   wrapr   	shortuuid
initializer"   r#   start_segmentasynciocreate_taskgatherrI   aiocancel_and_wait)r0   rX   r[   r]   rd   rs   tasksr3   rr   r4   _runY   s8   


zStreamAdapterWrapper._run)r   r   r=   r   r   r   )rU   rV   r   r   )rX   r   r   r   )	rK   rL   rM   rQ   __annotations__r'   rW   r~   rO   r3   r3   r1   r4   r@   N   s
   
 
r@   )
__future__r   rx   collections.abcr   typingr   r    r   r   typesr	   r
   r   r   stream_pacerr   r   r   r   r   r   r   r   r   rR   r   r@   r3   r3   r3   r4   <module>   s     
5