§
     @gU  ã                   óÄ  — d dl m Z  d dl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	 d dl
mZmZ d dlmZmZ d dlmZ d dlZd dlmZ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   ej!        e"¦  «        Z# G d„ d¦  «        Z$ G d„ de¦  «        Z% G d„ de¦  «        Z& G d„ de¦  «        Z' G d„ de ¦  «        Z( G d„ de%¦  «        Z) G d„ de&¦  «        Z* G d„ de¦  «        Z+dS )é    )ÚdatetimeN)ÚListÚUnion)Úuuid4)ÚFastAPIÚRequest)ÚJSONResponseÚResponse)ÚEventSourceResponse)Ú	ProxyBaseÚRequestFilterBaseÚResponseFilterBaseÚRequestFilterExceptionÚResponseFilterException)ÚQueueClientBase)Ú_AccessLogBaseÚRequestItemBaseÚResponseItemBaseÚStreamChunkItemBaseÚErrorItemBasec                   ó   — e Zd Zd„ ZdS )ÚSessionInfoc                 ó(  — t          t          ¦   «         ¦  «        | _        d | _        d | _        d | _        d| _        d | _        d | _        d | _	        d| _
        d| _        d| _        i | _        t          j        ¦   «         | _        | j        | _        d S )NFg        r   )Ústrr   Ú
request_idÚrequest_jsonÚrequest_headersÚrequest_urlÚstreamÚresponse_jsonÚresponse_bodyÚresponse_headersÚdurationÚduration_apiÚstatus_codeÚ
extra_infoÚtimeÚ
start_timeÚstart_time_api)Úselfs    úG/var/www/piapp/venv/lib/python3.11/site-packages/aiproxy/httpx_proxy.pyÚ__init__zSessionInfo.__init__   s‰   € å�e™gœg™,œ,ˆŒØ ˆÔØ#ˆÔØˆÔØˆŒð "ˆÔØ!ˆÔØ $ˆÔØˆŒØˆÔØˆÔàˆŒõ œ)™+œ+ˆŒØ"œoˆÔÐÐó    N)Ú__name__Ú
__module__Ú__qualname__r,   © r-   r+   r   r      s#   € € € € € ð.ð .ð .ð .ð .r-   r   c                   óH   ‡ — e Zd Zdededefˆ fd„Zedefd„¦   «         Zˆ xZ	S )ÚSessionRequestItemBaser   r   r   c                 ó\   •— t          ¦   «                              |||¦  «         d | _        d S ©N©Úsuperr,   Úsession)r*   r   r   r   Ú	__class__s       €r+   r,   zSessionRequestItemBase.__init__-   s*   ø€ Ý‰Œ×Ò˜ \°?ÑCÔCÐCØ$(ˆŒˆˆr-   r8   c                 óL   —  | |j         |j        |j        ¦  «        }||_        |S r5   )r   r   r   r8   ©Úclsr8   Úitems      r+   Úfrom_sessionz#SessionRequestItemBase.from_session1   s*   € àˆs�7Ô% wÔ';¸WÔ=TÑUÔUˆØˆŒØˆr-   )
r.   r/   r0   r   Údictr,   Úclassmethodr   r>   Ú__classcell__©r9   s   @r+   r3   r3   ,   sy   ø€ € € € € ð) 3ð )°dð )ÈTð )ð )ð )ð )ð )ð )ð ð ;ð ð ð ñ „[ðð ð ð ð r-   r3   c                   óZ   ‡ — e Zd Zddedededededed	dfˆ fd
„Zede	fd„¦   «         Z
ˆ xZS )ÚSessionResponseItemBaseNr   r   r    r"   r#   r$   r%   Úreturnc                 ób   •— t          ¦   «                              ||||||¦  «         d | _        d S r5   r6   )r*   r   r    r"   r#   r$   r%   r9   s          €r+   r,   z SessionResponseItemBase.__init__9   s3   ø€ Ý‰Œ×Ò˜ ]Ð4DÀhÐP\Ð^iÑjÔjÐjØ$(ˆŒˆˆr-   r8   c                 óp   —  | |j         |j        |j        |j        |j        |j        ¦  «        }||_        |S r5   )r   r    r"   r#   r$   r%   r8   r;   s      r+   r>   z$SessionResponseItemBase.from_session=   óJ   € àˆs�7Ô% wÔ'<¸gÔ>VÐX_ÔXhÐjqÔj~ð  AHô  ATñ  Uô  UˆØˆŒØˆr-   )Nr   r   r   ©r.   r/   r0   r   r?   ÚfloatÚintr,   r@   r   r>   rA   rB   s   @r+   rD   rD   8   sª   ø€ € € € € ð)ð ) 3ð )°tð )Ètð )Ðfkð )ð  @Eð )ð  X[ð )ð  dhð )ð )ð )ð )ð )ð )ð ð ;ð ð ð ñ „[ðð ð ð ð r-   rD   c                   óZ   ‡ — e Zd Zddedededededed	dfˆ fd
„Zede	fd„¦   «         Z
ˆ xZS )ÚSessionStreamChunkItemBaseNr   r   Úresponse_contentr"   r#   r$   r%   rE   c                 ób   •— t          ¦   «                              ||||||¦  «         d | _        d S r5   r6   )r*   r   rN   r"   r#   r$   r%   r9   s          €r+   r,   z#SessionStreamChunkItemBase.__init__E   s4   ø€ Ý‰Œ×Ò˜Ð%5Ð7GÈÐS_ÐalÑmÔmÐmØ$(ˆŒˆˆr-   r8   c                 óp   —  | |j         |j        |j        |j        |j        |j        ¦  «        }||_        |S r5   )r   r!   r"   r#   r$   r%   r8   r;   s      r+   r>   z'SessionStreamChunkItemBase.from_sessionI   rH   r-   )NNr   r   r   rI   rB   s   @r+   rM   rM   D   s«   ø€ € € € € ð)ð ) 3ð )¸#ð )ÐX\ð )Ðotð )ð  INð )ð  adð )ð  mqð )ð )ð )ð )ð )ð )ð ð ;ð ð ð ñ „[ðð ð ð ð r-   rM   c                   ób   ‡ — e Zd Zddedededededed	dfˆ fd
„Zede	dedefd„¦   «         Z
ˆ xZS )ÚSessionErrorItemBaseNr   r   Ú	exceptionÚtraceback_infor    r"   r%   rE   c                 ób   •— t          ¦   «                              ||||||¦  «         d | _        d S r5   r6   )r*   r   rS   rT   r    r"   r%   r9   s          €r+   r,   zSessionErrorItemBase.__init__Q   s2   ø€ Ý‰Œ×Ò˜ Y°ÀÐO_ÐalÑmÔmÐmØ$(ˆŒˆˆr-   r8   c                 ó\   —  | |j         |||j        |j        |j        ¦  «        }||_        |S r5   )r   r    r"   r%   r8   )r<   r8   rS   rT   r=   s        r+   r>   z!SessionErrorItemBase.from_sessionU   s?   € àˆs�7Ô% y°.À'ÔBWÐY`ÔYqÐszô  tGñ  Hô  HˆØˆŒØˆr-   )NNr   )r.   r/   r0   r   Ú	Exceptionr?   rK   r,   r@   r   r>   rA   rB   s   @r+   rR   rR   P   s¹   ø€ € € € € ð)ð ) 3ð )°9ð )Ècð )Ðbfð )ð  BFð )ð  \_ð )ð  hlð )ð )ð )ð )ð )ð )ð ð ;ð ¸9ð ÐVYð ð ð ñ „[ðð ð ð ð r-   rR   c                   ó   — e Zd Zdedefd„ZdS )ÚSessionRequestItemEssentialÚaccesslog_clsrE   c                 óÞ   —  || j         t          j        ¦   «         dd| j                             d¦  «        t          j        | j        j        d¬¦  «        | j        j	        d         ¬¦  «        S )NÚrequestÚ úutf-8F©Úensure_asciiÚresource_path)r   Ú
created_atÚ	directionÚcontentÚraw_bodyÚraw_headersÚmodel)
r   r   Úutcnowr   ÚdecodeÚjsonÚdumpsr8   r   r&   ©r*   rZ   s     r+   Úto_accesslogz(SessionRequestItemEssential.to_accesslog]   si   € Øˆ}Ø”Ý”Ñ(Ô(ØØØÔ&×-Ò-¨gÑ6Ô6Ýœ
 4¤<Ô#?ÈeÐTÑTÔTØ”,Ô)¨/Ô:ð
ñ 
ô 
ð 	
r-   N©r.   r/   r0   r   rm   r1   r-   r+   rY   rY   \   s6   € € € € € ð	
¨.ð 	
¸^ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
r-   rY   c                   ó   — e Zd Zdedefd„ZdS )ÚSessionResponseItemEssentialrZ   rE   c                 ó   —  || j         t          j        ¦   «         d| j        dd d | j                             d¦  «        t          j        | j        d¬¦  «        | j	        j
        d         dd| j        | j        ¬¦  «        S )	NÚresponser]   r^   Fr_   ra   r   )r   rb   rc   r%   rd   Úfunction_callÚ
