Ë
    uPêjÿï  ã            
       óä  — U 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	Z	d dl
mZmZmZmZ d dlmZmZ d dlmZmZmZmZmZmZmZ d dlZd dlZd dlmZmZmZ d dlm Z m!Z!m"Z" d dl#m$Z$ d dl%Z%d dl&m'Z' d d	l(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5 d d
l6m7Z7 d dl8m9Z9 d dl:­ erd dl%m;Z; d dl<m=Z> d dl?m@Z@ neZ;eZ>eZ@	 d dlAmBZB d ejˆ                  ejŠ                  «      jŒ                  v ZGeeHd<   eIeJej–                  z  eJej˜                  z  eJeMeIeNdf   f   ZOeeHd<   eMePz  eeP   z  eeP   z  ZQeeHd<    G d„ ded¬«      ZRdeeOgej
                  f   dz  fd„ZSdeTfd„ZU eU«       ZVeeHd<    ej®                  e3e5¬«      ZXeeHd <   dej®                  fd!„ZYd"ZZeeHd#<   d$eJd%e[de[fd&„Z\defd'„Z]d(Z^eeHd)<   ej¾                  jÁ                  d*d+¬,«      ZaeeHd-<   	 	 dQd.eTeMz  ePz  dz  d/eQdz  deIeTez  dz  eQdz  f   fd0„Zbi ZceeTeIeMdz  eMdz  eMdz  f   ejÈ                  f      eHd1<   d2eMdz  d3eMdz  d4eMdz  dejÈ                  fd5„Ze	 dRd6e[eMz  dz  de[eMz  fd7„Zf	 dRd6egdz  de[eMz  ejÈ                  z  fd8„Zhdaie[eMz  ejÈ                  z  dz  eHd9<   de[eMz  ejÈ                  z  fd:„Zjd;„ Zkd<ejØ                  deMfd=„ZmdRd<ejØ                  d>endz  dePfd?„ZodRd<ejØ                  d>endz  dePfd@„ZpdAejâ                  dBe[ddfdC„ZrdAejâ                  dBe[ddfdD„Zs G dE„ dFejâ                  «      Zt G dG„ dH«      Zu G dI„ dJ«      Zv	 	 dQdKe;ewz  dLeTdz  dMedN   deufdO„ZxdRdLeTdz  devfdP„Zyy# eC$ r dZBY �Œ¥w xY w)Sé    N)ÚAsyncIterableÚCallableÚIterableÚMapping©Ú	CookieJarÚDefaultCookiePolicy)ÚTYPE_CHECKINGÚAnyÚClassVarÚFinalÚOptionalÚ	TypeAliasÚ	TypedDict)ÚClientSessionÚDummyCookieJarÚTCPConnector)ÚUSE_CLIENT_DEFAULTÚAsyncHTTPTransportÚHTTPTransport)ÚRequestFiles)Úverbose_logger)Ú_DEFAULT_TTL_FOR_HTTPX_CLIENTSÚAIOHTTP_CONNECTOR_LIMITÚ AIOHTTP_CONNECTOR_LIMIT_PER_HOSTÚAIOHTTP_KEEPALIVE_TIMEOUTÚAIOHTTP_NEEDS_CLEANUP_CLOSEDÚAIOHTTP_SO_KEEPALIVEÚAIOHTTP_TCP_KEEPCNTÚAIOHTTP_TCP_KEEPIDLEÚAIOHTTP_TCP_KEEPINTVLÚAIOHTTP_TTL_DNS_CACHEÚ COMPLETION_HTTP_FALLBACK_SECONDSÚDEFAULT_SSL_CIPHERSÚ$HTTP_HANDLER_CONNECT_TIMEOUT_SECONDS)Útrack_llm_api_timing)Úget_configured_request_timeout)Ú*)ÚLlmProviders)ÚLogging©ÚLiteLLMAiohttpTransport)Úversionz0.0.0Úsocket_factoryÚ _AIOHTTP_SUPPORTS_SOCKET_FACTORY.Ú	_AddrInfoÚ_RequestContentc                   óŽ   — e Zd ZU eeef   dz  ed<   ded<   eed<   eed<   eed<   eed<   eed	<   e	e
gej                  f   ed
<   y)Ú_TCPConnectorKwargsNÚ
local_addrzssl.SSLContext | boolÚsslÚkeepalive_timeoutÚttl_dns_cacheÚenable_cleanup_closedÚlimitÚlimit_per_hostr.   )Ú__name__Ú
__module__Ú__qualname__ÚtupleÚstrÚintÚ__annotations__ÚfloatÚboolr   r0   Úsocket© ó    úk/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/custom_httpx/http_handler.pyr3   r3   F   sN   … Ø�c˜3�h‘ $Ñ&Ó&Ø	 Ó ØÓØÓØÓØƒJØÓØ˜i˜[¨&¯-©-Ð7Ñ8Ô8rF   r3   F)ÚtotalÚreturnc                  óT   — t         rt        sydt        dt        j                  fd„} | S )a  
    Build a socket_factory that enables SO_KEEPALIVE on aiohttp TCP sockets.

    Why: by default, aiohttp creates sockets without SO_KEEPALIVE, so the kernel
    sends nothing during a long idle TCP connection. NAT/LB hops (e.g. AWS NAT
    Gateway, 350s idle timeout) reap the flow well before slow provider
    responses (OpenAI/Azure: up to 600s) arrive. Enabling SO_KEEPALIVE makes
    the kernel emit TCP probes that reset the NAT idle timer.

    Returns None when AIOHTTP_SO_KEEPALIVE is disabled or aiohttp is too old.
    NÚ	addr_inforI   c                 óî  — | d   | d   | d   }}}t        j                   |||¬«      }|j                  d«       |j                  t         j                  t         j                  d«       t        t         d«      r4|j                  t         j                  t         j                  t        «       nCt        t         d«      r3|j                  t         j                  t         j                  t        «       t        t         d«      r3|j                  t         j                  t         j                  t        «       t        t         d	«      r3|j                  t         j                  t         j                  t        «       |S )
