
    ^h^                        S SK r S SKrS SKJrJrJrJrJrJrJ	r	  S SK
r
S SK
JrJrJr  S SKrS SK7  \(       a  S SKJr  O\r S SKJr  SS	\ 30r\
R*                  " S
S
S9rSrS r " S S\
R2                  5      r " S S5      r " S S5      r SS\	\\4   S\\   S\4S jjrSS\\   S\4S jjr g! \ a    Sr Nuf = f)    N)TYPE_CHECKINGAnyCallableListMappingOptionalUnion)USE_CLIENT_DEFAULTAsyncHTTPTransportHTTPTransport)*)LlmProviders)versionz0.0.0z
User-Agentzlitellm/      @timeoutconnecti  c                     [        U [        5      (       a  U R                  S5      nOU $ US:w  a7  U R                  SU5      nUS:X  a  U S US-    S-   nU$ U S US-    S-   XS  -   nU$ U $ )Nzkey=&   z[REDACTED_API_KEY])
isinstancestrfind)error_message	key_index
next_parammasked_messages       `/home/james-whalen/.local/lib/python3.13/site-packages/litellm/llms/custom_httpx/http_handler.pymask_sensitive_infor       s    -%%!&&v.	 B"''Y7
*?Y];>RRN  o	A.&',-      c                   F   ^  \ rS rSr SS\\   S\\   4U 4S jjjrSrU =r$ )MaskedHTTPStatusError:   messagetextc           
        > [        [        UR                  R                  5      5      n[        TU ]  UR                  [        R                  " UR                  R                  UUR                  R                  UR                  R                  S9[        R                  " UR                  R                  UR                  R                  UR                  R                  S9S9  X l        X0l        g )N)methodurlheaderscontent)status_coder+   r*   )r%   requestresponse)r    r   r-   r)   super__init__r%   httpxRequestr(   r*   r+   Responser.   r,   r&   )selforiginal_errorr%   r&   
masked_url	__class__s        r   r0   MaskedHTTPStatusError.__init__;   s     )^-C-C-G-G)HI
 	"**MM%--44&..66&..66	 ^^*33??&//77&//77 	 	
 	r!   )r%   r&   )NN)	__name__
__module____qualname____firstlineno__r   r   r0   __static_attributes____classcell__)r7   s   @r   r#   r#   :   s(    SW'/}CKC= r!   r#   c                      \ rS rSr    SS\\\\R                  4      S\\	\
\\S\4      4      S\\
   4S jjrS\\\\R                  4      S\S\\	\
\\S\4      4      S	\R                   4S
 jrS rS rS r   S S\
S\\   S\\   S\\   4S jjr      S!S\
S\\\\
4      S\\   S\\   S\\   S\\\\R                  4      S\4S jjr      S!S\
S\\\\
4      S\\   S\\   S\\   S\\\\R                  4      S\4S jjr      S!S\
S\\\\
4      S\\   S\\   S\\   S\\\\R                  4      S\4S jjr      S!S\
S\\\\
4      S\\   S\\   S\\   S\\\\R                  4      S\4S jjr     S"S\
S\R                   S\\\\
4      S\\   S\\   S\\   S\4S jjrS#S jrS	\\   4S jrSr g)$AsyncHTTPHandlerT   Nr   event_hooks.client_aliasc                 R    Xl         X l        U R                  XUS9U l        X@l        g )Nr   concurrent_limitrB   )r   rB   create_clientclientrC   )r4   r   rB   rF   rC   s        r   r0   AsyncHTTPHandler.__init__U   s3     &((K ) 
 )r!   rF   returnc           
      *   [         R                  " S[        R                  5      n[         R                  " S[        R                  5      nUc  [
        nU R                  5       n[        R                  " UUU[        R                  " UUS9UU[        S9$ )N
SSL_VERIFYSSL_CERTIFICATEmax_connectionsmax_keepalive_connections)	transportrB   r   limitsverifycertr*   )osgetenvlitellm
ssl_verifyssl_certificate_DEFAULT_TIMEOUT_create_async_transportr1   AsyncClientLimitsr*   )r4   r   rF   rB   rX   rT   rQ   s          r   rG   AsyncHTTPHandler.create_clientc   s     YY|W-?-?@
 yy*G,C,CD?&G002	  #<< 0*: 
 	
r!   c                 T   #    U R                   R                  5       I S h  vN   g  N7fNrH   acloser4   s    r   closeAsyncHTTPHandler.close        kk  """   (&(c                 "   #    U R                   $ 7fr`   rH   rc   s    r   
__aenter__AsyncHTTPHandler.__aenter__   s     {{s   c                 T   #    U R                   R                  5       I S h  vN   g  N7fr`   ra   rc   s    r   	__aexit__AsyncHTTPHandler.__aexit__   rf   rg   r)   paramsr*   follow_redirectsc                 l   #    Ub  UO[         nU R                  R                  XX5S9I S h  vN nU$  N7fN)ro   r*   rp   r
   rH   getr4   r)   ro   r*   rp   _follow_redirectsr.   s          r   rt   AsyncHTTPHandler.get   sG      !1 <BT 	  ) 
 
 
s   )424datajsonstreamc                   #     Uc  U R                   nU R                  R                  SXX4XVS9nU R                  R                  XS9I S h  vN n	U	R	                  5         U	$  N! [
        R                  [
        R                  4 at    U R                  USU R                  S9n
 U R                  UU
UUUUUS9I S h  vN  U
R                  5       I S h  vN    s $ ! U
R                  5       I S h  vN    f = f[
        R                   ah  n0 n[        USS 5      nUb6  UR                  R                  5        H  u  pXSR!                  U5      '   M     ["        R$                  " S	U S
3SSUS9eS nAf[
        R&                   a  nUSL a]  [)        USUR*                  R-                  5       I S h  vN  5        [)        USUR*                  R-                  5       I S h  vN  5        OT[)        US[/        UR*                  R0                  5      5        [)        US[/        UR*                  R0                  5      5        [)        USUR*                  R2                  5        UeS nAf[4         a  nUeS nAff = f7f)NPOSTrx   ry   ro   r*   r   rz      rE   r)   rH   rx   ry   ro   r*   rz   r.   response_headers-{}Connection timed out after 	 seconds.default-model-namelitellm-httpx-handlerr%   modelllm_providerr*   Tr%   r&   r,   )r   rH   build_requestsendraise_for_statusr1   RemoteProtocolErrorConnectErrorrG   rB   single_connection_post_requestrb   TimeoutExceptiongetattrr*   itemsformatrW   TimeoutHTTPStatusErrorsetattrr.   areadr    r&   r,   	Exceptionr4   r)   rx   ry   ro   r*   r   rz   reqr.   
new_clienteerror_responsekeyvalues                  r   postAsyncHTTPHandler.post   sB    4	,,++++T' , C "[[--c-AAH%%'O B ))5+=+=> 	*++!AQAQ , J*!@@%!#! A    !'')))j'')))%% 	G$Q
D9N)"0"8"8">">"@JCAF188=> #A //5gYiH*4	  $$ 
	~9AJJ,<,<,>&>&>?6)9)9);#;#;<9&9!**//&JK6#6qzz#GHA}ajj&<&<=G 	G	s   I8AA$ A"A$ !I8"A$ $?I5$C<B?=CI5CI5I8C81C4