tool_callsre   rf   rg   Úprompt_tokensÚcompletion_tokensÚrequest_timeÚrequest_time_api)r   r   rh   r%   r    ri   rj   rk   r"   r8   r&   r#   r$   rl   s     r+   rm   z)SessionResponseItemEssential.to_accesslogj   s„   € Øˆ}Ø”Ý”Ñ(Ô(Ø ØÔ(ØØØØÔ'×.Ò.¨wÑ7Ô7Ýœ
 4Ô#8ÀuÐMÑMÔMØ”,Ô)¨/Ô:ØØØœØ!Ô.ð
ñ 
ô 
ð 	
r-   Nrn   r1   r-   r+   rp   rp   i   s6   € € € € € ð
¨.ð 
¸^ð 
ð 
ð 
ð 
ð 
ð 
r-   rp   c                   ó€  ‡ — e Zd Zddddddddœdee         dee         dededed	ed
efˆ fd„Zde	de
fd„Zde	dee
         fd„Zdededeef         fd„Zde	de
de
fd„Zdedefd„Zdej        defd„Zdefd„Zdefd„Zdefd„Zdej        defd„Zdej        dej        defd„Zded ed!e d"e	def
d#„Z!d$e"fd%„Z#ˆ xZ$S )&Ú
HTTPXProxyg      N@N)ÚtimeoutÚrequest_filtersÚresponse_filtersÚrequest_item_classÚresponse_item_classÚstream_response_item_classÚerror_item_classr|   r}   r~   r   r€   r�   Úaccess_logger_queuec                óÎ   •— t          ¦   «                              |||¬¦  «         || _        || _        || _        || _        || _        d| _        d| _        d| _	        d| _
        d S )N)r|   r}   r‚   Ú	empty_urlz/path/to/chatÚempty_idÚPOST)r7   r,   r{   r~   r   r€   r�   Úapi_base_urlÚapi_chat_resource_pathÚapi_service_idÚapi_chat_method)
