Ë
    uPêj’A  ã                  óŽ  — U d dl mZ d dlZd dlZd dlZd dlmZmZ d dlm	Z	 d dl
m
Z
mZmZ d dlmZ d dlmZ d dlmZmZ d dlZd dlZd d	lmZ d d
lmZmZ dZded<   dZded<   dZded<   dZded<   dZ ded<   dZ!ded<   dZ"ded<   ejF                  jI                  ejF                  jK                  d«      d«      Z&ded<   dOd„Z'dPd„Z(dQd„Z)dRd „Z*dSd!„Z+dTd"„Z,e	 G d#„ d$«      «       Z- e	d%¬&«       G d'„ d(«      «       Z. e.d)d*«       e.d+d,«       e.d-d.d/„ ¬0«       e.d1d2d3„ ¬0«       e.d4d5d6„ ¬0«       e.d7«       e.d8«       e.d9d:d;„ ¬0«       e.d<d=d>„ ¬0«      g	Z/d?ed@<   dUdVdA„Z0dWdB„Z1dXdC„Z2dYdD„Z3dZdE„Z4	 	 	 	 d[dF„Z5d\dG„Z6	 	 d]	 	 	 	 	 d^dH„Z7	 	 	 	 	 	 	 	 d_	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d`dI„Z8	 d]	 	 	 	 	 	 	 dadJ„Z9	 	 d]dKdLdMœ	 	 	 	 	 	 	 	 	 dbdN„Z:y)cé    )ÚannotationsN)ÚCallableÚSequence)Ú	dataclass)ÚdatetimeÚ	timedeltaÚtimezone)ÚPath)ÚLock)ÚAnyÚFinal)Úverbose_logger)ÚHTTPHandlerÚ_get_httpx_clientz/oauth/tokenr   ÚAUTH_ENDPOINT_SUFFIXÚAICORE_CONFIGÚCONFIG_FILE_ENV_VARÚAICORE_HOMEÚHOME_PATH_ENV_VARÚAICORE_PROFILEÚPROFILE_ENV_VARÚVCAP_SERVICESÚVCAP_SERVICES_ENV_VARÚaicoreÚVCAP_AICORE_SERVICE_NAMEÚAICORE_SERVICE_KEYÚSERVICE_KEY_ENV_VARú~z.aicoreÚDEFAULT_HOME_PATHc                 ó>   — t        j                  t        t        «      S ©N)ÚosÚgetenvr   r   © ó    úa/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/sap/credentials.pyÚ	_get_homer'       s   € Ü�9‰9Ô&Ô(9Ó:Ð:r%   c                óN  — | }t        |t        «      r	 t        j                  |«      }|D ]I  }t        |t        «      s,t        j                  dt        |«      j                  |«        y ||vr y ||   }ŒK |S # t        j                  $ r t        j                  d«       Y y w xY w)Nz?SAP service key or VCAP service is a string but not valid JSON.zMSAP service key or VCAP service traversal hit non-dict type '%s' at key '%s'.)
Ú
isinstanceÚstrÚjsonÚloadsÚJSONDecodeErrorr   ÚwarningÚdictÚtypeÚ__name__)ÚdÚpathÚcurÚks       r&   Ú_get_nestedr6   $   s©   € Ø€CÜ�#”sÔð	Ü—*‘*˜S“/ˆCð ò ˆÜ˜#œtÔ$Ü×"Ñ"Ø_ÔaeÐfiÓaj×asÑasÐuvôñ Ø�C‰<ÙØ�!‰f‰ðð €Jøô ×#Ñ#ò 	Ü×"Ñ"Ð#dÔeÙð	ús   ”A9 Á9(B$Â#B$c                ó¤   — t         j                  j                  | «      }|sy 	 t        j                  |«      S # t        j
                  $ r Y y w xY wr!   )r"   ÚenvironÚgetr+   r,   r-   )Úvar_nameÚraws     r&   Ú_load_json_envr<   9   sE   € Ü—‘—‘ Ó)€CÙØðÜ�z‰z˜#‹ÐøÜ×Ñò Ùðús   ¤9 ¹AÁAc                ó@   — 	 | �t        | «      S d S # t        $ r Y y w xY wr!   )r*   Ú	Exception)Úvalues    r&   Ú_str_or_noner@   C   s-   € ðØ"Ð.Œs�5‹zÐ8°DÐ8øÜò Ùðús   ‚ � ‘	œc                 ó(   — t        t        «      xs i S r!   )r<   r   r$   r%   r&   Ú