2C88I5A#E11I5)I!1F42-I!G" BI!!I5.I00I55I8c                 8  #     Uc  U R                   nU R                  R                  SXX4XVS9nU R                  R                  U5      I S h  vN n	U	R	                  5         U	$  N! [
        R                  [
        R                  4 at    U R                  USU R                  S9n
 U R                  UU
UUUUUS9I S h  vN  U
R                  5       I S h  vN    s $ ! U
R                  5       I S h  vN    f = f[
        R                   ah  n0 n[        USS 5      nUb6  UR                  R                  5        H  u  pXSR!                  U5      '   M     ["        R$                  " SU S	3S
SUS9eS nAf[
        R&                   a~  n[)        USUR*                  R,                  5        USL a0  [)        USUR*                  R/                  5       I S h  vN  5        Ue[)        USUR*                  R0                  5        UeS nAf[2         a  nUeS nAff = f7f)NPUTr}   r   rE   r   r.   r   r   r   r   r   r   r,   Tr%   r   rH   r   r   r   r1   r   r   rG   rB   r   rb   r   r   r*   r   r   rW   r   r   r   r.   r,   r   r&   r   r   s                  r   putAsyncHTTPHandler.put   s    0	,,++++sD , C "[[--c22H%%'O 3 ))5+=+=> 	*++!AQAQ , J*!@@%!#! A    !'')))j'')))%% 	G$Q
D9N)"0"8"8">">"@JCAF188=> #A //5gYiH*4	  $$ 	A}ajj&<&<=~9AJJ,<,<,>&>&>? G 9ajjoo6G 	G	   HA	A& A$A& #H$A& &?H&C>C?CHCHHC:3C6
4C::HA#E33H
A
HG.HHHHHc                 8  #     Uc  U R                   nU R                  R                  SXX4XVS9nU R                  R                  U5      I S h  vN n	U	R	                  5         U	$  N! [
        R                  [
        R                  4 at    U R                  USU R                  S9n
 U R                  UU
UUUUUS9I S h  vN  U
R                  5       I S h  vN    s $ ! U
R                  5       I S h  vN    f = f[
        R                   ah  n0 n[        USS 5      nUb6  UR                  R                  5        H  u  pXSR!                  U5      '   M     ["        R$                  " SU S	3S
SUS9eS nAf[
        R&                   a~  n[)        USUR*                  R,                  5        USL a0  [)        USUR*                  R/                  5       I S h  vN  5        Ue[)        USUR*                  R0                  5        UeS nAf[2         a  nUeS nAff = f7f)NPATCHr}   r   rE   r   r.   r   r   r   r   r   r   r,   Tr%   r   r   s                  r   patchAsyncHTTPHandler.patch  s    0	,,++++d7 , C "[[--c22H%%'O 3 ))5+=+=> 	*++!AQAQ , J*!@@%!#! A    !'')))j'')))%% 	G$Q
D9N)"0"8"8">">"@JCAF188=> #A //5gYiH*4	  $$ 	A}ajj&<&<=~9AJJ,<,<,>&>&>? G 9ajjoo6G 	G	r   c                 @  #     Uc  U R                   nU R                  R                  SXX4XVS9nU R                  R                  XS9I S h  vN n	U	R	                  5         U	$  N! [
        R                  [
        R                  4 at    U R                  USU R                  S9n
 U R                  UU
UUUUUS9I S h  vN  U
R                  5       I S h  vN    s $ ! U
R                  5       I S h  vN    f = f[
        R                   a~  n[        USUR                  R                  5        USL a0  [        US	UR                  R!                  5       I S h  vN  5        Ue[        US	UR                  R"                  5        UeS nAf[$         a  nUeS nAff = f7f)
NDELETEr}   r~   r   rE   r   r,   Tr%   )r   rH   r   r   r   r1   r   r   rG   rB   r   rb   r   r   r.   r,   r   r&   r   )r4   r)   rx   ry   ro   r*   r   rz   r   r.   r   r   s               r   deleteAsyncHTTPHandler.deleteW  s    "	,,++++#tG , C "[[--c-AAH%%'O B ))5+=+=> 	*++!AQAQ , J*!@@%!#! A    !'')))j'')))$$ 	A}ajj&<&<=~9AJJ,<,<,>&>&>? G 9ajjoo6G 	G	s   FAA$ A"A$ !F"A$ $?F$C<B?=CFCFFC81C4
2C88FA
FE.FFFFFrH   c           	         #    UR                  SXXEUS9nUR                  XS9I Sh  vN n	U	R                  5         U	$  N7f)zb
Making POST request for a single connection client.

Used for retrying connection client errors.
r|   rx   ry   ro   r*   r~   N)r   r   r   )
r4   r)   rH   rx   ry   ro   r*   rz   r   r.   s
             r   r   /AsyncHTTPHandler.single_connection_post_request  sP      ""Cg # 
  S88!!# 9s   %A >A c                      [         R                  " 5       R                  U R                  5       5        g ! [         a     g f = fr`   )asyncioget_running_loopcreate_taskrd   r   rc   s    r   __del__AsyncHTTPHandler.__del__  s6    	$$&224::<@ 		s   25 
AAc                 @    [         R                  (       a	  [        SS9$ g)z
Create an async transport with IPv4 only if litellm.force_ipv4 is True.
Otherwise, return None.

Some users have seen httpx ConnectionError when using ipv6 - forcing ipv4 resolves the issue for them
0.0.0.0local_addressN)rW   
force_ipv4r   rc   s    r   r[   (AsyncHTTPHandler._create_async_transport  s     %I>>r!   )rH   rC   rB   r   )NN  NNNN)NNNNNF)NNNNFrJ   N)!r9   r:   r;   r<   r   r	   floatr1   r   r   r   r   r   r   r0   intr\   rG   rd   rj   rm   dictboolrt   r   r   r   r   r   r   r   r[   r=    r!   r   r@   r@   T   s    :>HL&*)%u}} 456) gc4c0B+C&CDE)
 sm)