r*   r{   r|   r}   r~   r   r€   r�   r‚   r9   s
            €r+   r,   zHTTPXProxy.__init__   s�   ø€ õ 	‰Œ×ÒØ+Ø-Ø 3ð 	ñ 	
ô 	
ð 	
ð ˆŒð ;MˆÔØ<OˆÔ ØF`ˆÔ'Ø6FˆÔà'ˆÔØ&5ˆÔ#Ø(ˆÔØ%ˆÔÐÐr-   ÚtextrE   c                 ó    — t          d¦  «        ‚)NzA'text_to_response_json' must be implemented to use request filter©ÚNotImplementedError©r*   r‹   s     r+   Útext_to_response_jsonz HTTPXProxy.text_to_response_jsonŸ   s   € Ý!Ð"eÑfÔfÐfr-   c                 ó    — t          d¦  «        ‚)NzC'text_to_response_chunks' must be implemented to use request filterr�   r�   s     r+   Útext_to_response_chunksz"HTTPXProxy.text_to_response_chunks¢   s   € Ý!Ð"gÑhÔhÐhr-   r8   c              ƒ   ó€  K  — | j         D �]2}|                     |j        |j        |j        ¦  «        ƒ d {V —†x}�r |                      |¦  «        |_        t          |j        ¦  «        }|                      ||j        ¦  «         t          |j
        ¦  «        |_        | j                             | j                             |¬¦  «        ¦  «         |j        r`dt"          t                   fd„}t%           ||                      |¦  «        ¦  «        ¦  «        }|                      ||j        ¦  «         |c S |c S �Œ4d S )N©r8   Údeltasc                ó*   K  — | 2 3 d {V —†}|W V — Œ6 d S r5   r1   )r•   Úds     r+   Úfilter_response_streamz9HTTPXProxy.filter_request.<locals>.filter_response_streamµ   sD   è è € Ø'-ð $ð $ð $ð $ð $ð $ð $ !Ø"#˜G˜G˜G˜G˜Gð (. v vs   …)r|   Úfilterr   r   r   r�   r    r	   Úadd_response_headersr?   Úheadersr"   r‚   Úputr   r>   r   Úlistr   r’   )r*   r8   ÚfÚcompletion_contentÚjson_responser˜   Ússe_resps          r+   Úfilter_requestzHTTPXProxy.filter_request¥   sp  è è € ØÔ%ð 	)ñ 	)ˆAØ+,¯8ª8°GÔ4FÈÔH\Ð^eÔ^uÑ+vÔ+vÐ%vÐ%vÐ%vÐ%vÐ%vÐ%vÐvÐ!ñ )à(,×(BÒ(BÐCUÑ(VÔ(V�Ô%Ý ,¨WÔ-BÑ CÔ C�Ø×)Ò)¨-¸Ô9KÑLÔLÐLÝ+/°Ô0EÑ+FÔ+F�Ô(ð Ô(×,Ò,ØÔ,×9Ò9À'Ð9ÑJÔJñô ð ð
 ”>ð )ð$½TÅ$¼Zð $ð $ð $ð $õ  3Ø.Ð.¨t×/KÒ/KÐL^Ñ/_Ô/_Ñ`Ô`ñ ô  �Hð ×-Ò-¨h¸Ô8JÑKÔKÐKØ#�O�O�Oð )Ð(Ð(Ð(ñ3)ð6 ˆtr-   r   r    c              ƒ   ób   K  — | j         D ]$}|                     ||¦  «        ƒ d {V —†x}r|c S Œ%|S r5   )r}   r™   )r*   r   r    rž   Úimmediately_return_json_resps        r+   Úfilter_responsezHTTPXProxy.filter_responseÄ   s_   è è € ØÔ&ð 	4ð 	4ˆAØ56·X²X¸jÈ-Ñ5XÔ5XÐ/XÐ/XÐ/XÐ/XÐ/XÐ/XÐXÐ+ð 4Ø3Ð3Ð3Ð3ð4ð Ðr-   Úfastapi_requestc              ƒ   óÐ   K  — |                      ¦   «         ƒ d {V —†|_        t          |j                             ¦   «         ¦  «        |_        t          |j        ¦  «        |_        d S r5   )	rj   r   r?   r›   Úitemsr   r   Úurlr   )r*   r¦   r8   s      r+   Úparse_requestzHTTPXProxy.parse_requestÌ   sd   è è € Ø%4×%9Ò%9Ñ%;Ô%;Ð;Ð;Ð;Ð;Ð;Ð;ˆÔÝ"& Ô'>×'DÒ'DÑ'FÔ'FÑ"GÔ"GˆÔÝ! /Ô"5Ñ6Ô6ˆÔÐÐr-   Úhttpx_responsec              ƒ   óØ   K  — t          |j        ¦  «        |_        |j        |_        |j        s;|                     ¦   «         |_        t          j        ¦   «         |j        z
  |_	        d S d S r5   )
