
    "|h/l                       d dl mZ d dlZd dlmZmZ d dlmZmZ d dlZd dl	Z	d dl
Z
d dlZd dlZd dlZd dlZd dlmZmZmZmZmZmZmZmZmZ d dlmZmZ d dlmZ d dlZd dlZd dl Z d dl m!Z!m"Z" d d	l#m$Z$m%Z%m&Z&m'Z'm(Z( d
dl)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0 d
dl1m2Z2m3Z3 d
dl4m5Z5m6Z6 d
dl7m8Z8m9Z9 d
dl:m;Z;m<Z< d
dl=m>Z>m?Z?m@Z@ e(e8j                  e8j                  f   ZCej                  dk\  rej                  ZEnd dlFZFd dlGZGd ZE G d d      ZH G d dee8j                     e$      ZI G d d      ZJ G d deeK         ZL G d d      ZM G d deeN         ZOy)    )annotationsN)	dataclassfield)datetime	timedelta)	AnyDictAsyncGeneratorAsyncIterableAsyncIterator	CoroutineTupleOptionalUnion)connectClientConnection)ConnectionClosed)ssl_channel_credentials
StatusCode)CallChannelinsecure_channelsecure_channelUnaryStreamCall   )_audio_begins_atCLIENT_RETRY_OPTIONSCongestionCtrlhttp_prepare_dictoutput_format_to_mime_type
TTSOptionsFormat)get_coordinates_asyncInferenceCoordinatesOptions)LeaseLeaseFactory)api_pb2api_pb2_grpc)Metrics	Telemetry)prepare_textSENTENCE_END_REGEXget_voice_engine_and_protocol)   	   c                  K   t        j                         }t        j                         }t	        j
                  |j                  | g|i |}|j                  d |       d {   S 7 wN)asyncioget_running_loopcontextvarscopy_context	functoolspartialrunrun_in_executor)funcargskwargsloopctx	func_calls         P/var/www/html/test/engine/venv/lib/python3.12/site-packages/pyht/async_client.py	to_threadrA   *   s[     '')&&(%%cggtEdEfE	))$	::::s   A"A+$A)%A+c                     e Zd ZU dZded<   ej                  j                   ej                         d      Z
ded<    ej                         Ze G d d             Z	 	 d	 	 	 	 	 	 	 dd	Zddd
Zd Zedd       Zedd       Zd Z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 Zd Zd'dZ y)(AsyncClientNOptional[bytes]
LEASE_DATAzplayht.temporary.leasestrLEASE_CACHE_PATHc                      e Zd ZU dZded<   ej                  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Zd
ed<   d	Zd
ed<    ee      Zded<   y)AsyncClient.AdvancedOptionszhttps://api.play.ht/apirF   api_urlr   congestion_ctrl  intmetrics_buffer_sizeFboolremove_ssml_tagsNOptional[str]	grpc_addrinsecurefallback_enabledTauto_refresh_leasedisable_lease_disk_cache)default_factoryr$   inference_coordinates_options)__name__
__module____qualname__rJ   __annotations__r   OFFrK   rN   rP   rR   rS   rT   rU   rV   r   r$   rX        r@   AdvancedOptionsrI   6   s    00*8*<*<<#'S'!&$& $(	='$!&$&#'D'). $. FK[vEw%'Bwr_   r`   c                    sJ d       sJ d       |xs  j                          _        d fd}| _        d  _        d  _        d  _        t        j                          _        t        j                          _
         j                  j                  r)t        j                   j                                _        n4t        j                          _         j                  j!                  d        t#         j                  j$                         _         _         _        d  _        d  _        d _        d _         j                  j4                  t6        j8                  k(  rd _        d _        nd _        d _        |r9 j                  j                  s#t        j                   j?                                |r$t        j                   jA                                y y )	Nzuser_id is requiredzapi_key is requiredc                   K   t        j                  j                        } j                  j                  rt	        j
                  |        d {   S j                          d {   }|;t        |      }|j                  t        j                         t        d      z   kD  r|S t	        j
                  |        d {   }j                  |j                         d {    |S 7 7 7 -7 w)N   minutes)r&   	_advancedrJ   rV   r2   rA   _lease_cache_readr%   expiresr   nowr   _lease_cache_writedata)_factory