_load_vcaprB   J   s   € ÜÔ/Ó0Ò6°BÐ6r%   c                ó€   — t        «       j                  «       D ]#  }|D ]  }|j                  d«      | k(  sŒ|c c S  Œ% y )NÚlabel)rB   Úvaluesr9   )rD   ÚservicesÚsvcs      r&   Ú_get_vcap_servicerH   N   sF   € Ü“L×'Ñ'Ó)ò ˆØò 	ˆCØ�w‰w�wÓ 5Ó(Ø”
ñ	ðð r%   c                  ó"   — e Zd ZU ded<   ded<   y)ÚSourcer*   Únamez(Callable[[CredentialsValue], str | None]r9   N)r1   Ú
__module__Ú__qualname__Ú__annotations__r$   r%   r&   rJ   rJ   V   s   … à
ƒIØ	1Ô1r%   rJ   T)Úfrozenc                  óB   — e Zd ZU ded<   dZded<   dZded<   dZded	<   y)
ÚCredentialsValuer*   rK   Nztuple[str, ...] | NoneÚvcap_keyú
str | NoneÚdefaultzCallable[[str], str] | NoneÚtransform_fn)r1   rL   rM   rN   rR   rT   rU   r$   r%   r&   rQ   rQ   \   s'   … à
ƒIØ'+€HÐ$Ó+Ø€GˆZÓØ04€LÐ-Ô4r%   rQ   Ú	client_id)ÚclientidÚclient_secret)ÚclientsecretÚauth_url©Úurlc                ód   — | j                  d«      | j                  t        «      rdz   S t        z   S ©Nú/Ú ©ÚrstripÚendswithr   r[   s    r&   ú<lambda>rd   j   ó'   €  §¡¨C£¸#¿,¹,ÔG[Ô:\°BÑ!w€ ÔbvÑ!w€ r%   )rU   Úbase_url)ÚserviceurlsÚ
AI_API_URLc                óT   — | j                  d«      | j                  d«      rdz   S dz   S )Nr_   z/v2r`   )rb   rc   r[   s    r&   rd   rd   o   s&   €  §¡¨C£¸#¿,¹,ÀuÔ:M°BÑ!Y€ ÐSXÑ!Y€ r%   Úcert_url)Úcerturlc                ód   — | j                  d«      | j                  t        «      rdz   S t        z   S r^   ra   r[   s    r&   rd   rd   t   re   r%   Úcert_file_pathÚkey_file_pathÚcert_str)Úcertificatec                ó&   — | j                  dd«      S ©Nú\nú
©Úreplace©Úss    r&   rd   rd   z   s   € È!Ï)É)ÐTYÐ[_ÓJ`€ r%   Úkey_str)Úkeyc                ó&   — | j                  dd«      S rr   ru   rw   s    r&   rd   rd   {   s   € ÀÇÁÈ5ÐRVÓAW€ r%   zFinal[list[CredentialsValue]]ÚCREDENTIAL_VALUESc                ó   — t        t        «       «      }| xs# t        j                  j	                  t
        «      } t        j                  t        «      }|rt        |«      n|| dv rdnd| › d�z  }|rB|j                  «       r2	 |j                  d¬«      5 }t        j                  |«      cddd«       S |s| dvrt        d	|› d