%u}} 456
 
 gc4c0B+C&CDE	

 
		
@## "&"&+/  $	
 #4.( ,0#!%"&9=>> uT3Y'(> tn	>
 > $> %u}} 456> >F ,0#!%"&9=:: uT3Y'(: tn	:
 : $: %u}} 456: :~ ,0#!%"&9=:: uT3Y'(: tn	:
 : $: %u}} 456: :~ ,0#!%"&9=,, uT3Y'(, tn	,
 , $, %u}} 456, ,d ,0#!%"& !! uT3Y'(	
 tn  $ ,
2D)E 
r!   r@   c                   \   \ rS rSr   SS\\\\R                  4      S\\R                     4S jjr
S r   SS\S\\   S	\\   S
\\   4S jjr      SS\S\\\\4      S\\\\\4      S\\   S	\\   S\S\\\\R                  4      4S jjr      SS\S\\\\4      S\\\\4      S\\   S	\\   S\S\\\\R                  4      4S jjr      SS\S\\\\4      S\\\\4      S\\   S	\\   S\S\\\\R                  4      4S jjrSS jrS\\   4S jrSrg)HTTPHandleri  Nr   rH   c           	      H   Uc  [         n[        R                  " S[        R                  5      n[        R                  " S[        R
                  5      nUcF  U R                  5       n[        R                  " UU[        R                  " UUS9UU[        S9U l        g X0l        g )NrL   rM   rN   )rQ   r   rR   rS   rT   r*   )rZ   rU   rV   rW   rX   rY   _create_sync_transportr1   Clientr]   r*   rH   )r4   r   rF   rH   rX   rT   rQ   s          r   r0   HTTPHandler.__init__  s     ?&G YY|W-?-?@
 yy*G,C,CD>335I  ,,#||$4.> "