Nr   é   é   )ÚfamilyÚtypeÚprotoFÚTCP_KEEPIDLEÚTCP_KEEPALIVEÚTCP_KEEPINTVLÚTCP_KEEPCNT)rD   ÚsetblockingÚ
setsockoptÚ
SOL_SOCKETÚSO_KEEPALIVEÚhasattrÚIPPROTO_TCPrR   r    rS   rT   r!   rU   r   )rK   rO   Útype_rQ   Úsocks        rG   Úfactoryz8_build_aiohttp_keepalive_socket_factory.<locals>.factory`   sú   € Ø(¨™|¨Y°q©\¸9ÀQ¹<�u�ˆÜ—m‘m¨6¸ÀUÔKˆØ×Ñ˜ÔØ�‰œ×)Ñ)¬6×+>Ñ+>ÀÔBô ”6˜>Ô*Ø�O‰OœF×.Ñ.´×0CÑ0CÔEYÕZÜ”V˜_Ô-Ø�O‰OœF×.Ñ.´×0DÑ0DÔFZÔ[Ü”6˜?Ô+Ø�O‰OœF×.Ñ.´×0DÑ0DÔF[Ô\Ü”6˜=Ô)Ø�O‰OœF×.Ñ.´×0BÑ0BÔDWÔXØˆrF   )r   r/   r0   rD   )r^   s    rG   Ú'_build_aiohttp_keepalive_socket_factoryr_   Q   s+   € õ  Õ'GØðœ9ð ¬¯©ó ð" €NrF   c                  ób   — t         j                  j                  d«      } | �d| iS ddt        › �iS )z­
    Get default headers for HTTP requests.

    - Default: `User-Agent: litellm/{version}`
    - Override: set `LITELLM_USER_AGENT` to fully override the header value.
    ÚLITELLM_USER_AGENTz
User-Agentzlitellm/)ÚosÚenvironÚgetr-   )Ú
user_agents    rG   Úget_default_headersrf   t   s:   € ô Ÿ
™
Ÿ™Ð';Ó<€JØÐØ˜jÐ)Ð)à˜H¤W IÐ.Ð/Ð/rF   Úheaders©ÚtimeoutÚconnectÚ_DEFAULT_TIMEOUTc                  ó\   — t        «       } | €t        S t        j                  | t        ¬«      S )zUTimeout for cached default httpx clients; honors an explicit litellm.request_timeout.rh   )r'   rk   ÚhttpxÚTimeoutr%   )Ú
configureds    rG   Ú_default_cached_client_timeoutrp   Œ   s(   € ä6Ó8€JØÐÜÐÜ�=‰= Ô5YÔZÐZrF   rN   Ú._CLIENT_REFCOUNT_WHEN_HANDLER_IS_SOLE_REFERRERÚclient_refcountÚowns_clientc                 ó   — |xr	 | t         k  S )a¨  
    Whether a handler being finalized may close its client.

    Only when the handler built the client and is still its sole referrer. Finalization
    proves that nothing references the *handler*; it proves nothing about the client, which
    a cached handler may have handed to consumers that outlive it. Callers must read the
    refcount at the call site, since binding the client to a parameter would inflate it.
    )rq   )rr   rs   s     rG   Ú_handler_may_close_clientru   —   s   € ð Ò\˜?Ô.\Ñ\Ð\rF   c                  ó.   — t        t        d¬«      ¬«      S )zõA jar that stores no response cookie and sends none, for httpx clients.

    LiteLLM's outbound clients are pooled and shared by every caller, so a cookie one
    upstream sets would be replayed to every other upstream on a matching domain.
    rE   )Úallowed_domains)Úpolicyr   rE   rF   rG   Úblocked_cookie_jarry   £   s   € ô Ô/ÀÔCÔDÐDrF   g      @Ú*_STREAMING_ERROR_BODY_READ_TIMEOUT_SECONDSé2   z!litellm-streaming-error-body-read)Úmax_workersÚthread_name_prefixÚ#_STREAMING_ERROR_BODY_READ_EXECUTORÚdataÚcontentc                 óV   — d}|}| � t        | t        t        f«      r|€| }||fS | }||fS )aç  
    Helper function to route data/content parameters correctly for httpx requests

    This prevents httpx DeprecationWarnings that cause memory leaks.

    Background:
    - httpx shows a DeprecationWarning when you pass bytes/str to `data=`
    - It wants you to use `content=` instead for bytes/str
    - The warning itself leaks memory when triggered repeatedly

    Solution:
    - Move bytes/str from `data=` to `content=` before calling build_request
    - Keep dicts in `data=` (that's still the correct parameter for dicts)

    Args:
        data: Request data (can be dict, str, or bytes)
        content: Request content (raw bytes/str)

    Returns:
        Tuple of (request_data, request_content) properly routed for httpx
    N)Ú
isinstanceÚbytesr?   )r   r€   Úrequest_dataÚrequest_contents       rG   Ú!_prepare_request_data_and_contentr†   ³   sK   € ð2 €LØ€OàÐÜ�dœU¤C˜LÔ)àˆØ"&�ð
 ˜Ð(Ð(ð  ˆLà˜Ð(Ð(rF   Ú_ssl_context_cacheÚcafileÚssl_security_levelÚssl_ecdh_curvec                 óV  — t        j                  | ¬«      }t         j                  j                  |_        |r"t        |t        «      r|j                  |«       n|j                  t        «       |r:t        |t        «      r*	 |j                  |«       t        j                  d|«       |S |S # t        $ rI t        j                  dt        j                  j!                  «       d   t         j"                  |«       Y |S t$        $ r"}t        j                  d||«       Y d}~|S d}~ww xY w)z�
    Create an SSL context with the given configuration.
    This is separated from get_ssl_configuration to enable caching.
    )rˆ   zSSL ECDH curve set to: %sz‰SSL ECDH curve configuration not supported. Python version: %s, OpenSSL version: %s. Requested curve: %s. Continuing with default curves.r   z•Invalid SSL ECDH curve name: '%s'. %s. Common valid curves: X25519, prime256v1, secp384r1, secp521r1. Continuing with default curves (including PQC).N)r5   Úcreate_default_contextÚ
TLSVersionÚTLSv1_2Úminimum_versionr‚   r?   Úset_ciphersr$   Úset_ecdh_curver   ÚdebugÚAttributeErrorÚwarningÚsysr-   ÚsplitÚOPENSSL_VERSIONÚ
ValueError)rˆ   r‰   rŠ   Úcustom_ssl_contextÚes        rG   Ú_create_ssl_contextr›   á   s  € ô !$× :Ñ :À&Ô IÐô *-¯©×)?Ñ)?ÐÔ&ñ œjÐ);¼SÔAà×&Ñ&Ð'9Õ:ð 	×&Ñ&Ô':Ô;ñ
 œ* ^´SÔ9ð	Ø×-Ñ-¨nÔ=Ü× Ñ Ð!<¸nÔMð  ÐÐÐøô ò 	Ü×"Ñ"ð \Ü—‘×!Ñ!Ó# AÑ&Ü×#Ñ#Øõ	ð Ðô ò 	ä×"Ñ"ð hØØ÷ð ð Ðûð	ús   Â'B- Â-AD(Ã>D(ÄD#Ä#D(Ú
ssl_verifyc                 óX  — ddl m} | €$t        j                  dt        j
                  «      } t        | t        «      r-t        j                  j                  | «      r| S  || «      }|�|} | du r8t        j                  d«      }|r!t        j                  j                  |«      r|S | �| S dS )aM  
    Common utility to resolve the SSL verification setting.
    Prioritizes:
    1. Passed-in ssl_verify
    2. os.environ["SSL_VERIFY"]
    3. litellm.ssl_verify
    4. os.environ["SSL_CERT_FILE"] (if ssl_verify is True)

    Returns:
        Union[bool, str]: The resolved SSL verification setting (bool or path to CA bundle)
    r   ©Ústr_to_boolÚ
SSL_VERIFYTÚSSL_CERT_FILE)
Úlitellm.secret_managers.mainrŸ   rb   ÚgetenvÚlitellmrœ   r‚   r?   ÚpathÚexists)rœ   rŸ   Ússl_verify_boolÚssl_cert_files       rG   Úget_ssl_verifyr©     sœ   € õ 9àÐÜ—Y‘Y˜|¬W×-?Ñ-?Ó@ˆ
ô �*œcÔ"ä�7‰7�>‰>˜*Ô%ØÐñ "-¨ZÓ!8ˆØÐ&Ø(ˆJð �TÑÜ!Ÿy™y¨Ó9ˆÙœRŸW™WŸ^™^¨MÔ:Ø Ð à#Ð/ˆ:Ð9°TÐ9rF   c                 óH  — t        | t        j                  «      r| S t        | ¬«      } t	        j
                  dt        j                  «      }t	        j
                  dt        j                  «      }d}t        | t        «      r!t        j                  j                  | «      r| }|sMt	        j
                  d«      }|r"t        j                  j                  |«      r|}nt        j                  «       }| dur+|||f}|t        vrt        |||¬«      t        |<   t        |   S | S )aF  
    Unified SSL configuration function that handles ssl_context and ssl_verify logic.

    SSL Configuration Priority:
    1. If ssl_verify is provided -> is a SSL context use the custom SSL context
    2. If ssl_verify is False -> disable SSL verification (ssl=False)
    3. If ssl_verify is a string -> use it as a path to CA bundle file
    4. If SSL_CERT_FILE environment variable is set and exists -> use it as CA bundle file
    5. Else will use default SSL context with certifi CA bundle

    If ssl_security_level is set, it will apply the security level to the SSL context.

    SSL contexts are cached to avoid creating duplicate contexts with the same configuration,
    which reduces memory allocation and improves performance.

    Args:
        ssl_verify: SSL verification setting. Can be:
            - None: Use default from environment/litellm settings
            - False: Disable SSL verification
            - True: Enable SSL verification
            - str: Path to CA bundle file

    Returns:
        Union[bool, str, ssl.SSLContext]: Appropriate SSL configuration
    )rœ   ÚSSL_SECURITY_LEVELÚSSL_ECDH_CURVENr¡   F)rˆ   r‰   rŠ   )r‚   r5   Ú
SSLContextr©   rb   r£   r¤   r‰   rŠ   r?   r¥   r¦   ÚcertifiÚwherer‡   r›   )rœ   r‰   rŠ   rˆ   r¨   Ú	cache_keys         rG   Úget_ssl_configurationr±   9  sõ   € ô8 �*œcŸn™nÔ-àÐô  ¨:Ô6€Jä "§	¡	Ð*>Ä×@ZÑ@ZÓ [ÐÜŸI™IÐ&6¼×8NÑ8NÓO€Nà€FÜ�*œcÔ"¤r§w¡w§~¡~°jÔ'AØˆÙÜ!Ÿy™y¨Ó9ˆÙœRŸW™WŸ^™^¨MÔ:Ø"‰Fä—]‘]“_ˆFà˜Ñà"Ð$6¸ÐGˆ	ð Ô.Ñ.Ü,?ØØ#5Ø-ô-Ô˜yÑ)ô " )Ñ,Ð,àÐrF   Ú_shared_realtime_ssl_contextc                  ó.   — t         €
t        «       a t         S )z¬
    Lazily create the SSL context reused by realtime websocket clients so we avoid
    import-order cycles during startup while keeping a single shared configuration.
    )r²   r±   rE   rF   rG   Úget_shared_realtime_ssl_contextr´   ~  s   € ô $Ð+Ü'<Ó'>Ð$Ü'Ð'rF   c                 óÆ   — t        | t        «      r| j                  d«      }n| S |dk7  r7| j                  d|«      }|dk(  r| d |dz    dz   }|S | d |dz    dz   | |d  z   }|S | S )Nzkey=éÿÿÿÿú&é   z[REDACTED_API_KEY])r‚   r?   Úfind)Úerror_messageÚ	key_indexÚ
next_paramÚmasked_messages       rG   Úmask_sensitive_infor¾   ‰  s–   € ä�-¤Ô%Ø(×-Ñ-¨fÓ5‰	àÐð �B‚à)×.Ñ.¨s°IÓ>ˆ
à˜Òà*¨?¨Y¸©]Ð;Ð>RÑRˆNð
 Ðð +¨?¨Y¸©]Ð;Ð>RÑRÐUbÐcmÐcnÐUoÑoˆNàÐàÐrF   Úresponsec                 ó:   — 	 | j                   S # t        $ r Y yw xY w)zKSafely read response text, falling back to empty string on decoding errors.Ú )ÚtextÚ	Exception)r¿   s    rG   Ú_safe_get_response_textrÄ   ¡  s#   € ðØ�}‰}ÐøÜò Ùðús   ‚ Ž	™ri   c              ƒ   óÀ   K  — 	 |�-t        j                  | j                  «       |¬«      ƒ d{  –—† S | j                  «       ƒ d{  –—† S 7 Œ7 Œ# t        $ r Y yw xY w­w)zGSafely read async response body, falling back to empty bytes on errors.N©ri   rF   )ÚasyncioÚwait_forÚareadrÃ   )r¿   ri   s     rG   Ú_safe_aread_responserÊ   ©  sY   è ø€ ðØÐÜ ×)Ñ)¨(¯.©.Ó*:ÀGÔL×LÐLØ—^‘^Ó%×%Ð%ð MøØ%ùÜò ÙðüsT   ‚A„*A ®A¯A ²A³A ÁAÁA Á
AÁA ÁA Á	AÁAÁAÁAc                 óè   — 	 |�2t         j                  | j                  «      }	 |j                  |¬«      S | j                  «       S # t        $ r | j                  «        Y yw xY w# t        $ r Y yw xY w)zFSafely read sync response body, falling back to empty bytes on errors.rÆ   rF   )r~   ÚsubmitÚreadÚresultrÃ   Úclose)r¿   ri   Úfutures      rG   Ú_safe_read_responserÑ   ³  sv   € ð
ØÐÜ?×FÑFÀxÇ}Á}ÓUˆFðØ—}‘}¨W�}Ó5Ð5ð �}‰}‹Ðøô ò Ø—‘Ô Ùðûô ò Ùðús3   ‚!A% ¤A ¶A% ÁA"ÁA% Á!A"Á"A% Á%	A1Á0A1rš   Ústreamc                 ó&  — |r4	 t        t        | j                  t        ¬«      «      }t	        | ||¬«      d‚t        t        | j                  «      «      }t	        | ||¬«      d‚# 	 | j                  j                  «        w # t        $ r Y w w xY wxY w)z5Raise a MaskedHTTPStatusError for sync HTTP handlers.rÆ   ©ÚmessagerÂ   N)r¾   rÑ   r¿   rz   ÚMaskedHTTPStatusErrorrÏ   rÃ   rÄ   ©rš   rÒ   Ú_bodyÚ_texts       rG   Ú_raise_masked_sync_errorrÚ   Â  sˆ   € áð	Ü.Ü#Ø—J‘JÜFôóˆEô (¨°5¸uÔEÈ4ÐOô 'Ô'>¸q¿z¹zÓ'JÓK€EÜ
 ¨5°uÔ
=À4ÐGøðØ—
‘
× Ñ Õ"øÜò Ùðýs/   „3A$ Á$BÁ&BÂ BÂ	BÂ
BÂBÂBc              ƒ   óT  K  — |r<	 t        t        | j                  t        ¬«      ƒ d{  –—† «      }t	        | ||¬«      d‚t        t        | j                  «      «      }t	        | ||¬«      d‚7 ŒD# 	 | j                  j                  «       ƒ d{  –—†7   w # t        $ r Y w w xY wxY w­w)z6Raise a MaskedHTTPStatusError for async HTTP handlers.rÆ   NrÔ   )r¾   rÊ   r¿   rz   rÖ   ÚacloserÃ   rÄ   r×   s       rG   Ú_raise_masked_async_errorrÝ   Ö  s›   è ø€ áð	Ü.Ü*Ø—J‘JÜFô÷ óˆEô (¨°5¸uÔEÈ4ÐOô 'Ô'>¸q¿z¹zÓ'JÓK€EÜ
 ¨5°uÔ
=À4ÐGðùðØ—j‘j×'Ñ'Ó)×)Ò)øÜò Ùðÿs\   ‚B(†#A0 ©A.ªA0 Á-B(Á.A0 Á0B%Á2BÂBÂBÂB%Â	B"ÂB%Â!B"Â"B%Â%B(c                   ó6   ‡ — e Zd Zddedz  dedz  fˆ fd„Zˆ xZS )rÖ   NrÕ   rÂ   c           
      ó   •— t        t        |j                  j                  «      «      }t        t        |«      «      }	 |j                  j
                  }|j                  j                  j                  «       D ��ci c]  \  }}|j                  «       dvr||“Œ }	}}	 |j                  j
                  }
t        j                  |j                  j                  ||j                  j                  |
¬«      }t        ‰| �=  ||t        j                   |j                  j"                  ||	|¬«      ¬«       || _        || _        |j                  j"                  | _        y # t        $ r d}Y �Œw xY wc c}}w # t        j                  $ r d}
Y Œ×w xY w)NrF   )zcontent-encodingzcontent-length)ÚmethodÚurlrg   r€   )Ústatus_coder€   rg   Úrequest)rÕ   rã   r¿   )r¾   r?   rã   rá   r¿   r€   rÃ   rg   ÚitemsÚlowerrm   ÚRequestNotReadÚRequestrà   ÚsuperÚ__init__ÚResponserâ   rÕ   rÂ   )ÚselfÚoriginal_errorrÕ   rÂ   Ú
masked_urlÚmasked_original_messageÚresponse_contentÚkÚvÚresponse_headersr…   Úmasked_requestÚ	__class__s               €rG   ré   zMaskedHTTPStatusError.__init__ë  sw  ø€ ä/´°N×4JÑ4J×4NÑ4NÓ0OÓPˆ
ä)<¼SÀÓ=PÓ)QÐð	#Ø-×6Ñ6×>Ñ>Ðð '×/Ñ/×7Ñ7×=Ñ=Ó?÷#
á��1Ø�w‰w‹yÐ FÑFð ˆq‰Dð#
Ðñ #
ð	"Ø,×4Ñ4×<Ñ<ˆOô !&§¡Ø!×)Ñ)×0Ñ0ØØ"×*Ñ*×2Ñ2Ø#ô	!
ˆô 	‰ÑØ+Ø"ô —^‘^Ø*×3Ñ3×?Ñ?Ø(Ø(Ø&ô	ð 	ô 	
ð ˆŒØˆŒ	Ø)×2Ñ2×>Ñ>ˆÕøôI ò 	#Ø"Óð	#üó#
øô ×#Ñ#ò 	"Ø!ŠOð	"ús)   ¿E Á<E/ÂE5 ÅE,Å+E,Å5FÆF©NN)r;   r<   r=   r?   ré   Ú__classcell__)rô   s   @rG   rÖ   rÖ   ê  s#   ø„ ñ0?°°d±
ð 0?ÈÈtÉ÷ 0?ñ 0?rF   rÖ   c                   ó  — e Zd ZU 	 	 	 	 	 	 d/deej
                  z  dz  deeee	de
f      f   dz  dedz  dedz  ded   f
d	„Zed
ej                  fd„«       Zej"                  dej                  d
dfd„«       Z	 	 d0deej
                  z  dz  deeee	de
f      f   dz  dedz  ded   d
ej                  f
d„Zd„ Zd„ Zd„ Z	 	 	 	 d1dededz  dedz  dedz  deej
                  z  dz  f
d„Z e«       	 	 	 	 	 	 	 	 	 d2dedeez  ez  dz  dedz  dedz  dedz  deej
                  z  dz  dededz  dedz  dedz  fd„«       Z	 	 	 	 	 	 	 d3dedeez  ez  dz  dedz  dedz  dedz  deej
                  z  dz  dededz  fd„Z	 	 	 	 	 	 	 d3dedeez  ez  dz  dedz  dedz  dedz  deej
                  z  dz  dededz  fd„Z 	 	 	 	 	 	 	 d3dedeez  ez  dz  dedz  dedz  dedz  deej
                  z  dz  dededz  fd „Z!	 	 	 	 	 	 d4dedej                  deez  ez  dz  dedz  dedz  dedz  dededz  fd!„Z" e#«       Z$e%e#d"      e&d#<   e'd5d$„«       Z(d%e)jT                  d
efd&„Z+d6d'„Z,d6d(„Z-e.	 	 	 d7d)e/j`                  dz  dedz  ded   d
e1e2z  dz  fd*„«       Z3e.d
efd+„«       Z4e.	 	 d0dedz  d)e/j`                  dz  d
e5fd,„«       Z6e.	 	 	 d7dedz  d)e/j`                  dz  ded   d
e1fd-„«       Z7e.d
e2dz  fd.„«       Z8y)8ÚAsyncHTTPHandlerNri   Úevent_hooks.Úclient_aliasrœ   Úshared_sessionr   c                 óŒ   — || _         || _        || _        || _        d| _        | j                  ||||¬«      | _        || _        y )NT©ri   rù   rœ   rû   )ri   rù   rœ   rû   Ú_owns_clientÚcreate_clientÚ_clientrú   )rë   ri   rù   Úconcurrent_limitrú   rœ   rû   s          rG   ré   zAsyncHTTPHandler.__init__  sW   € ð ˆŒØ&ˆÔØ$ˆŒØ,ˆÔØ ˆÔØ×)Ñ)ØØ#Ø!Ø)ð	 *ó 
ˆŒð )ˆÕrF   rI   c                 óâ   — | j                   rX| j                  j                  rB| j                  | j                  | j
                  | j                  | j                  ¬«      | _        | j                  S )Nrý   )rþ   r   Ú	is_closedrÿ   ri   rù   rœ   rû   ©rë   s    rG   ÚclientzAsyncHTTPHandler.client5  sZ   € à×Ò §¡×!7Ò!7Ø×-Ñ-ØŸ™Ø ×,Ñ,ØŸ?™?Ø#×2Ñ2ð	 .ó ˆDŒLð �|‰|ÐrF   r  c                 ó    — || _         d| _        y ©NF©r   rþ   ©rë   r  s     rG   r  zAsyncHTTPHandler.client@  ó   € àˆŒØ!ˆÕrF   c           
      óZ  — t        |«      }t        j                  dt        j                  «      }|€t
        }t        j                  t        |t        j                  «      r|nd t        |t        «      r|nd |¬«      }t        «       }t        j                  ||||||t        «       d¬«      S )NÚSSL_CERTIFICATE©Ússl_contextrœ   rû   T)Ú	transportrù   ri   ÚverifyÚcertrg   ÚcookiesÚfollow_redirects)r±   rb   r£   r¤   Ússl_certificaterk   rø   Ú_create_async_transportr‚   r5   r­   rC   rf   rm   ÚAsyncClientry   )	rë   ri   rù   rœ   rû   Ú