|› d�«      ‚i S # 1 sw Y   nxY wŒ'# t        j                  $ r t        |› d�«      ‚w xY w)zÐ
    Loads config JSON from:
      1) $AICORE_CONFIG if set, otherwise
      2) $AICORE_HOME/config.json (or config_<profile>.json when profile is given/not default)
    Returns {} when nothing is found.
    )Nr`   rT   zconfig.jsonÚconfig_z.jsonzutf-8)ÚencodingNz, is not valid JSON. Please fix or remove it!z)Unable to locate profile config file at 'z' in AICORE_HOME 'ú')r
   r'   r"   r8   r9   r   r#   r   ÚexistsÚopenr+   Úloadr-   ÚKeyErrorÚFileNotFoundError)ÚprofileÚhomeÚcfg_envÚcfg_pathÚfs        r&   Ú	init_confr‹      s  € ô ”y“{Ó#€DØÒ8œŸ™Ÿ™¬Ó8€GÜ—Y‘YÔ2Ó3€Gñ ô 	ˆWŒà wÐ2GÑ'G‘mÈwÐW^ÐV_Ð_dÐMeÑfð ñ �H—O‘OÔ%ð	VØ—‘¨�Ó0ð $°AÜ—y‘y “|÷$ñ $ñ �7Ð"7Ñ7ÜÐ"KÈHÈ:ÐUgÐhlÐgmÐmnÐ oÓpÐpà€I÷$ð $úð $øä×#Ñ#ò 	VÜ˜h˜ZÐ'SÐTÓUÐUð	Vús$   ÂC ÂCÂ*	C ÃCÃC Ã"C=c                ó(   — d| j                  «       › �S ©NÚAICORE_)Úupper)rK   s    r&   Ú	_env_namer�   �   s   € Ø�T—Z‘Z“\�NÐ#Ð#r%   c                ó    — i }t         D ]B  }| j                  |«      }|€Œ|j                  r|j                  |«      n|||j                  <   ŒD |S )z&Extract all credentials from a source.)r|   r9   rU   rK   )ÚsourceÚcredentialsÚcvr?   s       r&   Úextract_credentialsr•   ¡   sS   € à€KÜò XˆØ—
‘
˜2“ˆØÑØ=?¿_º_ 2§?¡?°5Ô#9ÐRWˆK˜Ÿ™Ò ðXð Ðr%   c                óˆ   — | D ]3  }t        |«      }|sŒt        j                  d|j                  «       |c S  t	        d«      ‚)z?Extract credentials from the first source that has any defined.z'Resolved SAP credentials from source %sz"No credentials found in any source)r•   r   ÚdebugrK   Ú
ValueError)Úsourcesr’   r“   s      r&   Úresolve_credentialsrš   «   sG   € àò ˆÜ)¨&Ó1ˆÚÜ× Ñ Ð!JÈFÏKÉKÔXØÒð	ô
 Ð9Ó
:Ð:r%   c                ó°   — t        dd¬«      }| D ]9  }|j                  |«      }|€Œt        j                  d|j                  «       |c S  |j
                  S )z:Find resource_group from the first source that defines it.Úresource_grouprT   )rT   z1Resolved GEN AI Hub resource_group from source %s)rQ   r9   r   r—   rK   rT   )r™   Úrg_credr’   r?   s       r&   Úresolve_resource_grouprž   µ   s[   € ä%Ð&6À	ÔJ€GØò ˆØ—
‘
˜7Ó#ˆØÑÜ× Ñ Ð!TÐV\×VaÑVaÔbØŠLð	ð
 �?‰?Ðr%   c                ó(  — | €yt        | t        «      r| S t        | t        «      r	 t        j                  | «      S t        j                  dt        | «      j                  «       y# t        j
                  $ r t        j                  d«       Y yw xY w)zž
    Pre-parse service_key if it's a string to avoid repeated JSON parsing.

    Returns None if parsing fails (other credential sources may still work).
    NzESAP service key is a string but not valid JSON. Skipping this source.zISAP service key has unexpected type '%s'. Expected str or dict. Ignoring.)
r)   r/   r*   r+   r,   r-   r   r.   r0   r1   )Úservice_keys    r&   Ú_parse_service_key_oncer¡   À   s‹   € ð ÐØÜ�+œtÔ$ØÐÜ�+œsÔ#ð	Ü—:‘:˜kÓ*Ð*ô ×ÑØSÔUYÐZeÓUf×UoÑUoôð øô ×#Ñ#ò 	Ü×"Ñ"Ð#jÔkÙð	ús   §A& Á&(BÂBc                ó  — | €y t        t        | |j                  rd|j                  z   n|j                  f«      «      }|€@t        t        | |j                  r|j                  «      «      S |j                  f«      «      S |S ©N)r“   ©r@   r6   rR   rK   )r    r”   Úvals      r&   Ú$_resolve_credential_from_service_keyr¦   Ø   sv   € ØÐØÜœk¨+Ð[]×[fÒ[fÐ8HÈ2Ï;É;Ò8VÐmo×mtÑmtÐlvÓwÓx€CØ
€{ÜœK¨ÀBÇKÂK°R·[±[Ó`ÓaÐaÐVX×V]ÑV]ÐU_Ó`ÓaÐaØ€Jr%   c           	     ó¼  ‡ ‡‡‡— t        |«      Št        ‰ xs5 t        j                  xs# t        j
                  j                  t        «      «      Š t        t        «      Št        dˆfd„«      t        dˆ fd„«      t        dd„ «      t        dˆfd„«      t        d	ˆfd
„«      g}t        |«      }t        |«      }|�||d<   d|v r|j                  d«      |d<   |S )aw  
    Resolution order (first-source-wins):

    Sources are checked in this order:
      kwargs
      > service key
      > env (AICORE_<NAME>)
      > config (AICORE_<NAME> or plain <name>)
      > vcap service key
      > default

    Important:
      - Credentials are extracted from the FIRST source that provides any credential value.
      - Values are NOT merged per key across sources. Except resource_group, which is merged.

    Warning:
      - This function does NOT validate the returned credentials just parsed it from the sources.
      - Callers MUST explicitly call validate_credentials() on the returned dict
    Úkwargsc                óL   •— t        ‰j                  | j                  «      «      S r!   )r@   r9   rK   )r”   r¨   s    €r&   rd   z#fetch_credentials.<locals>.<lambda>ÿ   s   ø€ ¤L°·±¸B¿G¹GÓ1DÓ$E€ r%   zservice keyc                ó   •— t        ‰| «      S r!   )r¦   )r”   r    s    €r&   rd   z#fetch_credentials.<locals>.<lambda>  s   ø€ Ô;¸KÈÓL€ r%   zenvironment variablesc                óˆ   — t        t        j                  j                  d| j                  j                  «       › �«      «      S r�   )r@   r"   r8   r9   rK   r�   )r”   s    r&   rd   z#fetch_credentials.<locals>.<lambda>  s*   € ”|¤B§J¡J§N¡N°W¸R¿W¹W¿]¹]»_Ð<MÐ3NÓ$OÓP€ r%   zconfig filec                ó  •— t        ‰j                  d| j                  j                  «       › �«      �0‰j                  d| j                  j                  «       › �«      «      S ‰j                  | j                  «      «      S r�   )r@   r9   rK   r�   )r”   Úconfigs    €r&   rd   z#fetch_credentials.<locals>.<lambda>
  sf   ø€ ”|à—:‘: ¨¯©¯©«Ð'8Ð9Ó:ÐFð —
‘
˜W R§W¡W§]¡]£_Ð$5Ð6Ó7ó€ ð —Z‘Z §¡Ó(ó€ r%   zVCAP servicec                ó’   •— ‰rCt        t        ‰| j                  rd| j                  z   «      «      S | j                  f«      «      S d S r£   r¤   )r”   Úvcap_services    €r&   rd   z#fetch_credentials.<locals>.<lambda>  s[   ø€ ñ  ô ÜØ$Ø<>¿KºKÐ)¨B¯K©KÑ7óóð ð OQÏgÉgÈZóóð ð ð r%   rœ   rj   rZ   )r‹   r¡   ÚlitellmÚsap_service_keyr"   r8   r9   r   rH   r   rJ   rš   rž   Úpop)r    r†   r¨   r™   r“   rœ   r­   r¯   s   ` `   @@r&   Úfetch_credentialsr³   á   sæ   û€ ô0 ˜gÓ&€Fä)¨+Ò*w¼×9PÑ9PÒ*wÔTV×T^ÑT^×TbÑTbÔcvÓTwÓx€KÜ+Ô,DÓE€Lô 	ˆxÓEÓFÜØÛLó	
ô 	Ø#ÙPó	
ô 	Øóó	
ô 	Øó	ó	
ð%€GôB -¨WÓ5€Kä2°7Ó;€NØÐ!Ø(6ˆÐ$Ñ%à�[Ñ Ø"-§/¡/°*Ó"=ˆ�JÑØÐr%   c                óÚ   — | r|r|st        d«      ‚t        |«      t        |«      xr t        |«      t        |«      xr t        |«      g}t        d„ |D «       «      dk7  rt        d«      ‚y)aÍ  
    Validate SAP AI Core credentials for completeness and consistency.

    Args:
        auth_url: OAuth2 token endpoint URL (required)
        base_url: SAP AI Core API base URL (required)
        client_id: OAuth2 client ID (required)
        client_secret: OAuth2 client secret (for secret-based auth)
        cert_str: PEM-encoded certificate string (for cert-based auth)
        key_str: PEM-encoded private key string (for cert-based auth)
        cert_file_path: Path to certificate file (for file-based cert auth)
        key_file_path: Path to private key file (for file-based cert auth)

    Raises:
        ValueError: If required fields are missing or authentication mode is ambiguous.

    Note:
        - This function does NOT validate resource_group (resolved separately).
        - Exactly one authentication method must be provided:
          * client_secret, OR
          * (cert_str AND key_str), OR
          * (cert_file_path AND key_file_path)
    zžSAP AI Core credentials not found. Please provide credentials by setting appropriate environment variables (e.g. AICORE_CLIENT_ID, AICORE_CLIENT_SECRET, etc.)c              3  ó2   K  — | ]  }t        |«      –— Œ y ­wr!   )Úbool)Ú.0Úms     r&   ú	<genexpr>z'validate_credentials.<locals>.<genexpr>W  s   è ø€ Ò
"�qŒ4��7Ñ
"ùs   ‚é   z�SAP AI Core credentials are incomplete. Invalid credentials: provide exactly one of client_secret, (cert_str & key_str), or (cert_file_path & key_file_path).N)r˜   r¶   Úsum)	rZ   rf   rV   rX   ro   ry   rm   rn   Úmodess	            r&   Úvalidate_credentialsr½   *  s   € ñB ™9©HÜðBó
ð 	
ô 	ˆ]ÓÜˆX‹Ò(œ4 ›=Üˆ^ÓÒ4¤ mÓ!4ð€Eô
 Ñ
"˜EÔ
"Ó" aÒ'ÜðIó
ð 	
ð (r%   c                ón  — d| dœ}|r||d<   d }	 |rPt        j                  |¬«      5 }t        |¬«      }|j                  |||¬«      }|j	                  «       }	d d d «       n.t        «       }|j                  |||¬«      }|j	                  «       }		d   }
t        |	j                  dd	«      «      }t        j                  t        j                  «      t        |¬
«      z   }d|
› �|fS # 1 sw Y   Œ`xY w# t        $ r8}|�|j                  nt        |dt!        |«      «      }t#        d|› �«      |‚d }~ww xY w)NÚclient_credentials)Ú
grant_typerV   rX   )Úcert)Úclient)ÚdataÚtimeoutÚaccess_tokenÚ
expires_ini  )ÚsecondszBearer ÚtextzToken request failed: )ÚhttpxÚClientr   Úpostr+   r   Úintr9   r   Únowr	   Úutcr   r>   rÈ   Úgetattrr*   ÚRuntimeError)rV   rZ   rÄ   Ú	cert_pairrX   rÃ   ÚrespÚ
raw_clientÚhandlerÚpayloadrÅ   rÆ   Úexpiry_dateÚeÚmsgs                  r&   Ú_request_tokenrÙ   _  s5  € ð "6ÀIÑN€DÙØ -ˆˆ_Ñà"&€DðBÙÜ—‘ 9Ô-ð &°Ü%¨ZÔ8�Ø—|‘| H°4À�|ÓI�ØŸ)™)›+�÷&ð &ô
 (Ó)ˆGØ—<‘< ¨t¸W�<ÓEˆDØ—i‘i“kˆGØ% nÑ5ˆÜ §¡¨L¸$Ó ?Ó@ˆ