r?   r›   r"   r%   r   rj   r    r'   r)   r$   )r*   r«   r8   s      r+   Úparse_responsezHTTPXProxy.parse_responseÑ   sk   è è € Ý#'¨Ô(>Ñ#?Ô#?ˆÔ Ø,Ô8ˆÔØŒ~ð 	HØ$2×$7Ò$7Ñ$9Ô$9ˆGÔ!Ý#'¤9¡;¤;°Ô1GÑ#GˆGÔ Ð Ð ð	Hð 	Hr-   c                 ó’   — |j                              d¦  «        r|j         d= |j                              d¦  «        r
|j         d= d S d S )NÚhostúcontent-length)r   Úget©r*   r8   s     r+   Úprepare_httpx_request_headersz(HTTPXProxy.prepare_httpx_request_headersØ   s\   € ØÔ"×&Ò& vÑ.Ô.ð 	0ØÔ'¨Ð/ØÔ"×&Ò&Ð'7Ñ8Ô8ð 	:ØÔ'Ð(8Ð9Ð9Ð9ð	:ð 	:r-   c                 ó4  — |j                              d¦  «        r|j         d= |j                              d¦  «        r|j         d= |j                              d¦  «        r|j         d= |j                              d¦  «        r|j         d= |j        |j         d<   d S )NÚdater°   zcontent-encodingzcache-controlzX-AIProxy-Request-Id)r"   r±   r   r²   s     r+   Úprepare_httpx_response_headersz)HTTPXProxy.prepare_httpx_response_headersÞ   s­   € ØÔ#×'Ò'¨Ñ/Ô/ð 	1ØÔ(¨Ð0ØÔ#×'Ò'Ð(8Ñ9Ô9ð 	;ØÔ(Ð)9Ð:ØÔ#×'Ò'Ð(:Ñ;Ô;ð 	=ØÔ(Ð);Ð<ØÔ#×'Ò'¨Ñ8Ô8ð 	:ØÔ(¨Ð9à;BÔ;MˆÔ Ð!7Ñ8Ð8Ð8r-   c                 ó    — | j         | j        z   S r5   )r‡   rˆ   r²   s     r+   Úmake_urlzHTTPXProxy.make_urlê   s   € ØÔ  4Ô#>Ñ>Ð>r-   Úasync_clientc              ƒ   ó   K  — 	 |j                              ¦   «         }|                      |j        |j         ¦  «        ƒ d {V —†}||k    r|n||_         t	          |j         |j        |j        ¦  «        }t          j        ¦   «         |j        z
  |_	        | j
                             | j                             |¬¦  «        ¦  «         ||                     ¦   «         ƒ d {V —† S # |                     ¦   «         ƒ d {V —† w xY w)Nr”   )r    Úcopyr¥   r   r	   r%   r"   r'   r(   r#   r‚   rœ   r   r>   Úaclose)r*   r¹   r8   Úoriginal_response_jsonÚfiltered_response_jsonr    s         r+   Úmake_json_responsezHTTPXProxy.make_json_responseî   s2  è è € ð	(à%,Ô%:×%?Ò%?Ñ%AÔ%AÐ"Ø+/×+?Ò+?ÀÔ@RÐT[ÔTiÑ+jÔ+jÐ%jÐ%jÐ%jÐ%jÐ%jÐ%jÐ"Ø>TÐXnÒ>nÐ>nÐ$:Ð$:ð  uKˆGÔ!õ )ØÔ%ØÔ#ØÔ(ñô ˆMõ  $œy™{œ{¨WÔ-?Ñ?ˆGÔØÔ$×(Ò(ØÔ(×5Ò5¸gÐ5ÑFÔFñô ð ð !ð ×%Ò%Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ð'ø�,×%Ò%Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ð'øøøs   „CC! Ã!C=Ústream_responsec                 ób   ‡ ‡‡‡— ˆˆ ˆˆfd„}t           |¦   «         ‰j        ‰j        ¬¦  «        S )Nc            
     ó   •K  — d‰_         	 d} ‰                     ¦   «         2 3 d {V —†}|                     d¦  «        }‰xj         |z  c_         |                     d¦  «        r-| |z                        ¦   «                              d¦  «        }d} n| |z  } Œt|D ]Ì}d}g }|                     d¦  «        D ]x}|                     d¦  «        r|dd …                              ¦   «         }Œ4|                     d¦  «        r/|                     |dd …                              ¦   «         ¦  «         Œy|r|d                     |¦  «        d	œW V — Œ²d
d                     |¦  «        iW V — ŒÍ�ŒE6 	 	 t          j	        ¦   «         }|‰j
        z
  ‰_        |‰j        z
  ‰_        ‰
j                             ‰
j                             ‰¦  «        ¦  «         nj# t$          $ r]}t&                               d|› dt+          j        ¦   «         › �¦  «         t&                               d‰j         › �¦  «         Y d }~nd }~ww xY w‰	                     ¦   «         ƒ d {V —† d S # ‰	                     ¦   «         ƒ d {V —† w xY w# 	 t          j	        ¦   «         }|‰j
        z
  ‰_        |‰j        z
  ‰_        ‰
j                             ‰
j                             ‰¦  «        ¦  «         nj# t$          $ r]}t&                               d|› dt+          j        ¦   «         › �¦  «         t&                               d‰j         › �¦  «         Y d }~nd }~ww xY w‰	                     ¦   «         ƒ d {V —† w # ‰	                     ¦   «         ƒ d {V —† w xY wxY w)Nr]   r^   z

ú
zevent:é   zdata:é   )ÚeventÚdatarÇ   zFailed in making log items: zresponse_content: )r!   Ú	aiter_rawri   ÚendswithÚstripÚsplitÚ
startswithÚappendÚjoinr'   r(   r#   r)   r$   r‚   rœ   r€   r>   rW   ÚloggerÚerrorÚ	tracebackÚ
format_excr¼   )Úchunk_bufferÚbÚchunkÚevÚ
event_typeÚdatasÚlineÚnowÚexr¹   r*   r8   rÀ   s            €€€€r+   Úprocess_streamz7HTTPXProxy.make_stream_response.<locals>.process_stream  s%  øè è € Ø$&ˆGÔ!ð*0à!�Ø.×8Ò8Ñ:Ô:ð =ð =ð =ð =ð =ð =ð =˜!ØŸHšH WÑ-Ô-�EØÐ)Ô)¨UÑ2Ð)Ô)Ø—~’~ fÑ-Ô-ð !Ø!-°Ñ!5× <Ò <Ñ >Ô >× DÒ DÀVÑ LÔ L˜Ø')˜˜à$¨Ñ-˜Ø à#ð =ð =˜Ø%'˜
Ø "˜Ø$&§H¢H¨T¡N¤Nð ?ð ?˜DØ#Ÿš¨xÑ8Ô8ð ?Ø-1°!°"°"¬X¯^ª^Ñ-=Ô-= 
 