DK !Kr!   c                 8    U R                   R                  5         g r`   )rH   rd   rc   s    r   rd   HTTPHandler.close  s    r!   r)   ro   r*   rp   c                 P    Ub  UO[         nU R                  R                  XX5S9nU$ rr   rs   ru   s          r   rt   HTTPHandler.get  s:     !1 <BT 	 ;;?? # 
 r!   rx   ry   rz   c           
          Ub  U R                   R                  SXX4XWS9nOU R                   R                  SXX4US9nU R                   R                  XS9n	U	R                  5         U	$ ! [        R
                   a    [        R                  " SU S3SSS	9e[        R                   a  n
US
L a]  [        U
S[        U
R                  R                  5       5      5        [        U
S[        U
R                  R                  5       5      5        O9[        U
R                  R                  5      n[        U
SU5        [        U
SU5        [        U
SU
R                  R                  5        U
eS n
A
f[         a  n
U
eS n
A
ff = f)Nr|   r}   r   r~   r   r   r   r   r%   r   r   Tr%   r&   r,   rH   r   r   r   r1   r   rW   r   r   r   r    r.   readr&   r,   r   r4   r)   rx   ry   ro   r*   rz   r   r   r.   r   
error_texts               r   r   HTTPHandler.post  sZ   !	"kk//Cg 0  kk//Cg 0  {{''';H%%'O%% 	//5gYiH*4 
 $$ 	~9&9!**//:K&LM6#6qzz7H#IJ0A
9j16:.A}ajj&<&<=G 	G	&   A&A) )AE<*B>E((E<5E77E<c           
          Ub  U R                   R                  SXX4XWS9nOU R                   R                  SXX4US9nU R                   R                  XS9n	U	R                  5         U	$ ! [        R
                   a    [        R                  " SU S3SSS	9e[        R                   a  n
US
L a]  [        U
S[        U
R                  R                  5       5      5        [        U
S[        U
R                  R                  5       5      5        O9[        U
R                  R                  5      n[        U
SU5        [        U
SU5        [        U
SU
R                  R                  5        U
eS n
A
f[         a  n
U
eS n
A
ff = f)Nr   r}   r   r~   r   r   r   r   r   Tr%   r&   r,   r   r   s               r   r   HTTPHandler.patch  sZ   !	"kk//S$w 0  kk//S$w 0  {{''';H%%'O%% 	//5gYiH*4 
 $$ 	~9&9!**//:K&LM6#6qzz7H#IJ0A
9j16:.A}ajj&<&<=G 	G	r   c           
      4    Ub  U R                   R                  SXX4XWS9nOU R                   R                  SXX4US9nU R                   R                  XS9n	U	$ ! [        R                   a    [
        R                  " SU S3SSS	9e[         a  n
U
eS n
A
ff = f)
Nr   r}   r   r~   r   r   r   r   r   )rH   r   r   r1   r   rW   r   r   )r4   r)   rx   ry   ro   r*   rz   r   r   r.   r   s              r   r   HTTPHandler.put@  s    	"kk//3W 0  kk//3W 0  {{''';HO%% 	//5gYiH*4 
  	G	s   AA 7BBBrJ   c                 F     U R                  5         g ! [         a     g f = fr`   )rd   r   rc   s    r   r   HTTPHandler.__del___  s"    	JJL 		s    
  c                 @    [         R                  (       a	  [        SS9$ g)z
Create an HTTP transport with IPv4 only if litellm.force_ipv4 is True.
Otherwise, return None.

Some users have seen httpx ConnectionError when using ipv6 - forcing ipv4 resolves the issue for them
r   r   N)rW   r   r   rc   s    r   r   "HTTPHandler._create_sync_transporte  s      y99r!   ri   )Nr   Nr   )NNNNFNr   )r9   r:   r;   r<   r   r	   r   r1   r   r   r0   rd   r   r   r   rt   r   r   r   r   r   r   r   r=   r   r!   r   r   r     s^    :>)-	 !%u}} 456 ! &	 !D "&"&+/  $	
 #4.( ,015!%"&9=++ uT3Y'(+ uT3_-.	+
 + $+ + %u}} 456+` ,0+/!%"&9=++ uT3Y'(+ uT3Y'(	+
 + $+ + %u}} 456+` ,0+/!%"&9= uT3Y'( uT3Y'(	
  $  %u}} 456>
