Ë
    CØïi	e  ã                   ó0  — 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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mZmZ d dlmZmZmZ d dlZd dlZej4                  dk\  rd dl
mZ n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Z%dZ&dZ' ejP                  «       Z)d„ Z*deee+e+f      fd„Z,dee+   fd„Z-dej\                  fd„Z/de0dee+   fd„Z1dee0   dee+   fd„Z2dejf                  fd„Z4 G d„ d«      Z5edeejl                     fd„«       Z7y)é    N)Úasynccontextmanager)ÚJSONDecodeError)	ÚAsyncGeneratorÚAsyncIteratorÚCallableÚDictÚIteratorÚOptionalÚTupleÚUnionÚoverload)Ú	urlencodeÚurlsplitÚ
urlunsplit)é   é   )ÚLiteral)ÚerrorÚutilÚversion)ÚOpenAIResponse)ÚApiTypeiX  é´   é   c                 óV   — t        | «      \  }}}}}|r|›d|›�}t        |||||f«      S )Nú&)r   r   )ÚurlÚqueryÚschemeÚnetlocÚpathÚ
base_queryÚfragments          úN/var/www/html/aiagents/fe/lib/python3.12/site-packages/openai/api_requestor.pyÚ_build_api_urlr%   -   s9   € Ü19¸#³Ñ.€FˆF�D˜* háÚ%¡uÐ-ˆä�v˜v t¨U°HÐ=Ó>Ð>ó    Úreturnc                 óˆ   — | €yt        | t        «      r| | dœS t        | t        «      r| j                  «       S t	        d«      ‚)zIReturns a value suitable for the 'proxies' argument to 'requests.request.N)ÚhttpÚhttpsús'openai.proxy' must be specified as either a string URL or a dict with string URL under the https and/or http keys.)Ú
isinstanceÚstrÚdictÚcopyÚ
ValueError©Úproxys    r$   Ú_requests_proxies_argr3   6   sH   € à€}ØÜ	�Eœ3Ô	Ø¨Ñ.Ð.Ü	�Eœ4Ô	 Ø�z‰z‹|Ðäð Bó
ð 	
r&   c                 ó~   — | €yt        | t        «      r| S t        | t        «      rd| v r| d   S | d   S t        d«      ‚)zVReturns a value suitable for the 'proxies' argument to 'aiohttp.ClientSession.request.Nr*   r)   r+   )r,   r-   r.   r0   r1   s    r$   Ú_aiohttp_proxies_argr5   D   sP   € à€}ØÜ	�Eœ3Ô	ØˆÜ	�Eœ4Ô	 Ø!(¨EÑ!1ˆu�W‰~ÐD°u¸V±}ÐDäð Bó
ð 	
r&   c                  óÜ  — t         j                  rLt        t         j                  t        j                  «      rt         j                  S t        j                  «       S t         j
                  st        j                  d«       t        j                  «       } t        t         j                  «      }|r|| _
        | j                  dt        j                  j                  t        ¬«      «       | S )Nz4verify_ssl_certs is ignored; openai always verifies.zhttps://)Úmax_retries)ÚopenaiÚrequestssessionr,   ÚrequestsÚSessionÚverify_ssl_certsÚwarningsÚwarnr3   r2   ÚproxiesÚmountÚadaptersÚHTTPAdapterÚMAX_CONNECTION_RETRIES)Úsr?   s     r$   Ú_make_sessionrE   R   s¦   € Ü×ÒÜ”f×,Ñ,¬h×.>Ñ.>Ô?Ü×)Ñ)Ð)Ü×%Ñ%Ó'Ð'Ü×"Ò"Ü�‰ÐLÔMÜ×ÑÓ€AÜ#¤F§L¡LÓ1€GÙØˆŒ	Ø‡G�GØÜ×Ñ×%Ñ%Ô2HÐ%ÓIôð €Hr&   Úlinec                 ó’   — | rE| j                  «       dk(  ry | j                  d«      r| t        d«      d  } | j                  d«      S y y )Ns   data: [DONE]s   data: úutf-8)ÚstripÚ