maybe_dataleaseapi_keyselfuser_ids      r@   lease_factoryz+AsyncClient.__init__.<locals>.lease_factoryS   s     #GWdnn6L6LMH~~66$..x888#5577J%j)==8<<>Ia4H#HH L!++H55E))%**555L 97
 65sI   AC7C/C7+C1,AC7C3"C7(C5)C71C73C75C7r   r.   皙?r   )returnr%   )!r`   rf   _lease_factory_lease_rpc_fallback_rpcr2   Lock_lockEvent_stop_lease_looprU   ensure_future_lease_loop_lease_loop_futureFuture
set_resultr*   rN   
_telemetry_user_id_api_key_inference_coordinates_ws_ws_requests_sent_ws_responses_receivedrK   r   STATIC_MAR_2023_max_attempts_backoffrefresh_leasewarmup)rp   rq   ro   auto_connectadvancedrr   s   ```   r@   __init__zAsyncClient.__init__G   s}    ---w---w!;T%9%9%;	 ,'+37	<@\\^
 '>>,,&-&;&;D<L<L<N&OD#&-nn&6D###..t4#DNN$F$FG@D#/3!"&'#>>))^-K-KK!"D DM!"DDM A A!!$"4"4"67!!$++-0 r_   c                "  K   | j                   )| j                   d   t        j                         dz  k  s|r| j                  j                  j
                  ]| j                  j                  j                  | j                  | j                  | j                  j                         d {   | _         nBt        | j                  | j                  | j                  j                         d {   | _         | j                   J d       y 7 `7 w)Nrefresh_at_msi@B No connection)	r   timetime_nsrf   rX   $coordinates_generator_function_asyncr   r   r#   )rp   forces     r@   ensure_inference_coordinatesz(AsyncClient.ensure_inference_coordinates   s     &&.++O<t||~QX?XX~~;;``l48NN4`4`<<T]]DMM=A^^=i=ik/k+ 5J$--Y]YfYfJN..JvJv5x /x+ **6GG6/k/xs%   B(D*D+AD-D.DDc                   K   | j                          d {    	 t        j                         4 d {   }| j                  J d       |j	                  | j                  d   d   ddd      4 d {   }|j                          d d d       d {    d d d       d {    y 7 7 y7 97 # 1 d {  7  sw Y   +xY w7 "# 1 d {  7  sw Y   y xY w# t        $ r"}t        j                  d|        Y d }~y d }~ww xY ww)	Nr   Play3.0-minihttp_streaming_urlzhttps://play.htPOST)OriginzAccess-Control-Request-Method)headerszFailed to warmup: )	r   aiohttpClientSessionr   optionsraise_for_status	Exceptionloggingwarning)rp   sessionrespes       r@   r   zAsyncClient.warmup   s    //111	6,,. , ,'22>OO>"??4+F+F~+VWk+l>OU[4] + ^ , ,ae))+, ,, , , 	2,, , , , ,, , , ,  	6OO0455	6s   DB,DC  B.C  >C6B07C:B4CB2CC  &C	'C  +D.C  0C2C4C	:B=;C	C	C  CCCC  DC   	D)DDDDc                   K    fd} j                   4 d {     j                  "t        j                  |       d {    _         j                  cd d d       d {    S 7 O7 (7 	# 1 d {  7  sw Y   y xY ww)Nc                    	 t        j                  j                  dz         5  t        j                  j                  j                        s
	 d d d        y t        j                  d      5 } | j                         cd d d        cd d d        S # 1 sw Y   nxY w	 d d d        y # 1 sw Y   y xY w# t        $ r Y y w xY w)N.lockrb)	filelockFileLockrG   ospathexistsopenreadIOError)fpclss    r@   get_filez/AsyncClient._lease_cache_read.<locals>.get_file   s    &&s';';g'EF )77>>#*>*>?#) ) c22D9 )R!wwy) )) )) ) )) ) )
  sX   "B4 +B(B4 B(/B?	B(	B4 B	B(B4 (B1-B4 1B4 4	C ?C 