Ü%Ÿ\™\¬(¯,©,Ó7¼)ÈJÔ:WÑWˆØ˜˜Ð'¨Ð4Ð4÷&ð &ûô ò BØ"&Ð"2�T—Y’Y¼ÀÀ6Ì3ÈqË6Ó8RˆÜÐ3°C°5Ð9Ó:ÀÐAûðBús/   �C3 ¨1C'ÁBC3 Ã'C0Ã,C3 Ã3	D4Ã<3D/Ä/D4g      >@é<   )rÄ   Úexpiry_buffer_minutesc          
     óÌ  ‡‡‡‡	‡
‡‡‡‡‡‡‡‡— t        d| |dœ|¤Ž}|j                  d«      Š	|j                  d«      }|j                  d«      Š|j                  d«      Š|j                  d«      Š|j                  d«      Š|j                  d«      Š
|j                  d	«      Št        ‰	|‰‰‰‰‰
‰«       t        «       Šd
Šd
Šdˆ	ˆ
ˆˆˆˆˆˆfd„Šdˆˆˆˆˆfd„}||d   |d   fS )aÍ  
    Creates a callable that fetches and caches an OAuth2 bearer token
    using credentials from `fetch_credentials()`.

    The callable:
      - Automatically loads credentials via fetch_credentials(profile, **overrides)
      - Fetches a new token only if expired or near expiry
      - Caches token thread-safely with a configurable refresh buffer

    Args:
        profile: Optional AICore profile name
        timeout: Timeout for HTTP requests
        expiry_buffer_minutes: Refresh the token this many minutes before expiry
        overrides: Any explicit credential overrides (client_id, client_secret, etc.)

    Returns:
        Callable[[], str]: function returning a valid "Bearer <token>" string.
    )r    r†   rZ   rf   rV   rX   ro   ry   rm   rn   Nc                 ót  •— ‰