startswithÚlenÚdecode)rF   s    r$   Úparse_stream_helperrM   d   sI   € ÙØ�:‰:‹<˜?Ò*ð Ø�?‰?˜9Ô%Øœ˜I›˜Ð(ˆDØ—;‘;˜wÓ'Ð'àØr&   Úrbodyc              #   ó>   K  — | D ]  }t        |«      }|€Œ|–— Œ y ­w©N©rM   ©rN   rF   Ú_lines      r$   Úparse_streamrT   r   s*   è ø€ Øò ˆÜ# DÓ)ˆØÑØ‹Kñùs   ‚–c                óP   K  — | 2 3 d {  –—† }t        |«      }|€Œ|­–— Œ7 Œ6 y ­wrP   rQ   rR   s      r$   Úparse_stream_asyncrV   y   s2   è ø€ Ø÷ ð ˆdÜ# DÓ)ˆØÑØŒKðø‘eùs    ‚&…$‰"Š$�&œ&¢$¤&c                   ó   — e Zd Z	 	 	 	 	 d+d„Zed„ «       Zdedeegef   fd„Z		 	 	 	 d,de
ee   eef   fd„Z	 	 	 	 d,de
ee   eef   fd	„Ze	 	 d-ded   dee   deeee
eef   f      de
ee   eef   fd„«       Ze	 	 	 d.d
d
dœded   dee   deeee
eef   f      de
ee   eef   fd„«       Ze	 	 	 	 	 	 d/ded   dee   deeee
eef   f      de
eeef   fd„«       Ze	 	 	 	 	 	 d/dedee   deeee
eef   f      de
eeee   f   eef   fd„«       Z	 	 	 	 	 	 d0dedee   deeee
eef   f      de
eeee   f   eef   fd„Ze	 	 d-ded   dee   deeee
eef   f      de
eedf   eef   fd„«       Ze	 	 	 d.d
d
dœded   dee   deeee
eef   f      de
eedf   eef   fd„«       Ze	 	 	 	 	 	 d/ded   dee   deeee
eef   f      de
eeef   fd„«       Ze	 	 	 	 	 	 d/dedee   deeee
eef   f      de
eeeedf   f   eef   fd„«       Z	 	 	 	 	 	 d0dedee   deeee
eef   f      de
eeeedf   f   eef   fd„Zd1d„Zdedee   deeef   fd„Zdeeeef      deeef   fd„Zdee   de
eeeef   ee   f   fd „Zddddddd!œdeeeef      dedee   deeee
eef   f      dej<                  f
d"„Zdddddd#œdeeeef      dee   deeee
eef   f      de jB                  fd$„Z"d%ej<                  dede
eeee   f   ef   fd&„Z#d%e jB                  dede
eeeedf   f   ef   fd'„Z$d(ed)e%dedefd*„Z&y)2ÚAPIRequestorNc                 óR  — |xs t         j                  | _        |xs t        j                  «       | _        |rt        j                  |«      n"t        j                  t         j                  «      | _        |xs t         j                  | _        |xs t         j                  | _	        y rP   )
r8   Úapi_baser   Údefault_api_keyÚapi_keyr   Úfrom_strÚapi_typeÚapi_versionÚorganization)ÚselfÚkeyrZ   r^   r_   r`   s         r$   Ú__init__zAPIRequestor.__init__�   s   € ð !Ò3¤F§O¡OˆŒØÒ4œd×2Ñ2Ó4ˆŒñ ô ×Ñ˜XÔ&ä×!Ñ!¤&§/¡/Ó2ð 	Œð
 'Ò<¬&×*<Ñ*<ˆÔØ(Ò?¬F×,?Ñ,?ˆÕr&   c                 óR   — |d   }|d   r|d|d   ›�z  }|d   r|d|d   ›d�z  }|S )NÚnamer   ú/r   z (ú)© )ÚclsÚinfor-   s      r$   Úformat_app_infozAPIRequestor.format_app_info“   s@   € à�6‰lˆØ�	Š?Ù˜D šOÐ-Ñ-ˆCØ�Š;Ù˜d 5›kÐ+Ñ+ˆCØˆ
r&   ÚresponseÚ	predicatec                 ó¦   —  ||«      sy |j                   d   }|j                  dd«      }|j                  d«      }t        j                  ||¬«      ‚)Nr   ÚmessagezOperation failedÚcode)ro   rp   )ÚdataÚgetr   ÚOpenAIError)ra   rl   rm   Ú
error_dataro   rp   s         r$   Ú_check_polling_responsez$APIRequestor._check_polling_responseœ   sM   € Ù˜Ô"ØØ—]‘] 7Ñ+ˆ
Ø—.‘. Ð,>Ó?ˆØ�~‰~˜fÓ%ˆÜ×Ñ¨°dÔ;Ð;r&   r'   c	                 ó  — |rt        j                  |«       | j                  ||||«      \  }	}
}| j                  |	|«       t        j                   «       } ||	«      s�t        j                   «       |z
  t        kD  rt        j                  d«      ‚t        j                  |xs |	j                  xs d«       | j                  ||||«      \  }	}
}| j                  |	|«        ||	«      sŒ�|	j                  d   |	_        |	|
|fS ©NzOperation polling timed out.é
   Úresult)	ÚtimeÚsleepÚrequestru   ÚTIMEOUT_SECSr   ÚTimeoutÚretry_afterrq   ©ra   Úmethodr   ÚuntilÚfailedÚparamsÚheadersÚintervalÚdelayrl   Úbr\   Ú
start_times                r$   Ú_pollzAPIRequestor._poll¤   sâ   € ñ Ü�J‰J�uÔà#Ÿ|™|¨F°C¸ÀÓIÑˆ�!�WØ×$Ñ$ X¨vÔ6Ü—Y‘Y“[ˆ
Ù˜”/Ü�y‰y‹{˜ZÑ'¬,Ò6Ü—m‘mÐ$BÓCÐCä�J‰J�xÒ= 8×#7Ñ#7Ò=¸2Ô>Ø#'§<¡<°¸¸VÀWÓ#MÑ ˆH�a˜Ø×(Ñ(¨°6Ô:ñ ˜•/ð !Ÿ™ hÑ/ˆŒØ˜˜GÐ#Ð#r&   c	              ƒ   ób  K  — |rt        j                  |«      ƒ d {  –—†  | j                  ||||«      ƒ d {  –—† \  }	}
}| j                  |	|«       t	        j                  «       } ||	«      s�t	        j                  «       |z
  t
        kD  rt        j                  d«      ‚t        j                  |xs |	j                  xs d«      ƒ d {  –—†  | j                  ||||«      ƒ d {  –—† \  }	}
}| j                  |	|«        ||	«      sŒ�|	j                  d   |	_	        |	|
|fS 7 �Œ	7 Œï7 Œ]7 ŒC­wrw   )
Úasyncior{   Úarequestru   rz   r}   r   r~   r   rq   r€   s                r$   Ú_apollzAPIRequestor._apollÀ   s  è ø€ ñ Ü—-‘- Ó&×&Ð&à%)§]¡]°6¸3ÀÈÓ%P×PÑˆ�!�WØ×$Ñ$ X¨vÔ6Ü—Y‘Y“[ˆ
Ù˜”/Ü�y‰y‹{˜ZÑ'¬,Ò6Ü—m‘mÐ$BÓCÐCä—-‘- Ò F¨H×,@Ñ,@Ò FÀBÓG×GÐGØ)-¯©°v¸sÀFÈGÓ)T×#TÑ ˆH�a˜Ø×(Ñ(¨°6Ô:ñ ˜•/ð !Ÿ™ hÑ/ˆŒØ˜˜GÐ#Ð#ð 'ùàPøð HøØ#TúsJ   ‚D/�D&žD/¹D)ºBD/ÃD+ÃD/Ã)D-Ã*"D/ÄD/Ä)D/Ä+D/Ä-D/.ÚstreamTÚ
request_idÚrequest_timeoutc	                  ó   — y rP   rh   ©	ra   r�   r   r„   r…   Úfilesr�   r�   r‘   s	            r$   r|   zAPIRequestor.requestÜ   ó   € ð 	r&   )r�   r‘   c                 ó   — y rP   rh   r“   s	            r$   r|   zAPIRequestor.requestê   s   € ð 	r&   Fc	                  ó   — y rP   rh   r“   s	            r$   r|   zAPIRequestor.requestù   r•   r&   c	                  ó   — y rP   rh   r“   s	            r$   r|   zAPIRequestor.request  r•   r&   c	           
      ó˜   — | j                  |j                  «       |||||||¬«      }	| j                  |	|«      \  }
}|
|| j                  fS )N©r„   Úsupplied_headersr”   r�   r�   r‘   )Úrequest_rawÚlowerÚ_interpret_responser\   )ra   r�   r   r„   r…   r”   r�   r�   r‘   ry   ÚrespÚ
got_streams               r$   r|   zAPIRequestor.request  sa   € ð ×!Ñ!Ø�L‰L‹NØØØ$ØØØ!Ø+ð "ó 	
ˆð  ×3Ñ3°F¸FÓCÑˆˆjØ�Z §¡Ð-Ð-r&   c	              ƒ   ó   K  — y ­wrP   rh   r“   s	            r$   r�   zAPIRequestor.arequest-  ó   è ø€ ð 	ùó   ‚c             ƒ   ó   K  — y ­wrP   rh   r“   s	            r$   r�   zAPIRequestor.arequest;  s   è ø€ ð 	ùr£   c	              ƒ   ó   K  — y ­wrP   rh   r“   s	            r$   r�   zAPIRequestor.arequestJ  r¢   r£   c	              ƒ   ó   K  — y ­wrP   rh   r“   s	            r$   r�   zAPIRequestor.arequestX  r¢   r£   c	           
   ƒ   óÜ  ‡‡K  — t        «       Š‰j                  «       ƒ d {  –—† }		 | j                  |j                  «       ||	|||||¬«      ƒ d {  –—† }
| j	                  |
|«      ƒ d {  –—† \  Š}|rˆˆfd„} |«       || j                  fS ‰j                  d d d «      ƒ d {  –—†  ‰|| j                  fS 7 Œ—7 Œi7 ŒQ# t
        $ r ‰j                  d d d «      ƒ d {  –—†7   ‚ w xY w7 ŒC­w)N©r„   r›   r”   r�   r‘   c                 óØ   •K  — t        ‰t        «      sJ ‚	 ‰2 3 d {  –—† } | ­–— Œ7 Œ
6 	 ‰j                  d d d «      ƒ d {  –—†7   y # ‰j                  d d d «      ƒ d {  –—†7   w xY w­wrP   )r,   r   Ú	__aexit__)ÚrÚctxrŸ   s    €€r$   Ú	wrap_respz(APIRequestor.arequest.<locals>.wrap_resp„  sf   øè ø€ Ü! $¬Ô7Ð7Ð7ð:Ø#'÷  ð  ˜aØœð ø¡4ð Ÿ-™-¨¨d°DÓ9×9Ò9ø˜#Ÿ-™-¨¨d°DÓ9×9Ò9üsM   ƒA*—A	 ™*�(ž*¡A	 ¨*ªA	 ¬A*ÁAÁA*Á	A'Á A#Á!A'Á'A*)Úaiohttp_sessionÚ
__aenter__Úarequest_rawr�   Ú_interpret_async_responseÚ	Exceptionrª   r\   )ra   r�   r   r„   r…   r”   r�   r�   r‘   Úsessionry   r    r­   r¬   rŸ   s                @@r$   r�   zAPIRequestor.arequestf  sþ   ùè ø€ ô ÓˆØŸ™Ó(×(ˆð	Ø×,Ñ,Ø—‘“ØØØØ!(ØØ%Ø /ð -ó 	÷ 	ˆFð &*×%CÑ%CÀFÈFÓ%S×SÑˆD�*ñ õ:ñ “; 
¨D¯L©LÐ8Ð8à—-‘-  d¨DÓ1×1Ð1Ø˜ T§\¡\Ð1Ð1ð; )øð	øð  TùÜò 	Ø—-‘-  d¨DÓ1×1Ñ1Øð	úð 2úsb   „C,¢B:£C,¨*C  ÁB<ÁC  Á,B>Á-C  Á42C,Â&C*Â'C,Â<C  Â>C  Ã C'ÃC"Ã C'Ã'C,c                 ó`  — 	 |d   }d|v r|dxx   d|d   z   z  cc<   t	        j
                  d|j                  d«      |j                  d«      |j                  d«      |j                  d	«      |¬