(? 
r!   r   r   ro   rJ   c                 t   SnUb#  UR                  5        H  u  p4 X# SU 3-  nM     SU-   U -   n[        R                  R	                  U5      nU(       a  U$ Ub  [        S	0 UD6nO[        [        R                  " SSS9S9n[        R                  R                  UU[        S9  U$ ! [         a     M  f = f)
z|
Retrieves the async HTTP client from the cache
If not present, creates a new client

Caches the new client and returns it.
 _async_httpx_client     @r   r   r   r   r   ttlr   )
r   r   rW   in_memory_llm_clients_cache	get_cacher@   r1   r   	set_cache_DEFAULT_TTL_FOR_HTTPX_CLIENTS)r   ro   _params_key_namer   r   _cache_key_name_cached_client_new_clients           r   get_async_httpx_clientr   r  s      ,,.JC e1UG$44  ) +-==LO88BB?SN&00&MM%=
 ''11* 2 
 '  s   	B))
B76B7c                 n   SnU b#  U R                  5        H  u  p# X SU 3-  nM     SU-   n[        R                  R	                  U5      nU(       a  U$ U b  [        S	0 U D6nO[        [        R                  " SSS9S9n[        R                  R                  UU[        S9  U$ ! [         a     M  f = f)
zv
Retrieves the HTTP client from the cache
If not present, creates a new client

Caches the new client and returns it.
r   r   httpx_clientr   r   r   r   r   r   )
r   r   rW   r   r   r   r1   r   r   r   )ro   r   r   r   r   r   r   s          r   _get_httpx_clientr     s      ,,.JC e1UG$44  ) %'77O88BB?SN!+F+!%--s*ST''11* 2 
 %  s   	B&&
B43B4r`   )!r   rU   typingr   r   r   r   r   r   r	   r1   r
   r   r   rW   litellm.types.llms.custom_httpr   litellm._versionr   r   r*   r   rZ   r   r    r   r#   r@   r   httpxSpecialProviderr   r   r   r   r!   r   <module>r      s     	 O O O  G G  ,$L(
 HWI&
 ==c: !% 8E11 4W Wt
A AL ""&::;"TN" "Jhtn  K  Gs   B4 4B?>B?