ssl_configr  r  Údefault_headerss	            rG   rÿ   zAsyncHTTPHandler.create_clientE  s¥   € ô 2°*Ó=ˆ
ô —i‘iÐ 1´7×3JÑ3JÓKˆàˆ?Ü&ˆGô ,×CÑCÜ&0°¼S¿^¹^Ô&L™
ÐRVÜ%/°
¼DÔ%A‘zÀtØ)ð Dó 
ˆ	ô "5Ó!6ˆä× Ñ ØØ#ØØØØ#Ü&Ó(Ø!ô	
ð 		
rF   c              ƒ   ón   K  — | j                   r#| j                  j                  «       ƒ d {  –—†  y y 7 Œ­w©N)rþ   r   rÜ   r  s    rG   rÏ   zAsyncHTTPHandler.closek  s-   è ø€ à×ÒØ—,‘,×%Ñ%Ó'×'Ñ'ð Ø'ús   ‚*5¬3­5c              ƒ   ó"   K  — | j                   S ­wr  )r  r  s    rG   Ú
__aenter__zAsyncHTTPHandler.__aenter__p  s   è ø€ Ø�{‰{Ðùs   ‚c              ƒ   ó@   K  — | j                  «       ƒ d {  –—†  y 7 Œ­wr  )rÏ   r  s    rG   Ú	__aexit__zAsyncHTTPHandler.__aexit__s  s   è ø€ à�j‰j‹l×Òús   ‚–—rá   Úparamsrg   r  c              ƒ   óÚ   K  — |�|nt         }|xs i }|j                  t        j                  |«      «       | j                  j                  |||||�|nt         ¬«      ƒ d {  –—† }|S 7 Œ­w©N)r  rg   r  ri   )r   ÚupdateÚHTTPHandlerÚextract_query_paramsr  rd   ©rë   rá   r  rg   r  ri   Ú_follow_redirectsr¿   s           rG   rd   zAsyncHTTPHandler.getw  sw   è ø€ ð 8HÐ7SÑ#3ÔYkÐà’˜2ˆØ�‰”k×6Ñ6°sÓ;Ô<à $§¡§¡ØØØØ.Ø&Ð2‘GÔ8Jð !0ó !
÷ 
ˆð ˆð
ús   ‚A A+Á"A)Á#A+r   ÚjsonrÒ   Úlogging_objÚfilesr€   c              ƒ   ó
  K  — t        j                   «       }	 |€| j                  }t        ||
