§
    	Êjñ  ã                  ó  — d Z ddlmZ ddlZddlmZmZmZ ddlm	Z	 ddl
mZ ddlm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 ddlmZ  ej        e¦  «        Z ed¦  «        Z edd¬¦  «        Z G d„ d¦  «        Z dS )zFGateway: runs driver calls on pooled accounts with automatic failover.é    )ÚannotationsN)ÚAsyncIteratorÚ	AwaitableÚCallable)Úasynccontextmanager)ÚTypeVaré   )ÚAccount)ÚAccountPoolÚLease)ÚChatRequestÚImageRequestÚMediaResultÚ
MuseDriverÚVideoRequest)ÚUpstreamErroré   )Únote_accountÚTÚ	anonymouszdriver without accounts)ÚidÚlabelc                  ó^   — e Zd Zddœd'd„Zed(d„¦   «         Zd)d„Zd*d„Zd+d,d „Zd-d#„Z	d.d&„Z
dS )/ÚGatewayr	   )Úmax_failoverÚpoolr   Údriverr   r   ÚintÚreturnÚNonec               ó0   — || _         || _        || _        d S ©N)r   r   r   )Úselfr   r   r   s       ú5C:\Projects\Muse2API\src\muse2api\services\gateway.pyÚ__init__zGateway.__init__   s   € ØˆŒ	ØˆŒØ(ˆÔÐÐó    Úexcludeú	list[str]Úhintú
str | NoneúAsyncIterator[Lease]c               ó‚  K  — | j         j        sK| j                             ¦   «         s2t	          t
          j        ¦  «         t          t
          ¦  «        W V — d S | j                             ||¬¦  «        4 ƒd {V —†}t	          |j	        j        ¦  «         |W V — d d d ¦  «        ƒd {V —† d S # 1 ƒd {V —†swxY w Y   d S )N)r'   r)   )
r   Úrequires_accountr   Úallr   Ú
_ANONYMOUSr   r   ÚleaseÚaccount)r#   r'   r)   r0   s       r$   Ú_leasezGateway._lease   sA  è è € àŒ{Ô+ð 	°D´I·M²M±O´Oð 	Ý�œÑ'Ô'Ð'Ý�
Ñ#Ô#Ð#Ð#Ð#Ð#ØˆFØ”9—?’?¨7¸�?Ñ>Ô>ð 	ð 	ð 	ð 	ð 	ð 	ð 	À%Ý˜œÔ)Ñ*Ô*Ð*ØˆKˆKˆKˆKð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   Á<B.Â.
B8Â;B8Úexcr   ÚattemptÚtriedÚboolc                óZ   — |j         o$|| j        k     o| j                             |¦  «        S r"   )Ú	retryabler   r   Úhas_alternative)r#   r3   r4   r5   s       r$   Ú_should_retryzGateway._should_retry&   s5   € ð ”ð 5 '¨DÔ,=Ò"=ð 5Ø”I×-Ò-¨eÑ4Ô4ð	6r&   Úreqr   úAsyncIterator[str]c               óx  K  — g }t          | j        dz   ¦  «        D �]}|                      ||j        ¦  «        4 ƒd {V —†}d}	 | j                             |j        |¦  «        2 3 d {V —†}d}|W V — Œ6 	 d d d ¦  «        ƒd {V —†  d S # t          $ r~}|                     |¦  «         | 	                    |j        j
        ¦  «         |s|                      |||¦  «        s‚ t                               d|j        j
        |¦  «         Y d }~nd }~ww xY w	 d d d ¦  «        ƒd {V —† n# 1 ƒd {V —†swxY w Y   �Œd S )Nr   FTz$chat failed on %s (%s), failing over)Úranger   r2   Úconversation_hintr   Úchat_streamr1   r   ÚfailÚappendr   r:   ÚlogÚwarning)r#   r;   r5   r4   r0   ÚemittedÚdeltar3   s           r$   r@   zGateway.chat_stream,   s}  è è € ØˆÝ˜TÔ.°Ñ2Ñ3Ô3ð 	_ñ 	_ˆGØ—{’{ 5¨#Ô*?Ñ@Ô@ð _ð _ð _ð _ð _ð _ð _ÀEØ�ð_Ø'+¤{×'>Ò'>¸u¼}ÈcÑ'RÔ'Rð $ð $ð $ð $ð $ð $ð $˜eØ"&˜Ø#˜˜˜˜˜ð (Sð ð_ð _ð _ñ _ô _ð _ð _ð _ð _ð _ð _ð _ð _ð _ð _øõ %ð _ð _ð _Ø—J’J˜s‘O”O�OØ—L’L ¤Ô!1Ñ2Ô2Ð2àð  d×&8Ò&8¸¸gÀuÑ&MÔ&Mð ØÝ—K’KÐ FÈÌÔHXÐZ]Ñ^Ô^Ð^Ð^Ð^Ð^Ð^Ð^øøøøð_øøøð _ð_ð _ð _ñ _ô _ð _ð _ð _ð _ð _ð _ð _ð _ð _ð _ð _ð _ð _ð _ð _ð _ð _ð _øøøð _ð _ð _ð _ùð	_ð 	_sC   Á D'Á B	Á$A3Á*
B	Â	
DÂA4DÄD'ÄDÄD'Ä'
D1	Ä4D1	NÚfnú!Callable[[Account], Awaitable[T]]r   c              ƒ  óH  K  — g }t          | j        dz   ¦  «        D ]ø}|                      ||¦  «        4 ƒd {V —†}	  ||j        ¦  «        ƒ d {V —†	 cd d d ¦  «        ƒd {V —† c S # t          $ r|}|                     |¦  «         |                     |j        j        ¦  «         |                      |||¦  «        s‚ t           
                    d|j        j        |¦  «         Y d }~nd }~ww xY w	 d d d ¦  «        ƒd {V —† n# 1 ƒd {V —†swxY w Y   Œùt          d¦  «        ‚)Nr   z$call failed on %s (%s), failing overÚunreachable)r>   r   r2   r1   r   rA   rB   r   r:   rC   rD   ÚAssertionError)r#   rG   r)   r5   r4   r0   r3   s          r$   Ú_runzGateway._run>   sC  è è € ØˆÝ˜TÔ.°Ñ2Ñ3Ô3ð 		_ð 		_ˆGØ—{’{ 5¨$Ñ/Ô/ð _ð _ð _ð _ð _ð _ð _°5ð_Ø!#  E¤MÑ!2Ô!2Ð2Ð2Ð2Ð2Ð2Ð2Ð2ð_ð _ð _ð _ñ _ô _ð _ð _ð _ð _ð _ð _ð _ð _ð _ð _øõ %ð _ð _ð _Ø—J’J˜s‘O”O�OØ—L’L ¤Ô!1Ñ2Ô2Ð2Ø×-Ò-¨c°7¸EÑBÔBð ØÝ—K’KÐ FÈÌÔHXÐZ]Ñ^Ô^Ð^Ð^Ð^Ð^Ð^Ð^øøøøð_øøøð
 _ð_ð _ð _ñ _ô _ð _ð _ð _ð _ð _ð _ð _ð _ð _ð _ð _ð _ð _ð _ð _ð _ð _ð _øøøð _ð _ð _ð _øõ ˜]Ñ+Ô+Ð+s5   ºD¼A'Á'