LEASE_LOCKrE   r2   rA   )r   r   s   ` r@   rg   zAsyncClient._lease_cache_read   sn     	 >> 	" 	"~~%'.'8'8'B!B>>	" 	" 	"!B	" 	" 	" 	"sV   BA)B%A/A+A/B#A-$B+A/-B/B5A86B=Bc                    K    fd} j                   4 d {     _        t        j                  |       d {    d d d       d {    y 7 97 7 	# 1 d {  7  sw Y   y xY ww)Nc                    	 t        j                  j                  dz         5  t        j                  d      5 } | j	                         d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w# t
        $ r Y y w xY w)Nr   wb)r   r   rG   r   writer   )r   r   rk   s    r@   
write_filez2AsyncClient._lease_cache_write.<locals>.write_file   s    &&s';';g'EF 'c22D9 'R'' '' '' '  sE   "A7 A+AA+A7 A(	$A++A40A7 4A7 7	BBr   )r   rk   r   s   `` r@   rj   zAsyncClient._lease_cache_write   sc     	 >> 	0 	0!CN##J///	0 	0 	0/	0 	0 	0 	0sU   A0AA0 AA AA0AA0AA0A-!A$"A-)A0c                   K   t        dd      }| j                  j                         s_| j                          d {    t	        j
                  |j                                d {    | j                  j                         s^y y 7 L7 #w)N      )re   seconds)r   r|   is_setr   r2   sleeptotal_seconds)rp   refresh_times     r@   r~   zAsyncClient._lease_loop   sl      B7''..0$$&&&-- : : <=== ''..0&=s'   ;BB
*B(B)BBBc                  K   | j                   4 d{    | j                  rJ| j                  j                  t        j                         t        d      z   kD  r	 ddd      d{    y| j                          d{   | _        | j                  j                  xs | j                  j                  d   }| j                  r>| j                  d   |k7  r,| j                  d   j                          d{    d| _
        | j                  R| j                  j                  xs d|v }|rt        |t              nt        |t!               t              }||f| _
        | j                  j"                  r| j                  j                  d   }||k7  r| j$                  r>| j$                  d   |k7  r,| j$                  d   j                          d{    d| _        | j$                  J| j                  j                  rt        |t              nt        |t!               t              }||f| _        ddd      d{    y7 67 7 7 X7 ~7 # 1 d{  7  sw Y   yxY ww)	z'Manually refresh credentials with Play.Nrc   rd   inference_addressr   r   zon-prem.play.ht)r   )rz   rv   rh   r   ri   r   ru   rf   rR   metadatarw   closerS   r   r   r   r   rT   rx   )rp   rR   rS   channelfallback_addrs        r@   r   zAsyncClient.refresh_lease   s    :: #	F #	F{{t{{22X\\^iXYFZ5ZZ#	F #	F #	F !% 3 3 55DK00]DKK4H4HI\4]IyyTYYq\Y6iil((*** 	yy >>22T6G96TQY$Y8LM'	3J3LVjk  '0	 ~~.. !% 4 45H I -))d.@.@.C}.T"00399;;;-1*))1]a]k]k]t]t,]DXY!/?V?Xbv!w   /<W-E*G#	F #	F #	F #	F 6
 +& <9#	F #	F #	F #	Fs   I.I	I.AII.(I)I..IIA8I:I;CIIA!I8I.II.I.IIII.I+I" I+'I.c                 K   t        j                         }|2 3 d{   }|j                         }|j                  |       |j                  d       t	        j
                  |      Q| j                  |j                         ||||      2 3 d{   }	|	 7 ~7 6 t        j                         }6 |j                         dkD  r5| j                  |j                         ||||      2 3 d{  7  }	|	 6 yyw)z0Stream input to Play via the text_stream object.N r   )	ioStringIOstripr   r,   matchttsgetvaluetell)
rp   text_streamr   voice_engineprotocol	streamingbuffertexttrk   s
             r@   stream_tts_inputzAsyncClient.stream_tts_input   s      % 	# 	#$

ALLOLL!''*2"hhv'8'<QY[de  d
	#e[[]F & ;;=1"hhv'8'<QY[de  d
 f s]   D B6BB6A,D B BB D B6B  AD -C=1C42C=6
D c                   | j                   j                  d      }	 t        ||      \  }}|dk(  r| j                  |||||      S |dk(  r!|st	        d      | j                  ||||      S |dk(  r!|st	        d      | j                  ||||      S t	        d|       # t        $ r!}|j                  t        |             |d }~ww xY w)Nztts-requesthttpwsz0Non-streaming is not supported for WebSocket APIgrpcz+Non-streaming is not supported for gRPC APIzUnknown protocol )
r   startr-   	_tts_http
ValueError_tts_ws	_tts_grpcr   finish_errorrF   )rp   r   r   r   r   r   metricsr   s           r@   r   zAsyncClient.tts   s     //''6	%B<QY%Z"L(6!~~dG\7IVVT! $%WXX||D'<IIV# $%RSS~~dG\7KK #4XJ!?@@ 	  Q(G	s)   (B  %B  ,%B  B   	C
)CC
c               
  K   ddg}||vrt        d| d|       t        j                         }| j                          d {    | j                  4 d {    | j
                  | j                  J d       | j
                  j                  }d d d       d {    t        || j                  j                        }|j                  dt        |            j                  dt        | j                  d                |j                  t        j                  k(  rt        d	      t!        j"                  |j%                  ||      
      }	t'        d| j(                  dz         D ]  }
	 t+        j,                  | j                  d         }|j/                  |	      }d}||j1                  |       |2 3 d {   }|dz  }|t3        |j                        k(  r'|j5                  dt        j                         |z
         |j                   ] y 7 7 7 # 1 d {  7  sw Y   xY w7 y6 |j7                           y # t8        j:                  $ r} t=        |d             }t?        j@                  d|        |tB        jD                  tB        jF                  hvr |
| j(                  k  rt?        j@                  d| jH                  dz   d|
 d| d       |jK                  d      j                  dt        |             |jM                  d       | jH                  dkD  r(tO        jP                  | jH                         d {  7   |jS                  d       Y d }~| jT                   t?        jV                  d| jT                  d    d| j                  d    d|        |jK                  d      j                  dt        |             	 |j                  dt        |	jX                  jZ                              j                  dt        | jT                  d                |jM                  d       t+        j,                  | jT                  d         }|j/                  |	      }d}||j1                  |       |2 3 d {  7  }|dz  }|t3        |j                        k(  r'|j5                  dt        j                         |z
         |j                   ^6 |j7                          Y d }~ y # t8        j:                  $ r"}|j]                  t        |             ||d }~ww xY wd }~ww xY ww)Nr   zPlayHT2.0-turboOnly z$ are supported in the gRPC API; got r   r   endpointr   z+PCM format is not supported in the gRPC API)paramsrn   r   time-to-first-audiocodeError: Retrying in rL    sec ( attempts so far); ()retryretry.reasonretry-backoffzFalling back to z	 because z threw: fallbackzfallback.reason)/r   r   perf_counterr   rz   rv   rw   rk   r+   rf   rP   appendrF   formatr"   
FORMAT_PCMr'   
TtsRequest
tts_paramsranger   r(   TtsStubTtsassignr   	set_timer	finish_okr   RpcErrorgetattrr   debugr   RESOURCE_EXHAUSTEDUNAVAILABLEr   incstart_timerr2   r   finish_timerrx   infor   r   r   )rp   r   r   r   r   contextsupported_voice_enginesr   
lease_datarequestattemptstubstream	chunk_idxchunkr   
error_code
fallback_es                     r@   r   zAsyncClient._tts_grpc  s     $23D"E66u%<$==abnaopqq!!#  """:: 	* 	*;;*tyy/DUoUD))J	* 	* D$.."A"ABvs4y)00S1=NO>>V...JKK$$G,>,>t\,RZdeQ 2 2Q 67 5	,G4,#++DIIaL9)-'):	&NN6*#) % %%NI $4W^^$DD))*?ARARATW\A\]**$5	, 	#	* 	* 	* 	* 	*$%6
 !!#== ',/WQ/1

|45j&C&CZE[E[%\\T///MMLt1C0DF7)Sghrgsst"uvKK(//JP''8}}q(%mmDMM:::((9%%- /0B0B10E/FiPTPYPYZ[P\~]efpeqrsJ'../@#j/R,NN63w~~/B/B+CDKKJX[\`\n\nop\qXrs''(=>'//0B0B10EFD-1XXg->F "I*v.'- ) )e!Q	$(8(HH#--.CTEVEVEX[`E`a#jj(	 (.
 %%'}} ,((Z9$!+,K',s  AUHUHU6H!UHCU/A
I9H9=H7>H9AIUUU!H4'H*(H4/U7H99I
UU C3T=MT=*U0A/T= B0TS.R
S.A&T?UT:T55T::T==UUc               6  K   g d}||vrt        d| d|       t        j                         }| j                          d {    | j                  J d       |r| j                  |   d   }	n| j                  |   d   }	t        || j                  j                        }|j                  dt        |            j                  dt        |	             t        d	| j                  d	z         D ]*  }
	 t        j                         4 d {   }| j                  J d       |j                  |	d
t        |j                         it#        |||      d      4 d {   }|j$                  dk7  r<t'        d|j$                   d|j)                          d {    |j$                        d}|j*                  j-                         2 3 d {   }|d	z  }|t/        |j                         k(  r'|j1                  dt        j                         |z
         | S y 7 7 7 7 7 Z6 |j3                          	 d d d       d {  7   d d d       d {  7    y # 1 d {  7  sw Y   nxY wd d d       d {  7   n# 1 d {  7  sw Y   nxY w# t&        $ rn}t5        j6                  d|        |j8                  d	   dk(  r| j                          d {  7   n,|j8                  d	   dvr|j;                  t        |              |
| j                  k  rt5        j6                  d| j<                  dz   d|
 d|j8                  d	    d       |j?                  d      j                  dt        |j8                  d	                |jA                  d       | j<                  dkD  r(tC        jD                  | j<                         d {  7   |jG                  d       Y d }~|j;                  t        |              d }~ww xY ww)Nr   
PlayDialogPlayDialogMultilingualr   z$ are supported in the HTTP API; got r   r   http_nonstreaming_urlr   r   r   acceptT)r   jsonchunked   zHTTP z: r   r   r   401>       r   rL   r   r   r   r   r   r   r   )$r   r   r   r   r   r+   rf   rP   r   rF   r   r   r   r   postr    r   r   statusr   r   contentiter_anyr   r  r  r   r  r;   r   r   r
  r  r2   r   r  )rp   r   r   r   r   r   r  r  r   urlr  r   responser  r  r   s                   r@   r   zAsyncClient._tts_httpk  s     #[66u%<$==abnaopqq!!#//111**6GG6--l;<PQC--l;<STCD$.."A"ABvs4y)00SXFQ 2 2Q 67 )	G("002  g66BSOSB&|| (*DW^^*T% "34,!O$(  ,     "#??c1"+eHOO3DBX]]_G\F],^`h`o`o"pp$&	+3+;+;+D+D+F ( (%%NI(,<W^^,LL ' 1 12GIZIZI\_dId e"'K')	 	2 H](+F
  ))+#          (  sm,66!9%;;===VVAYj0((Q0T///MMLt1C0DF7)Sghihnhnophqgrrs"tuKK(//AFF1IO''8}}q(%mmDMM:::((9$$SV,'s6  APHB/P4JH!JAJH$