«      \  }}| j                  j	                  d|||||||	|¬«	      }| j                  j                  ||¬«      ƒ d {  –—† }|j                  «        |S 7 Œ# t        j                  t        j                  f$ ry | j                  || j                  ¬«      }	 | j                  |||||||¬«      ƒ d {  –—†7  |j                  «       ƒ d {  –—†7   cY S # |j                  «       ƒ d {  –—†7   w xY wt        j                  $ rƒ}t        j                   «       }t        ||z
  d«      }i }t!        |dd «      }|�*|j"                  j%                  «       D ]  \  }}||d|› �<   Œ t'        j(                  d	|› d
|› d�dd|¬«      ‚d }~wt        j*                  $ r}t-        ||«      ƒ d {  –—†7   Y d }~y d }~wt.        $ r}|‚d }~ww xY w­w)NÚPOST©r   r'  r  rg   ri   r)  r€   ©rÒ   ©ri   rù   ©rá   r  r   r'  r  rg   rÒ   é   r¿   úresponse_headers-z%Connection timed out. Timeout passed=z, time taken=z secondsúdefault-model-nameúlitellm-httpx-handler©rÕ   ÚmodelÚllm_providerrg   )Útimeri   r†   r  Úbuild_requestÚsendÚraise_for_statusrm   ÚRemoteProtocolErrorÚConnectErrorrÿ   rù   Úsingle_connection_post_requestrÜ   ÚTimeoutExceptionÚroundÚgetattrrg   rä   r¤   rn   ÚHTTPStatusErrorrÝ   rÃ   )rë   rá   r   r'  r  rg   ri   rÒ   r(  r)  r€   Ú
start_timer„   r…   Úreqr¿   Ú
new_clientrš   Úend_timeÚ
time_deltaÚerror_responseÚkeyÚvalues                          rG   ÚpostzAsyncHTTPHandler.postŽ  s  è ø€ ô !ŸI™I›Kˆ
ð6	ØˆØŸ,™,�ô -NÈdÐT[Ó,\Ñ)ˆL˜/àŸ™×2Ñ2ØØØ!ØØØØØØ'ð 3ó 
ˆCð %)§K¡K×$4Ñ$4°SÀÐ$4Ó$H×HˆHØ×%Ñ%Ô'ØˆOð Iùô ×)Ñ)¬5×+=Ñ+=Ð>ò 	*à $× 2Ñ 2¸7ÐPT×P`ÑP`Ð 2Ó aˆJð*Ø!×@Ñ@ØØ%ØØØ!Ø#Ø!ð Aó ÷ ð ð !×'Ñ'Ó)×)Ô)ø�j×'Ñ'Ó)×)Ò)úÜ×%Ñ%ò 	Ü"Ÿi™i›kˆHÜ % h°Ñ&;¸QÓ ?ˆJØˆGÜ;BÀ1ÀjÐRVÓ;WˆNØÐ)Ø"0×"8Ñ"8×">Ñ">Ó"@ò ?‘J�C˜Ø9>�GÐ/°¨uÐ5Ò6ð?ô —/‘/Ø?À¸yÈÐV`ÐUaÐaiÐjØ*Ø4Øô	ð ûô ×$Ñ$ò 	7Ü+¨A¨vÓ6×6Ö6ûÜò 	ØˆGûð	üs©   ‚H˜A!B Á9BÁ:B ÂHÂB ÂA H ÃDÃ.C1Ã/DÃ3H ÄD	ÄH ÄHÄD*Ä#D&
Ä$D*Ä*H Ä?A>F=Æ=H ÇG-Ç"G%Ç#G-Ç(HÇ-H Ç9G;Ç;H È Hc	           
   ƒ   ó�  K  — 	 |€| j                   }t        ||«      \  }	}
| j                  j                  d||	|||||
¬«      }| j                  j	                  |«      ƒ d {  –—† }|j                  «        |S 7 Œ# t        j                  t        j                  f$ ry | j                  || j                  ¬«      }	 | j                  |||||||¬«      ƒ d {  –—†7  |j                  «       ƒ d {  –—†7   cY S # |j                  «       ƒ d {  –—†7   w xY wt        j                  $ r]}i }t        |dd «      }|�*|j                  j!                  «       D ]  \  }}||d|› �<   Œ t#        j$                  d|› d�d	d
|¬«      ‚d }~wt        j&                  $ r}t)        ||«      ƒ d {  –—†7   Y d }~y d }~wt*        $ r}|‚d }~ww xY w­w)NÚPUT©r   r'  r  rg   ri   r€   r.  r/  r¿   r1  úConnection timed out after ú	 seconds.r2  r3  r4  ©ri   r†   r  r8  r9  r:  rm   r;  r<  rÿ   rù   r=  rÜ   r>  r@  rg   rä   r¤   rn   rA  rÝ   rÃ   ©rë   rá   r   r'  r  rg   ri   rÒ   r€   r„   r…   rC  r¿   rD  rš   rG  rH  rI  s                     rG   ÚputzAsyncHTTPHandler.putÕ  sÞ  è ø€ ð3	ØˆØŸ,™,�ô -NÈdÐT[Ó,\Ñ)ˆL˜/àŸ™×2Ñ2ØØØ!ØØØØØ'ð 3ó 	ˆCð %)§K¡K×$4Ñ$4°SÓ$9×9ˆHØ×%Ñ%Ô'ØˆOð :ùô ×)Ñ)¬5×+=Ñ+=Ð>ò 	*à $× 2Ñ 2¸7ÐPT×P`ÑP`Ð 2Ó aˆJð*Ø!×@Ñ@ØØ%ØØØ!Ø#Ø!ð Aó ÷ ð ð !×'Ñ'Ó)×)Ô)ø�j×'Ñ'Ó)×)Ò)úÜ×%Ñ%ò 	ØˆGÜ;BÀ1ÀjÐRVÓ;WˆNØÐ)Ø"0×"8Ñ"8×">Ñ">Ó"@ò ?‘J�C˜Ø9>�GÐ/°¨uÐ5Ò6ð?ô —/‘/Ø5°g°Y¸iÐHØ*Ø4Øô	ð ûô ×$Ñ$ò 	7Ü+¨A¨vÓ6×6Ö6ûÜò 	ØˆGûð	üó©   ‚G„AA; Á"A9Á#A; Á8GÁ9A; Á;A GÂ<C8ÃCÃC8ÃGÃ/C2Ã0GÃ6GÃ8DÄD
ÄDÄGÄ(AF Æ GÆF0Æ%F(Æ&F0Æ+GÆ0GÆ<F>Æ>GÇGc	           
   ƒ   ó�  K  — 	 |€| j                   }t        ||«      \  }	}
| j                  j                  d||	|||||
¬«      }| j                  j	                  |«      ƒ d {  –—† }|j                  «        |S 7 Œ# t        j                  t        j                  f$ ry | j                  || j                  ¬«      }	 | j                  |||||||¬«      ƒ d {  –—†7  |j                  «       ƒ d {  –—†7   cY S # |j                  «       ƒ d {  –—†7   w xY wt        j                  $ r]}i }t        |dd «      }|�*|j                  j!                  «       D ]  \  }}||d|› �<   Œ t#        j$                  d|› d�d	d
|¬«      ‚d }~wt        j&                  $ r}t)        ||«      ƒ d {  –—†7   Y d }~y d }~wt*        $ r}|‚d }~ww xY w­w)NÚPATCHrM  r.  r/  r¿   r1  rN  rO  r2  r3  r4  rP  rQ  s                     rG   ÚpatchzAsyncHTTPHandler.patch  sÞ  è ø€ ð3	ØˆØŸ,™,�ô -NÈdÐT[Ó,\Ñ)ˆL˜/àŸ™×2Ñ2ØØØ!ØØØØØ'ð 3ó 	ˆCð %)§K¡K×$4Ñ$4°SÓ$9×9ˆHØ×%Ñ%Ô'ØˆOð :ùô ×)Ñ)¬5×+=Ñ+=Ð>ò 	*à $× 2Ñ 2¸7ÐPT×P`ÑP`Ð 2Ó aˆJð*Ø!×@Ñ@ØØ%ØØØ!Ø#Ø!ð Aó ÷ ð ð !×'Ñ'Ó)×)Ô)ø�j×'Ñ'Ó)×)Ò)úÜ×%Ñ%ò 	ØˆGÜ;BÀ1ÀjÐRVÓ;WˆNØÐ)Ø"0×"8Ñ"8×">Ñ">Ó"@ò ?‘J�C˜Ø9>�GÐ/°¨uÐ5Ò6ð?ô —/‘/Ø5°g°Y¸iÐHØ*Ø4Øô	ð ûô ×$Ñ$ò 	7Ü+¨A¨vÓ6×6Ö6ûÜò 	ØˆGûð	ürS  c	           
   ƒ   ó¸  K  — 	 |€| j                   }t        ||«      \  }	}