«       |dk(  r(t        j                  |j                  d«      ||||«      S |dv rHt        j                  |j                  d«      |j                  d	«      |j                  d«      ||||«      S |dk(  r(t        j                  |j                  d«      ||||«      S |dk(  r(t        j                  |j                  d«      ||||«      S |dk(  r(t        j                  |j                  d«      ||||«      S |rN|j                  d«      dg}dj                  |D �cg c]  }|€Œ|‘Œ	 c}«      }	t        j                  |	||||«      S t        j                  |j                  d«      › d|› d|› d|› d|› �	||||«      S # t         t        f$ r t        j                  d||fz  |||«      ‚w xY wc c}w )Nr   z@Invalid response object from API: %r (HTTP response code was %d)Úinternal_messagero   z

zOpenAI API error receivedrp   ÚtypeÚparam)Ú
error_codeÚ
error_typeÚerror_messageÚerror_paramÚstream_errori­  )i�  i”  iŸ  i‘  i“  i™  z!(Error occurred while streaming.)ú )ÚKeyErrorÚ	TypeErrorr   ÚAPIErrorr   Úlog_inforr   ÚRateLimitErrorÚInvalidRequestErrorÚAuthenticationErrorÚPermissionErrorÚTryAgainÚjoin)
ra   rN   ÚrcoderŸ   Úrheadersr¼   rt   ÚpartsÚpro   s
             r$   Úhandle_error_responsez"APIRequestor.handle_error_response‘  s^  € ð		Ø˜g™ˆJð  Ñ+Ø�yÓ! V¨jÐ9KÑ.LÑ%LÑLÓ!ä�‰Ø'Ø!—~‘~ fÓ-Ø!—~‘~ fÓ-Ø$Ÿ.™.¨Ó3Ø"Ÿ™ wÓ/Ø%õ	