J!6I H&1I 	H*H(H*AI P!J$J&I (H**I <JI
JJIJP I2&I)'I2.J5J JJJ	JJ	JP
P(=P%K(&C3POP0P6PPPc                 K   g d}||vrt        d| d|       t        j                         }| j                          d {    t	        || j
                  j                        }| j                  J d       |j                  dt        |            j                  dt        | j                  |   d                t        |||      }t        d| j                  dz         D ]  }		 | j                  J d       | j                  |   d   }
| j                  &t        |
       d {   | _        d	| _        d	| _        	 | j                  j#                  t%        j&                  |             d {    | xj                  dz  c_        d}d}d}| j                  2 3 d {   }t/        |t              rt%        j0                  |      }|d   dk(  r[| xj                   dz  c_        | j                   | j                  k(  rd}|d   }l| j                   | j                  kD  st3        d      |d   dk(  r
|d   |k(  r nN|s|dz  }|t5        |j6                        k(  r'|j9                  dt        j                         |z
         | |j;                           y  y 7 a7 ~7 7# t(        $ r}t+        j,                  d
|        t        |
       d {  7  | _        | j                  j#                  t%        j&                  |             d {  7   d| _        d	| _        Y d }~d }~ww xY w7 6 # t2        $ r1}t+        j,                  d|        |	| j                  k  rt+        j,                  d| j<                  dz   d|	 d|j>                  d    d       |jA                  d      j                  dt        |j>                  d                |jC                  d       | j<                  d	kD  r(tE        jF                  | j<                         d {  7   |jI                  d       | j                  d       d {  7   Y d }~u|jK                  t        |              d }~ww xY ww)Nr  r   z) are supported in the WebSocket API; got r   r   r   websocket_urlr   r   z2Reconnecting websocket which closed unexpectedly: r   Ftyper   T
request_idz%Received more responses than requestsendr   r   r   rL   z ms (r   r   r   r   r   )r   )&r   r   r   r   r+   rf   rP   r   r   rF   r   r   r   r   r   r   r   sendr  dumpsr   r   r  
isinstanceloadsr   r   r   r  r  r   r;   r
  r  r2   r   r  r   )rp   r   r   r   r   r  r  r   	json_datar  
ws_addressr   r  r.  startedr  msgs                    r@   r   zAsyncClient._tts_ws  s     #[66u%<$==fgsftuvv!!#//111D$.."A"AB**6GG6vs4y)0014T5P5PQ]5^_n5o1p	r%dG\B	Q 2 2Q 67 8	G722>OO>!88FW
88#%,Z%88DH-.D*23D/4((--

9(=>>>**a/* 	
#'88 $ $%!%-"jj/v;'1 771<7#::d>T>TT*.-0->
!%!<!<t?U?U!U&/0W&X X [E1c,6G:6U!$ !Q	$(8(HH#--.CTEVEVEX[`E`a#!!#Q8	 	2  9 ?' 4MM$VWXVY"Z[%,Z%888DH((--

9(=>>>-.D*23D//4$8*  sm,T///MMLt1C0DE'Rfghgmgmnogpfqqr"stKK(//AFF1IO''8}}q(%mmDMM:::((9;;$;GGG$$SV,s   AQ=J$B%Q=*?L?)J'*L?1J-3J*4J-L?L=#L:$L='A=L?% L?AL? Q='L?*J--	L76&L2K;L2LL2,L?2L77L?:L==L??
Q:	CQ5"P%#+Q5QQ5Q=Q55Q::Q=c                ^    t        j                         }t        | ||||      t        |      fS )zGet a linked pair of (input, output) streams.

        These stream objects ARE NOT thread-safe. Coroutines using these stream objects must
        run on the same thread.
        )r2   Queue_InputStream_OutputStream)rp   r   r   r   shared_qs        r@   get_stream_pairzAsyncClient.get_stream_pair  s1     ==?w,I(#
 	
r_   c                  K   | j                   j                          | j                  j                         s| j                  j	                          | j
                  ,| j
                  d   j                          d {    d | _        | j                  -| j                  d   j                          d {    d | _        y y 7 E7 w)Nr   )r|   setr   donecancelrw   r   rx   rp   s    r@   r   zAsyncClient.close  s     !!#&&++-##**,99 ))A,$$&&&DI)$$Q'--///!%D * ' 0s$   A;C=C>7C5C6CCc                    	 t        j                          t        j                  | j                                y # t        $ r& t        j
                  | j                                Y y w xY wr1   )r2   r3   r}   r   RuntimeErrorr8   rB  s    r@   __del__zAsyncClient.__del__  sH    	&$$&!!$**,/ 	&KK

%	&s   7: ,A)(A)c                6    | j                   j                         S r1   )r   r   rB  s    r@   r   zAsyncClient.metrics!  s    &&((r_   )TN)rq   rF   ro   rF   r   rO   r   z'Optional['AsyncClient.AdvancedOptions'])F)r   rO   )rt   rD   )rk   bytes)NNT)
r   z4Union[AsyncGenerator[str, None], AsyncIterable[str]]r   r!   r   rQ   r   rQ   r   rO   )r   Union[str, list[str]]r   r!   r   rQ   r   rQ   r   rO   rt   AsyncIterable[bytes]r1   )r   rH  r   r!   r   rQ   r   r)   r  Optional[AsyncContext]rt   rI  )r   rH  r   r!   r   rQ   r   r)   r   rO   r  rJ  rt   rI  )NN)r   r!   r   rQ   r   rQ   rt   z&tuple['_InputStream', '_OutputStream'])rt   zlist[Metrics])!rY   rZ   r[   rE   r\   r   r   jointempfile
gettempdirrG   r2   ry   r   r   r`   r   r   r   classmethodrg   rj   r~   r   r   r   r   r   r   r=  r   rE  r   r^   r_   r@   rC   rC   1   s   "&J&GGLL)<)<)<)>@XYcYJx x x( "<@6161 61 	61
 :61pH6 " "  0 0>%FV '+"&I  $	
   8 '+"&#  $	
    
D +/O,#O, O, $	O,
 O, (O, 
O,n *.B#B B $	B
 B B (B 
BT +/M#M M $	M
 M (M 
Md '+"&	

 $
  	

 
0
"	&&)r_   rC   c                      e Zd Zy)UnaryStreamRendezvousN)rY   rZ   r[   r^   r_   r@   rP  rP  %  s    r_   rP  c                  0    e Zd Zd ZddZd ZddZddZy)	AsyncContextc                6    t        j                         | _        y r1   )r2   r   _streamrB  s    r@   r   zAsyncContext.__init__*  s    7>~~7Gr_   c                :    | j                   j                  |       y r1   )rT  r   )rp   r  s     r@   r  zAsyncContext.assign-  s    'r_   c                    | j                   j                  d        | j                   j                         s)| j                   j                         j                          y y )Nc                >    | j                         j                         S r1   )resultrA  )ss    r@   <lambda>z%AsyncContext.cancel.<locals>.<lambda>1  s    1B1B1D r_   )rT  add_done_callbackrA  rX  rB  s    r@   rA  zAsyncContext.cancel0  sC    &&'DE||""$LL!((* %r_   c                    | j                   j                         r(| j                   j                         j                         S yNF)rT  r@  rX  	cancelledrB  s    r@   r^  zAsyncContext.cancelled5  s1    <<<<&&(2244r_   c                    | j                   j                         r(| j                   j                         j                         S yr]  )rT  r@  rX  rB  s    r@   r@  zAsyncContext.done:  s1    <<<<&&(--//r_   N)r  TtsUnaryStream)rt   rO   )rY   rZ   r[   r   r  rA  r^  r@  r^   r_   r@   rR  rR  )  s    H(+

r_   rR  c                  @     e Zd Zdd fdZddZd	dZd
dZd Z xZS )
TextStreamc                j    t         |           |xs t        j                         | _        g | _        y r1   )superr   r2   r9  _q_futures)rp   q	__class__s     r@   r   zTextStream.__init__A  s'    &w}}r_   c                    | S r1   r^   rB  s    r@   	__aiter__zTextStream.__aiter__F      r_   c                n   K   | j                   j                          d {   }|
t               |S 7 wr1   )re  getStopAsyncIteration)rp   values     r@   	__anext__zTextStream.__anext__I  s0     ggkkm#=$&& $s   535c                X    K   t        j                   fd|D          d {    y 7 w)Nc              3  T   K   | ]  }j                   j                  |       ! y wr1   re  put).0arp   s     r@   	<genexpr>z&TextStream.__call__.<locals>.<genexpr>P  s     <!tww{{1~<s   %()r2   gatherrp   r;   s   ` r@   __call__zTextStream.__call__O  s     nn<t<===s   *(*c                V   K   | j                   j                  d        d {    y 7 wr1   rs  rB  s    r@   r   zTextStream.closeR  s     ggkk$s   )')r1   )rg  z&Optional[asyncio.Queue[Optional[str]]])rt   zAsyncIterator[str])rt   rF   )r;   rF   )	rY   rZ   r[   r   rj  rp  rz  r   __classcell__)rh  s   @r@   rb  rb  @  s    
> r_   rb  c                  D    e Zd ZdZ	 d	 	 	 	 	 	 	 	 	 ddZd	dZd
dZd Zy)r:  zInput stream handler for text.

    usage:
       input_stream('send', 'multiple', 'words', 'in', 'one', 'call.')
       input_stream += 'Add another sentence to the stream.'
       input_stream.done()
    Nc                     t                _         fd}t        j                   |              _        y )Nc                    K   j                  j                        2 3 d {   } j                  |        d {    #7 7 6 j                  d        d {  7   y wr1   )r   _inputrt  )outputclientr   r   rg  rp   r   s    r@   listenz%_InputStream.__init__.<locals>.listenh  s^      & 7 7Wl\d e $ $feeFm##$# !f%%+sB   A%A	AA	A%A A%A	A%	A%A!A%)rb  r  r2   r}   	_listener)rp   r  r   rg  r   r   r  s   `````` r@   r   z_InputStream.__init__^  s.     !l	 	
 !..vx8r_   c                      | j                   | S r1   r  ry  s     r@   rz  z_InputStream.__call__o  s    t{{D!!r_   c                $    | j                  |      S r1   r  )rp   inputs     r@   __iadd__z_InputStream.__iadd__r  s    {{5!!r_   c                   K   | j                   j                          d {    t        j                  | j                  d       d {    y 7 -7 w)N
   )r  r   r2   wait_forr  rB  s    r@   r@  z_InputStream.doneu  s?     kk!!!t~~r222 	"2s!   AA'AA	AAr1   )
r  rC   r   r!   rg  asyncio.Queue[Optional[bytes]]r   rQ   r   rQ   )r;   rF   rt   Coroutine[Any, Any, None])r  rF   rt   r  )rY   rZ   r[   __doc__r   rz  r  r@  r^   r_   r@   r:  r:  V  sP     #'99 9 *	9
 $9  9"""3r_   r:  c                  .    e Zd ZdZddZddZd	dZd Zy)
r;  zIterator for output audio.

    usage:
       for audio in output_stream:
           <do stuff with audio bytes>
        output_stream.close()
    c                D    t        j                         | _        || _        y r1   )r2   r{   _closere  )rp   rg  s     r@   r   z_OutputStream.__init__  s    mmor_   c                    | S r1   r^   rB  s    r@   rj  z_OutputStream.__aiter__  rk  r_   c                (  K   	 	 t        j                  | j                  j                         d       d {   }	 |
t               |S 7 # t         j                  $ r/}| j
                  j                         rt               |Y d }~d }~ww xY ww)Nrs   )timeout)r2   r  re  rm  TimeoutErrorr  r   rn  )rp   ro  r   s      r@   rp  z_OutputStream.__anext__  s~     %..tww{{}dKK
 =$&&L L'' ;;%%',.A5s=   B2A AA BA B %B
B
BBc                8    | j                   j                          y r1   )r  r?  rB  s    r@   r   z_OutputStream.close  s    r_   N)rg  r  )rt   zAsyncIterator[bytes])rt   rG  )rY   rZ   r[   r  r   rj  rp  r   r^   r_   r@   r;  r;  z  s    r_   r;  )P
__future__r   r2   dataclassesr   r   r   r   r   r  r   r   sysrL  r   typingr   r	   r
   r   r   r   r   r   r   websockets.asyncio.clientr   r   websockets.exceptionsr   r   r   r   r   r   grpc.aior   r   r   r   r   r  r   r   r   r   r    r!   r"   inference_coordinatesr#   r$   rn   r%   r&   protosr'   r(   	telemetryr)   r*   utilsr+   r,   r-   r   TtsResponser`  version_inforA   r4   r6   rC   rP  rR  rF   rb  r:  rG  r;  r^   r_   r@   <module>r     s   "  ( ( 	   	 
   m m m ? 2    4 U UJ J J U & ) ) R R !!3!3W5H5H!HI v!!I;q) q)h	M'*=*=> 	 . s#  ,!3 !3HM%( r_   