§
    	Êjì  ã                  óŽ   — d Z ddlmZ ddlZddlZddlZddlmZ ddlm	Z	 ddl
mZmZmZmZmZmZmZ dd„Z G d„ de¦  «        ZdS )z»Offline driver used for development, tests and front-end work.

It needs no accounts and returns deterministic output, so the whole API surface
can be exercised without touching muse.ai.
é    )ÚannotationsN)ÚAsyncIteratoré   )ÚAccounté   )ÚChatRequestÚDriverCapabilitiesÚImageRequestÚMediaResultÚ
MuseDriverÚSessionInfoÚVideoRequestÚwidthÚintÚheightÚrgbútuple[int, int, int]ÚreturnÚbytesc           
     óê   — dd„}dt          |¦  «        | z  z   }||z  }t          j        d| |dd	d
d
d
¦  «        }d |d|¦  «        z    |dt          j        |¦  «        ¦  «        z    |dd¦  «        z   S )NÚtagr   Údatar   c                ó¦   — | |z   }t          j        dt          |¦  «        ¦  «        |z   t          j        dt          j        |¦  «        ¦  «        z   S )Nz>I)ÚstructÚpackÚlenÚzlibÚcrc32)r   r   Úbodys      ú1C:\Projects\Muse2API\src\muse2api\drivers\mock.pyÚchunkz_solid_png.<locals>.chunk   sD   € Ø�T‰zˆÝŒ{˜4¥ T¡¤Ñ+Ô+¨dÑ2µV´[ÀÅtÄzÐRVÑGWÔGWÑ5XÔ5XÑXÐXó    ó    z>IIBBBBBé   r   r   s   ‰PNG

s   IHDRs   IDATs   IENDr"   )r   r   r   r   r   r   )r   r   r   r   Úcompress)r   r   r   r!   ÚrowÚrawÚihdrs          r    Ú
_solid_pngr)      s§   € ðYð Yð Yð Yð •E˜#‘J”J Ñ&Ñ
&€CØ
�‰,€CÝŒ;�z 5¨&°!°Q¸¸1¸aÑ@Ô@€DàØ
ˆ%�˜Ñ
Ô
ñ	à
ˆ%��œ sÑ+Ô+Ñ
,Ô
,ñ	-ð ˆ%�˜Ñ
Ô
ñ	ðr"   c            	      ól   — e Zd ZdZdZ eddddddd¬¦  «        Zddd
„Zdd„Zdd„Z	d d„Z
d!d„Zd"d„ZdS )#Ú
MockDriverÚmockFT)ÚchatÚchat_imagesÚimageÚ
image_editÚvideoÚrenew_sessionÚquotaç{®Gáz„?ÚdelayÚfloatr   ÚNonec                ó   — || _         d S )N)r5   )Úselfr5   s     r    Ú__init__zMockDriver.__init__2   s   € ØˆŒ
ˆ
ˆ
r"   Úaccountr   Úreqr   úAsyncIterator[str]c               óh  K  — d|j         › d|j        dd …         › �}|j        r|dt          |j        ¦  «        › d�z  }t	          dt          |¦  «        d¦  «        D ]T}|j        r|j                             ¦   «         r d S t          j        | j	        ¦  «        ƒ d {V —† |||dz   …         W V — ŒUd S )Nz[mock:z] You said: i8ÿÿÿz (with z
 image(s))r   r$   )
ÚmodelÚpromptÚimagesr   ÚrangeÚcancelÚis_setÚasyncioÚsleepr5   )r9   r;   r<   ÚreplyÚis        r    Úchat_streamzMockDriver.chat_stream5   sä   è è € ØC˜œÐCÐC°´
¸4¸5¸5Ô0AÐCÐCˆØŒ:ð 	;ØÐ:�s 3¤:™œÐ:Ð:Ð:Ñ:ˆEÝ�q�#˜e™*œ* aÑ(Ô(ð 	#ð 	#ˆAØŒzð ˜cœj×/Ò/Ñ1Ô1ð Ø��Ý”- ¤
Ñ+Ô+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ø˜˜A ™E˜	Ô"Ð"Ð"Ð"Ð"Ð"ð		#ð 	#r"   r
   úlist[MediaResult]c              ƒ  ó´  K  — g }t          t          d|j        ¦  «        ¦  «        D ]°}|j        r>|                     t	          |dz   t          d|j        ¦  «        z  dz  ¦  «        ¦  «         t          j        | j        ¦  «        ƒ d {V —† dd|z  dz  z   ddf}|                     t          t          dd|¦  «        dd	dd|j        ¬
