§
    	Êj‹  ã                  óŠ  — d dl 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m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 ddlmZmZ ddlmZ ddlmZm Z  ddl!m"Z"  ej#        e$¦  «        Z% e
dg ee ¦  «        g¬¦  «        Z&d#d„Z'd$d„Z(e& )                    d¦  «         ee¦  «        fd%d"„¦   «         Z*dS )&é    )ÚannotationsN)ÚAsyncIterator)Ú	APIRouterÚDependsÚRequest)ÚStreamingResponseé   )Úload_image_ref)Úresolve_model)Úflatten_messagesÚmessage_turns)ÚChatRequestÚ
InputImage)ÚInvalidRequestÚMuse2APIError)ÚServicesé   )Úget_servicesÚrequire_api_key)ÚChatCompletionRequestÚchat)ÚtagsÚdependenciesÚtextÚstrÚreturnÚintc                óB   — t          dt          | ¦  «        dz  ¦  «        S )Né   é   )ÚmaxÚlen)r   s    ú4C:\Projects\Muse2API\src\muse2api\api\routes\chat.pyÚ_approx_tokensr$      s   € Ýˆq•#�d‘)”)˜q‘.Ñ!Ô!Ð!ó    Úpayloadú
dict | strÚbytesc                óŒ   — t          | t          ¦  «        r| nt          j        | d¬¦  «        }d|› d�                     ¦   «         S )NF)Úensure_asciizdata: z

)Ú
isinstancer   ÚjsonÚdumpsÚencode)r&   Údatas     r#   Ú_sser0      sG   € Ý  ­#Ñ.Ô.Ð[ˆ7ˆ7µD´J¸wÐUZÐ4[Ñ4[Ô4[€DØ�DÐÐÐ×%Ò%Ñ'Ô'Ð'r%   z/v1/chat/completionsÚbodyr   Úrequestr   Úsvcr   c              ƒ  óž  ‡ ‡‡	‡
‡‡‡‡‡K  — ‰ j         |j        _         t          ‰ j         d¦  «        }‰ j         p|j        |j        _         t	          d„ ‰ j        D ¦   «         ¦  «        Š‰j        s‰j        st          d¦  «        ‚d„ ‰j        D ¦   «         ƒ d {V —†}t          j
        ¦   «         Št          ‰j        |j        ||j        j        |j        j        ‰ j        t!          d„ ‰ j        D ¦   «         ¦  «        ‰¬¦  «        }dt#          j        ¦   «         j        d d…         z   Š
t)          t+          j        ¦   «         ¦  «        Š‰ j         p|j        Š|j                             |¦  «        Š‰ j        s{d	                     d
„ ‰2 ¦   «         ƒ d {V —†¦  «        }‰
d‰‰dd|dœddœgt5          ‰j        ¦  «        t5          |¦  «        t5          ‰j        ¦  «        t5          |¦  «        z   dœdœS 	 t7          ‰¦  «        ƒ d {V —†Šn# t8          $ r d	ŠY nw xY wd d!ˆ
ˆˆfd„Š	d"ˆ ˆˆ	ˆ
ˆˆˆˆˆf	d„}t;           |¦   «         ddddœ¬¦  «        S )#Nr   c                ó6   — g | ]}|                      ¦   «         ‘ŒS © ©Ú
model_dump©Ú.0Úms     r#   ú
<listcomp>z$chat_completions.<locals>.<listcomp>)   ó    € ÐCÐCÐC°˜QŸ\š\™^œ^ÐCÐCÐCr%   z"messages contain no text or imagesc              “  óJ   K  — g | ]}t          t          |¦  «        ƒ d {V —†Ž ‘ŒS ©N)r   r
   )r:   Úrefs     r#   r<   z$chat_completions.<locals>.<listcomp>-   s;   è è € ÐNÐNÐN¸3�j¥°Ñ!4Ô!4Ð4Ð4Ð4Ð4Ð4Ð4Ð6ÐNÐNÐNr%   c                ó6   — g | ]}|                      ¦   «         ‘ŒS r6   r7   r9   s     r#   r<   z$chat_completions.<locals>.<listcomp>6   r=   r%   )ÚpromptÚmodelÚimagesÚtimeoutÚfirst_token_timeoutÚconversation_hintÚturnsÚcancelz	chatcmpl-é   Ú c              “  ó"   K  — g | 3 d {V —†}|‘Œ