| j                  j                  d||	|||||
¬«      }| j                  j	                  ||¬«      ƒ d {  –—† }|j                  «        |S 7 Œ# t        j                  t        j                  f$ ry | j                  || j                  ¬«      }	 | j                  |||||||¬«      ƒ d {  –—†7  |j                  «       ƒ d {  –—†7   cY S # |j                  «       ƒ d {  –—†7   w xY wt        j                  $ r}t        ||«      ƒ d {  –—†7   Y d }~y d }~wt        $ r}|‚d }~ww xY w­w)NÚDELETErM  r-  r.  r/  )ri   r†   r  r8  r9  r:  rm   r;  r<  rÿ   rù   r=  rÜ   rA  rÝ   rÃ   )rë   rá   r   r'  r  rg   ri   rÒ   r€   r„   r…   rC  r¿   rD  rš   s                  rG   ÚdeletezAsyncHTTPHandler.deleteU  s]  è ø€ ð&	ØˆØŸ,™,�ô -NÈdÐT[Ó,\Ñ)ˆL˜/àŸ™×2Ñ2ØØØ!ØØØØØ'ð 3ó 	ˆCð %)§K¡K×$4Ñ$4°SÀÐ$4Ó$H×HˆHØ×%Ñ%Ô'ØˆOð Iùô ×)Ñ)¬5×+=Ñ+=Ð>ò 	*à $× 2Ñ 2¸7ÐPT×P`ÑP`Ð 2Ó aˆJð*Ø!×@Ñ@ØØ%ØØØ!Ø#Ø!ð Aó ÷ ð ð !×'Ñ'Ó)×)Ô)ø�j×'Ñ'Ó)×)Ò)úÜ×$Ñ$ò 	7Ü+¨A¨vÓ6×6Ö6ûÜò 	ØˆGûð	üsœ   ‚E„A A= Á$A;Á%A= Á:EÁ;A= Á=A EÂ>C:ÃCÃC:ÃEÃ1C4Ã2EÃ8EÃ:DÄD
ÄDÄEÄ*EÄ9D<Ä:EÄ?EÅEÅEÅEÅEc	           	   ƒ   ó¶   K  — t        ||«      \  }	}
|j                  d||	||||
¬«      }|j                  ||¬«      ƒ d{  –—† }|j                  «        |S 7 Œ­w)zz
        Making POST request for a single connection client.

        Used for retrying connection client errors.
        r+  ©r   r'  r  rg   r€   r-  N)r†   r8  r9  r:  )rë   rá   r  r   r'  r  rg   rÒ   r€   r„   r…   rC  r¿   s                rG   r=  z/AsyncHTTPHandler.single_connection_post_requestˆ  ss   è ø€ ô" )JÈ$ÐPWÓ(XÑ%ˆ�oà×)Ñ)ØØØØØØØ#ð *ó 
ˆð !'§¡¨C¸ Ó ?×?ˆØ×!Ñ!Ô#Øˆð @ús   ‚>AÁ AÁAúasyncio.Task[None]Ú_finalizer_close_tasksc                 ó®   — | j                   j                  |«       |j                  «       ry |j                  «       }|�t	        j
                  d|«       y y )Nz(Error closing client at finalization: %s)r]  ÚdiscardÚ	cancelledÚ	exceptionr   r’   )ÚclsÚtaskÚexcs      rG   Ú_on_finalizer_close_donez)AsyncHTTPHandler._on_finalizer_close_done®  sJ   € à×"Ñ"×*Ñ*¨4Ô0Ø�>‰>ÔØØ—^‘^Ó%ˆØˆ?Ü× Ñ Ð!KÈSÕQð rF   Úloopc                 óÆ   — ddl m} t        | j                  dd«      }t	        ||«      sy|j
                  }t	        |t        «      r|j                  ryt        |dd«      |uS )u–   True when the wrapped aiohttp session is bound to a loop other than
        ``loop`` â€” awaiting ``aclose()`` here would touch that loop's internals.r   r+   Ú
_transportNFÚ_loop)Ú+litellm.llms.custom_httpx.aiohttp_transportr,   r@  r   r‚   r  r   Úclosed)rë   rf  r,   r  Úsessions        rG   Ú _aiohttp_session_bound_elsewherez1AsyncHTTPHandler._aiohttp_session_bound_elsewhere·  s[   € õ	
ô # 4§<¡<°¸tÓDˆ	Ü˜)Ð%<Ô=ØØ"×)Ñ)ˆÜ˜'¤=Ô1°W·^²^ØÜ�w ¨Ó.°dÐ:Ð:rF   c                 óê   — ddl m} t        | j                  dd«      }t	        ||«      syt        |dd«      sy|j
                  }t	        |t        «      r|j                  s|j                  |«       yyy)a=  Dispose the wrapped aiohttp session when ``aclose()`` cannot run here.

        Finalization either has no running loop, or a loop the session is not
        bound to. Delegating to the transport's lifecycle-aware disposal picks
        the safe path per session state (async close on its own loop, threadsafe
        handoff to a loop running elsewhere, or the synchronous connector
        teardown that flips the flags ``ClientSession.__del__`` checks), so no
        "Unclosed client session" / "Unclosed connector" warnings fire at
        garbage collection.
        r   r+   rh  NÚ_owns_sessionF)	rj  r,   r@  r   r‚   r  r   rk  Ú_close_recycled_session)rë   r,   r  rl  s       rG   Ú _dispose_wrapped_aiohttp_sessionz1AsyncHTTPHandler._dispose_wrapped_aiohttp_sessionÆ  sj   € õ	
ô # 4§<¡<°¸tÓDˆ	Ü˜)Ð%<Ô=Øä�y /°5Ô9ØØ"×)Ñ)ˆÜ�gœ}Ô-°g·n²nØ×-Ñ-¨gÕ6ð 7EÐ-rF   c                 ó  — 	 t        t        j                  | j                  «      | j                  «      sy 	 t        j                  «       }| j                  |«      r| j                  «        y |j                  | j                  j                  «       «      }t        | «      }|j                  j                  |«       |j                  |j                   «       y # t        $ r | j                  «        Y y w xY w# t"        $ r Y y w xY wr  )ru   r•   Úgetrefcountr   rþ   rÇ   Úget_running_loopÚRuntimeErrorrq  rm  Úcreate_taskrÜ   rP   r]  ÚaddÚadd_done_callbackre  rÃ   )rë   rf  rc  rb  s       rG   Ú__del__zAsyncHTTPHandler.__del__ß  sÞ   € ð	Ü,¬S¯_©_¸T¿\¹\Ó-JÈD×L]ÑL]Ô^ØðÜ%×6Ñ6Ó8�ð ×4Ñ4°TÔ:ð ×5Ñ5Ô7ØØ×*Ñ*¨4¯<©<×+>Ñ+>Ó+@ÓAˆDÜ˜d›ˆCØ×&Ñ&×*Ñ*¨4Ô0Ø×"Ñ" 3×#?Ñ#?Õ@øô  ò ð ×5Ñ5Ô7Ùðûô  ò 	Ùð	ús;   ‚3C7 ·C Á!C7 Á-A*C7 ÃC4Ã1C7 Ã3C4Ã4C7 Ã7	DÄDr  c                 ó‚   — t         j                  «       rt         j                  | ||¬«      S t         j                  «       S )a”  
        - Creates a transport for httpx.AsyncClient
            - if litellm.force_ipv4 is True, it will return AsyncHTTPTransport with local_address="0.0.0.0"
            - [Default] It will return AiohttpTransport
            - Users can opt out of using AiohttpTransport by setting litellm.use_aiohttp_transport to False


        Notes on this handler:
        - Why AiohttpTransport?
            - By default, we use AiohttpTransport since it offers much higher throughput and lower latency than httpx.

        - Why force ipv4?
            - Some users have seen httpx ConnectionError when using ipv6 - forcing ipv4 resolves the issue for them
        r  )rø   Ú_should_use_aiohttp_transportÚ_create_aiohttp_transportÚ_create_httpx_transportr  s      rG   r  z(AsyncHTTPHandler._create_async_transportø  sB   € ô. ×9Ñ9Ô;Ü#×=Ñ=Ø'Ø%Ø-ð >ó ð ô  ×7Ñ7Ó9Ð9rF   c                  óž   — ddl } ddlm} t        j                  du s | | j
                  dd«      «      du ryt        j                  d«       y)	zé
        AiohttpTransport is the default transport for litellm.

        Httpx can be used by the following
            - litellm.disable_aiohttp_transport = True
            - os.getenv("DISABLE_AIOHTTP_TRANSPORT") = "True"
        r   Nrž   TÚDISABLE_AIOHTTP_TRANSPORTÚFalseFzUsing AiohttpTransport...)rb   r¢   rŸ   r¤   Údisable_aiohttp_transportr£   r   r’   )rb   rŸ   s     rG   r{  z.AsyncHTTPHandler._should_use_aiohttp_transport  sL   € ó 	å<ô ×-Ñ-°Ñ5Ù˜9˜2Ÿ9™9Ð%@À'ÓJÓKÈtÑSàô
 	×ÑÐ8Ô9ØrF   c                 óV   — dt         j                  rdndi}|�||d<   |S | du rd|d<   |S )aq  
        Helper method to get SSL connector initialization arguments for aiohttp TCPConnector.

        SSL Configuration Priority:
        1. If ssl_context is provided -> use the custom SSL context
        2. If ssl_verify is False -> disable SSL verification (ssl=False)

        Returns:
            Dict with appropriate SSL configuration for TCPConnector
        r4   )ú0.0.0.0r   Nr5   F)r¤   Ú