Ø!%§¢°Ñ!9Ô!9ð ?Ø %§¢¨T°!°"°"¬X¯^ª^Ñ-=Ô-=Ñ >Ô >Ð >øà%ð =Ø,6ÀÇ	Â	È%Ñ@PÔ@PÐ"QÐ"QÐQÐQÐQÐQÐQà#)¨4¯9ª9°UÑ+;Ô+;Ð"<Ð<Ð<Ð<Ð<Ð<ñ=ð  ;Ð:ð40Ýœ)™+œ+�CØ'*¨WÔ-?Ñ'?�GÔ$Ø+.°Ô1GÑ+G�GÔ(ØÔ,×0Ò0ØÔ7×DÒDÀWÑMÔMñô ð ð øõ !ð Oð Oð OÝ—L’LÐ!^ÀÐ!^Ð!^ÅiÔFZÑF\ÔF\Ð!^Ð!^Ñ_Ô_Ð_Ý—L’LÐ!M°gÔ6KÐ!MÐ!MÑNÔNÐNÐNÐNÐNÐNÐNøøøøðOøøøð
 '×-Ò-Ñ/Ô/Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ð/ø˜,×-Ò-Ñ/Ô/Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ð/øøøøð0Ýœ)™+œ+�CØ'*¨WÔ-?Ñ'?�GÔ$Ø+.°Ô1GÑ+G�GÔ(ØÔ,×0Ò0ØÔ7×DÒDÀWÑMÔMñô ð ð øõ !ð Oð Oð OÝ—L’LÐ!^ÀÐ!^Ð!^ÅiÔFZÑF\ÔF\Ð!^Ð!^Ñ_Ô_Ð_Ý—L’LÐ!M°gÔ6KÐ!MÐ!MÑNÔNÐNÐNÐNÐNÐNÐNøøøøðOøøøð
 '×-Ò-Ñ/Ô/Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ð/ø˜,×-Ò-Ñ/Ô/Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ð/øøøøøøs†   ŒI3 ¢E'¨E I3 Å*A#G ÇI Ç