6 S r?   r6   )r:   Úds     r#   r<   z$chat_completions.<locals>.<listcomp>?   s.   è è € Ð0Ð0Ð0Ð0Ð0Ð0Ð0Ð0 A˜Ð0Ð0Ð0Ð0s   …zchat.completionr   Ú	assistant©ÚroleÚcontentÚstop)ÚindexÚmessageÚfinish_reason)Úprompt_tokensÚcompletion_tokensÚtotal_tokens©ÚidÚobjectÚcreatedrC   ÚchoicesÚusageÚdeltaÚdictÚfinishú
str | Noner   c                ó   •— ‰d‰‰d| |dœgdœS )Núchat.completion.chunkr   )rS   r_   rU   )rZ   r[   r\   rC   r]   r6   )r_   ra   Úcompletion_idr\   Ú
model_names     €€€r#   Úchunkzchat_completions.<locals>.chunkU   s1   ø€ Ø#Ð/FÐSZØ#Ø&'°%È&ÐQÐQÐRðTð Tð 	Tr%   úAsyncIterator[bytes]c            	    ó’  •	K  — ‰	} 	 t           ‰d‰	dœ¦  «        ¦  «        W V — ‰2 3 d {V —†}| |z  } t           ‰d|i¦  «        ¦  «        W V — Œ*6 t           ‰i d¦  «        ¦  «        W V — ‰j        pi                      d¦  «        rQt          ‰
j        ¦  «        t          | ¦  «        dœ}|d         |d         z   |d	<   t          ‰d
‰‰g |dœ¦  «        W V — nw# t
          $ r.}t          |                     ¦   «         ¦  «        W V — Y d }~nDd }~wt          $ r4 t           	                    d¦  «         t          ddddœi¦  «        W V — Y nw xY w‰ 
                    ¦   «          ‰                     ¦   «         ƒ d {V —† n3# ‰ 
                    ¦   «          ‰                     ¦   «         ƒ d {V —† w xY wt          d¦  «        W V — d S )NrN   rO   rQ   rR   Úinclude_usage)rV   rW   rV   rW   rX   rd   rY   zstream crashedÚerrorzinternal errorÚserver_error)rT   Útypez[DONE])r0   Ústream_optionsÚgetr$   r   r   Úto_bodyÚ	ExceptionÚlogÚ	exceptionÚsetÚaclose)Úproducedr_   r^   Úexcr1   rI   rg   re   r\   ÚfirstÚflatrf   Ústreams       €€€€€€€€€r#   Úeventsz chat_completions.<locals>.eventsZ   s  øè è € Øˆð	"Ý�u�u k¸eÐDÐDÑEÔEÑFÔFÐFÐFÐFÐFØ%ð 6ð 6ð 6ð 6ð 6ð 6ð 6�eØ˜EÑ!�Ý˜5˜5 )¨UÐ!3Ñ4Ô4Ñ5Ô5Ð5Ð5Ð5Ð5Ð5ð  &õ �u�u˜R Ñ(Ô(Ñ)Ô)Ð)Ð)Ð)Ð)ØÔ#Ð) r×.Ò.¨Ñ?Ô?ð -Ý*8¸¼Ñ*CÔ*CÝ.<¸XÑ.FÔ.FðHð H�à(-¨oÔ(>ÀÐGZÔA[Ñ([��nÑ%Ý -Ð;RØ'.¸ÐPRØ%*ð,ð ,ñ -ô -ð -ð -ð -ð -øøõ ð 	&ð 	&ð 	&Ý�s—{’{‘}”}Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Ð%Ð%Ð%Ð%øøøøÝð 	Yð 	Yð 	YÝ�MŠMÐ*Ñ+Ô+Ð+Ý˜Ð-=À~Ð!VÐ!VÐWÑXÔXÐXÐXÐXÐXÐXÐXð	Yøøøð �JŠJ‰LŒLˆLØ—-’-‘/”/Ð!Ð!Ð!Ð!Ð!Ð!Ð!Ð!øð �JŠJ‰LŒLˆLØ—-’-‘/”/Ð!Ð!Ð!Ð!Ð!Ð!Ð!Ð!øøøÝ�8‰nŒnÐÐÐÐÐÐsF   ‡ C §A­B.C ÃF Ã