C-Á1A2C(Ã#DÃ(C-Ã-DÄ
D	ÄD	r   úlist[MediaResult]c              ƒ  óH   ‡ ‡K  — ‰                       ˆˆ fd„¦  «        ƒ d {V —†S )Nc                ó:   •— ‰j                              | ‰¦  «        S r"   )r   Úgenerate_image©Úaccr;   r#   s    €€r$   ú<lambda>z(Gateway.generate_image.<locals>.<lambda>M   ó   ø€ ¨4¬;×+EÒ+EÀcÈ3Ñ+OÔ+O€ r&   ©rL   ©r#   r;   s   ``r$   rP   zGateway.generate_imageL   ó9   øøè è € Ø—Y’YÐOÐOÐOÐOÐOÑPÔPÐPÐPÐPÐPÐPÐPÐPr&   r   r   c              ƒ  óH   ‡ ‡K  — ‰                       ˆˆ fd„¦  «        ƒ d {V —†S )Nc                ó:   •— ‰j                              | ‰¦  «        S r"   )r   Úgenerate_videorQ   s    €€r$   rS   z(Gateway.generate_video.<locals>.<lambda>P   rT   r&   rU   rV   s   ``r$   rZ   zGateway.generate_videoO   rW   r&   )r   r   r   r   r   r   r   r    )r'   r(   r)   r*   r   r+   )r3   r   r4   r   r5   r(   r   r6   )r;   r   r   r<   r"   )rG   rH   r)   r*   r   r   )r;   r   r   rM   )r;   r   r   r   )Ú__name__Ú
__module__Ú__qualname__r%   r   r2   r:   r@   rL   rP   rZ   © r&   r$   r   r      sÍ   € € € € € ØUVð )ð )ð )ð )ð )ð )ð
 ðð ð ñ Ôðð6ð 6ð 6ð 6ð_ð _ð _ð _ð$,ð ,ð ,ð ,ð ,ðQð Qð Qð QðQð Qð Qð Qð Qð Qr&   r   )!Ú__doc__Ú
__future__r   ÚloggingÚcollections.abcr   r   r   Ú
contextlibr   Útypingr   Úaccounts.modelr
   Úaccounts.poolr   r   Údrivers.baser   r   r   r   r   Úerrorsr   Úrequest_logr   Ú	getLoggerr[   rC   r   r/   r   r^   r&   r$   ú<module>rk      sP  ðØ LÐ Là "Ð "Ð "Ð "Ð "Ð "à €€€Ø >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ø *Ð *Ð *Ð *Ð *Ð *Ø Ð Ð Ð Ð Ð à $Ð $Ð $Ð $Ð $Ð $Ø .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø [Ð [Ð [Ð [Ð [Ð [Ð [Ð [Ð [Ð [Ð [Ð [Ð [Ð [Ø "Ð "Ð "Ð "Ð "Ð "Ø %Ð %Ð %Ð %Ð %Ð %à€gÔ˜Ñ!Ô!€Ø€GˆC�L„L€àˆW˜Ð+DÐEÑEÔE€
ð:Qð :Qð :Qð :Qð :Qñ :Qô :Qð :Qð :Qð :Qr&   