H5ÇAH0È+I È0H5È5I ÉI0É3M=É5A#KËMË
M Ë#AL;Ì6MÌ;M Í MÍM=ÍM:Í:M=©r%   r›   )r   r%   r"   )r*   r¹   rÀ   r8   rÜ   s   ```` r+   Úmake_stream_responsezHTTPXProxy.make_stream_response  s_   øøøø€ ð,	0ð ,	0ð ,	0ð ,	0ð ,	0ð ,	0ð ,	0ð ,	0õ\ #ØˆNÑÔØÔ+ØÔ,ð
ñ 
ô 
ð 	
r-   r%   rÛ   Ú
error_typec                 ó  — dt          |¦  «        |dœi}t          ||¬¦  «        }|                      ||j        ¦  «         | j                             | j                             ||t          j	        ¦   «         ¬¦  «        ¦  «         |S )NrÐ   )ÚmessageÚtype)r%   ©r8   rS   rT   )
r   r	   rš   r   r‚   rœ   r�   r>   rÑ   rÒ   )r*   r8   r%   rÛ   rß   ÚkwargsÚ	resp_jsonr    s           r+   Úmake_error_responsezHTTPXProxy.make_error_response<  s—   € à­#¨b©'¬'¸:ÐFÐFÐGˆ	Ý$ Y¸KÐHÑHÔHˆØ×!Ò! -°Ô1CÑDÔDÐDð 	Ô ×$Ò$ TÔ%:×%GÒ%GØØÝ$Ô/Ñ1Ô1ð &Hñ &
ô &
ñ 	ô 	ð 	ð Ðr-   Úappc                 óþ   ‡ — |                      d‰ j        › ‰ j        › �‰ j        g¬¦  «        dt          fˆ fd„¦   «         }|                      d‰ j        › d�g d¢¬¦  «        dt          dt
          fˆ fd„¦   «         }d S )	Nú/)Úmethodsr\   c           	   “   ó¤  •K  — t          ¦   «         }	 ‰                     | |¦  «        ƒ d {V —† ‰j                             ‰j                             |¦  «        ¦  «         ‰                     |¦  «        ƒ d {V —†x}r|S t          j        ¦   «         |_        t          j
        ‰j        ¬¦  «        }	 ‰                     |¦  «         t          j        d‰                     |¦  «        |j        |j        ¬¦  «        }|                     ||j        ¬¦  «        ƒ d {V —†}‰                     ||¦  «        ƒ d {V —† ‰                     |¦  «         |                     ¦   «          n.# t,          $ r!}|                     ¦   «         ƒ d {V —† |‚d }~ww xY w|j        r‰                     |||¦  «        S ‰                     ||¦  «        ƒ d {V —†S # t4          $ rX}t6                               d|› dt;          j        ¦   «         › �¦  «         ‰                     ||j         |d¦  «        cY d }~S d }~wtB          $ rX}t6                               d|› dt;          j        ¦   «         › �¦  «         ‰                     ||j         |d	¦  «        cY d }~S d }~wt          j"        $ �rW}t6                               d
|› dt;          j        ¦   «         › �¦  «         	 |j#         $                    ¦   «         }	n…#  	 |j#         %                    ¦   «         ƒ d {V —†}
tM          |
tN          ¦  «        r|
 (                    d¦  «        }
ntS          |
¦  «        }
tI          j*        |
¦  «        }	n#  ddddœdœ}	Y nxY wY nxY w‰                     |¦  «         ‰j                             ‰j+                             ||t;          j        ¦   «         ¬¦  «        ¦  «         tY          |	|j#        j         |j-        ¬¦  «        cY d }~S d }~wt,          $ rS}t6                               d
|› dt;          j        ¦   «         › �¦  «         ‰                     |d|d¦  «        cY d }~S d }~ww xY w)N©r{   r†   )Úmethodr©   r›   rj   )r\   r   úRequest filter error: rÃ   Úrequest_filter_errorúResponse filter error: Úresponse_filter_errorúError at server: r^   rÐ   Ú
http_errorú!Failed in parsing error response.©râ   rá   ©râ   rÐ   rã   rÝ   éö  Úproxy_error).r   rª   r‚   rœ   r~   r>   r¢   r'   r)   ÚhttpxÚAsyncClientr{   r³   r   r¸   r   r   Úsendr   r­   r¶   Úraise_for_statusrW   r¼   rÞ   r¿   r   rÏ   rÐ   rÑ   rÒ   ræ   r%   r   ÚHTTPStatusErrorrr   rj   ÚareadÚ
isinstanceÚbytesri   r   Úloadsr�   r	   r"   )r\   r8   Úfiltered_responser¹   Úhttpx_requestr«   rÛ   ÚrfexÚhtexrå   rd   r*   s              €r+   Úhandle_chat_requestz1HTTPXProxy.add_route.<locals>.handle_chat_requestM  sY  øè è € å!‘m”mˆGðNQØ×(Ò(¨°'Ñ:Ô:Ð:Ð:Ð:Ð:Ð:Ð:Ð:àÔ(×,Ò,¨TÔ-D×-QÒ-QÐRYÑ-ZÔ-ZÑ[Ô[Ð[ð /3×.AÒ.AÀ'Ñ.JÔ.JÐ(JÐ(JÐ(JÐ(JÐ(JÐ(JÐJÐ$ð -Ø,Ð,å)-¬©¬�Ô&õ  %Ô0¸¼ÐFÑFÔF�ð	Ø×6Ò6°wÑ?Ô?Ð?Ý$)¤M¸ÀTÇ]Â]ÐSZÑE[ÔE[ÐelÔe|ð  DKô  DXð  %Yñ  %Yô  %Y�MØ+7×+<Ò+<À]Ð[bÔ[iÐ+<Ñ+jÔ+jÐ%jÐ%jÐ%jÐ%jÐ%jÐ%j�NØ×-Ò-¨n¸gÑFÔFÐFÐFÐFÐFÐFÐFÐFØ×7Ò7¸Ñ@Ô@Ð@Ø"×3Ò3Ñ5Ô5Ð5Ð5øÝ ð ð ð Ø&×-Ò-Ñ/Ô/Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ø�Høøøøðøøøð ”>ð 
Ø×4Ò4Ø$Ø&Øñô ð ð "&×!8Ò!8Ø$Øñ"ô "ð ð ð ð ð ð ð øõ *ð ið ið iÝ—’ÐV°dÐVÐV½iÔ>RÑ>TÔ>TÐVÐVÑWÔWÐWØ×/Ò/°¸Ô9IÈ4ÐQgÑhÔhÐhÐhÐhÐhÐhÐhøøøøå*ð jð jð jÝ—’ÐW°tÐWÐW½yÔ?SÑ?UÔ?UÐWÐWÑXÔXÐXØ×/Ò/°¸Ô9IÈ4ÐQhÑiÔiÐiÐiÐiÐiÐiÐiøøøøåÔ(ð ñ ð Ý—’ÐQ°ÐQÐQ½Ô9MÑ9OÔ9OÐQÐQÑRÔRÐRðGØ $¤× 2Ò 2Ñ 4Ô 4�I�Iøð	GðGØ(,¬×(;Ò(;Ñ(=Ô(=Ð"=Ð"=Ð"=Ð"=Ð"=Ð"=˜Ý% g­uÑ5Ô5ð 3Ø&-§n¢n°WÑ&=Ô&=˜G˜Gå&)¨'¡l¤l˜GÝ$(¤J¨wÑ$7Ô$7˜	˜	øðGØ-4Èð  bEð  @Fð  @Fð  %Gð  %G˜	˜	˜	øøøøøøøøà×3Ò3°GÑ<Ô<Ð<àÔ(×,Ò,¨TÔ-B×-OÒ-OØ#Ø"Ý#,Ô#7Ñ#9Ô#9ð .Pñ .ô .ñ ô ð õ $ØØ $¤Ô 9Ø#Ô4ðñ ô ð ð ð ð ð ð øøøøõ ð Qð Qð QÝ—’ÐO°ÐOÐOµyÔ7KÑ7MÔ7MÐOÐOÑPÔPÐPØ×/Ò/°¸¸bÀ-ÑPÔPÐPÐPÐPÐPÐPÐPøøøøðQøøøsº   “A,G Â 2G Â3B1E% Å$G Å%
FÅ/FÆFÆ G Æ1G Ç
QÇAH*È$QÈ*QÈ7AJ
ÊQÊ
QÊ1O/ËK)Ë(O/Ë)M+Ë,A-MÍM+Í
M&Í$M+Í)B O/Ï)QÏ/QÏ<AQ
ÑQÑ
Qz/{resource_path:path})ÚGETr†   ÚPUTÚDELETEÚOPTIONSÚHEADÚPATCHra   c           	   “   óª	  •K  — t          ¦   «         }	 |                      ¦   «         ƒ d {V —†|_        t          | j                             ¦   «         ¦  «        |_        t          | j        ¦  «        |_	        d|z   |j
        d<   ‰j                             t                               |¦  «        ¦  «         t          j        ‰j        ¬¦  «        }	 ‰                     |¦  «         t          j        | j        ‰j        dz   |z   |j        |j        ¬¦  «        }|                     |¬¦  «        ƒ d {V —†}t          |j        ¦  «        |_        |j        |_        |j        |_        t7          j        ¦   «         |j        z
  |_        ‰                     |¦  «         |                     ¦   «          tA          |j        |j        |j        ¦  «        }t7          j        ¦   «         |j!        z
  |_"        ‰j                             tF                               |¬¦  «        ¦  «         |S # tH          $ r!}| %                    ¦   «         ƒ d {V —† |‚d }~ww xY w# tL          $ rX}tN           (                    d|› dtS          j*        ¦   «         › �¦  «         ‰ +                    ||j        |d	¦  «        cY d }~S d }~wtX          $ rX}tN           (                    d