force_ipv4)rœ   r  Úconnector_kwargss      rG   Ú_get_ssl_connector_kwargsz*AsyncHTTPHandler._get_ssl_connector_kwargs7  sQ   € ð  ¬G×,>Ò,>™.ÀDð8
Ðð Ð"à&1Ð˜UÑ#ð
  Ðð	 ˜5Ñ à&+Ð˜UÑ#àÐrF   c                 óX  ‡	‡
— ddl m} ddlm} t        j                  | |¬«      }t        j                  Š
 |t        j                  dd«      «      du rdŠ
d}|�|}n| d	u rd	}t        j                  d
«       t        t        dœ|¥Š	t        rd‰	d<   t        dkD  r	t        ‰	d<   t         dkD  r	t         ‰	d<   t#        «       }|�|‰	d<   dt$        fˆ	ˆ
fd„}|�7|j&                  s+t        j                  dt)        |«      «        |||d	|¬«      S t        j                  d«        |||¬«      S )zÞ
        Creates an AiohttpTransport with RequestNotRead error handling

        Note: aiohttp TCPConnector ssl parameter accepts:
        - SSLContext: custom SSL context
        - False: disable SSL verification
        r   r+   rž   )rœ   r  ÚAIOHTTP_TRUST_ENVr€  TNFzCreating AiohttpTransport...)r6   r7   r8   r9   r:   r.   rI   c                  óB   •— t        t        di ‰ ¤Žt        «       ‰¬«      S )N)Ú	connectorÚ
cookie_jarÚ	trust_envrE   )r   r   r   )Útransport_connector_kwargsrŒ  s   €€rG   Úsession_factoryzCAsyncHTTPHandler._create_aiohttp_transport.<locals>.session_factory‰  s%   ø€ Ü Ü&ÑDÐ)CÑDÜ)Ó+Ø#ôð rF   z7SHARED SESSION: Reusing existing ClientSession (ID: %s))r  rœ   Úowns_sessionrŽ  zDNEW SESSION: Creating new ClientSession (no shared session provided))r  rœ   )rj  r,   r¢   rŸ   rø   r†  r¤   Úaiohttp_trust_envrb   r£   r   r’   r   r"   r   r   r   r_   r   rk  Úid)rœ   r  rû   r,   rŸ   r…  Ússl_for_transportr.   rŽ  r�  rŒ  s            @@rG   r|  z*AsyncHTTPHandler._create_aiohttp_transportS  sb  ù€ õ 	XÝ<ä+×EÑEÐQ[ÐitÐEÓuÐô
 "×3Ñ3ˆ	Ù”r—y‘yÐ!4°gÓ>Ó?À4ÑGØˆIð ;?ÐØÐ"Ø +ÑØ˜5Ñ Ø %Ðä×ÑÐ;Ô<ô ";Ü2ñB
ð ðB
Ð"õ
 (ØBFÐ&Ð'>Ñ?Ü" QÒ&Ü2IÐ& wÑ/Ü+¨aÒ/Ü;[Ð&Ð'7Ñ8ô !HÓ IˆØÐ%Ø;IÐ&Ð'7Ñ8ð	¤ö 	ð Ð%¨n×.CÒ.CÜ× Ñ Ð!ZÔ\^Ð_mÓ\nÔoÙ*Ø%Ø,Ø"Ø /ô	ð ô 	×ÑÐcÔdÙ&Ø"Ø(ô
ð 	
rF   c                  ó<   — t         j                  rt        d¬«      S y)zÚ
        Creates an AsyncHTTPTransport

        - If force_ipv4 is True, it will create an AsyncHTTPTransport with local_address set to "0.0.0.0"
        - [Default] If force_ipv4 is False, it will return None
        rƒ  ©Úlocal_addressN)r¤   r„  r   rE   rF   rG   r}  z(AsyncHTTPHandler._create_httpx_transport¡  s   € ô ×ÒÜ%°IÔ>Ð>àrF   )NNNNNNrõ   ©NNNN)	NNNNNFNNN©NNNNNFN)NNNNFN)rc  r\  rI   N©rI   N)NNN)9r;   r<   r=   rB   rm   rn   r   r?   Úlistr   ÚobjectÚVerifyTypesr   ré   Úpropertyr  r  Úsetterrÿ   rÏ   r  r  ÚdictrC   rd   r&   rƒ   ÚLiteLLMLoggingObjectr   r1   rJ  rR  rV  rY  r=  Úsetr]  r   rA   Úclassmethodre  rÇ   ÚAbstractEventLooprm  rq  ry  Ústaticmethodr5   r­   r,   r   r  r{  r3   r†  r|  r}  rE   rF   rG   rø   rø     so  … ð 15ØHLØØ#'Ø)-Ø48ñ)à˜Ÿ™Ñ&¨Ñ-ð)ð ˜S $ x°°V°Ñ'<Ñ"=Ð=Ñ>ÀÑEð)ð
 ˜D‘jð)ð   $Ñ&ð)ð ! Ñ1ó)ð, ð˜×)Ñ)ò ó ðð ‡]�]ð"˜U×.Ñ.ð "°4ò "ó ð"ð *.Ø48ñ$
à˜Ÿ™Ñ&¨Ñ-ð$
ð ˜S $ x°°V°Ñ'<Ñ"=Ð=Ñ>ÀÑEð$
ð   $Ñ&ð	$
ð
 ! Ñ1ð$
ð 
×	Ñ	ó$
òL(ò
òð #Ø#Ø(,Ø04ñàðð �t‘ðð ˜‘ð	ð
  ™+ðð ˜Ÿ™Ñ&¨Ñ-óñ. Óð +/Ø Ø"Ø#Ø04ØØ37Ø%)Ø*.ñDàðDð �S‰j˜5Ñ  4Ñ'ðDð �T‰kð	Dð
 �t‘ðDð ˜‘ðDð ˜Ÿ™Ñ&¨Ñ-ðDð ðDð *¨DÑ0ðDð ˜dÑ"ðDð ! 4Ñ'òDó ðDðR +/Ø Ø"Ø#Ø04ØØ*.ñ>àð>ð �S‰j˜5Ñ  4Ñ'ð>ð �T‰kð	>ð
 �t‘ð>ð ˜‘ð>ð ˜Ÿ™Ñ&¨Ñ-ð>ð ð>ð ! 4Ñ'ó>ðF +/Ø Ø"Ø#Ø04ØØ*.ñ>àð>ð �S‰j˜5Ñ  4Ñ'ð>ð �T‰kð	>ð
 �t‘ð>ð ˜‘ð>ð ˜Ÿ™Ñ&¨Ñ-ð>ð ð>ð ! 4Ñ'ó>ðF +/Ø Ø"Ø#Ø04ØØ*.ñ1àð1ð �S‰j˜5Ñ  4Ñ'ð1ð �T‰kð	1ð
 �t‘ð1ð ˜‘ð1ð ˜Ÿ™Ñ&¨Ñ-ð1ð ð1ð ! 4Ñ'ó1ðn +/Ø Ø"Ø#ØØ*.ñàðð ×!Ñ!ðð �S‰j˜5Ñ  4Ñ'ð	ð
 �T‰kðð �t‘ðð ˜‘ðð ðð ! 4Ñ'óñH CFÃ%Ð˜H SÐ)=Ñ%>Ñ?ÓGàòRó ðRð;°W×5NÑ5Nð ;ÐSWó ;ó7ó2ð2 à-1Ø"&Ø48ñ :Ø—^‘^ dÑ*ð :à˜4‘Kð :ð ! Ñ1ð :ð 
!Ð#5Ñ	5¸Ñ	<ò	 :ó ð :ðD ð¨4ò ó ðð6 à"&Ø-1ñ Ø˜4‘Kð à—^‘^ dÑ*ð ð 
ò ó ð ð6 à"&Ø-1Ø48ñK
Ø˜4‘KðK
à—^‘^ dÑ*ðK
ð ! Ñ1ðK
ð 
!ò	K
ó ðK
ðZ ð
Ð%7¸$Ñ%>ò 
ó ñ
rF   rø   c                   óâ  — e Zd Z	 	 	 	 	 ddeej
                  z  dz  dej                  dz  deez  dz  dedz  fd„Z	dej                  fd„Z
edej                  fd	„«       Zej                  dej                  ddfd
„«       Zd„ Z	 	 	 	 ddededz  dedz  dedz  deej
                  z  dz  f
d„Zededeeef   fd„«       Z	 	 	 	 	 	 	 	 	 d dedeez  ez  dz  deez  ez  dz  dedz  dedz  dedeej
                  z  dz  deez  dz  dedz  dedz  fd„Z	 	 	 	 	 	 	 d!dedeez  ez  dz  deez  dz  dedz  dedz  dedeej
                  z  dz  dedz  fd„Z	 	 	 	 	 	 	 d!dedeez  ez  dz  deez  dz  dedz  dedz  dedeej
                  z  dz  dedz  fd„Z	 	 	 	 	 	 	 d"dedeez  ez  dz  dedz  dedz  dedz  deej
                  z  dz  dededz  fd„Zd#d„Zdedz  fd„Zy)$r#  Nri   r  rœ   Údisable_default_headersc                 ó°   — || _         || _        || _        |d u | _        t	        j
                  «       | _        |€| j                  «       | _        y || _        y r  )	ri   rœ   r¥  rþ   Ú	threadingÚLockÚ
_heal_lockrÿ   r   )rë   ri   r  r  rœ   r¥  s         rG   ré   zHTTPHandler.__init__°  sN   € ð ˆŒØ$ˆŒØ'>ˆÔ$Ø" d˜NˆÔÜ#Ÿ.™.Ó*ˆŒØ/5¨~�t×)Ñ)Ó+ˆ�À6ˆ�rF   rI   c           	      ó@  — t        | j                  «      }t        j                  dt        j
                  «      }| j                  s