rt        ‰‰	‰‰
¬«      S ‰rá‰rß‰j                  dd«      } ‰j                  dd«      }t        j                  «       5 }t        j
                  j                  |d«      }t        j
                  j                  |d«      }t        |d«      5 }|j                  | «       d d d «       t        |d«      5 }|j                  |«       d d d «       t        ‰‰	‰||f¬«      cd d d «       S ‰�‰�t        ‰‰	‰‰‰f¬«      S t        d«      ‚# 1 sw Y   ŒixY w# 1 sw Y   ŒOxY w# 1 sw Y   ŒAxY w)	N)rZ   rV   rÄ   rX   rs   rt   zcert.pemzkey.pemÚw)rZ   rV   rÄ   rÑ   zBInvalid authentication configuration: no valid credentials found. )
rÙ   rv   ÚtempfileÚTemporaryDirectoryr"   r3   Újoinr‚   Úwriter˜   )Úcert_str_fixedÚkey_str_fixedÚtmpÚ	cert_pathÚkey_pathrŠ   rZ   rm   ro   rV   rX   rn   ry   rÄ   s         €€€€€€€€r&   Ú_fetch_tokenz'get_token_creator.<locals>._fetch_token±  sD  ø€ áÜ!Ø!Ø#ØØ+ô	ð ñ ™Ø$,×$4Ñ$4°U¸DÓ$AˆNØ#*§?¡?°5¸$Ó#?ˆMÜ×,Ñ,Ó.ð °#Ü#%§7¡7§<¡<°°ZÓ#@�	Ü"$§'¡'§,¡,¨s°IÓ">�Ü˜) SÓ)ð ,¨QØ—G‘G˜NÔ+÷,ä˜( CÓ(ð +¨AØ—G‘G˜MÔ*÷+ä%Ø%Ø'Ø#Ø(¨(Ð3ô	÷ñ ð Ð%¨-Ð*CÜ!Ø!Ø#ØØ)¨=Ð9ô	ð ô Ð]Ó^Ð^÷',ð ,ú÷+ð +ú÷ð ús=   ÁAD.ÂDÂ.D.ÃD"ÃD.ÄD	ÄD.Ä"D+	Ä'D.Ä.D7c                 ó¾   •— ‰5  t        j                  t        j                  «      } ‰�‰�‰| z
  t	        ‰¬«      k  r
 ‰«       \  ŠŠ‰cd d d «       S # 1 sw Y   y xY w)N)Úminutes)r   rÍ   r	   rÎ   r   )rÍ   rè   rÛ   ÚlockÚtokenÚtoken_expirys    €€€€€r&   Ú	get_tokenz$get_token_creator.<locals>.get_tokenÖ  sX   ø€ àñ 	Ü!Ÿ™¤h§l¡lÓ3ˆCØˆ} Ð 4¸ÀsÑ8JÌYÐ_tÔMuÒ8uÙ&2£nÑ#��|Ø÷		÷ 	ò 	ús   „AAÁArœ   r$   )Úreturnútuple[str, datetime]©rï   r*   )r³   r9   r½   r   )r    r†   rÄ   rÛ   Ú	overridesr“   rf   rî   rè   rZ   rm   ro   rV   rX   rn   ry   rë   rì   rí   s     ``    @@@@@@@@@@@r&   Úget_token_creatorró   z  só   ÿü€ ô8 *;Ð)qÀ{Ð\cÑ)qÐgpÑ)q€Kà!—o‘o jÓ1€HØ!—o‘o jÓ1€HØ"—‘ {Ó3€IØ&Ÿ?™?¨?Ó;€MØ!—o‘o jÓ1€HØ —_‘_ YÓ/€GØ'ŸO™OÐ,<Ó=€NØ&Ÿ?™?¨?Ó;€Mô ØØØØØØØØô	ô “&€DØ€EØ$(€L÷#_ô #_÷Jñ ð �k *Ñ-¨{Ð;KÑ/LÐLÐLr%   rñ   )r2   zdict[str, Any] | strr3   zSequence[str]rï   r   )r:   r*   rï   údict[str, Any] | None)rï   rS   )rï   údict[str, Any])rD   r*   rï   rô   r!   )r†   rS   rï   rõ   )rK   r*   rï   r*   )r’   rJ   rï   údict[str, str])r™   úlist[Source]rï   rö   )r™   r÷   rï   rS   )r    ústr | dict | Nonerï   rô   )r    rø   r”   rQ   rï   rS   )NN)r    rø   r†   rS   rï   rö   )NNNNNNNN)rZ   rS   rf   rS   rV   rS   rX   rS   ro   rS   ry   rS   rm   rS   rn   rS   rï   ÚNone)rV   r*   rZ   r*   rÄ   Úfloatrï   rð   )