ð �CŠ<Ü×'Ñ'Ø—‘˜yÓ)¨5°%¸¸xóð ð �oÑ%Ü×,Ñ,Ø—‘˜yÓ)Ø—‘˜wÓ'Ø—‘˜vÓ&ØØØØóð ð �cŠ\Ü×,Ñ,Ø—‘˜yÓ)¨5°%¸¸xóð ð �cŠ\Ü×(Ñ(Ø—‘˜yÓ)¨5°%¸¸xóð ð �cŠ\Ü—>‘>Ø—‘˜yÓ)¨5°%¸¸xóð ñ à—^‘^ IÓ.Ð0SÐTˆEØ—h‘h¨5ÖB a°A±M¢ÒBÓCˆGÜ—>‘> '¨5°%¸¸xÓHÐHä—>‘>Ø—>‘> )Ó,Ð-¨Q¨u¨g°Q°u°g¸Q¸t¸fÀAÀhÀZÐPØØØØóð øôm œ)Ð$ò 	Ü—.‘.ðØ" E˜Nñ+àØØóð ð	üòf  Cs   ‚G; ÆH+Æ!H+Ç;-H(r�   c                 ó‚  — dt         j                  ›�}t        j                  r%|d| j	                  t        j                  «      z   z  }dj                  d„ t        j                  «       j                  «       j                  «       D «       «      }t         j                  ddt        j                  «       t        j                  «       d|dœ}t        j                  rt        j                  |d<   t        j                  |«      |d	œ}|j                  t        j                  | j                   | j"                  «      «       | j$                  r| j$                  |d
<   | j&                  �,| j                   t(        j*                  k(  r| j&                  |d<   |�||d<   t        j,                  rd|d<   |j                  |«       |S )NzOpenAI/v1 PythonBindings/r½   c              3   ó2   K  — | ]  \  }}|d k7  sŒ|–— Œ y­w)ÚnodeNrh   )Ú.0ÚkÚvs      r$   ú	<genexpr>z/APIRequestor.request_headers.<locals>.<genexpr>Ù  s   è ø€ ò &
Ù�!�QÀÀVÃŒAñ&
ùs   ‚�r:   Úpythonr8   )Úbindings_versionÚhttplibÚlangÚlang_versionÚplatformÚ	publisherÚunameÚapplication)zX-OpenAI-Client-User-Agentz
User-AgentzOpenAI-OrganizationzOpenAI-VersionúX-Request-IdÚtruezOpenAI-Debug)r   ÚVERSIONr8   Úapp_infork   rÇ   rÙ   rÛ   Ú_asdictÚitemsÚpython_versionÚjsonÚdumpsÚupdater   Úapi_key_to_headerr^   r\   r`   r_   r   ÚOPEN_AIÚdebug)ra   r�   Úextrar�   Ú
user_agentÚuname_without_nodeÚuar…   s           r$   Úrequest_headerszAPIRequestor.request_headersÒ  sg  � ô 7>·o²oÐGˆ
Ü�?Š?Ø˜# × 4Ñ 4´V·_±_Ó EÑEÑEˆJà ŸX™Xñ &
Ü"Ÿ.™.Ó*×2Ñ2Ó4×:Ñ:Ó<ô&
ó 
Ðô !(§¡Ø!ØÜ$×3Ñ3Ó5Ü ×)Ñ)Ó+Ø!Ø'ñ
ˆô �?Š?Ü &§¡ˆBˆ}Ñô +/¯*©*°R«.Ø$ñ
ˆð
 	�‰”t×-Ñ-¨d¯m©m¸T¿\¹\ÓJÔKà×ÒØ-1×->Ñ->ˆGÐ)Ñ*à×ÑÐ'¨D¯M©M¼W¿_¹_Ò,LØ(,×(8Ñ(8ˆGÐ$Ñ%ØÐ!Ø&0ˆG�NÑ#Ü�<Š<Ø&,ˆG�NÑ#Ø�‰�uÔàˆr&   r›   c                 óî   — i }|€|S t        |t        «      st        d«      ‚|j                  «       D ]@  \  }}t        |t        «      st        d«      ‚t        |t        «      st        d«      ‚|||<   ŒB |S )NzHeaders must be a dictionaryzHeader keys must be stringszHeader values must be strings)r,   r.   r¿   râ   r-   )ra   r›   r…   rÑ   rÒ   s        r$   Ú_validate_headerszAPIRequestor._validate_headersü  sƒ   € ð #%ˆØÐ#ØˆNäÐ*¬DÔ1ÜÐ:Ó;Ð;à$×*Ñ*Ó,ò 	‰DˆAˆqÜ˜a¤Ô%ÜÐ =Ó>Ð>Ü˜a¤Ô%ÜÐ ?Ó@Ð@ØˆG�AŠJð	ð ˆr&   c                 ó,  — | j                   ›|›�}| j                  |«      }d }	|dk(  s|dk(  r@|rŽt        |j                  «       D �
�cg c]  \  }
}|€Œ	|
|f‘Œ c}}
«      }t	        ||«      }nP|dv r3|r|r|}	|rD|sBt        j                  |«      j                  «       }	d|d<   nt        j                  d|›d�«      ‚| j                  |||«      }t        j                  d||¬	«       t        j                  d
|	| j                  ¬«       |||	fS c c}}
w )Nrr   Údelete>   ÚputÚpostzapplication/jsonúContent-TypezUnrecognized HTTP method z~. This may indicate a bug in the OpenAI bindings. Please contact us through our help center at help.openai.com for assistance.zRequest to OpenAI API)r�   r!   zPost details)rq   r_   )rZ   rð   r   râ   r%   rä   rå   Úencoder   ÚAPIConnectionErrorrî   r   Ú	log_debugr_   )ra   r   r›   r�   r„   r”   r�   Úabs_urlr…   rq   rÑ   rÒ   Úencoded_paramss                r$   Ú_prepare_request_rawz!APIRequestor._prepare_request_raw  s  € ð !ŸMšM©3Ð/ˆØ×(Ñ(Ð)9Ó:ˆàˆØ�UŠ?˜f¨Ò0ÙÜ!*Ø(.¯©«×H¡  1¸!¹-�a˜’VÓHó"�ô )¨°.ÓA‘Ø�Ñ&Ù™%Ø�Ù™eÜ—z‘z &Ó)×0Ñ0Ó2�Ø*<�˜Ò'ä×*Ò*ò "(ð*óð ð ×&Ñ& v¨w¸
ÓCˆä�‰Ð.°vÀGÕLÜ�‰�~¨D¸d×>NÑ>NÕOà˜ Ð%Ð%ùó+ Is   Á
D
ÁD
rš   c          
      óŠ  — | j                  ||||||«      \  }	}
}t        t        d«      s1t        «       t        _        t        j
                  «       t        _        n{t        j
                  «       t        t        dd«      z
  t        k\  rNt        j                  j                  «        t        «       t        _        t        j
                  «       t        _        	 t        j                  j                  ||	|
||||r|nt        t        j                  j                  ¬«      }t)        j*                  d|	|j,                  |j.                  j1                  d«      |j.                  j1                  d	«      ¬
«       t2        j4                  dk(  r,t)        j*                  d|j6                  |j.                  ¬«       |S # t        j                  j                  $ r*}t!        j                  dj#                  |«      «      |‚d }~wt        j                  j$                  $ r*}t!        j&                  dj#                  |«      «      |‚d }~ww xY w)Nr³   Úsession_create_timer   )r…   rq   r”   r�   Útimeoutr?   zRequest timed out: {}z#Error communicating with OpenAI: {}úOpenAI API responseúOpenAI-Processing-MsrÝ   ©r!   Úresponse_codeÚprocessing_msr�   ré   úAPI response body©Úbodyr…   )rû   ÚhasattrÚ_thread_contextrE   r³   rz   rý   ÚgetattrÚMAX_SESSION_LIFETIME_SECSÚcloser|   r}   r?   r:   Ú
exceptionsr~   r   ÚformatÚRequestExceptionr÷   r   rø   Ústatus_coder…   rr   r8   ÚlogÚcontent)ra   r�   r   r„   r›   r”   r�   r�   r‘   rù   r…   rq   ry   Úes                 r$   rœ   zAPIRequestor.request_raw9  sÈ  € ð "&×!:Ñ!:ØÐ! 6¨6°5¸*ó"
Ñˆ�˜$ô ”¨	Ô2Ü&3£oŒOÔ#Ü26·)±)³+ŒOÕ/ä�I‰I‹Kœ'¤/Ð3HÈ!ÓLÑLÜ(ò)ô ×#Ñ#×)Ñ)Ô+Ü&3£oŒOÔ#Ü26·)±)³+ŒOÔ/ð	Ü$×,Ñ,×4Ñ4ØØØØØØÙ+:™ÄÜ'×/Ñ/×7Ñ7ð 5ó 	ˆFô  	�‰Ø!ØØ ×,Ñ,Ø Ÿ.™.×,Ñ,Ð-CÓDØ—~‘~×)Ñ)¨.Ó9õ	
ô �:‰:˜Ò Ü�N‰NØ#¨&¯.©.À&Ç.Á.õð ˆøô% ×"Ñ"×*Ñ*ò 	JÜ—-‘-Ð 7× >Ñ >¸qÓ AÓBÈÐIûÜ×"Ñ"×3Ñ3ò 	Ü×*Ñ*Ø5×<Ñ<¸QÓ?óàðûð	ús%   ÃAF6 Æ6IÇ%G8Ç8 IÈ%H=È=Ir¨   c          	   ƒ   óÀ  K  — | j                  ||||||«      \  }	}
}t        |t        «      rt        j                  |d   |d   ¬«      }nt        j                  |r|nt
        ¬«      }|r2t        j                  j                  j                  ||«      \  }}||
d<   ||	|
|t        t        j                  «      |dœ}	  |j                  di |¤Žƒ d {  –—† }t        j                  d|	|j                   |j"                  j%                  d«      |j"                  j%                  d	«      ¬
«       t        j&                  dk(  r,t        j(                  d|j*                  |j"                  ¬«       |S 7 Œ›# t        j,                  t.        j0                  f$ r}t3        j4                  d«      |‚d }~wt        j6                  $ r}t3        j8                  d«      |‚d }~ww xY w­w)Nr   é   )ÚconnectÚtotal)r  rõ   )r�   r   r…   rq   r2   rþ   rÿ   r   rÝ   r  ré   r  r  úRequest timed outzError communicating with OpenAIrh   )rû   r,   ÚtupleÚaiohttpÚClientTimeoutr}   r:   ÚmodelsÚRequestEncodingMixinÚ_encode_filesr5   r8   r2   r|   r   rÁ   Ústatusr…   rr   r  rø   r  ÚServerTimeoutErrorrŒ   ÚTimeoutErrorr   r~   ÚClientErrorr÷   )ra   r�   r   r³   r„   r›   r”   r�   r‘   rù   r…   rq   rþ   Úcontent_typeÚrequest_kwargsry   r  s                    r$   r°   zAPIRequestor.arequest_rawr  s´  è ø€ ð "&×!:Ñ!:ØÐ! 6¨6°5¸*ó"
Ñˆ�˜$ô �o¤uÔ-Ü×+Ñ+Ø'¨Ñ*Ø% aÑ(ô‰Gô
 ×+Ñ+Ù)8‘o¼lôˆGñ ô "*§¡×!EÑ!E×!SÑ!SØ�tó"ÑˆD�,ð '3ˆG�NÑ#àØØØÜ)¬&¯,©,Ó7Øñ
ˆð	UØ*˜7Ÿ?™?Ñ<¨^Ñ<×<ˆFÜ�M‰MØ%ØØ$Ÿm™mØ$Ÿn™n×0Ñ0Ð1GÓHØ!Ÿ>™>×-Ñ-¨nÓ=õô �z‰z˜WÒ$Ü—‘Ø'¨f¯n©nÀfÇnÁnõð ˆMð =ùô ×*Ñ*¬G×,@Ñ,@ÐAò 	<Ü—-‘-Ð 3Ó4¸!Ð;ûÜ×"Ñ"ò 	UÜ×*Ñ*Ð+LÓMÐSTÐTûð	UüsI   ‚B;GÂ>E1 ÃE/ÃBE1 Å.GÅ/E1 Å1#GÆF*Æ*GÇ GÇGÇGry   c                 ó  ‡ ‡— |rCd‰j                   j                  dd«      v r%ˆˆ fd„t        ‰j                  «       «      D «       dfS ‰ j	                  ‰j
                  j                  d«      ‰j                  ‰j                   d¬«      dfS )	úEReturns the response(s) and a bool indicating whether it is a stream.útext/event-streamrõ   Ú c              3   óp   •K  — | ]-  }‰j                  |‰j                  ‰j                  d ¬«      –— Œ/ y­w)T©r�   N)Ú_interpret_response_liner  r…   ©rÐ   rF   ry   ra   s     €€r$   rÓ   z3APIRequestor._interpret_response.<locals>.<genexpr>´  s>   øè ø€ ò ð ð ×-Ñ-Ø˜&×,Ñ,¨f¯n©nÀTð .÷ ñùs   ƒ36TrH   Fr)  )r…   rr   rT   Ú
iter_linesr*  r  rL   r  )ra   ry   r�   s   `` r$   rž   z APIRequestor._interpret_response¯  s—   ù€ ñ Ð)¨V¯^©^×-?Ñ-?ÀÐPRÓ-SÑSôô )¨×):Ñ):Ó)<Ó=ô	ð
 ðð ð ×-Ñ-Ø—N‘N×)Ñ)¨'Ó2Ø×&Ñ&Ø—N‘NØ ð	 .ó ð ðð r&   c              ƒ   ód  ‡ ‡K  — |r?d‰j                   j                  dd«      v r!ˆˆ fd„t        ‰j                  «      2 «       dfS 	 ‰j	                  «       ƒ d{  –—†  ‰ j                  ‰j	                  «       ƒ d{  –—† j                  d	«      ‰j                   ‰j                   d
¬«      d
fS 7 ŒT# t
        j                  t        j                  f$ r}t        j                  d«      |‚d}~wt
        j                  $ r+}t        j                  |‰j                  ¬«       Y d}~ŒÇd}~ww xY w7 Œ°­w)r%  r&  rõ   r'  c                ó‚   •K  — | 3 d {  –—† }‰j                  |‰j                  ‰j                  d¬«      ­–— Œ67 Œ16 y ­w)NTr)  )r*  r  r…   r+  s     €€r$   rÓ   z9APIRequestor._interpret_async_response.<locals>.<genexpr>Ê  sL   øè ø€ ÷ ð ð ð ×-Ñ-Ø˜&Ÿ-™-¨¯©Àð .÷ ð ðøñ ùs   ƒ?…=‰;Š=�.?»=½?TNr  )r  rH   Fr)  )r…   rr   rV   r  Úreadr  r  rŒ   r   r   r~   r!  r   Úlog_warnr*  rL   r  )ra   ry   r�   r  s   ``  r$   r±   z&APIRequestor._interpret_async_responseÅ  s  ùè ø€ ñ Ð)¨V¯^©^×-?Ñ-?ÀÐPRÓ-SÑSôô #5°V·^±^Ó"Dô	ð
 ðð ð6Ø—k‘k“m×#Ð#ð ×-Ñ-Ø!Ÿ;™;›=×(×0Ñ0°Ó9Ø—M‘MØ—N‘NØ ð	 .ó ð ðð ð $ùÜ×.Ñ.´×0DÑ0DÐEò @Ü—m‘mÐ$7Ó8¸aÐ?ûÜ×&Ñ&ò 6Ü—‘˜a f§n¡n×5Ò5ûð6úð )úsZ   „AD0ÁB1 ÁB/ÁB1 ÁD0Á=D.Á>1D0Â/B1 Â1#D+ÃC*Ã*D+Ä !D&Ä!D0Ä&D+Ä+D0rN   rÈ   c                 óÈ  — |dk(  rt        d |«      S |dk(  rt        j                  d|||¬«      ‚	 d|j                  dd«      v r|}nt	        j
                  |«      }t        ||«      }|xr d|j                  v }|sd|cxk  rdk  s"n | j                  |||j                  ||¬«      ‚|S # t        t        f$ r&}t        j                  d|› d	|› d
�|||¬«      |‚d }~ww xY w)NéÌ   i÷  z*The server is overloaded or not ready yet.)r…   z
text/plainrõ   r'  z
HTTP code z from API (rg   r   éÈ   i,  )r¼   )r   r   ÚServiceUnavailableErrorrr   rä   Úloadsr   ÚUnicodeDecodeErrorrÀ   rq   rÌ   )	ra   rN   rÈ   rÉ   r�   rq   r  rŸ   r¼   s	            r$   r*  z%APIRequestor._interpret_response_lineá  s  € ð �CŠ<Ü! $¨Ó1Ð1à�CŠ<Ü×/Ñ/Ø<ØØØ ô	ð ð	Ø˜xŸ|™|¨N¸BÓ?Ñ?Ø‘ä—z‘z %Ó(�ô
 ˜d HÓ-ˆð Ò6 '¨T¯Y©YÐ"6ˆÙ˜s eÔ1¨cÔ1Ø×,Ñ,Ø�u˜dŸi™i¨Àð -ó ð ð ˆøô  Ô!3Ð4ò 	Ü—.‘.Ø˜U˜G ;¨u¨g°QÐ7¸ÀÈxôàðûð	ús   ±,B, Â,C!Â;!CÃC!)NNNNN)NNNN)..)...)......)NNNFNN)F)'Ú__name__Ú
__module__Ú__qualname__rc   Úclassmethodrk   r   r   Úboolru   r   r	   r-   rŠ   rŽ   r   r   r
   r   Úfloatr|   r   r�   rÌ   r   rî   rð   Úbytesrû   r:   ÚResponserœ   r  ÚClientResponser°   rž   r±   Úintr*  rh   r&   r$   rX   rX   €   sÍ  „ ð ØØØØó@ð$ ñó ðð<°ð <È8ÐUcÐTdÐfjÐTjÑKkó <ð ØØØñ$ð 
ˆx˜Ñ'¨¨sÐ2Ñ	3ó$ðD ØØØñ$ð 
ˆx˜Ñ'¨¨sÐ2Ñ	3ó$ð8 ð %(ØGJñð ˜‘ðð ˜S‘Mðð " %¨¨u°U¸E°\Ñ/BÐ(BÑ"CÑDðð 
ˆx˜Ñ'¨¨sÐ2Ñ	3òó ðð ð
 ØØðð %(ØGJòð ˜‘ðð ˜S‘Mðð " %¨¨u°U¸E°\Ñ/BÐ(BÑ"CÑDðð 
ˆx˜Ñ'¨¨sÐ2Ñ	3òó ðð ð
 ØØØ!$Ø$'ØGJñð ˜‘ðð ˜S‘Mðð " %¨¨u°U¸E°\Ñ/BÐ(BÑ"CÑDðð 
ˆ~˜t SÐ(Ñ	)òó ðð ð
 ØØØØ$'ØGJñð ðð ˜S‘Mðð " %¨¨u°U¸E°\Ñ/BÐ(BÑ"CÑDðð 
ˆu�^ X¨nÑ%=Ð=Ñ>ÀÀcÐIÑ	Jòó ðð" ØØØØ$(ØGKñ.ð ð.ð ˜S‘Mð.ð " %¨¨u°U¸E°\Ñ/BÐ(BÑ"CÑDð.ð 
ˆu�^ X¨nÑ%=Ð=Ñ>ÀÀcÐIÑ	Jó.ð0 ð %(ØGJñð ˜‘ðð ˜S‘Mðð " %¨¨u°U¸E°\Ñ/BÐ(BÑ"CÑDðð 
ˆ~˜n¨dÐ2Ñ3°T¸3Ð>Ñ	?òó ðð ð
 ØØðð %(ØGJòð ˜‘ðð ˜S‘Mðð " %¨¨u°U¸E°\Ñ/BÐ(BÑ"CÑDðð 
ˆ~˜n¨dÐ2Ñ3°T¸3Ð>Ñ	?òó ðð ð
 ØØØ!$Ø$'ØGJñð ˜‘ðð ˜S‘Mðð " %¨¨u°U¸E°\Ñ/BÐ(BÑ"CÑDðð 
ˆ~˜t SÐ(Ñ	)òó ðð ð
 ØØØØ$'ØGJñð ðð ˜S‘Mðð " %¨¨u°U¸E°\Ñ/BÐ(BÑ"CÑDðð 
ˆu�^ ^°NÀDÐ4HÑ%IÐIÑJÈDÐRUÐUÑ	Vòó ðð" ØØØØ$(ØGKñ)2ð ð)2ð ˜S‘Mð)2ð " %¨¨u°U¸E°\Ñ/BÐ(BÑ"CÑDð)2ð 
ˆu�^ ^°NÀDÐ4HÑ%IÐIÑJÈDÐRUÐUÑ	Vó)2óV?ðB(Øð(Ø.6°s©mð(à	ˆc�3ˆh‰ó(ðTØ (¨¨c°3¨h©Ñ 8ðà	ˆc�3ˆh‰óð,%&ð ˜S‘Mð%&ð 
ˆs�D˜˜c˜‘N H¨U¡OÐ3Ñ	4ó%&ðX Ø59ØØØ$(ØGKò7ð # 4¨¨S¨¡>Ñ2ð7ð ð7ð ˜S‘Mð7ð " %¨¨u°U¸E°\Ñ/BÐ(BÑ"CÑDð7ð 
×	Ñ	ó7ð~ Ø59ØØ$(ØGKò;Uð # 4¨¨S¨¡>Ñ2ð;Uð ˜S‘Mð;Uð " %¨¨u°U¸E°\Ñ/BÐ(BÑ"CÑDð;Uð 
×	Ñ	ó;UðzØ×'Ñ'ðØ15ðà	ˆu�^ X¨nÑ%=Ð=Ñ>ÀÐDÑ	Eóð,Ø×,Ñ,ðØ6:ðà	ˆu�^ ^°NÀDÐ4HÑ%IÐIÑJÈDÐPÑ	Qóð8ØðØ!$ðØ8<ðà	ôr&   rX   c                 óî   K  — t         j                  j                  «       } | r| ­–— y t        j                  «       4 ƒd {  –—† }|­–— d d d «      ƒd {  –—†  y 7 Œ7 Œ# 1 ƒd {  –—†7  sw Y   y xY w­wrP   )r8   Ú
aiosessionrr   r  ÚClientSession)Úuser_set_sessionr³   s     r$   r®   r®     sf   è ø€ ä×(Ñ(×,Ñ,Ó.ÐÙØÔä×(Ñ(Ó*÷ 	ð 	¨gØ‹M÷	÷ 	ñ 	øð 	ø÷ 	÷ 	ñ 	üsG   ‚?A5ÁAÁA5ÁA ÁA5ÁAÁA5ÁA5Á A2Á&A)Á'A2Á.A5)8rŒ   rä   rz   rÙ   ÚsysÚ	threadingr=   Ú
contextlibr   r   Útypingr   r   r   r   r	   r
   r   r   r   Úurllib.parser   r   r   r  r:   Úversion_infor   Útyping_extensionsr8   r   r   r   Úopenai.openai_responser   Úopenai.utilr   r}   r
  rC   Úlocalr  r%   r-   r3   r5   r;   rE   r=  rM   rT   ÚStreamReaderrV   rX   rC  r®   rh   r&   r$   ú<module>rP     s;  ðÛ Û Û Û Û 
Û Û Û Ý *Ý  ÷
÷ 
õ 
÷ 9Ñ 8ã Û à×Ñ�vÒÞå)ã ß 'Ñ 'Ý 1Ý à€ØÐ ØÐ ð "�)—/‘/Ó#€ò?ð
 H¨T°#°s°(©^Ñ$<ó 
ð
 8¨C¡=ó 
ð�x×'Ñ'ó ð$˜eð ¨°©ó ð˜ ™ð ¨H°S©Mó ð G×$8Ñ$8ó ÷@
ñ @
ðF ð˜}¨W×-BÑ-BÑCò ó ñr&   