EÃ&$DÄ
F Ä>EÅF ÅEÅF Æ0F2ztext/event-streamzno-cacheÚno)zCache-ControlzX-Accel-Buffering)Ú
media_typeÚheadersr?   )r_   r`   ra   rb   r   r`   )r   rh   )rC   Ústater   rZ   r   Úmessagesr   rD   r   ÚasyncioÚEventr   ÚsettingsÚchat_timeoutrF   Úuserr   ÚuuidÚuuid4Úhexr   ÚtimeÚgatewayÚchat_streamrz   Újoinr$   ÚanextÚStopAsyncIterationr   )r1   r2   r3   ÚspecrD   Úreqr   r{   rI   rg   re   r\   rx   ry   rf   rz   s   `       @@@@@@@@r#   Úchat_completionsr‘   #   s  øøøøøøøøøè è € ð œ*€G„MÔÝ˜œ VÑ,Ô,€DØœ*Ð/¨¬€G„MÔÝÐCÐC°T´]ÐCÑCÔCÑDÔD€DØŒ9ð C˜Tœ[ð CÝÐAÑBÔBÐBàNÐNÀ$Ä+ÐNÑNÔNÐNÐNÐNÐNÐNÐN€FÝŒ]‰_Œ_€FÝ
ØŒyØŒgØØ”Ô)ØœLÔ<Øœ)ÝÐCÐC°T´]ÐCÑCÔCÑDÔDØð	ñ 	ô 	€Cð  ¥$¤*¡,¤,Ô"2°3°B°3Ô"7Ñ7€MÝ•$”)‘+”+ÑÔ€GØ”Ð&˜tœw€JØŒ[×$Ò$ SÑ)Ô)€FàŒ;ð 
Ø�wŠwÐ0Ð0¨Ð0Ñ0Ô0Ð0Ð0Ð0Ð0Ð0Ð0Ñ1Ô1ˆàØ'ØØØ"#¸ÐQUÐ0VÐ0VØ*0ð2ð 2ð 3õ "0°´	Ñ!:Ô!:Ý%3°DÑ%9Ô%9Ý .¨t¬yÑ 9Ô 9½NÈ4Ñ<PÔ<PÑ Pðð ð
ð 
ð 	
ð Ý˜F‘m”mÐ#Ð#Ð#Ð#Ð#Ð#ˆˆøÝð ð ð ØˆˆˆðøøøðTð Tð Tð Tð Tð Tð Tð Tð Tð
ð ð ð ð ð ð ð ð ð ð ð ð ð õ2 ˜V˜V™XœXÐ2EØ7AÐX\Ð%]Ð%]ð_ñ _ô _ð _s   Ç3H	 È	HÈH)r   r   r   r   )r&   r'   r   r(   )r1   r   r2   r   r3   r   )+Ú
__future__r   r�   r,   Úloggingr‰   r†   Úcollections.abcr   Úfastapir   r   r   Úfastapi.responsesr   Ú
core.mediar
   Úcore.modelsr   Úcore.promptr   r   Údrivers.baser   r   Úerrorsr   r   Úservices.containerr   Údepsr   r   Úschemasr   Ú	getLoggerÚ__name__rr   Úrouterr$   r0   Úpostr‘   r6   r%   r#   ú<module>r£      sã  ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø €€€Ø €€€Ø €€€Ø )Ð )Ð )Ð )Ð )Ð )à /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ø /Ð /Ð /Ð /Ð /Ð /à (Ð (Ð (Ð (Ð (Ð (Ø (Ð (Ð (Ð (Ð (Ð (Ø :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø *Ð *Ð *Ð *Ð *Ð *Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø +Ð +Ð +Ð +Ð +Ð +à€gÔ˜Ñ!Ô!€Ø	ˆ˜˜°°¸Ñ0HÔ0HÐ/IÐ	JÑ	JÔ	J€ð"ð "ð "ð "ð(ð (ð (ð (ð
 ‡‚Ð#Ñ$Ô$à+2¨7°<Ñ+@Ô+@ðP_ð P_ð P_ð P_ñ %Ô$ðP_ð P_ð P_r%   