r    rø   r†   rS   rÄ   rú   rÛ   rÌ   rï   z"tuple[Callable[[], str], str, str]);Ú
__future__r   r+   r"   rß   Úcollections.abcr   r   Údataclassesr   r   r   r	   Úpathlibr
   Ú	threadingr   Útypingr   r   rÉ   r°   Úlitellm._loggingr   Ú&litellm.llms.custom_httpx.http_handlerr   r   r   rN   r   r   r   r   r   r   r3   rá   Ú
expanduserr   r'   r6   r<   r@   rB   rH   rJ   rQ   r|   r‹   r�   r•   rš   rž   r¡   r¦   r³   r½   rÙ   ró   r$   r%   r&   ú<module>r     sä  ðÞ "ã Û 	Û ß .Ý !ß 2Ñ 2Ý Ý ß ã ã Ý +ß Qà,Ð �eÓ ,à,Ð �UÓ ,Ø(Ð �5Ó (Ø)€�Ó )à.Ð �uÓ .Ø"*Ð ˜%Ó *Ø1Ð �UÓ 1àŸ7™7Ÿ<™<¨¯©×(:Ñ(:¸3Ó(?ÀÓKÐ �5Ó Kó;óó*óó7óð ÷2ð 2ó ð2ñ
 �$Ô÷5ð 5ó ð5ñ �[ -Ó0Ù�_Ð&7Ó8ÙØØÙwôñ
 ØØ%ÙYôñ
 ØØÙwôñ Ð%Ó&Ù�_Ó%á�ZÐ!1Ñ@`ÔaÙ�Y Ñ7WÔXð/4Ð Ð0ó ô6ó<$óó;óðØ"ðàóó0ð &*ØðFØ"ðFàðFð ó	FðT  ØØ Ø $ØØØ!%Ø $ð2
Øð2
àð2
ð ð2
ð ð	2
ð
 ð2
ð ð2
ð ð2
ð ð2
ð 
ó2
ðl RVðBØðBØ!ðBØ,1ðBàóBð8 &*ØðdMð Ø!#ñdMØ"ðdMàðdMð ð	dMð
 ðdMð (ôdMr%   