|› dtS          j*        ¦   «         › �¦  «         ‰ +                    ||j        |d¦  «        cY d }~S d }~wt          j-        $ �rW}	tN           (                    d|	› dtS          j*        ¦   «         › �¦  «         	 |	j.         /                    ¦   «         }
n…#  	 |	j.         0                    ¦   «         ƒ d {V —†}tc          |td          ¦  «        r| 3                    d¦  «        }nt          |¦  «        }t_          j4        |¦  «        }
n#  ddddœdœ}
Y nxY wY nxY w‰                     |¦  «         ‰j                             ‰j5                             ||	tS          j*        ¦   «         ¬¦  «        ¦  «         tm          |
|	j.        j        |j        ¬¦  «        cY d }	~	S d }	~	wtH          $ rS}tN           (                    d|› dtS          j*        ¦   «         › �¦  «         ‰ +                    |d|d¦  «        cY d }~S d }~ww xY w)Nré   ra   rì   )rí   r©   r›   rÇ   )r\   r”   rî   rÃ   rï   rð   rñ   rò   r^   rÐ   ró   rô   rõ   rö   rã   rÝ   r÷   rø   )7r   Úbodyr   r?   r›   r¨   r   r   r©   r   r&   r‚   rœ   rY   r>   rù   rú   r{   r³   r   rí   r‡   rû   r"   r%   rd   r    r'   r)   r$   r¶   rü   r
   r(   r#   rp   rW   r¼   r   rÏ   rÐ   rÑ   rÒ   ræ   r   rý   rr   rj   rþ   rÿ   r   ri   r  r�   r	   )r\   ra   r8   r¹   r  r«   rr   rÛ   r  r  rå   rd   r*   s               €r+   Úhandle_requestz,HTTPXProxy.add_route.<locals>.handle_request¡  ss  øè è € å!‘m”mˆGðXQà-4¯\ª\©^¬^Ð';Ð';Ð';Ð';Ð';Ð';�Ô$Ý*.¨w¬×/DÒ/DÑ/FÔ/FÑ*GÔ*G�Ô'Ý&)¨'¬+Ñ&6Ô&6�Ô#Ø69¸MÑ6I�Ô" ?Ñ3ð Ô(×,Ò,Õ-H×-UÒ-UÐV]Ñ-^Ô-^Ñ_Ô_Ð_õ  %Ô0¸¼ÐFÑFÔF�ðØ×6Ò6°wÑ?Ô?Ð?Ý$)¤M¸¼ÈTÔM^ÐadÑMdÐgtÑMtð  Fô  Vð  ]dô  ]qð  %rñ  %rô  %r�MØ+7×+<Ò+<À]Ð+<Ñ+SÔ+SÐ%SÐ%SÐ%SÐ%SÐ%SÐ%S�Nõ 04°NÔ4JÑ/KÔ/K�GÔ,Ø*8Ô*D�GÔ'Ø,:Ô,B�GÔ)Ý+/¬9©;¬;¸Ô9OÑ+O�GÔ(à×7Ò7¸Ñ@Ô@Ð@Ø"×3Ò3Ñ5Ô5Ð5õ  (ØÔ-ØÔ+ØÔ0ñ ô  �Hõ (,¤y¡{¤{°WÔ5GÑ'G�GÔ$ØÔ,×0Ò0Ý4×AÒAÈ'ÐAÑRÔRñô ð ð $�Oøå ð ð ð Ø&×-Ò-Ñ/Ô/Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ø�Høøøøðøøøøõ
 *ð ið ið iÝ—’ÐV°dÐVÐV½iÔ>RÑ>TÔ>TÐVÐVÑWÔWÐWØ×/Ò/°¸Ô9IÈ4ÐQgÑhÔhÐhÐhÐhÐhÐhÐhøøøøå*ð jð jð jÝ—’ÐW°tÐWÐW½yÔ?SÑ?UÔ?UÐWÐWÑXÔXÐXØ×/Ò/°¸Ô9IÈ4ÐQhÑiÔiÐiÐiÐiÐiÐiÐiøøøøåÔ(ð ñ ð Ý—’ÐQ°ÐQÐQ½Ô9MÑ9OÔ9OÐQÐQÑRÔRÐRðGØ $¤× 2Ò 2Ñ 4Ô 4�I�Iøð	GðGØ(,¬×(;Ò(;Ñ(=Ô(=Ð"=Ð"=Ð"=Ð"=Ð"=Ð"=˜Ý% g­uÑ5Ô5ð 3Ø&-§n¢n°WÑ&=Ô&=˜G˜Gå&)¨'¡l¤l˜GÝ$(¤J¨wÑ$7Ô$7˜	˜	øðGØ-4Èð  bEð  @Fð  @Fð  %Gð  %G˜	˜	˜	øøøøøøøøà×3Ò3°GÑ<Ô<Ð<àÔ(×,Ò,¨TÔ-B×-OÒ-OØ#Ø"Ý#,Ô#7Ñ#9Ô#9ð .Pñ .ô .ñ ô ð õ $ØØ $¤Ô 9Ø#Ô4ðñ ô ð ð ð ð ð ð øøøøõ ð Qð Qð QÝ—’ÐO°ÐOÐOµyÔ7KÑ7MÔ7MÐOÐOÑPÔPÐPØ×/Ò/°¸¸bÀ-ÑPÔPÐPÐPÐPÐPÐPÐPøøøøðQøøøs¨   “B<I ÃEH" È"
IÈ,IÉIÉI É
SÉAJ-Ê'SÊ-SÊ:ALÌSÌSÌ 1Q2ÍM,Í+Q2Í,O.Í/A-OÏO.Ï
O)Ï'O.Ï,B Q2Ñ,SÑ2SÑ?ASÓSÓS)Ú	api_router‰   rˆ   rŠ   r   r   )r*   rç   r  r  s   `   r+   Ú	add_routezHTTPXProxy.add_routeL  s  ø€ Ø	�ŠÐM˜4Ô.ÐM°Ô0KÐMÐMÐX\ÔXlÐWmˆÑ	nÔ	nðQ	Q­wð Q	Qð Q	Qð Q	Qð Q	Qð Q	Qñ 
oÔ	nðQ	Qðf 
�ŠÐG˜4Ô.ÐGÐGÐGð  RNð  RNð  RNˆñ  
Oô  
Oð[	Q­'ð [	QÅ#ð [	Qð [	Qð [	Qð [	Qð [	Qñ 
Oô  
Oð[	Qð [	Qð [	Qr-   )%r.   r/   r0   r   r   r   râ   r   r,   r   r?   r�   r�   r’   r   r   r	   r   r¢   r¥   r   rª   rù   r
   r­   r³   r¶   r¸   rú   r¿   rÞ   rK   rW   ræ   r   r  rA   rB   s   @r+   rz   rz   ~   sÁ  ø€ € € € € ð Ø37Ø59Ø#'Ø$(Ø+/Ø!%ð&ð &ð &ð Ð/Ô0ð	&ð
 Ð1Ô2ð&ð !ð&ð "ð&ð %)ð&ð ð&ð -ð&ð &ð &ð &ð &ð &ð@g¨#ð g°$ð gð gð gð gði¨Cð i°D¸´Jð ið ið ið ið¨Kð ¸EÀ$ÈÐViÐBiÔ<jð ð ð ð ð>°ð ÀDð ÈTð ð ð ð ð7°7ð 7À[ð 7ð 7ð 7ð 7ð
H°5´>ð HÈKð Hð Hð Hð Hð:°[ð :ð :ð :ð :ð
N°kð 
Nð 
Nð 
Nð 
Nð? ð ?ð ?ð ?ð ?ð(°UÔ5Fð (ÐQ\ð (ð (ð (ð (ð23
°Ô1Bð 3
ÐUZÔUcð 3
Ðnyð 3
ð 3
ð 3
ð 3
ðj¨;ð ÀSð Èið Ðehð ð  xDð ð ð ð ð qQ˜Wð qQð qQð qQð qQð qQð qQð qQð qQr-   rz   ),r   rj   Úloggingr'   rÑ   Útypingr   r   Úuuidr   Úfastapir   r   Úfastapi.responsesr	   r
   Ússe_starlette.sser   rù   Úaiproxy.proxyr   r   r   r   r   Úaiproxy.queueclientr   Úaiproxy.accesslogr   r   r   r   r   Ú	getLoggerr.   rÏ   r   r3   rD   rM   rR   rY   rp   rz   r1   r-   r+   ú<module>r     s�  ðØ Ð Ð Ð Ð Ð Ø €€€Ø €€€Ø €€€Ø Ð Ð Ð Ø Ð Ð Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø €€€Ø {Ð {Ð {Ð {Ð {Ð {Ð {Ð {Ð {Ð {Ð {Ð {Ð {Ð {Ø /Ð /Ð /Ð /Ð /Ð /Ø sÐ sÐ sÐ sÐ sÐ sÐ sÐ sÐ sÐ sÐ sÐ sÐ sÐ sð 
ˆÔ	˜8Ñ	$Ô	$€ð.ð .ð .ð .ð .ñ .ô .ð .ð0	ð 	ð 	ð 	ð 	˜_ñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	Ð.ñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	Ð!4ñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	˜=ñ 	ô 	ð 	ð

ð 

ð 

ð 

ð 

Ð"8ñ 

ô 

ð 

ð
ð 
ð 
ð 
ð 
Ð#:ñ 
ô 
ð 
ð*Qð Qð Qð Qð Q�ñ Qô Qð Qð Qð Qr-   