t        «       nd }t        j                  | j                  «       | j                  �| j                  nt        |||t        «       d¬«      S )Nr  T)r  ri   r  r  rg   r  r  )r±   rœ   rb   r£   r¤   r  r¥  rf   rm   ÚClientÚ_create_sync_transportri   rk   ry   )rë   r  r  r  s       rG   rÿ   zHTTPHandler.create_clientÀ  s„   € ä1°$·/±/ÓBˆ
ô —i‘iÐ 1´7×3JÑ3JÓKˆð ?C×>ZÒ>ZÔ!4Ô!6Ð`dˆô �|‰|Ø×1Ñ1Ó3Ø$(§L¡LÐ$<�D—L’LÔBRØØØ#Ü&Ó(Ø!ô
ð 	
rF   c                 ó<  — | j                   rn| j                  j                  rX| j                  5  | j                   r+| j                  j                  r| j	                  «       | _        d d d «       | j                  S | j                  S # 1 sw Y   | j                  S xY wr  )rþ   r   r  r©  rÿ   r  s    rG   r  zHTTPHandler.clientÖ  st   € à×Ò §¡×!7Ò!7Ø—‘ñ 8Ø×$Ò$¨¯©×)?Ò)?Ø#'×#5Ñ#5Ó#7�D”L÷8ð �|‰|Ðˆt�|‰|Ð÷8ð �|‰|Ðús   ¯8BÂBc                 ó    — || _         d| _        y r  r  r	  s     rG   r  zHTTPHandler.clientÞ  r
  rF   c                 óR   — | j                   r| j                  j                  «        y y r  )rþ   r   rÏ   r  s    rG   rÏ   zHTTPHandler.closeã  s    € à×ÒØ�L‰L×ÑÕ ð rF   rá   r  rg   r  c                 ó¶   — |�|nt         }|xs i }|j                  | j                  |«      «       | j                  j	                  |||||�|nt         ¬«      }|S r!  )r   r"  r$  r  rd   r%  s           rG   rd   zHTTPHandler.getè  si   € ð 8HÐ7SÑ#3ÔYkÐØ’˜2ˆØ�‰�d×/Ñ/°Ó4Ô5àŸ+™+Ÿ/™/ØØØØ.Ø&Ð2‘GÔ8Jð *ó 
ˆð ˆrF   c                 óX   — ddl m}m}  || «      }t         ||j                  «      «      S )u¨   
        Parse a URLâ€™s query-string into a dict.

        :param url: full URL, e.g. "https://.../path?foo=1&bar=2"
        :return: {"foo": "1", "bar": "2"}
        r   )Ú	parse_qslÚurlsplit)Úurllib.parser²  r³  rž  Úquery)rá   r²  r³  Úpartss       rG   r$  z HTTPHandler.extract_query_paramsÿ  s$   € ÷ 	5á “}ˆÜ‘I˜eŸk™kÓ*Ó+Ð+rF   r   r'  rÒ   r)  r€   r(  c                 óä  — 	 t        ||	«      \  }}|�%| j                  j                  d||||||||¬«	      }n#| j                  j                  d|||||||¬«      }| j                  j                  ||¬«      }|j	                  «        |S # t
        j                  $ r t        j                  d|› d�dd¬	«      ‚t
        j                  $ r}t        ||«       Y d }~y d }~wt        $ r}|‚d }~ww xY w)
Nr+  r,  )r   r'  r  rg   r)  r€   r-  rN  rO  r2  r3  ©rÕ   r5  r6  ©r†   r  r8  r9  r:  rm   r>  r¤   rn   rA  rÚ   rÃ   )rë   rá   r   r'  r  rg   rÒ   ri   r)  r€   r(  r„   r…   rC  r¿   rš   s                   rG   rJ  zHTTPHandler.post  s  € ð'	ä,MÈdÐT[Ó,\Ñ)ˆL˜/àÐ"Ø—k‘k×/Ñ/ØØØ%ØØ!Ø#Ø#ØØ+ð 0ó 
‘ð —k‘k×/Ñ/ØØØ%ØØ!Ø#ØØ+ð 0ó 	�ð #Ÿk™k×.Ñ.¨s¸6Ð.ÓBˆHØ×%Ñ%Ô'ØˆOøÜ×%Ñ%ò 	Ü—/‘/Ø5°g°Y¸iÐHØ*Ø4ôð ô
 ×$Ñ$ò 	0Ü$ Q¨×/Ñ/ûÜò 	ØˆGûð	ús%   ‚BB
 Â
AC/ÃCÃC/Ã(C*Ã*C/c	           
      óà  — 	 t        ||«      \  }	}
|�$| j                  j                  d||	|||||
¬«      }n"| j                  j                  d||	||||
¬«      }| j                  j                  ||¬«      }|j	                  «        |S # t
        j                  $ r t        j                  d|› d�dd¬	«      ‚t
        j                  $ r}t        ||«       Y d }~y d }~wt        $ r}|‚d }~ww xY w)
NrU  rM  r[  r-  rN  rO  r2  r3  r¸  r¹  ©rë   rá   r   r'  r  rg   rÒ   ri   r€   r„   r…   rC  r¿   rš   s                 rG   rV  zHTTPHandler.patchB  s  € ð%	ä,MÈdÐT[Ó,\Ñ)ˆL˜/àÐ"Ø—k‘k×/Ñ/ØØØ%ØØ!Ø#Ø#Ø+ð 0ó 	‘ð —k‘k×/Ñ/ØØØ%ØØ!Ø#Ø+ð 0ó �ð #Ÿk™k×.Ñ.¨s¸6Ð.ÓBˆHØ×%Ñ%Ô'ØˆOøÜ×%Ñ%ò 	Ü—/‘/Ø5°g°Y¸iÐHØ*Ø4ôð ô
 ×$Ñ$ò 	0Ü$ Q¨×/Ñ/ûÜò 	ØˆGûð	úó%   ‚BB ÂAC-Ã	CÃC-Ã&C(Ã(C-c	           
      óÀ  — 	 t        ||«      \  }	}
|�$| j                  j                  d||	|||||
¬«      }n"| j                  j                  d||	||||
¬«      }| j                  j                  ||¬«      }|S # t        j
                  $ r t        j                  d|› d�dd¬	«      ‚t        j                  $ r}t        ||«       Y d }~y d }~wt        $ r}|‚d }~ww xY w)
NrL  rM  r[  r-  rN  rO  r2  r3  r¸  )r†   r  r8  r9  rm   r>  r¤   rn   rA  rÚ   rÃ   r»  s                 rG   rR  zHTTPHandler.putt  s  € ð$	ä,MÈdÐT[Ó,\Ñ)ˆL˜/àÐ"Ø—k‘k×/Ñ/ØØØ%ØØ!Ø#Ø#Ø+ð 0ó 	‘ð —k‘k×/Ñ/ØØØ%ØØ!Ø#Ø+ð 0ó �ð #Ÿk™k×.Ñ.¨s¸6Ð.ÓBˆHØˆOøÜ×%Ñ%ò 	Ü—/‘/Ø5°g°Y¸iÐHØ*Ø4ôð ô
 ×$Ñ$ò 	0Ü$ Q¨×/Ñ/ûÜò 	ØˆGûð	ús%   ‚A5A8 Á8ACÂ9C
Ã
CÃCÃCc	           
      óà  — 	 t        ||«      \  }	}
|�$| j                  j                  d||	|||||
¬«      }n"| j                  j                  d||	||||
¬«      }| j                  j                  ||¬«      }|j	                  «        |S # t
        j                  $ r t        j                  d|› d�dd¬	«      ‚t
        j                  $ r}t        ||«       Y d }~y d }~wt        $ r}|‚d }~ww xY w)
NrX  rM  r[  r-  rN  rO  r2  r3  r¸  r¹  )rë   rá   r   r'  r  rg   ri   rÒ   r€   r„   r…   rC  r¿   rš   s                 rG   rY  zHTTPHandler.delete¥  s  € ð%	ä,MÈdÐT[Ó,\Ñ)ˆL˜/àÐ"Ø—k‘k×/Ñ/ØØØ%ØØ!Ø#Ø#Ø+ð 0ó 	‘ð —k‘k×/Ñ/ØØØ%ØØ!Ø#Ø+ð 0ó �ð #Ÿk™k×.Ñ.¨s¸6Ð.ÓBˆHØ×%Ñ%Ô'ØˆOøÜ×%Ñ%ò 	Ü—/‘/Ø5°g°Y¸iÐHØ*Ø4ôð ô
 ×$Ñ$ò 	0Ü$ Q¨×/Ñ/ûÜò 	ØˆGûð	úr¼  c                 óÀ   — 	 t        t        j                  | j                  «      | j                  «      r| j                  j                  «        y y # t        $ r Y y w xY wr  )ru   r•   rs  r   rþ   rÏ   rÃ   r  s    rG   ry  zHTTPHandler.__del__×  sL   € ð	Ü(¬¯©¸¿¹Ó)FÈ×HYÑHYÔZØ—‘×"Ñ"Õ$ð [øäò 	Ùð	ús   ‚AA Á	AÁAc                 ó\   — t         j                  rt        d¬«      S t        t         dd«      S )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”  Úsync_transportN)r¤   r„  r   r@  r  s    rG   r¬  z"HTTPHandler._create_sync_transportÞ  s(   € ô ×ÒÜ ¨yÔ9Ð9äœ7Ð$4°dÓ;Ð;rF   )NNNNFr–  )	NNNNFNNNN)NNNNFNNr—  r˜  )r;   r<   r=   rB   rm   rn   r«  rC   r?   ré   rÿ   rœ  r  r�  rÏ   rž  rd   r£  r$  rƒ   r™  r   r1   rŸ  rJ  rV  rR  rY  ry  r   r¬  rE   rF   rG   r#  r#  ¯  s  „ ð 15ØØ&*Ø(,àñJà˜Ÿ™Ñ&¨Ñ-ðJð —‘˜tÑ#ð	Jð
 ˜3‘J Ñ%ðJð "&Ø
ñ"óJð 
˜uŸ|™|ó 
ð, ð˜Ÿ™ò ó ðð ‡]�]ð"˜UŸ\™\ð "¨dò "ó ð"ò!ð #Ø#Ø(,Ø04ñàðð �t‘ðð ˜‘ð	ð
  ™+ðð ˜Ÿ™Ñ&¨Ñ-óð. ð
, #ð 
,¨$¨s°C¨x©.ò 
,ó ð
,ð +/Ø)-Ø"Ø#ØØ04Ø,0Ø*.Ø37ñ4àð4ð �S‰j˜5Ñ  4Ñ'ð4ð �S‰j˜4Ñ $Ñ&ð	4ð
 �t‘ð4ð ˜‘ð4ð ð4ð ˜Ÿ™Ñ&¨Ñ-ð4ð �lÑ" TÑ)ð4ð ! 4Ñ'ð4ð *¨DÑ0ó4ðr +/Ø"&Ø"Ø#ØØ04Ø*.ñ0àð0ð �S‰j˜5Ñ  4Ñ'ð0ð �S‰j˜4Ñð	0ð
 �t‘ð0ð ˜‘ð0ð ð0ð ˜Ÿ™Ñ&¨Ñ-ð0ð ! 4Ñ'ó0ðj +/Ø"&Ø"Ø#ØØ04Ø*.ñ/àð/ð �S‰j˜5Ñ  4Ñ'ð/ð �S‰j˜4Ñð	/ð
 �t‘ð/ð ˜‘ð/ð ð/ð ˜Ÿ™Ñ&¨Ñ-ð/ð ! 4Ñ'ó/ðh +/Ø Ø"Ø#Ø04ØØ*.ñ0àð0ð �S‰j˜5Ñ  4Ñ'ð0ð �T‰kð	0ð
 �t‘ð0ð ˜‘ð0ð ˜Ÿ™Ñ&¨Ñ-ð0ð ð0ð ! 4Ñ'ó0ódð
<¨¸Ñ(<ô 
<rF   r#  r6  r  rû   r   c                 óî  — d}|�#|j                  «       D ]  \  }}	 ||› d|› �z  }Œ d|z   | z   }t        t        dd«      }|€ddlm}  |«       }t        t        d|«       |j                  |«      }	|	r|	S |�:|j                  «       D �
�ci c]  \  }
}|
dk7  sŒ|
|“Œ }}
}||d	<   t        di |¤Ž}nt        t        «       |¬
«      }|j                  ||t        d¬«       |S # t        $ r Y ŒØw xY wc c}}
w )zŒ
    Retrieves the async HTTP client from the cache
    If not present, creates a new client

    Caches the new client and returns it.
    rÁ   NÚ_Úasync_httpx_clientÚin_memory_llm_clients_cacher   ©ÚLLMClientCacher�  rû   )ri   rû   T©rH  rI  ÚttlÚlitellm_owned_clientrE   )rä   rÃ   r@  r¤   Ú#litellm.caching.llm_caching_handlerrÇ  ÚsetattrÚ	get_cacherø   rp   Ú	set_cacher   )r6  r  rû   Ú_params_key_namerH  rI  Ú_cache_key_nameÚcacherÇ  Ú_cached_clientrð   rñ   Úhandler_paramsÚ_new_clients                 rG   Úget_async_httpx_clientrÕ  ë  s6  € ð ÐØÐØ Ÿ,™,›.ò 	‰JˆC�ðØ  s e¨1¨U¨GÐ$4Ñ4Ñ ð	ð 2Ð4DÑDÀ|ÑS€Oô ”GÐ:¸DÓA€EØ€}ÝFáÓ ˆÜ”Ð6¸Ô>à!ŸO™O¨OÓ<€NÙØÐàÐà28·,±,³.× e©$¨!¨QÀAÐIdÓDd  A¡Ð eˆÑ eØ+9ˆÐ'Ñ(Ü&Ñ8¨Ñ8‰ä&Ü2Ó4Ø)ô
ˆð
 
‡O�OØØÜ*Ø!ð	 ô ð ÐøôG ò Ùðüó( !fs   œ
C"ÂC1ÂC1Ã"	C.Ã-C.c                 óÜ  — d}| �#| j                  «       D ]  \  }}	 ||› d|› �z  }Œ d|z   }t        t        dd«      }|€ddlm}  |«       }t        t        d|«       |j                  |«      }|r|S | �5| j                  «       D ��	ci c]  \  }}	|dk7  sŒ||	“Œ }
}}	t        di |
¤Ž}nt        t        «       ¬	«      }|j                  ||t        d
¬«       |S # t        $ r Y ŒÏw xY wc c}	}w )z†
    Retrieves the HTTP client from the cache
    If not present, creates a new client

    Caches the new client and returns it.
    rÁ   NrÃ  Úhttpx_clientrÅ  r   rÆ  r�  rÆ   TrÈ  rE   )rä   rÃ   r@  r¤   rË  rÇ  rÌ  rÍ  r#  rp   rÎ  r   )r  rÏ  rH  rI  rÐ  rÑ  rÇ  rÒ  rð   rñ   rÓ  rÔ  s               rG   Ú_get_httpx_clientrØ  !  s  € ð ÐØÐØ Ÿ,™,›.ò 	‰JˆC�ðØ  s e¨1¨U¨GÐ$4Ñ4Ñ ð	ð ,Ð.>Ñ>€Oô ”GÐ:¸DÓA€EØ€}ÝFáÓ ˆÜ”Ð6¸Ô>à!ŸO™O¨OÓ<€NÙØÐàÐà28·,±,³.× e©$¨!¨QÀAÐIdÓDd  A¡Ð eˆÑ eÜ!Ñ3 NÑ3‰ä!Ô*HÓ*JÔKˆà	‡O�OØØÜ*Ø!ð	 ô ð Ðøô? ò Ùðüó( !fs   œ
CÂC(ÂC(Ã	C%Ã$C%rõ   r  )zrÇ   Úconcurrent.futuresÚ
concurrentÚinspectrb   rD   r5   r•   r§  r7  Úcollections.abcr   r   r   r   Úhttp.cookiejarr   r	   Útypingr
   r   r   r   r   r   r   r®   rm   Úaiohttpr   r   r   r   r   r   Úhttpx._typesr   r¤   Úlitellm._loggingr   Úlitellm.constantsr   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   Ú(litellm.litellm_core_utils.logging_utilsr&   Ú3litellm.litellm_core_utils.request_timeout_resolverr'   Úlitellm.types.llms.custom_httpr)   Ú*litellm.litellm_core_utils.litellm_loggingr*   rŸ  rj  r,   Úlitellm._versionr-   rÃ   Ú	signatureré   Ú
parametersr/   rA   r>   r@   ÚAddressFamilyÚ
SocketKindr?   rš  r0   rƒ   r1   r3   r_   rž  rf   rg   rn   rk   rp   rq   rC   ru   ry   rz   ÚfuturesÚThreadPoolExecutorr~   r†   r‡   r­   r›   r©   r›  r±   r²   r´   r¾   rê   rÄ   rB   rÊ   rÑ   rA  rÚ   rÝ   rÖ   rø   r#  ÚhttpxSpecialProviderrÕ  rØ  rE   rF   rG   ú<module>rï     s²  ðÜ Û Û Û 	Û Û 
Û 
Û Û ß FÓ Fß 9ß V× VÑ Vã Û ß ?Ñ ?ß GÑ GÝ %ã Ý +÷÷ ÷ õ õ Jõô -áÝ$õö Tà€LØÐØ!ÐðÝ(ð +;Ð>O¸g×>OÑ>OÐP\×PeÑPeÓ>f×>qÑ>qÐ*qÐ   %Ó qà˜S 6×#7Ñ#7Ñ7¸¸v×?PÑ?PÑ9PÐRUÐWZÐ\aÐbhÐjmÐbmÑ\nÐnÑo€	ˆ9Ó oà  5™[¨8°E©?Ñ:¸]È5Ñ=QÑQ€�Ó Qô9˜)¨5õ 9ð °¸9¸+ÀvÇ}Á}Ð:TÑ1UÐX\Ñ1\ó  ðF0˜Tó 0ñ %Ó&€ˆÓ &ð (˜%Ÿ-™-Ø,Ø0ôÐ �%ó ð[¨¯©ó [ð 9:Ð .°Ó 9ð	]¨sð 	]Àð 	]È$ó 	]ðE˜Ió Eð 58Ð *¨EÓ 7Ø-7×-?Ñ-?×-RÑ-RØØ:ð .Só .Ð # Uó ð '+Ø&*ñ%)Ø
�‰*�uÑ
˜tÑ
#ð%)à˜tÑ#ð%)ð ˆ4�'‰>˜DÑ  /°DÑ"8Ð8Ñ9ó%)ðV ^`Ð �E˜$˜u S¨4¡Z°°t±¸SÀ4¹ZÐ%GÑHÈ#Ï.É.ÐXÑYÑZÓ _ð.Ø�$‰Jð.à˜d™
ð.ð ˜$‘Jð.ð 	‡^�^ó	.ðd %)ñ$:Ø�s‘
˜TÑ!ð$:à	ˆC�Zó$:ðP &*ñ?Ø˜dÑ"ð?à	ˆC�Z�#—.‘.Ñ ó?ðD DHÐ ˜d S™j¨3¯>©>Ñ9¸DÑ@Ó Gð(¨°©°c·n±nÑ)Dó (òð0 e§n¡nð ¸ó ñ¨¯©ð À%È$Á,ð ÐZ_ó ñ %§.¡.ð ¸5À4¹<ð ÐSXó ðH × 5Ñ 5ð H¸tð HÈó Hð(H u×'<Ñ'<ð HÀdð HÈtó Hô(1?˜E×1Ñ1ô 1?÷hN
ñ N
÷by<ñ y<ð|	 Ø04ñ3ØÐ!5Ñ5ð3à�4‰Kð3ð ˜_Ñ-ð3ð ó	3ñl+˜d T™kð +°[ô +øðS/ ò ØƒGðús   ÃM$ Í$M/Í.M/