¦  «        ¦  «         Œ±|S )Nr   éd   é(   é2   éÈ   éx   é@   z	image/pngr/   )r   ÚmimeÚkindr   r   Úrevised_prompt)rB   ÚmaxÚnÚon_progressr   rE   rF   r5   Úappendr   r)   r@   )r9   r;   r<   ÚresultsrH   Úcolors         r    Úgenerate_imagezMockDriver.generate_image?   sú   è è € ØˆÝ•s˜1˜cœe‘}”}Ñ%Ô%ð 	ð 	ˆAØŒð DØ—’¥ Q¨¡U­c°!°S´U©m¬mÑ$;¸cÑ$AÑ BÔ BÑCÔCÐCÝ”- ¤
Ñ+Ô+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ø˜"˜q™& 3™,Ñ&¨¨SÐ1ˆEØ�NŠNÝÝ# B¨¨EÑ2Ô2Ø$Ø ØØØ#&¤:ðñ ô ñ	ô 	ð 	ð 	ð ˆr"   r   r   c              ƒ  óª   K  — dD ]=}t          j        | j        ¦  «        ƒ d {V —† |j        r|                     |¦  «         Œ>t	          ddd¬¦  «        S )N)é
   rM   éF   rL   s      ftypmp42mockz	video/mp4r1   )r   rR   rS   )rE   rF   r5   rW   r   )r9   r;   r<   Úps       r    Úgenerate_videozMockDriver.generate_videoR   sm   è è € Ø"ð 	#ð 	#ˆAÝ”- ¤
Ñ+Ô+Ð+Ð+Ð+Ð+Ð+Ð+Ð+ØŒð #Ø—’ Ñ"Ô"Ð"øåÐ ?ÀkÐX_Ð`Ñ`Ô`Ð`r"   r   c              ƒ  ó,   K  — t          dddi¬¦  «        S )NTÚdriverr,   )ÚokÚmeta)r   ©r9   r;   s     r    r2   zMockDriver.renew_sessionZ   s   è è € Ý˜d¨(°FÐ);Ð<Ñ<Ô<Ð<r"   Údictc           	   ƒ  ó   K  — dddddddddœS )zHDeterministic fake quota snapshot for plumbing tests and front-end work.Úfreer   rL   é   N)ÚplanÚmessages_usedÚmessages_limitÚmessages_remainingÚ
media_usedÚmedia_limitÚmedia_remainingÚ	resets_at© re   s     r    r3   zMockDriver.quota]   s/   è è € ð ØØ!Ø"%ØØØ!Øð	
ð 	
ð 		
r"   N)r4   )r5   r6   r   r7   )r;   r   r<   r   r   r=   )r;   r   r<   r
   r   rJ   )r;   r   r<   r   r   r   )r;   r   r   r   )r;   r   r   rf   )Ú__name__Ú
__module__Ú__qualname__ÚnameÚrequires_accountr	   Úcapabilitiesr:   rI   r[   r`   r2   r3   rr   r"   r    r+   r+   *   sÈ   € € € € € Ø€DØÐØ%Ð%Ø˜t¨4¸DÈÐ\`Øðñ ô €Lð
ð ð ð ð ð#ð #ð #ð #ðð ð ð ð&að að að að=ð =ð =ð =ð
ð 
ð 
ð 
ð 
ð 
r"   r+   )r   r   r   r   r   r   r   r   )Ú__doc__Ú
__future__r   rE   r   r   Úcollections.abcr   Úaccounts.modelr   Úbaser   r	   r
   r   r   r   r   r)   r+   rr   r"   r    ú<module>r~      s  ððð ð #Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø €€€Ø )Ð )Ð )Ð )Ð )Ð )à $Ð $Ð $Ð $Ð $Ð $ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð >
ð >
ð >
ð >
ð >
�ñ >
ô >
ð >
ð >
ð >
r"   