Ë
    uPêjþr ã                  óV  — U d Z ddlm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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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 ddlmZmZ ddl m!Z! ddlm"Z" ddlm#Z# dd	l$m%Z%m&Z&m'Z' dd
l(m)Z) ddl*Z*ddl+Z+ddl,Z,ddl-Z-ddl+m.Z. ddl/m0Z0 ddl1m2Z2m3Z3 ddl4m5Z5 ddl6m7Z7 ddl-m8Z8 ddl9m:Z: ddl;Z;ddl<Z;ddl=Z;ddl>m?Z? ddl@mAZAmBZBmCZC ddlDmEZE ddlFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZSmTZTmUZUmVZVmWZW ddlXmYZY daZda[da\da]d„ Z^ ed¬«      �d{d„«       Z_�d|d„Z`d„ Zad„ Zbd„ Zcdadd„ ZeddlfmgZgmhZhmiZimjZjmkZkmlZlmmZmmnZn dd lompZpmqZqmrZrmsZsmtZtmuZumvZvmwZwmxZxmyZymzZzm{Z{m|Z|m}Z}m~Z~mZm€Z€m�Z�m‚Z‚mƒZƒm„Z„m…Z…m†Z†m‡Z‡mˆZˆm‰Z‰mŠZŠm‹Z‹mŒZŒm�Z�mŽZŽm�Z�m�Z�m‘Z‘ eqD � ci c]  } | �j$                  | “Œ c} Z“d!e”d"<   	  e!�j*                  d#«      �j-                  d$«      �j/                  d%d&¬'«      5 Z˜ e�j2                  e˜«      Zšddd«        e�j>                  eš«      Z ddl¡Z dd(l¢m£Z£m¤Z¤m¥Z¥m¦Z¦ dd)l§m¨Z¨m©Z©mªZªm«Z«m¬Z¬m­Z­m®Z®m¯Z¯ dd*l;m°Z± dd+l²m³Z³m´Z´ e¨�rÞ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¿mÀZÀmÁZÁ dd0lÂmÃZÃ dd1lÄmÅZÅmÆZÆ dd2lÇmÈZÈ dd3lÉmÊZÊmËZË dd4lÌmÍZÍmÎZÎ dd5lÏmÐZÐ dd6lÑmÒZÒ dd7lÓmÔZÔmÕZÕmÖZÖm×Z×mØZØ dd8lÙmÚZÚ dd9lÛmÜZÜ dd:lÝmÞZÞ dd;lßmàZàmáZá dd<lâmãZã dd=lämåZåmæZæ dd>lçmèZè dd?lémêZê dd@lëmìZì ddAlímîZî ddBlïmðZð ddClñmòZò ddDlómôZô ddElõmöZö ddFl÷møZø ddGlùmúZú ddHlûmüZü ddIlýmþZþ ddJlÿ�m �Z  ddK�l�m�Z ddL�l�m�Z ddM�l�m�Z ddN�l�m�Z ddO�l	�m
�Z
 ddP�l�m�Z ddQ�l�m�Z ddR�l�m�Z ddS�l�m�Z ddT�l�m�Z ddU�l�m�Z ddV�l�m�Z ddW�l�m�Z ddX�l�m�Z ddY�l�m�Z ddZ�l�m �Z  dd[�l!�m"�Z" dd\�l#�m$�Z$ dd]�l%�m&�Z& dd^�l'�m(�Z(�m)�Z) dd_�l*�m+�Z+ dd`�l,�m-�Z- dda�l.�m/�Z/�m0�Z0 ddb�l1�m2�Z2�m3�Z3 ddclf�m4�Z4�m5�Z5�m6�Z6 ddd�l7�m8�Z8 dde�l9�m:�Z: ddf�l;�m<�Z< ddg�l=�m>�Z> ddh�l?�m@�Z@ ddi�lA�mB�ZB ddj�lC�mD�ZD ddk�lE�mF�ZF dldm�lG�mH�ZH�mI�ZI dldn�lJ�mK�ZK�mL�ZL�mM�ZM�mN�ZN�mO�ZO�mP�ZP dldo�lQ�mR�ZR�mS�ZS�mT�ZT�mU�ZU�mV�ZV�mW�ZW�mX�ZX�mY�ZY�mZ�ZZ�m[�Z[�m\�Z\�m]�Z]�m^�Z^�m_�Z_�m`�Z` e¨rddpl;�ma�Za d�Zbdqe”dr<   d�Zcdqe”ds<   d�add�Zedqe”dt<   d�Zfdqe”du<   d�Zgdqe”dv<   d�Zhdqe”dw<   d�Zidqe”dx<   d�Zjdqe”dy<   d�Zkdqe”dz<   d�Zldqe”d{<   d�Zmdqe”d|<   d�Zndqe”d}<   d�Zodqe”d~<   d�Zpdqe”d<   d�Zqdqe”d€<   d�Zrdqe”d�<   d�Zsdqe”d‚<   d�Ztdqe”dƒ<   d�Zudqe”d„<   d�Zvdqe”d…<   d�Zwdqe”d†<   d�Zxdqe”d‡<   d�Zydqe”dˆ<   g �azd‰e”dŠ<   d�a{i �Z|d‹e”dŒ<   i �Z}d‹e”d�<   d�Z~dqe”dŽ<   d�Zdqe”d�<   	 	 �d}	 	 	 �d~d‘„�Z€d’„ �Z��dd“„�Z‚	 	 	 	 �d€d”„�Zƒ	 	 	 	 �d€d•„�Z„�d�d–„�Z…�d‚d—„�Z†�dƒd˜„�Z‡	 	 	 	 �d„d™„�Zˆ�d…dš„�Z‰�d†d›„�ZŠ�d‡dœ„�Z‹�d‡d�„�ZŒ�dˆdž„�Z��d‰dŸ„�ZŽ�dŠd „�Z�d¡d¢œ	 	 	 	 	 	 	 	 	 	 	 	 	 �d‹d£„�Z�	 	 	 	 �dŒd¤„�Z‘�d�d¥„�Z’�dŽd¦„�Z“�d�d§„�Z”�d�d¨„�Z•	 	 	 	 	 	 	 	 �d‘d©„�Z–	 	 	 	 	 	 	 	 �d’dª„�Z—	 	 �d“d«„�Z˜d¬„ �Z™	 �d”	 	 	 	 	 �d•d­„�Zš �e›eq�j8                  eq�j:                  eq�j8                  �j$                  eq�j:                  �j$                  h«      �Zždqe”d®<   	 	 	 	 	 	 �d–d¯„�ZŸ�d—�d˜d°„�Z  eeI¬«      �d™d±„«       �Z¡�d™d²„�Z¢�dšd³„�Z£�d›�dœdµ„�Z¤	 	 	 	 �d�	 	 	 	 	 �džd¶„�Z¥�dŸd·„�Z¦�d �d¡d¸„�Z§�d¢d¹„�Z¨	 	 	 	 	 	 	 	 	 �d£	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 �d¤d»„�Z©�d¥d¼„�Zª�d¦d½„�Z«�d—�d¦d¾„�Z¬�d—�d¦d¿„�Z­�d¦dÀ„�Z®�d—�d¦dÁ„�Z¯�d—�d¦dÂ„�Z°�d—�d¦dÃ„�Z±�d—�d¦dÄ„�Z²�d§dÅ„�Z³�d¨dÆ„�Z´�d©dÇ„�Zµ�d¨dÈ„�Z¶�d—�d¦dÉ„�Z·�d—�d¦dÊ„�Z¸�d—�d¦dË„�Z¹�d—�d¦dÌ„�Zº�d—�d¦dÍ„�Z»�d—�d¦dÎ„�Z¼�d—�d¦dÏ„�Z½�d—�d¦dÐ„�Z¾�d—�d¦dÑ„�Z¿�d—�dªdÒ„�ZÀ�d—�d¦dÓ„�ZÁ�d«dÔ„�ZÂdÕ„ �ZÃdÖ�ZÄdqe”d×<   dØ�ZÅdqe”dÙ<   �d¬dÚ„�ZÆ�d­dÛ„�ZÇi �ZÈdÜe”dÝ<    G dÞ„ dß«      �ZÉ�d®dà„�ZÊ�d¯dá„�ZËd¡ddâœ	 	 	 	 	 �d°dã„�ZÌ�d�dä„�ZÍ�d±då„�ZÎ	 	 	 	 	 	 �d²	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 �d³dæ„�ZÏ�d´dç„�ZÐ	 	 	 	 	 	 	 	 	 	 	 	 �dµ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 �d¶dè„�ZÑ	 	 	 	 	 	 	 �d·	 	 	 	 	 	 	 	 	 	 	 	 	 �d¸dé„�ZÒdê„ �ZÓdë„ �ZÔ�d¹dì„�ZÕ�dºdí„�ZÖ�d»dî„�Z×�d¥dï„�ZØ G dð„ dñ«      �ZÙ	 	 	 �d¼	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 �d½dò„�ZÚ�d¾dó„�ZÛ�d¿dô„�ZÜ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 �dÀ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 �dÁdõ„�ZÝ	 �d—	 	 	 	 	 	 	 	 	 	 	 �dÂdö„�ZÞ�dÃd÷„�Zß �e›h dø£«      �Zàdqe”dù<   �dÄdú„�Zá�dÅdû„�Zâ	 	 	 	 	 	 	 	 	 	 �dÆdü„�Zã�dÇdý„�Zä�d—�dÈdþ„�Zå	 �d—	 	 	 	 	 �dÉdÿ„�Zæ�dÊ�d „�Zç�dË�d„�Zè�dÌ�d„�Zé�dÌ�d„�Zê�dÍ�d„�Zë�dÎ�d„�Zì�dÏ�d„�Zí�dÐ�d„�Zî�dÑ�d„�Zï�dÒ�d	„�Zð�d
„ �Zñ�dÓ�d„�Zò�dÔ�d„�Zó�dÔ�d„�Zô�dÕ�d„�Zõ�dÖ�d„�Zöd�a÷�de”�d<   d�aødºe”�d<   �d×�d„�Zù�d¯�d„�Zú�dØ�d„�Zû	 	 	 	 �dÙ�d„�Zü	 	 	 	 �dÙ�d„�Zý�dÚ�d„�Zþ�dÛ�d„�Zÿ�dÜ�d„�Z d�d�l�m�Z�m�Z  G �d„ �d�e«      �Z	 	 	 	 	 	 	 	 �dÝ�d„�Z�dÞ�d„�Z�dß�d „�Z eeI¬«      	 �d—	 	 	 	 	 	 	 �dà�d!„«       �Z�dá�d"„�Z		 	 	 	 �dâ�d#„�Z
 e�j                  �d$«      �Zdqe”�d%<   	 	 	 �dã	 	 	 	 	 	 	 	 	 �dä�d&„�Z	 	 	 �dã	 	 	 	 	 	 	 	 	 �då�d'„�Z eeI¬«      	 	 �dæ	 	 	 	 	 	 	 �dç�d(„«       �Z	 	 	 �dã	 	 	 	 	 	 	 	 	 �då�d)„�Z�e�j"                  �e�_        �e�j$                  �e�_        �dè�d*„�Z�dé�d+„�Z�d,„ �Z	 	 	 	 	 �dê	 	 	 	 	 	 	 	 	 	 	 �dë�d-„�Z�dì�d.„�Z�d/„ �Z	 	 	 	 �dí	 	 	 	 	 	 	 	 	 �dî�d0„�Z�d1„ �Z�d2„ �Z�dï�d3„�Z�dð�d4„�Z	 �d—	 �dñ�d5„�Z	 	 �dò	 	 	 	 	 	 	 	 	 �dó�d6„�Zi d´d´i f	 	 	 	 	 	 	 	 	 �dô�d7„�Z  G �d8„ �d9«      �Z!�d—�dõ�d:„�Z"	 �d—	 	 	 �dö�d;„�Z#�dé�d<„�Z$�d=„ �Z%�d>„ �Z&�d?„ �Z'�d@„ �Z(�dA„ �Z)�d”�d÷�dB„�Z*deLd�df	 	 	 	 	 �dø�dC„�Z+d�dD�l,�m-�Z-  G �dE„ �dF�e-«      �Z. �e.«       �Z/dqe”�dG<   	 �d—	 	 	 �dù�dH„�Z0	 �d—	 	 	 	 	 	 	 �dú�dI„�Z1	 	 	 	 	 �dû	 	 	 	 	 	 	 	 	 	 	 �dü�dJ„�Z2�dK„ �Z3�dL„ �Z4�d—�dM„�Z5 G �dN„ �dO«      �Z6 G �dP„ �dQ«      �Z7 G �dR„ �dSe¤«      �Z8�dý�dT„�Z9�dþ�dU„�Z:�dÿ�dV„�Z;�d �dW„�Z<	 	 	 	 �d �dX„�Z=	 	 	 	 �d �dY„�Z>�d�dZ„�Z?d�d[lf�m@�Z@�mA�ZA�mB�ZB�mC�ZC�mD�ZD�mE�ZE �d�d\„�ZF�d�d]„�ZG�d�d^„�ZH�d�d_„�ZI	 	 	 	 �d�d`„�ZJ�d�da„�ZK�d�db„�ZL	 	 	 	 �d	�dc„�ZM�d—�d
�dd„�ZN edl¬«      �d�de„«       �ZO	 	 	 	 	 	 �d�df„�ZP G �dg„ �dh«      �ZQ	 �d	 	 	 	 	 �d�di„�ZR�d�dj„�ZS�d�dk„�ZT	 	 	 �dã	 	 	 	 	 	 	 	 	 	 	 �d�dl„�ZU�d�dm„�ZV�d�dn„�ZW�d�do„�ZX�d�dp„�ZY�d�dq„�ZZ	 	 	 	 �d�dr„�Z[�d»�ds„�Z\	 	 	 	 �d�dt„�Z]�d�du„�Z^�d�dv„�Z_�d�dw„�Z`�d�dx„�Za	 	 	 	 	 	 	 	 �d�dy„�Zb�d�dz„�Zcyc c} w # 1 sw Y   �Œ¼xY w# e›eœe�f$ rA  e!�j<                  d#d$«      5 Z˜ e�j2                  e˜«      Zšddd«       n# 1 sw Y   nxY wY �Œw xY w(  zGUtility helpers for LiteLLM core request handling and provider support.é    )ÚannotationsN)Ú	dataclassÚfield)Ú	lru_cacheÚwraps)Ú	resources)Úiscoroutine)ÚStringIO)ÚabspathÚdirnameÚjoin)ÚMappingProxyType)ÚProxy)Úget_environment_proxies)Ú_parsingÚ	_pydantic)ÚResponseFormat)Ú	BaseModel)ÚEncoding)Ú	Tokenizer)Úis_internal_call)Ú_get_default_encodingÚ_get_modified_max_tokensÚ_get_token_counter_new)Úuuid)Ú$DEFAULT_CHAT_COMPLETION_PARAM_VALUESÚDEFAULT_EMBEDDING_PARAM_VALUESÚDEFAULT_MAX_LRU_CACHE_SIZEÚ(DEFAULT_MINIMUM_PROMPT_CACHE_TOKEN_COUNTÚ/DEFAULT_REASONING_EFFORT_MEDIUM_THINKING_BUDGETÚDEFAULT_TRIM_RATIOÚFUNCTION_DEFINITION_TOKEN_COUNTÚHF_CONFIG_FETCH_TIMEOUT_SECONDSÚINITIAL_RETRY_DELAYÚJITTERÚMAX_RETRY_DELAYÚMAX_TOKEN_TRIMMING_ATTEMPTSÚ)MINIMUM_PROMPT_CACHE_TOKEN_COUNT_OVERRIDEÚNON_INFERENCE_CALL_TYPESÚOPENAI_EMBEDDING_PARAMSÚ,PROVIDERS_THAT_AUTHENTICATE_ON_PROVIDER_INFOÚTOOL_CHOICE_OBJECT_TOKEN_COUNT)Ú match_capability_generalizationsc                 ó*   — t         €ddlm}  | a t         S )z´
    Get cached CustomLogger class.
    Lazy imports on first call to avoid loading custom_logger at import time.
    Subsequent calls use cached class for better performance.
    r   ©ÚCustomLogger)Ú_CustomLoggerÚ"litellm.integrations.custom_loggerr0   r/   s    úR/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/utils.pyÚ_get_cached_custom_loggerr4   ]   s   € ô ÐÝCà$ˆÜÐó    ©Úmaxsizec                ó    — t        j                  | j                  «      j                  }d|v xs  t	        d„ |j                  «       D «       «      S )aP  
    Whether cls's async_post_call_failure_deployment_hook override accepts a
    fallback_depth keyword, cached per class so a signature the base class added after a
    subscriber's override was written (e.g. the PR's own earlier 3-arg proof-of-fix
    example) doesn't raise TypeError - swallowed at debug level - on every call.
    Úfallback_depthc              3  óh   K  — | ]*  }|j                   t        j                  j                  u –— Œ, y ­w©N)ÚkindÚinspectÚ	ParameterÚVAR_KEYWORD)Ú.0Úps     r3   ú	<genexpr>z:_accepts_fallback_depth_kwarg_for_class.<locals>.<genexpr>t   s&   è ø€ Ò,nÐYZ¨Q¯V©V´w×7HÑ7H×7TÑ7TÔ-TÑ,nùs   ‚02)r=   Ú	signatureÚ'async_post_call_failure_deployment_hookÚ
parametersÚanyÚvalues)ÚclsÚparamss     r3   Ú'_accepts_fallback_depth_kwarg_for_classrJ   k   sE   € ô ×%Ñ% c×&QÑ&QÓR×]Ñ]€FØ˜vÐ%Òn¬Ñ,nÐ^d×^kÑ^kÓ^mÔ,nÓ)nÐnr5   c                óV  — 	 t        | «      }|j                  |«      }|j                  j                  | j                  «       | j                  |_        | j
                  |_        | j                  |_        | j                  |_        | j                  |_        |S # t        $ r | cY S w xY w)a  
    A same-class copy of exception that skips __init__ (many litellm exceptions require
    constructor args beyond what .args carries, so copy.copy's pickle-based reconstruction
    fails on them). Handed to failure-hook callbacks instead of the live object so a
    callback setting e.g. exception.status_code cannot change the status code the real
    caller actually receives. Falls back to the live object if snapshotting fails for a
    type this doesn't anticipate, since the real exception must still reach the callback.
    )
ÚtypeÚ__new__Ú__dict__ÚupdateÚargsÚ__traceback__Ú	__cause__Ú__context__Ú__suppress_context__Ú	Exception)Ú	exceptionrH   Úsnapshots      r3   Ú_snapshot_exception_for_hookrX   w   s—   € ðÜ˜)“_ˆØŸ+™+ cÓ*ˆØ×Ñ× Ñ  ×!3Ñ!3Ô4Ø!Ÿ™ˆŒØ!*×!8Ñ!8ˆÔØ&×0Ñ0ˆÔØ(×4Ñ4ˆÔð )2×(FÑ(FˆÔ%ØˆøÜò ØÒðús   ‚BB ÂB(Â'B(c                 ó*   — t         €ddlm}  | a t         S )zº
    Get cached CustomGuardrail class.
    Lazy imports on first call to avoid loading custom_guardrail at import time.
    Subsequent calls use cached class for better performance.
    r   ©ÚCustomGuardrail)Ú_CustomGuardrailÚ%litellm.integrations.custom_guardrailr[   rZ   s    r3   Ú_get_cached_custom_guardrailr^   �   s   € ô ÐÝIà*ÐÜÐr5   c                 ó*   — t         €ddlm}  | a t         S )zÀ
    Get cached CachingHandlerResponse class.
    Lazy imports on first call to avoid loading caching_handler at import time.
    Subsequent calls use cached class for better performance.
    r   ©ÚCachingHandlerResponse)Ú_CachingHandlerResponseÚlitellm.caching.caching_handlerra   r`   s    r3   Ú$_get_cached_caching_handler_responserd   ž   s   € ô Ð&ÝJà"8ÐÜ"Ð"r5   c                 ó*   — t         €ddlm}  | a t         S )z»
    Get cached LLMCachingHandler class.
    Lazy imports on first call to avoid loading caching_handler at import time.
    Subsequent calls use cached class for better performance.
    r   ©ÚLLMCachingHandler)Ú_LLMCachingHandlerrc   rg   rf   s    r3   Ú_get_cached_llm_caching_handlerri   ¬   s   € ô Ð!ÝEà.ÐÜÐr5   c                 ób   — t         €$ddl} | j                  j                  j                  a t         S )z¿
    Get cached audio_utils.utils module.
    Lazy imports on first call to avoid loading audio_utils.utils at import time.
    Subsequent calls use cached module for better performance.
    Nr   )Ú_audio_utils_moduleÚ,litellm.litellm_core_utils.audio_utils.utilsÚlitellm_core_utilsÚaudio_utilsÚutils)Úlitellms    r3   Ú_get_cached_audio_utilsrq   ¿   s+   € ô Ð"Û;à%×8Ñ8×DÑD×JÑJÐÜÐr5   )ÚAllMessageValuesÚAllPromptValuesÚChatCompletionAssistantToolCallÚ"ChatCompletionNamedToolChoiceParamÚChatCompletionToolParamÚ$ChatCompletionToolParamFunctionChunkÚOpenAITextCompletionUserMessageÚOpenAIWebSearchOptions)"ÚOPENAI_RESPONSE_HEADERSÚ	CallTypesÚChatCompletionDeltaToolCallÚChatCompletionMessageToolCallÚChoicesÚCostPerTokenÚCredentialItemÚCustomHuggingfaceTokenizerÚDeltaÚ	EmbeddingÚEmbeddingResponseÚ	FileTypesÚFunctionÚImageResponseÚLlmProvidersÚLlmProvidersSetÚLLMResponseTypesÚMessageÚ	ModelInfoÚModelInfoBaseÚModelResponseÚModelResponseStreamÚProviderFieldÚProviderSpecificModelInfoÚRawRequestTypedDictÚSandboxProvidersÚSearchProvidersÚSelectTokenizerResponseÚStreamingChoicesÚTextChoicesÚTextCompletionResponseÚTranscriptionResponseÚUsageÚall_litellm_paramszFinal[dict]Ú_CALL_TYPE_ENUM_MAPz%litellm.litellm_core_utils.tokenizerszanthropic_tokenizer.jsonÚrúutf-8)Úencoding)ÚCallableÚIterableÚMappingÚSequence)ÚTYPE_CHECKINGÚAnyÚFinalÚLiteralÚOptionalÚUnionÚcastÚget_args)ro   )ÚBaseLLMModelInfoÚtype_to_response_format_param)ra   rg   r/   )Úget_coroutine_checkerÚget_litellm_logging_classÚget_set_callbacks)Ú get_litellm_metadata_from_kwargsÚmap_finish_reasonÚprocess_response_headers)ÚCredentialAccessor)Údelete_nested_valueÚis_nested_path)Úexception_type)Ú*_get_base_model_from_litellm_call_metadataÚget_litellm_params)Ú_is_non_openai_azure_modelÚget_llm_provider)Úget_supported_openai_params)Ú_ensure_extra_body_is_safe)ÚLiteLLMResponseObjectHandlerÚ#_handle_invalid_parallel_tool_callsÚ convert_to_model_response_objectÚconvert_to_streaming_responseÚ#convert_to_streaming_response_async)Úget_api_base)Úget_formatted_prompt)Úget_response_headers)ÚResponseMetadataÚupdate_response_metadata)Ú_parse_content_for_reasoning)ÚLiteLLMLoggingObjectÚ(redact_message_input_output_from_logging)ÚRules©ÚCustomStreamWrapper)Úexecutor)ÚBaseAnthropicMessagesConfig)ÚBaseAudioTranscriptionConfig)ÚBaseBatchesConfig)ÚBaseContainerConfig)ÚBaseEmbeddingConfig)ÚBaseFilesConfig)Ú$BaseGoogleGenAIGenerateContentConfig)ÚBaseImageEditConfig)ÚBaseImageGenerationConfig)ÚBaseImageVariationConfig)ÚBaseOCRConfig)ÚBasePassthroughConfig)ÚBaseRealtimeHTTPConfig)ÚBaseRealtimeConfig)ÚBaseRerankConfig)ÚBaseSandboxConfig)ÚBaseSearchConfig©ÚBaseTextToSpeechConfig)ÚBaseVectorStoreConfig)ÚBaseVectorStoreFilesConfig)ÚBaseVideoConfig©ÚBedrockModelInfo)ÚAmazonNovaEmbeddingConfig)ÚAmazonTitanG1Config)Ú&AmazonTitanMultimodalEmbeddingG1Config)ÚAmazonTitanV2Config)ÚBedrockCohereEmbeddingConfig)Ú TwelveLabsMarengoEmbeddingConfig)ÚCohereModelInfo)ÚAsyncHTTPHandlerÚHTTPHandler)ÚMistralOCRConfig)ÚAllowedModelRegion)Ú!get_num_retries_from_retry_policyÚreset_retry_policy)ÚANTHROPIC_API_ONLY_HEADERSÚAnthropicThinkingParam)Ú ChatCompletionDeltaToolCallChunkÚChatCompletionToolCallChunkÚ#ChatCompletionToolCallFunctionChunk)ÚRerankResponse©ÚLiteLLM_Params)Ú
BaseConfig)ÚBaseTextCompletionConfig)ÚBaseEvalsAPIConfig)ÚBaseResponsesAPIConfig)ÚBaseSkillsAPIConfig)Ú
get_secreté   )Ú_is_debugging_onÚverbose_logger)ÚAzureBlobCacheÚCacheÚQdrantSemanticCacheÚ
RedisCacheÚRedisSemanticCacheÚS3Cache)ÚAPIConnectionErrorÚAPIErrorÚAuthenticationErrorÚBadRequestErrorÚBudgetExceededErrorÚContentPolicyViolationErrorÚContextWindowExceededErrorÚNotFoundErrorÚOpenAIErrorÚPermissionDeniedErrorÚRateLimitErrorÚServiceUnavailableErrorÚTimeoutÚUnprocessableEntityErrorÚUnsupportedParamsError)ÚMockExceptionr¦   Úsentry_sdk_instanceÚcapture_exceptionÚposthogÚ	slack_appÚalerts_channelÚheliconeLoggerÚathinaLoggerÚpromptLayerLoggerÚlangsmithLoggerÚlogfireLoggerÚweightsBiasesLoggerÚcustomLoggerÚlangFuseLoggerÚopenMeterLoggerÚ
lagoLoggerÚdataDogLoggerÚprometheusLoggerÚdynamoLoggerÚs3LoggerÚgreenscaleLoggerÚlunaryLoggerÚaispendLoggerÚsupabaseClientúlist[str] | NoneÚcallback_listzFinal[dict[str, str] | None]Úadditional_detailsÚlocal_cacheÚlast_fetched_atÚlast_fetched_at_keysFc                ó
  — 	 |dk(  rt        j                  | «       n5|dk(  rt        j                  | «       n|dk(  rt        j                  | «       t        j
                  du r|du rt        | «       y y y # t        $ r Y y w xY w)NÚDEBUGÚINFOÚERRORTF)r  ÚdebugÚinfoÚerrorrp   Úset_verboseÚprintrU   )Úprint_statementÚlogger_onlyÚ	log_levels      r3   Úprint_verboserD    s�   € ð

Ø˜ÒÜ× Ñ  Õ1Ø˜&Ò Ü×Ñ Õ0Ø˜'Ò!Ü× Ñ  Ô1Ü×Ñ $Ñ&¨;¸%Ñ+?Ü�/Õ"ð ,@Ð&øäò Ùðús   ‚A1A6 Á6	BÂBc                 ó  — t         j                  D ]q  } | d   t         j                  vr"t         j                  j                  | d   «       | d   t         j                  vsŒPt         j                  j                  | d   «       Œs y)z2
    Add custom_llm provider to provider list
    ÚproviderN)rp   Úcustom_provider_mapÚprovider_listÚappendÚ_custom_providers)Ú
custom_llms    r3   Úcustom_llm_setuprL  $  ss   € ô ×1Ñ1ò Eˆ
Ø�jÑ!¬×)>Ñ)>Ñ>Ü×!Ñ!×(Ñ(¨°JÑ)?Ô@à�jÑ!¬×)BÑ)BÒBÜ×%Ñ%×,Ñ,¨Z¸
Ñ-CÕDñEr5   c                ó�  — ddl m} ddlm} | t         j                  vr&t        j                  d| t         j                  «       y |t        || «      dd¬«      }|�rj|dk(  r¯t        |«      du r¢t         j                  j                  |«       t         j                  j                  |«       | t         j                  v rt         j                  j                  | «       | t         j                  v r t         j                  j                  | «       yy|d	k(  r°t        |«      du r¢t         j                  j!                  |«       t         j                  j#                  |«       | t         j$                  v rt         j$                  j                  | «       | t         j&                  v r t         j&                  j                  | «       yyyyy)
z<
    Add a custom logger callback to the specific event
    r   )Ú+_custom_logger_compatible_callbacks_literal)Ú$_init_custom_logger_compatible_classzMCallback %s is not a valid custom logger compatible callback. Known list - %sN©Úinternal_usage_cacheÚ
llm_routerÚsuccessFÚfailure)rp   rN  Ú*litellm.litellm_core_utils.litellm_loggingrO  Ú)_known_custom_logger_compatible_callbacksr  r<  rª   Ú0_custom_logger_class_exists_in_success_callbacksÚlogging_callback_managerÚadd_litellm_success_callbackÚ"add_litellm_async_success_callbackÚsuccess_callbackÚremoveÚ_async_success_callbackÚ0_custom_logger_class_exists_in_failure_callbacksÚadd_litellm_failure_callbackÚ"add_litellm_async_failure_callbackÚfailure_callbackÚ_async_failure_callback)ÚcallbackÚlogging_eventrN  rO  Úcallback_classs        r3   Ú-_add_custom_logger_callback_to_specific_eventrf  0  s  € õ Dõð ”w×HÑHÑHÜ×ÑØ[ØÜ×=Ñ=ô	
ð
 	á@ÜÐ8¸(ÓCØ!Øô€Nò Ø˜IÒ%Ô*ZÐ[iÓ*jÐnsÑ*sÜ×,Ñ,×IÑIÈ.ÔYÜ×,Ñ,×OÑOÐP^Ô_Øœ7×3Ñ3Ñ3Ü×(Ñ(×/Ñ/°Ô9Øœ7×:Ñ:Ñ:Ü×/Ñ/×6Ñ6°xÕ@ð ;à˜iÒ'Ô,\Ð]kÓ,lÐpuÑ,uÜ×,Ñ,×IÑIÈ.ÔYÜ×,Ñ,×OÑOÐP^Ô_Øœ7×3Ñ3Ñ3Ü×(Ñ(×/Ñ/°Ô9Øœ7×:Ñ:Ñ:Ü×/Ñ/×6Ñ6°xÕ@ð ;ð -vÐ'ð r5   c                ój   ‡ — t        ˆ fd„t        j                  t        j                  z   D «       «      S )aâ  
    Returns True if an instance of the custom logger exists in litellm.success_callback or litellm._async_success_callback

    e.g if `LangfusePromptManagement` is passed in, it will return True if an instance of `LangfusePromptManagement` exists in litellm.success_callback or litellm._async_success_callback

    Prevents double adding a custom logger callback to the litellm callbacks

    Matches on the exact class; an instance of a subclass does not count as registered
    c              3  óJ   •K  — | ]  }t        |«      t        ‰«      u –— Œ y ­wr;   ©rL   ©r@   Úcbre  s     €r3   rB   zC_custom_logger_class_exists_in_success_callbacks.<locals>.<genexpr>d  ó   øè ø€ Òu°BŒt�B‹xœ4 Ó/Ô/Ñuùó   ƒ #)rF   rp   r[  r]  ©re  s   `r3   rW  rW  X  ó(   ø€ ô Óu¼'×:RÑ:RÔU\×UtÑUtÑ:tÔuÓuÐur5   c                ój   ‡ — t        ˆ fd„t        j                  t        j                  z   D «       «      S )aâ  
    Returns True if an instance of the custom logger exists in litellm.failure_callback or litellm._async_failure_callback

    e.g if `LangfusePromptManagement` is passed in, it will return True if an instance of `LangfusePromptManagement` exists in litellm.failure_callback or litellm._async_failure_callback

    Prevents double adding a custom logger callback to the litellm callbacks

    Matches on the exact class; an instance of a subclass does not count as registered
    c              3  óJ   •K  — | ]  }t        |«      t        ‰«      u –— Œ y ­wr;   ri  rj  s     €r3   rB   zC_custom_logger_class_exists_in_failure_callbacks.<locals>.<genexpr>s  rl  rm  )rF   rp   ra  rb  rn  s   `r3   r^  r^  g  ro  r5   c                ó„   — | j                  d«      xs i }|j                  d«      xs i }|j                  d«      xs g }|S )z4
    Get the request guardrails from the kwargs
    ÚmetadataÚrequester_metadataÚ
guardrails©Úget)Úkwargsrs  rt  Úapplied_guardrailss       r3   Úget_request_guardrailsrz  v  sH   € ð —j‘j Ó,Ò2°€HØ (§¡Ð-AÓ BÒ HÀbÐØ 2× 6Ñ 6°|Ó DÒ JÈÐØÐr5   c                ó  — t        | «      }g }t        «       }t        j                  D ]W  }|€Œt	        ||«      sŒ|j
                  €Œ |j                  du s|j
                  |v sŒ=|j                  |j
                  «       ŒY |S )z\
    - Add 'default_on' guardrails to the list
    - Add request guardrails to the list
    T)rz  r^   rp   Ú	callbacksÚ
isinstanceÚguardrail_nameÚ
default_onrI  )rx  Úrequest_guardrailsry  r[   rc  s        r3   Úget_applied_guardrailsr�  €  s‡   € ô !7°vÓ >ÐØ "ÐÜ9Ó;€OÜ×%Ñ%ò GˆØÑ¤J¨x¸Õ$IØ×&Ñ&Ñ2Ø×&Ñ&¨$Ñ.°(×2IÑ2IÐM_Ò2_Ø&×-Ñ-¨h×.EÑ.EÕFð	Gð Ðr5   c                óø   — t        t        j                  t           d«      }| j	                  d«      }|rFt
        j                  r5 |j                  |«      }|j                  «       D ]  \  }}|| vsŒ|| |<   Œ yyy)zI
    Updates kwargs with the credentials if credential_name in kwarg
    r´   Úlitellm_credential_nameN)	ÚgetattrÚsysÚmodulesÚ__name__rw  rp   Úcredential_listÚget_credential_valuesÚitems)rx  r´   Úcredential_nameÚcredential_accessorÚkeyÚvalues         r3   Úload_credentials_from_listr�  ’  s~   € ô
 !(¬¯©´HÑ(=Ð?SÓ TÐà#ŸZ™ZÐ(AÓB€OÙœ7×2Ò2Ø;cÐ;M×;cÑ;cÐdsÓ;tÐØ-×3Ñ3Ó5ò 	$‰JˆC�Ø˜&Ò Ø#��s’ñ	$ð 3€r5   c                óh   — t         j                  j                  «       }| r|j                  | «       |S r;   )rp   r|  ÚcopyÚextend)Údynamic_callbacksÚreturned_callbackss     r3   Úget_dynamic_callbacksr•  ¡  s1   € ô !(× 1Ñ 1× 6Ñ 6Ó 8ÐÙØ×!Ñ!Ð"3Ô4ØÐr5   c                ót   — |dv r|dv r| duxr d| j                  «       v S y| duxr d| j                  «       v S )zJ
    Check if the target model is a Gemini or Vertex AI Gemini model.
    )ÚgeminiÚ	vertex_aiÚvertex_ai_beta©r˜  r™  Nr—  T©Úlower©ÚmodelÚcustom_llm_providers     r3   Ú_is_gemini_modelr   ª  sQ   € ð ÐGÑGàÐ"AÑAØ Ð$ÒB¨°U·[±[³]Ð)BÐBØð ˜ÐÒ: ¨U¯[©[«]Ð!:Ð:r5   c                ó8   — || v r| j                  |d«      d   S | S )z7
    Remove thought signature from a tool call ID.
    r  r   ©Úsplit)Útool_call_idÚ	separators     r3   Ú!_remove_thought_signature_from_idr¦  ¸  s*   € ð �LÑ Ø×!Ñ! )¨QÓ/°Ñ2Ð2ØÐr5   c                óÂ  — | j                  d«      }| j                  d«      }|dk(  r·t        |t        «      r§g }|D ]›  }t        |d«      r|j	                  «       }n3t        |t
        «      r|j                  «       }n|j                  |«       ŒSt        |j                  d«      t        «      r||d   v rt        |d   |«      |d<   |j                  |«       Œ� || d<   | S )zT
    Process assistant message to remove thought signatures from tool call IDs.
    ÚroleÚ
tool_callsÚ	assistantÚ
model_dumpÚid)
rw  r}  ÚlistÚhasattrr«  Údictr‘  rI  Ústrr¦  )Úmsg_copyÚthought_signature_separatorr¨  r©  Únew_tool_callsÚtcÚtc_dicts          r3   Ú%_process_assistant_message_tool_callsr¶  Á  sÕ   € ð —,‘,˜vÓ&€DØ Ÿ™ \Ó2€Jàˆ{Òœz¨*´dÔ;Ø "ˆØò 	+ˆBä�r˜<Ô(àŸ-™-›/‘Ü˜B¤Ô%ØŸ'™'›)‘à×%Ñ% bÔ)Øô ˜'Ÿ+™+ dÓ+¬SÔ1Ø.°'¸$±-Ñ?Ü$EÀgÈdÁmÐUpÓ$q�G˜D‘Mà×!Ñ! 'Õ*ð!	+ð" "0ˆ�Ñà€Or5   c                óž   — | j                  d«      dk(  r8t        | j                  d«      t        «      r|| d   v rt        | d   |«      | d<   | S )zM
    Process tool message to remove thought signature from tool_call_id.
    r¨  Útoolr¤  )rw  r}  r°  r¦  )r±  r²  s     r3   Ú_process_tool_message_idr¹  à  sV   € ð ‡|�|�FÓ˜vÒ%¬*°X·\±\À.Ó5QÔSVÔ*WØ&¨(°>Ñ*BÑBÜ'HØ˜Ñ(Ð*Eó(ˆH�^Ñ$ð €Or5   c                ó
  — g }| D ]{  }t        |d«      r|j                  «       }n3t        |t        «      r|j	                  «       }n|j                  |«       ŒSt        ||«      }t        ||«      }|j                  |«       Œ} |S )zG
    Remove thought signatures from tool call IDs in all messages.
    r«  )r®  r«  r}  r¯  r‘  rI  r¶  r¹  )Úmessagesr²  Úprocessed_messagesÚmsgÚmsg_dicts        r3   Ú(_remove_thought_signatures_from_messagesr¿  í  s‹   € ð !#Ðàò ,ˆä�3˜Ô%Ø—~‘~Ó'‰HÜ˜œTÔ"Ø—x‘x“z‰Hð ×%Ñ% cÔ*Øô 9¸ÐC^Ó_ˆô ,¨HÐ6QÓRˆà×!Ñ! (Õ+ð#,ð& Ðr5   c                ó2   — t        | dd«      }|� |«        yy)a  Call logging_obj._restore_correlation_context() if it's actually there.

    Some call sites (tests, narrow unit paths) inject a minimal stand-in
    object as litellm_logging_obj instead of a real Logging instance - this
    method is new plumbing specific to request_correlation_in_logs, not part
    of any pre-existing stand-in's expected interface. `object` (not `Any`)
    is deliberate: the getattr() below is exactly how this stays type-safe
    while still tolerating a stand-in that lacks the method.
    Ú_restore_correlation_contextN)r„  )Úlogging_objÚrestores     r3   Ú)_restore_correlation_context_if_supportedrÄ  	  s#   € ô ˜[Ð*HÈ$ÓO€GØÐÙ�	ð r5   c                ó&   — ddl m} t        | |«      S )aC  True if `result` is a lazy stream wrapper rather than an already-complete response.

    Only wrapper_async() consults this - it must NOT restore the originating
    Task's trace_id/session_id as soon as a streaming call returns this: the
    caller is about to iterate it over however many subsequent lines of their
    own code, and those log lines should still show this call's ids, not the
    pre-call ones. This is safe specifically because each async call already
    runs in its own asyncio Task with its own copy of the contextvars, so
    leaving it "open" can only affect that one Task, never a different,
    unrelated future request - Tasks, unlike a thread pool's worker threads,
    are never recycled across requests. The corresponding terminal handler
    (async_success_handler, dispatched once the full stream is actually
    assembled) is what restores it once streaming genuinely finishes.

    wrapper() (the sync path) does NOT consult this at all: sync calls pass
    supports_correlation_logging=False into function_setup()/Logging(), so
    they never stamp trace_id/session_id in the first place - a plain OS
    thread has no per-call isolation the way an asyncio Task does, and a
    thread pool's worker threads *are* recycled across unrelated requests, so
    stamping ids there without a safe restore mechanism could permanently
    misattribute a later, unrelated request's logs. Full sync support is
    deferred to a follow-up PR with its own restore mechanism; see
    Logging.__init__'s supports_correlation_logging parameter.

    Genuinely circular otherwise: utils.py -> streaming_handler.py ->
    redact_messages.py -> llms/vertex_ai/common_utils.py -> utils.py, which
    needs names (supports_response_schema, etc.) this module hasn't finished
    defining yet at that point in its own top-to-bottom execution.
    r   rÌ   )Ú,litellm.litellm_core_utils.streaming_handlerrÍ   r}  )ÚresultrÍ   s     r3   Ú&_is_streaming_response_for_correlationrÈ    s   € õ< Qä�fÐ1Ó2Ð2r5   T)Úis_async_callc               ó¾  ‡1— t         j                  du rt        j                  d«       d }	 t	        «        t        |«      }d|v r|d   nd }t        j                  }	 |	«       }
|j                  dd «      }t        |¬«      }t        |«      dkD  �r}|D �][  Š1t        ‰1t        «      rQt         j                  j                  j                  ‰1d d ¬«      Š1‰1�"t!        ˆ1fd„t         j"                  D «       «      rŒe‰1t         j$                  vrt         j$                  j'                  ‰1«       ‰1t         j(                  vrt         j*                  j-                  ‰1«       ‰1t         j.                  vrt         j*                  j1                  ‰1«       ‰1t         j"                  vrt         j*                  j3                  ‰1«       ‰1t         j4                  vs�Œ=t         j*                  j7                  ‰1«       �Œ^ t9        d	t         j"                  › �«       t        t         j$                  «      dkD  s8t        t         j(                  «      dkD  st        t         j.                  «      dkD  rŠt        t:        «      dk(  rxt=        t?        t         j$                  t         j(                  z   t         j.                  z   «      «      atA        tB        jD                  tF           d
«      }  |«       t:        |¬«       t        t         j$                  «      dkD  r”g }tI        t         j$                  «      D ]G  \  }Š1|
jK                  ‰1«      sŒt         jL                  j'                  ‰1«       |j'                  |«       ŒI tO        |«      D ]!  }t         j$                  j                  |«       Œ# t        t         j(                  «      dkD  rÿg }tI        t         j(                  «      D ]²  \  }Š1|
jK                  ‰1«      r1t         j*                  j3                  ‰1«       |j'                  |«       ŒH‰1dk(  s‰1dk(  r1t         j*                  j3                  ‰1«       |j'                  |«       Œƒ‰1t         jP                  v sŒ–t        ‰1t        «      sŒ§tS        ‰1d«       Œ´ tO        |«      D ]!  }t         j(                  j                  |«       Œ# t        t         j.                  «      dkD  rÄg }tI        t         j.                  «      D ]w  \  }Š1|
jK                  ‰1«      r1t         j*                  j7                  ‰1«       |j'                  |«       ŒH‰1t         jP                  v sŒ[t        ‰1t        «      sŒltS        ‰1d«       Œy tO        |«      D ]!  }t         j.                  j                  |«       Œ# d }d }d }d }|jU                  dd «      �´t        |d   t<        «      r¡g }tI        |d   «      D ]Y  \  }Š1|
jK                  ‰1«      s‰1dk(  s‰1dk(  sŒ"|�"t        |t<        «      r|j'                  ‰1«       n‰1g}|j'                  |«       Œ[ tO        |«      D ]  }|d   j                  |«       Œ |j                  d«      }|jU                  dd «      �$t        |d   t<        «      r|j                  d«      }tV        rf	 ddl,m-}  ||«      }t         j^                  r6|j                  dd «       |j                  dd «       |j                  dd «       tW        dd|› �d¬«       d|v r|d   a0t        |«      dkD  r|d   n|jU                  dd «      }| }|tb        jd                  jf                  k(  s;|tb        jh                  jf                  k(  s|tb        jj                  jf                  k(  �r£d }t        |«      dkD  r|d   }n|jU                  dd «      r|d   }t        jl                  } |jn                  «       r¡t        |t<        «      r‘t        |«      dkD  rƒt        |d   tp        «      rpd|d   v rits        «       }|D ]9  }|jU                  dd«      }|€Œt        |t        «      sŒ)|ju                  |«       Œ; |jw                  |jy                  «       |¬ «       t        |t<        «      �rºt        |«      dkD  �r«	 dd!l=m>} dd"l?m@} |jU                  d#«      }|s|r	  |||¬$«      \  } }} } tƒ        ||«      sTt        j„                  d%«       t‡        ||«      }!d|v r|!|d<   n)t        |«      dkD  rt=        |«      }"|!|"d<   t‰        |"«      }�n|tb        jŠ                  jf                  k(  s|tb        jŒ                  jf                  k(  r't        |«      dkD  r|d   n|jU                  dd «      }�n¶|tb        jŽ                  jf                  k(  s|tb        j�                  jf                  k(  rt        |«      dkD  r|d   n|d   }�nb|tb        j’                  jf                  k(  s|tb        j”                  jf                  k(  rt        |«      dkD  r|d   n|d   }�n|tb        j–                  jf                  k(  s|tb        j˜                  jf                  k(  rt        |«      dkD  r|d   n|d   }�nº|tb        jš                  jf                  k(  s|tb        jœ                  jf                  k(  r|jU                  d'«      }�nm|tb        jž                  jf                  k(  s|tb        j                   jf                  k(  rLt        |«      dkD  r|d   n|d(   }$t£        «       }%|%j¥                  |$¬)«      }&d*|v r	|&|d*   d+<   nd+|&i|d*<   |&}�nç|tb        j¦                  jf                  k(  s|tb        j¨                  jf                  k(  r|jU                  dd,«      }�n™|tb        jª                  jf                  k(  s|tb        j¬                  jf                  k(  r:t        |«      dkD  r|d   n$|jU                  d«      xs |jU                  dd-«      }�n%|tb        j®                  jf                  k(  sW|tb        j°                  jf                  k(  s:|tb        j²                  jf                  k(  s|tb        j´                  jf                  k(  r¤	 dd.l[m\}' dd/l]m^}( t        |«      dkD  r|d   n|jU                  d0«      })t        |«      dkD  r|d   n|jU                  dd«      }*|)rI |'«       }+|+j¿                  |*|)|jU                  d1«      ¬2«      },|,jU                  dg «      }- |(|-«      xs d-}nd-}n|tÀ        v rg }nd-}d4}.tÃ        ||¬5«      rd}.tA        tB        jD                  tF           d6«      }/  |/«       |||.|d7   |jU                  d8«      |xs d|||||||||¬9«      }d:di}0d*|v r|d*   |0d*<   d;|v rBt        |d;   tp        «      r/|d;   |0d;<   |0jU                  d*«      s|d;   jÅ                  «       |0d*<   |jÇ                  |di |0|jU                  d<d «      ¬=«       ||fS # t\        $ r |}Y �Œ‹w xY w# t\        $ r Y �Œ{w xY w# t\        $ r!}#t        j                  d&|#«       Y d }#~#�Œ+d }#~#ww xY w# t\        $ r#}#t        j„                  d3|#«       d-}Y d }#~#�ŒZd }#~#ww xY w# t\        $ r)}#|�tÉ        |«       t        jÊ                  d>«       |#‚d }#~#ww xY w)?NTze`litellm.set_verbose` is deprecated. Please set `os.environ['LITELLM_LOG'] = 'DEBUG'` for debug logs.r¬  r|  )r“  r   rP  c              3  óJ   •K  — | ]  }t        |«      t        ‰«      u –— Œ y ­wr;   ri  )r@   rk  rc  s     €r3   rB   z!function_setup.<locals>.<genexpr>g  s#   øè ø€ ò /Ø79œ˜R›¤D¨£NÔ2ñ/ùrm  z8Initialized litellm callbacks, Async Success Callbacks: r°   )r3  Úfunction_idÚdynamodbÚ	openmeterrS  rT  r[  Ús3ra  )Úsafe_deep_copyr»  ÚinputÚpromptzlitellm.llm_callzKeyword Args: r=  )ÚcategoryÚmessageÚlevelÚ	logger_fnrž  r  ÚcontentÚ ©rÑ  rž  )r»   )ÚTHOUGHT_SIGNATURE_SEPARATORrŸ  r�  zCRemoving thought signatures from tool call IDs for non-Gemini modelz8Error removing thought signatures from tool call IDs: %sÚqueryÚfile)Úfile_objrs  Úfile_checksumÚspeechzdefault-message-value)ÚGoogleGenAIAdapter)Úget_last_user_messageÚcontentsÚconfig)rž  râ  rã  z2Error extracting messages from Google contents: %sF©rx  Ú	call_typer¯   Úlitellm_call_idÚlitellm_trace_id)rž  r»  Ústreamræ  rç  rÌ  rå  Ú
start_timeÚdynamic_success_callbacksÚdynamic_failure_callbacksÚdynamic_async_success_callbacksÚdynamic_async_failure_callbacksrx  ry  Úsupports_correlation_loggingÚapi_baseÚlitellm_metadataÚstream_options)rž  ÚuserÚoptional_paramsÚlitellm_paramsrñ  zKlitellm.utils.py::function_setup() - [Non-Blocking] Error in function_setup)frp   r?  r  ÚwarningrL  r�  Úlitellm_utilsr®   Úpopr•  Úlenr}  r°  rm   Úlitellm_loggingrO  rF   r]  Úinput_callbackrI  r[  rX  rY  ra  r_  rZ  rb  r`  rD  r3  r­  Úsetr„  r…  r†  r‡  Ú	enumerateÚis_async_callableÚ_async_input_callbackÚreversedrV  rf  rw  Úadd_breadcrumbÚ'litellm.litellm_core_utils.core_helpersrÐ  rU   Úturn_off_message_loggingÚuser_logger_fnr{   Ú
completionrŽ  ÚacompletionÚanthropic_messagesrË   Úhas_pre_call_rulesr¯  r
   ÚwriteÚpre_call_rulesÚgetvalueÚ1litellm.litellm_core_utils.get_llm_provider_logicr»   Ú3litellm.litellm_core_utils.prompt_templates.factoryrÚ  r   r<  r¿  ÚtupleÚ	embeddingÚ
aembeddingÚimage_generationÚaimage_generationÚ
moderationÚamoderationÚatext_completionÚtext_completionÚrerankÚarerankÚatranscriptionÚtranscriptionrq   Úget_audio_file_content_hashÚaspeechrß  Ú
aresponsesÚ	responsesÚgenerate_contentÚagenerate_contentÚgenerate_content_streamÚagenerate_content_streamÚ,litellm.google_genai.adapters.transformationrà  Ú8litellm.litellm_core_utils.prompt_templates.common_utilsrá  Ú(translate_generate_content_to_completionr)   Ú_is_streaming_requestr‘  Úupdate_environment_variablesrÄ  rV   )2Úoriginal_functionÚ	rules_objré  rÉ  rP   rx  rÂ  ry  rÌ  Úget_coroutine_checker_fnÚcoroutine_checkerr“  Úall_callbacksr°   Úremoved_async_itemsÚindexrê  rì  rë  rí  rÐ  Údetails_to_logrž  rå  r»  rË   ÚbufferÚmr×  r»   rÚ  rŸ  Ú_r¼  Ú	args_listÚeÚ	_file_objrn   rÞ  rà  rá  Úcontents_paramÚmodel_paramÚadapterÚtransformedÚtransformed_messagesrè  r¯   rô  rc  s2                                                    @r3   Úfunction_setupr:  <  s¬  ø€ ô ×Ñ˜dÑ"Ü×ÑØsô	
ð 04€KðOô 	Ôô %;¸6Ó$BÐð :>À¹¨°ªÈTˆô +8×*MÑ*MÐ Ù#;Ó#=Ðð PVÏzÉzÐZeÐgkÓOlÐÜ4ÐGXÔYˆäˆ}Ó Ó!Ø)ó b�ä˜h¬Ô,Ü&×9Ñ9×IÑI×nÑnØ Ø-1Ø#'ð  oó  �Hð
  Ð'¬3ó /Ü=D×=\Ñ=\ô/ô ,ð !Ø¤7×#9Ñ#9Ñ9Ü×*Ñ*×1Ñ1°(Ô;Ø¤7×#;Ñ#;Ñ;Ü×4Ñ4×QÑQÐRZÔ[Ø¤7×#;Ñ#;Ñ;Ü×4Ñ4×QÑQÐRZÔ[Ø¤7×#BÑ#BÑBÜ×4Ñ4×WÑWÐX`ÔaØ¤7×#BÑ#BÓBÜ×4Ñ4×WÑWÐX`Öað+bô, ÐTÔU\×UtÑUtÐTuÐvÔwô ”×&Ñ&Ó'¨!Ò+¬s´7×3KÑ3KÓ/LÈqÒ/PÔTWÔX_×XpÑXpÓTqÐtuÒTuÜ”-Ó  AÒ%Ü ¤¤W×%;Ñ%;¼g×>VÑ>VÑ%VÔY`×YqÑYqÑ%qÓ!rÓsˆMÜ'.¬s¯{©{¼8Ñ/DÐFYÓ'ZÐØÑÓ¬mÈÕUäŒw×%Ñ%Ó&¨Ò*Ø"$ÐÜ#,¬W×-CÑ-CÓ#Dò 6‘��xØ$×6Ñ6°xÕ@Ü×1Ñ1×8Ñ8¸ÔBØ'×.Ñ.¨uÕ5ð6ô "Ð"5Ó6ò 2�Ü×&Ñ&×*Ñ*¨5Õ1ð2äŒw×'Ñ'Ó(¨1Ò,Ø"$ÐÜ#,¬W×-EÑ-EÓ#Fò 
W‘��xØ$×6Ñ6°xÔ@Ü×4Ñ4×WÑWÐX`ÔaØ'×.Ñ.¨uÕ5Ø Ò+¨x¸;Ò/Fô ×4Ñ4×WÑWÐX`ÔaØ'×.Ñ.¨uÕ5Ø¤×!RÑ!RÒRÔWaÐbjÔloÕWpÜAÀ(ÈIÕVð
Wô "Ð"5Ó6ò 4�Ü×(Ñ(×,Ñ,¨UÕ3ð4ô Œw×'Ñ'Ó(¨1Ò,Ø"$ÐÜ#,¬W×-EÑ-EÓ#Fò W‘��xØ$×6Ñ6°xÔ@Ü×4Ñ4×WÑWÐX`ÔaØ'×.Ñ.¨uÕ5Ø¤×!RÑ!RÒRÔWaÐbjÔloÕWpÜAÀ(ÈIÕVðWô "Ð"5Ó6ò 4�Ü×(Ñ(×,Ñ,¨UÕ3ð4ð QUÐ!ØVZÐ'ØPTÐ!Ø]aÐ'Ø�:‰:Ð(¨$Ó/Ð;Ä
È6ÐRdÑKeÔgkÔ@lØ"$ÐÜ#,¨VÐ4FÑ-GÓ#Hò 6‘��xØ$×6Ñ6°xÔ@ÀHÐPZÒDZÐ^fÐjnÓ^nØ6ÐBÄzØ7¼ôHð 8×>Ñ>¸xÕHà;C¸*Ð7Ø'×.Ñ.¨uÕ5ð6ô "Ð"5Ó6ò 6�ØÐ)Ñ*×.Ñ.¨uÕ5ð6à(.¯
©
Ð3EÓ(FÐ%Ø�:‰:Ð(¨$Ó/Ð;Ä
È6ÐRdÑKeÔgkÔ@lØ(.¯
©
Ð3EÓ(FÐ%åð(ÝRá!/°Ó!7�ô ×/Ò/à×"Ñ" :¨tÔ4Ø×"Ñ" 7¨DÔ1Ø×"Ñ" 8¨TÔ2ÜØ+Ø(¨Ð(8Ð9Øõð
 ˜&Ñ Ø# KÑ0ˆNä"% d£)¨a¢-�t˜A’w°V·Z±ZÀÈÓ5NˆØ,ˆ	àœ×-Ñ-×3Ñ3Ò3ØœI×1Ñ1×7Ñ7Ò7ØœI×8Ñ8×>Ñ>Ó>àˆHÜ�4‹y˜1Š}Ø ™7‘Ø—‘˜J¨Ô-Ø! *Ñ-�ä(×.Ñ.ˆEà(�×(Ñ(Ô*Ü˜x¬Ô.Ü˜“M AÒ%Ü˜x¨™{¬DÔ1Ø ¨!¡Ñ,ä (£
�Ø!ò .�AØŸe™e I¨rÓ2�GØÑ*¬z¸'Ä3Õ/GØŸ™ WÕ-ð.ð
 ×(Ñ(Ø Ÿ/™/Ó+Øð )ô ô ˜(¤DÕ)¬c°(«m¸aÓ.?ð)jõõð
 +1¯*©*Ð5JÓ*KÐ'ñ /±5ð!Ù;KØ&+Ø4Gô<Ñ8˜AÐ2°A°qô ,¨EÐ3FÔGÜ&×,Ñ,Ð-rÔsô 5]Ø$Ð&Aó5Ð*ð
 &¨Ñ/Ø1C˜F :Ò.Ü  ›Y¨š]Ü/3°D«z˜IØ+=˜I a™LÜ#(¨Ó#3˜Dùð
 œ)×-Ñ-×3Ñ3Ò3°yÄI×DXÑDX×D^ÑD^Ò7^Ü"% d£)¨a¢-�t˜A’w°V·Z±ZÀÈÓ5NŠHØœ)×4Ñ4×:Ñ:Ò:¸iÌ9×KfÑKf×KlÑKlÒ>lÜ"% d£)¨a¢-�t˜A’w°V¸HÑ5EŠHØœ)×.Ñ.×4Ñ4Ò4¸	ÄY×EZÑEZ×E`ÑE`Ò8`Ü"% d£)¨a¢-�t˜A’w°V¸G±_ŠHØœ)×4Ñ4×:Ñ:Ò:¸iÌ9×KdÑKd×KjÑKjÒ>jÜ"% d£)¨a¢-�t˜A’w°V¸HÑ5EŠHØœ)×*Ñ*×0Ñ0Ò0°IÄ×ARÑAR×AXÑAXÒ4XØ—z‘z 'Ó*ŠHØœ)×2Ñ2×8Ñ8Ò8¸IÌ×I`ÑI`×IfÑIfÒ<fÜ58¸³YÀ²]¨$¨qª'ÈÈvÉˆIä!8Ó!:ˆKØ#.×#JÑ#JÐT]Ð#JÓ#^ˆMØ˜VÑ#Ø6C��zÑ" ?Ò3à&5°}Ð%E��zÑ"Ø$ŠHØœ)×+Ñ+×1Ñ1Ò1°YÄ)×BRÑBR×BXÑBXÒ5XØ—z‘z '¨8Ó4ŠHØœ)×.Ñ.×4Ñ4Ò4¸	ÄY×EXÑEX×E^ÑE^Ò8^ô ˜t›9 qš=��Q’¨f¯j©j¸Ó.AÒ.tÀVÇZÁZÐPZÐ\sÓEtò ð œ×3Ñ3×9Ñ9Ò9ØœI×7Ñ7×=Ñ=Ò=ØœI×=Ñ=×CÑCÒCØœI×>Ñ>×DÑDÒDð3õõô 47°t³9¸q²=¨¨QªÀfÇjÁjÐQ[ÓF\�Ü58¸³YÀ²]¨$¨qª'ÈÏ
É
ÐSZÐ\^ÓH_�á!Ù%7Ó%9�GØ)0×)YÑ)YØ)Ø!/Ø%Ÿz™z¨(Ó3ð *Zó *�Kð
 3>·/±/À*ÈbÓ2QÐ(Ù4Ð5IÓJÒeÐNe‘Hà6�Høð Ô2Ñ2Ø‰Hà.ˆHØˆÜ ØØõ
ð ˆFÜ+2´3·;±;¼xÑ3HÐJeÓ+fÐ!à1Ñ/Ó1ØØØØ"Ð#4Ñ5Ø#ŸZ™ZÐ(:Ó;Ø#Ò) rØØ!Ø&?Ø&?Ø,KØ,KØØ1Ø)6ô
ˆð& 5?ÀÐ3CˆØ˜ÑØ)/°
Ñ);ˆN˜:Ñ&Ø Ñ'¬J°vÐ>PÑ7QÔSWÔ,XØ17Ð8JÑ1KˆNÐ-Ñ.ð
 "×%Ñ% jÔ1Ø-3Ð4FÑ-G×-LÑ-LÓ-N�˜zÑ*à×0Ñ0ØØØØ)Ø!Ÿ:™:Ð&6¸Ó=ð 	1ô 	
ð ˜FÐ"Ð"øôW ò (Ø!'“ð(ûôN  )ò !â ð!ûô* !ò jä"×*Ñ*Ð+eÐgh×iÒiûðjûôt ò 3Ü×$Ñ$Ð%YÐ[\Ô]Ø2–ûð3ûôl ò ð Ð"Ü5°kÔBÜ× Ñ Ð!nÔoØˆûðúsõ   ¬F!z* ÇE*z* Ì:D-z* Ñ(z* Ñ9Cz* Õz* ÕBz* ×5B+z* Ú!x, Ú/Fz* à8z* á	Az* â!y ã x> ãA y ä/M(z* òB"y; ô:C1z* ø,x;ø7z* ø:x;ø;z* ø>	yùy ù
yùy ù	y8ùy3ù-z* ù3y8ù8z* ù;	z'úz"úz* ú"z'ú'z* ú*	{ú3${û{c              ƒ  óÂ   K  — |du rWt        d| j                  › �«       ddlm} |j	                  | j                  |||¬«      ¬«       | j                  |||¬«       y y ­w)NFz>Async Wrapper: Completed Call, calling async_success_handler: r   )ÚGLOBAL_LOGGING_WORKER©rÇ  ré  Úend_time)Úasync_coroutine)rD  Úasync_success_handlerÚ)litellm.litellm_core_utils.logging_workerr<  Úensure_initialized_and_enqueueÚ-handle_sync_success_callbacks_for_async_calls)rÂ  rÇ  ré  r>  Úis_completion_with_fallbacksr<  s         r3   Ú_client_async_logging_helperrE  œ  s}   è ø€ ð 	%¨Ñ-äØLÈ[×MnÑMnÐLoÐpô	
õ 	Tà×<Ñ<Ø'×=Ñ=ÀVÐXbÐmuÐ=Óvð 	=ô 	
ð 	×AÑAØØ!Øð 	Bõ 	
ð# 	.ùs   ‚AAc                ó&  — | j                  dd«      }|€t        j                  }| j                  dd«      rXt        t        j
                  t           d«      }t        j                  } ||| j                  d«      ¬«      } |«       | d<   |�|}|| fS )zm
    Get the number of retries from the kwargs and the retry policy.
    Used for the wrapper functions.
    Únum_retriesNÚretry_policyrò   ©rV   rH  )	rw  rp   rG  r„  r…  r†  r‡  rö  ró   )rx  rV   rG  rò   ró   Úretry_policy_num_retriess         r3   Ú_get_wrapper_num_retriesrK  ¼  s›   € ð —*‘*˜]¨DÓ1€KØÐÜ×)Ñ)ˆØ‡z�z�. $Ô'ÜNUÜ�K‰KœÑ!Ð#FóO
Ð)ô %2×$DÑ$DÐÙ6WØØŸ™ NÓ3ô7
Ð ñ "4Ó!5ˆˆ~ÑØ#Ð/Ø2ˆKà˜ÐÐr5   c                ó|   — t        t        t        z  t        j                  z  dz  | j                  dd«      «      }|S )zM
    Get the timeout from the kwargs
    Used for the wrapper functions.
    NÚtimeout)rª   ÚfloatÚintÚhttpxr  rw  )rx  rV   rM  s      r3   Ú_get_wrapper_timeoutrQ  Õ  s3   € ô œ%¤#™+¬¯©Ñ5¸Ñ<¸f¿j¹jÈÐTXÓ>YÓZ€Gà€Nr5   c                óN   — t         j                  } |«       j                  | «      S r;   )rö  r®   rý  )rŽ  r®   s     r3   Úcheck_coroutinerS  à  s"   € Ü#0×#FÑ#FÐÙ Ó"×4Ñ4°UÓ;Ð;r5   c              ƒ  ó  K  — 	 t        |«      }| j                  «       }t        «       }t        j
                  D ].  }t        ||«      sŒ|j                  ||«      ƒ d{  –—† }|€Œ-|}Œ0 |S # t        $ r d}Y Œjw xY w7 Œ­w)zá
    Allow modifying the request just before it's sent to the deployment.

    Use this instead of 'async_pre_call_hook' when you need to modify the request AFTER a deployment is selected, but BEFORE the request is sent.
    N)r{   Ú
ValueErrorr‘  r4   rp   r|  r}  Úasync_pre_call_deployment_hook)rx  rå  Útyped_call_typeÚmodified_kwargsr0   rc  rÇ  s          r3   rV  rV  å  sŽ   è ø€ ðÜ# IÓ.ˆð —k‘k“m€Oä3Ó5€LÜ×%Ñ%ò )ˆÜ�h Õ-Ø#×BÑBÀ?ÐTcÓd×dˆFØÑ!Ø"(‘ð	)ð Ðøô ò ØŠðúð eús?   ‚A?„A, �9A?Á	A?ÁA=ÁA?Á&A?Á,A:Á7A?Á9A:Á:A?c              ƒ  ó  K  — 	 t        |«      }t        «       }t        j                  D ]>  }t        ||«      sŒ|j                  | t        t        |«      |«      ƒ d{  –—† }|€Œ<|c S  |S # t        $ r d}Y Œjw xY w7 Œ­w)z`
    Allow modifying / reviewing the response just after it's received from the deployment.
    N)	r{   rU  r4   rp   r|  r}  Ú'async_post_call_success_deployment_hookrª   rŠ   )Úrequest_dataÚresponserå  rW  r0   rc  rÇ  s          r3   rZ  rZ  ü  s‘   è ø€ ðÜ# IÓ.ˆô 4Ó5€LÜ×%Ñ%ò ˆÜ�h Õ-Ø#×KÑKØœdÔ#3°XÓ>Àó÷ ˆFð Ñ!Ø’ðð €Oøô ò ØŠðúðús>   ‚A?„A, �)A?¹$A?ÁA=ÁA?Á%A?Á,A:Á7A?Á9A:Á:A?c              ƒ  ó”  K  — 	 t        |«      }| j                  d«      }t        |t        «      r|nd}t        | j                  «       D ��ci c]  \  }}|dk7  sŒ||“Œ c}}«      }t        |«      }	t        «       }
t        j                  D ]]  }t        ||
«      sŒ	 t        t        |«      «      r|j                  ||	||¬«      ƒ d{  –—†  n|j                  ||	|«      ƒ d{  –—†  Œ_ y# t        $ r d}Y Œëw xY wc c}}w 7 Œ:7 Œ # t        $ r4}t        j                   dt        |«      j"                  |«       Y d}~Œ´d}~ww xY w­w)a8  
    Notify CustomLogger callbacks that a deployment attempt failed.

    Unlike its pre-call/post-success siblings, this wraps each callback call
    in its own try/except: it runs on the wrapper's exception path, so a
    broken callback must never replace the real exception that's about to be
    re-raised to the caller.

    Reads ``fallback_depth`` off ``request_data`` (set by ``Router`` on each
    fallback hop) and passes it through to the callback; ``None`` when
    missing or not an int, since a bare SDK call has no fallback chain.

    Callbacks receive a same-class snapshot of ``exception``, not the live
    object that's about to be re-raised, so a callback setting an attribute
    on it (e.g. ``status_code``) cannot change what the real caller sees.
    ``request_data`` omits ``attempted_targets``: unlike the rest of this
    attempt's own kwargs, it's the *same* object shared by reference across
    every hop of the live fallback walk, so a callback calling ``.record()``
    on it would make the router skip a deployment it hasn't actually tried.
    Nr9   Úattempted_targets)r9   z7async_post_call_failure_deployment_hook error in %s: %s)r{   rU  rw  r}  rO  r   rŠ  rX   r4   rp   r|  rJ   rL   rD   rU   r  r<  r‡  )r[  rV   rå  rW  Ú_raw_fallback_depthr9   ÚkÚvÚsafe_request_dataÚsafe_exceptionr0   rc  Úcallback_errors                r3   rD   rD     sV  è ø€ ð.Ü# IÓ.ˆð ".×!1Ñ!1Ð2BÓ!CÐÜ3=Ð>QÔSVÔ3WÑ/Ð]a€NÜ/À,×BTÑBTÓBV×0s¹$¸!¸QÐZ[Ð_rÓZr°°A±Ó0sÓtÐÜ8¸ÓC€Nä3Ó5€LÜ×%Ñ%ò ˆÜ�h Õ-ðÜ:¼4À»>ÔJØ"×JÑJØ)¨>¸?Ð[ið Kó ÷ ñ ð #×JÑJØ)¨>¸?ó÷ ð øñøô ò ØŠðüó
 1tðøðùô ò Ü×$Ñ$ØMÜ˜“N×+Ñ+Ø"÷ñ ûðüs‡   ‚E„C- �=EÁC>
ÁC>
Á<EÂ,DÃ	DÃ
DÃ%DÃ&DÃ*EÃ-C;Ã8EÃ:C;Ã;	EÄDÄDÄ	EÄ*E Ä;EÅ EÅEc                óŠ  — 	 | €y |j                   }|t        j                  j                  k(  s|t        j                  j                  k(  �rÖt        | «      }|du ry t        | t        «      �r´t        | j                  «      dkD  �rš| j                  d   j                  j                  }|��s|j                  ||¬«       |�|j                  d«      nd }|�|nt        j                  }	|	du rŸ	 |�œd|v r˜|d   �“d }
t        |d   t         «      r|d   j                  d«      �|d   }
n1t"        j$                  j'                  |d   «      rt)        |d   ¬«      }
|
�1t        j*                  j,                  j/                  |
d   d   |¬	«       |�‘d|v rŒt        |d   t         «      rxd
|d   v rp|d   d
   dk(  rdd|d   v r\t        |d   d   t         «      rEd|d   v r=|d   d   du r2t        j*                  j,                  j/                  |d   d   |¬	«       y y y y y y y y y y y y y y # t0        $ r Y Œ£w xY w# t2        $ r}|‚d }~ww xY w)NTr   rÙ  Úenable_json_schema_validationÚresponse_formatÚjson_schema©rg  Úschema)rj  r\  rL   Újson_objectÚresponse_schemaÚenforce_validation)r‡  r{   r  rŽ  r  rS  r}  rŽ   rø  ÚchoicesrÔ  r×  Úpost_call_rulesrw  rp   rf  r¯  r   Ú_completionsÚis_basemodel_typer­   rm   Újson_validation_ruleÚvalidate_schemaÚ	TypeErrorrU   )Úoriginal_responserž  ró  r'  r(  rå  Úis_coroutineÚmodel_responseÚ_per_request_validationÚ_enable_json_schema_validationÚjson_response_formatr3  s               r3   Úpost_call_processingr{  H  sþ  € ðMØÐ$Øà0×9Ñ9ˆIØœI×0Ñ0×6Ñ6Ò6¸)Äy×G\ÑG\×GbÑGbÓ:bÜ&5Ð6GÓ&H�Ø 4Ñ'Øä!Ð"3´]ÕCÌÐL]×LeÑLeÓHfÐijÓHjØ<M×<UÑ<UÐVWÑ<X×<`Ñ<`×<hÑ<h˜Ø)Ñ5à%×5Ñ5¸NÐRWÐ5ÔXð
 $3Ð#>ð !0× 3Ñ 3Ð4SÔ Tà%)ð 4ð $;Ð#Fñ !8ä%,×%JÑ%Jð ;ð
  >ÀÑEð!)à(7Ð(CØ,=ÀÑ,PØ,;Ð<MÑ,NÐ,ZàLPÐ(<ä,6Ø0?Ð@QÑ0RÜ04ô-.ð 1@Ð@QÑ0R×0VÑ0VÐWdÓ0eÐ0qàCRÐSdÑCeÑ,@Ü-5×-BÑ-B×-TÑ-TØ,;Ð<MÑ,Nô.*ô DaØ@OÐPaÑ@bôD.Ð,@ð ,@Ð+KÜ,3×,FÑ,F×,[Ñ,[×,kÑ,kØ7KÈMÑ7ZÐ[cÑ7dØ9Gð -lô -.ð !0Ð ;Ø$5¸Ñ$HÜ$.¨Ð?PÑ/QÔSWÔ$XØ$*¨oÐ>OÑ.PÑ$PØ$3Ð4EÑ$FÀvÑ$NÐR_Ò$_Ø$5¸ÐIZÑ9[Ñ$[Ü$.Ø$3Ð4EÑ$FÐGXÑ$YÜ$(ô%"ð %9¸OÐL]Ñ<^Ñ$^Ø$3Ð4EÑ$FÐG[Ñ$\Ð`dÑ$dô !(× :Ñ :× OÑ O× _Ñ _Ø+:Ð;LÑ+MÐN_Ñ+`Ø-;ð !`õ !"ð %eð %_ð	%"ð %\ð %`ð %Qð %Yð %Ið !<ð[ 6ð IkÐCð ;cøôb (1ò !)Ù$(ð!)ûô, ò ØˆûðúsJ   ‚H2 …AH2 ÁBH2 Ã-BH# ÆB
H2 È#	H/È,H2 È.H/È/H2 È2	IÈ;H=È=Ic                óÜ   ‡ ‡— t         j                  } |«       Št        ‰ «      ˆ ˆfd„«       }t        ‰ «      ˆ ˆfd„«       }t         j                  } |«       j	                  ‰ «      }|r|S |S )Nc                 óÎ  •— ‰j                   }t        |«      rÏt        j                  �N|j	                  d«      xs i j	                  dd «      }|�'t        j                  t        |«      k  rt        d«      ‚ ‰| i |¤Ž}t        ||¬«      rZd|v rT|d   du rMg }t        |«      D ]  \  }}|j                  |«       Œ t        j                  ||j	                  dd «      ¬«      S |S |S t        ‰| |«       t        j                  j                  «       }d }|j	                  d	d «      }	d
|vr t        t        j                   «       «      |d
<   t        | «      dkD  r| d   n|j	                  dd «      }
	 |	€ t#        ‰j                   ‰|g| ¢­ddi|¤Ž\  }	}|	€J d«       ‚t%        |«       |	|d	<   t'        «       } |‰||¬«      }||	_        t        j*                  rJt        j,                  t        j*                  kD  r)t/        t        j,                  t        j*                  ¬«      ‚t        j                  �N|j	                  d«      xs i j	                  dd «      }|�'t        j                  t        |«      k  rt        d«      ‚t1        d|j	                  dd«      › dt        j2                  › d|j	                  di «      j	                  dd«      › �«       |j	                  dd «      €t        j2                  €|j	                  dd«      du �r|j	                  di «      j	                  dd«      durê|j	                  dd«      durÖ|j	                  dd«      durÂ|j	                  dd«      dur®|j	                  dd«      durš|j	                  dd«      dur†|j	                  dd«      durr|j	                  dd«      dur^t5        j6                  d«       |j9                  |
xs d ‰|	|||| ¬!«      }|j:                  �!t5        j6                  d"«       |j:                  S |j	                  d#d «      �í|
�ët        j<                  du rÙ|t>        j@                  jB                  k(  s:|t>        jD                  jB                  k(  s|t>        jF                  jB                  k(  r‚	 |
}|j	                  d$d «      �d%|j	                  d$«      › �}d }t        | «      d&kD  r| d&   }n|j	                  dd «      r|d   }|j	                  d#«      } tI        «       |
|||d d ¬'«      }||d#<    ‰| i |¤Ž}t        j                  j                  «       }t        ||¬«      r‰d|v rT|d   du rMg }t        |«      D ]  \  }}|j                  |«       Œ t        j                  ||j	                  dd «      ¬«      S tK        tL        jN                  t            d)«      } |||	|
|||¬*«       |S d|v r|d   du sAd|v r|d   du s6d|v r|d   du s+d|v r|d   du s d+|v r|d+   du stQ        jR                  |«      r|S tU        ||
xs d |‰‰¬,«       |jW                  || |¬-«       t5        jX                  d.«       t[        j\                  «       }tK        tL        jN                  t            d/«      } |j^                  |j`                  |	jb                  |||«       tK        tL        jN                  t            d)«      } |||	|
|||¬*«       |S # t        $ r}t1        d(|› �«       Y d }~�Œôd }~ww xY w# t        $ �rH}‰j                   }|t>        jD                  jB                  k(  �r�|j	                  d0d «      xs t        jd                  xs d }|j	                  d1d «      rTtK        tL        jN                  t            d2«      }tf        jh                  } |||j	                  d1«      ¬3«      } |«       |d1<   d t        _2        |j	                  d4i «      }d5|j	                  d«      xs i v }|rp|sntk        |tl        jn                  «      s5tk        |tl        jp                  «      stk        |tl        jr                  «      �rº||d0<   t        jt                  | i |¤ŽcY d }~S tk        |t        jv                  jx                  «      �rv|�rs|
|v �rn|�skt        | «      dkD  r	||
   | d<   n||
   |d<    ‰| i |¤ŽcY d }~S |t>        jz                  jB                  k(  �r!|j	                  d0d «      xs t        jd                  xs d }|j	                  d1d «      rTtK        tL        jN                  t            d2«      }tf        jh                  } |||j	                  d1«      ¬3«      } |«       |d1<   d t        _2        d5|j	                  d«      xs i v }|ro|smtk        |tl        jn                  «      s4tk        |tl        jp                  «      stk        |tl        jr                  «      r||d0<   t        j|                  | i |¤ŽcY d }~S t        j€                  «       }t        j                  j                  «       }|	r|	jƒ                  ||||«       |‚d }~ww xY w)6Nrs  Úprevious_modelszMax retries per request hit!rä  Úcomplete_responseTr»  ©r»  Úlitellm_logging_objræ  r   rž  rÉ  Fú3logging_obj should not be None after function_setup©r'  Úrequest_kwargsré  ©Úcurrent_costÚ
max_budgetzSYNC kwargs[caching]: Úcachingú; litellm.cache: z#; kwargs.get('cache')['no-cache']: Úcachezno-cacher  r  r  Úaimg_generationr  r  Ú
_arealtimezINSIDE CHECKING SYNC CACHErØ  ©rž  r'  rÂ  ré  rå  rx  rP   z
Cache hit!Ú
max_tokensÚhf_model_nameúhuggingface/r  ©rž  Ú
base_modelr»  Úuser_max_tokensÚ
buffer_numÚbuffer_percú&Error while checking max token limit: rÇ   ©rÇ  rÂ  rž  rx  ré  r>  r  ©ru  rž  ró  r'  r(  )rÇ  rP   rx  z0Wrapper: Completed Call, calling success_handlerrÎ   rG  rH  rò   rI  Úcontext_window_fallback_dictÚmodel_group)Br‡  Ú_is_async_requestrp   Únum_retries_per_requestrw  rø  rU   r%  rü  rI  Ústream_chunk_builderÚprint_args_passed_to_litellmÚdatetimeÚnowr°  r   Úuuid4r:  r�  ri   Ú_llm_caching_handlerr‡  Ú_current_costr  rD  rŠ  r  r<  Ú_sync_get_cacheÚcached_resultÚmodify_paramsr{   r  rŽ  r  r  r   r„  r…  r†  Úasyncior	   r{  Úsync_set_cacher=  ÚcontextvarsÚcopy_contextÚsubmitÚrunÚsuccess_handlerrG  rö  ró   r}  Úopenair  r  r  Úcompletion_with_retriesÚ
exceptionsr  r  Úresponses_with_retriesÚ	tracebackÚ
format_excÚfailure_handler)rP   rx  rå  r~  rÇ  ÚchunksÚidxÚchunkré  rÂ  rž  rg   r¢  Úcaching_handler_responser’  r»  r“  Úmodified_max_tokensr3  r>  rÇ   ÚctxrÎ   rG  rò   ró   r™  Ú_is_litellm_router_callÚtraceback_exceptionr'  r(  s                                €€r3   Úwrapperzclient.<locals>.wrapper£  sŸ
  ø€ ð &×.Ñ.ˆ	Ü˜VÔ$ä×.Ñ.Ð:à#)§:¡:¨jÓ#9Ò#?¸R×"DÑ"DÐEVÐX\Ó"]�Ø"Ð.Ü×6Ñ6¼#¸oÓ:NÒNÜ'Ð(FÓGÐGñ '¨Ð7°Ñ7ˆFÜ$ØØ#õð '¨&Ñ0°VÐ<OÑ5PÐTXÑ5XØ�FÜ&/°Ó&7ò -™
˜˜UØŸ™ eÕ,ð-ä"×7Ñ7¸ÈÏÉÐT^Ð`dÓIeÔfÐfà!�MàˆMô 	%Ð%6¸¸fÔEÜ$×-Ñ-×1Ñ1Ó3ˆ
ØˆØ39·:±:Ð>SÐUYÓ3Zˆð  FÑ*Ü(+¬D¯J©J«LÓ(9ˆFÐ$Ñ%ä.1°$«i¸!ªm 4¨¢7ÀÇÁÈGÐUYÓAZˆðD	ØÐ"Ü&4Ø%×.Ñ.°	¸:ð'ØHLò'Ø\að'Øekñ'Ñ#�˜Vð
 Ð*ÐaÐ,aÓaÐ*ô ' vÔ.Ø,7ˆFÐ(Ñ)Ü'FÓ'HÐÙ=NØ"3Ø%Ø%ô>Ð ð
 0DˆKÔ,ô ×!Ò!Ü×(Ñ(¬7×+=Ñ+=Ò=Ü-Ü%,×%:Ñ%:Ü#*×#5Ñ#5ôð ô ×.Ñ.Ð:à#)§:¡:¨jÓ#9Ò#?¸R×"DÑ"DÐEVÐX\Ó"]�Ø"Ð.Ü×6Ñ6¼#¸oÓ:NÒNÜ'Ð(FÓGÐGô Ø(¨¯©°I¸uÓ)EÐ(FÐFWÔX_×XeÑXeÐWfð  gJð  KQ÷  KUñ  KUð  V]ð  _aó  Kb÷  Kfñ  Kfð  gqð  sxó  Kyð  Jzð  {ôð  Ÿ™ I¨tÓ4Ð<ÄÇÁÐAZØ!Ÿ:™: i°Ó7¸4Ò?àŸ
™
 7¨BÓ/×3Ñ3°JÀÓFÈdÑRà—J‘J˜|¨UÓ3¸4Ñ?Ø—J‘JÐ1°5Ó9ÀÑEØ—J‘J˜}¨eÓ4¸DÑ@Ø—J‘JÐ0°%Ó8ÀÑDØ—J‘JÐ/°Ó7¸tÑCØ—J‘J˜y¨%Ó0¸Ñ<Ø—J‘J˜|¨UÓ3¸4Ñ?ô ×$Ñ$Ð%AÔBØJ^×JnÑJnØš+ 2Ø&7Ø +Ø)Ø'Ø!Øð Koó KÐ(ð ,×9Ñ9ÐEÜ"×(Ñ(¨Ô6Ø3×AÑAÐAð —
‘
˜<¨Ó.Ð:ØÐ%Ü×)Ñ)¨TÑ1à¤×!6Ñ!6×!<Ñ!<Ò<Ø ¤I×$8Ñ$8×$>Ñ$>Ò>Ø ¤I×$@Ñ$@×$FÑ$FÒFðPØ!&�JØ—z‘z /°4Ó8ÐDØ'3°F·J±J¸Ó4OÐ3PÐ%Q˜
Ø#�HÜ˜4“y 1’}Ø#'¨¡7™ØŸ™ J°Ô5Ø#)¨*Ñ#5˜Ø-3¯Z©Z¸Ó-E�OØ1KÔ1IÓ1KØ#Ø#-Ø!)Ø(7Ø#'Ø$(ô2Ð'ð ,?�F˜<Ñ(ñ '¨Ð7°Ñ7ˆFÜ×(Ñ(×,Ñ,Ó.ˆHÜ$ØØ#õð '¨&Ñ0°VÐ<OÑ5PÐTXÑ5XØ�FÜ&/°Ó&7ò -™
˜˜UØŸ™ eÕ,ð-ä"×7Ñ7¸ÈÏÉÐT^Ð`dÓIeÔfÐfô 07´s·{±{Ä8Ñ7LÐNhÓ/iÐ,Ù,Ø%Ø$/Ø#Ø%Ø#-Ø!)õð "�Mà Ñ'Ø˜=Ñ)¨TÑ1Ø 6Ñ)Ø˜<Ñ(¨DÑ0Ø$¨Ñ.ØÐ,Ñ-°Ñ5Ø# vÑ-ØÐ+Ñ,°Ñ4Ø Ñ&Ø˜9Ñ%¨Ñ-Ü×&Ñ& vÔ.à�ô !Ø"(Ø’m˜tØ &Ø"3Ø#õð !×/Ñ/ØØØð 0ô ô ×ÑÐ RÔSô %×1Ñ1Ó3ˆCÜ%¤c§k¡k´(Ñ&;¸ZÓHˆHØˆH�O‰OØ—‘Ø×+Ñ+ØØØôô (/¬s¯{©{¼8Ñ/DÐF`Ó'aÐ$Ù$ØØ'ØØØ%Ø!õð ˆMøôa !ò PÜ!Ð$JÈ1È#Ð"N×OÒOûðPûôb ó L	Ø)×2Ñ2ˆIØœI×0Ñ0×6Ñ6Ó6Ø$Ÿj™j¨¸Ó=Ò\Ä×ATÑATÒ\ÐX\�Ø—:‘:˜n¨dÔ3ÜSZÜŸ™¤HÑ-Ð/RóTÐ5ô *7×)IÑ)IÐ&Ù"CØ"#Ø%+§Z¡Z°Ó%?ô#�Kñ .@Ó-A�F˜>Ñ*Ø&*”Ô#Ø6<·j±jÐA_ÐacÓ6dÐ,à*7Ø—J‘J˜zÓ*Ò0¨bð+Ð'ñ  Ñ(?ô # 1¤f§o¡oÔ6Ü% a¬¯©Ô8Ü% a¬×)BÑ)BÕCà0;˜˜}Ñ-Ü&×>Ñ>ÀÐOÈÑOÕOä˜q¤'×"4Ñ"4×"OÑ"OÕPÚ4ØÐ!=Ò=Ú3ä˜4“y 1’}Ø">¸uÑ"E˜˜Qšà*FÀuÑ*M˜˜w™Ù,¨dÐ=°fÑ=Õ=Øœi×1Ñ1×7Ñ7Ó7Ø$Ÿj™j¨¸Ó=Ò\Ä×ATÑATÒ\ÐX\�Ø—:‘:˜n¨dÔ3Ü8?ÜŸ™¤HÑ-Ð/Ró9Ð5ô *7×)IÑ)IÐ&Ù"CØ"#Ø%+§Z¡Z°Ó%?ô#�Kñ .@Ó-A�F˜>Ñ*Ø&*”Ô#à*7Ø—J‘J˜zÓ*Ò0¨bð+Ð'ñ  Ñ(?ô # 1¤f§o¡oÔ6Ü% a¬¯©Ô8Ü% a¬×)BÑ)BÔCà0;˜˜}Ñ-Ü&×=Ñ=¸tÐNÀvÑNÕNÜ)2×)=Ñ)=Ó)?ÐÜ×(Ñ(×,Ñ,Ó.ˆHñ Ø×+Ñ+ØÐ*¨J¸ôð ˆGûðYL	úsˆ   Å1J%\ ÐA=\ ÒB[- ÔB
\ Ö!0\ ×A\ Ø C\ Û-	\Û6\
Ü\ Ü
\Ü\ Ü
i$ÜEiá4i$á:Aiãi$ãD9ièi$èA
iéi$c               Ÿ  óÚ  •‡‡‡‡ ‡!K  — t        ‰"| |«       t        j                  j                  «       Š!d Š t        t        j
                  t           d«      }|j                  dd «      Št        «       } |‰"|‰!¬«      }‰"j                  }d|vr t        t        j                  «       «      |d<   t        | «      dkD  r| d   n|j                  dd «      }|j                  d«      d uŠ|j                  dd «       t        j                  «       }d }	 ‰€t        ‰"j                  ‰#‰!g| ¢­i |¤Ž\  Š}‰€J d	«       ‚t!        ||«      ƒ d {  –—† }	|	�|	}|j                  d
«      }
|
�‰j"                  |
k7  r|
‰_        ‰|d<   t%        |«       |‰_        t(        j*                  rJt(        j,                  t(        j*                  kD  r)t/        t(        j,                  t(        j*                  ¬«      ‚t1        «       rBt3        d|j                  dd«      › dt(        j4                  › d|j                  dd «      › �«       |j7                  |xs d‰"‰‰!||| ¬«      ƒ d {  –—† }|�l|j8                  �/|j:                  €#|j8                  t=        ‰ «      st?        ‰«       S S |j@                  du r#|j:                  t=        ‰ «      st?        ‰«       S S |j                  dd «      �í|�ët(        jB                  du rÙ|tD        jF                  jH                  k(  s:|tD        jJ                  jH                  k(  s|tD        jL                  jH                  k(  r‚	 |}|j                  dd «      �d|j                  d«      › �}d }t        | «      dkD  r| d   }n|j                  dd «      r|d   }|j                  d«      } tO        «       ||||d d ¬«      }||d<   	  ‰"| i |¤Žƒ d {  –—† Š t        j                  j                  «       ŠtW        ||¬«      r§d|v rk|d   du rdg }tY        ‰ «      D ]  \  }}|j[                  |«       Œ t)        j\                  ||j                  dd «      ¬«      t=        ‰ «      st?        ‰«       S S  |‰ ‰||‰!‰¬ «       |j_                  ‰ |¬!«      t=        ‰ «      st?        ‰«       S S |tD        j`                  jH                  k(  r‰ t=        ‰ «      st?        ‰«       S S tc        ‰ ||‰"‰#¬"«       td        j                  |«      }|�tg        |‰ |¬#«      ƒ d {  –—† Š |ji                  ‰ ‰"|| ¬$«      ƒ d {  –—†  |sBt        ‰d%d«      rd4ˆˆˆˆ ˆ!fd&„}|‰_5        n#tm        jn                  tq        ‰‰ ‰!‰‰¬'«      «       ‰js                  ‰ ‰!‰¬(«       tu        ‰ tv        «      r:|�8|j:                  �,|jy                  |‰ ‰!‰¬)«      t=        ‰ «      st?        ‰«       S S  |‰ ‰||‰!‰¬ «       ‰ t=        ‰ «      st?        ‰«       S S 7 �Œ¼7 �Œ±# tP        $ r}t3        d|› �«       Y d }~�Œ_d }~ww xY w7 �Œ[# tP        $ rK}t        j                  j                  «       }	 tS        |||¬«      ƒ d {  –—†7   ‚ # tT        $ r Y ‚ w xY wd }~ww xY w7 �Œp7 �ŒV# tP        $ �r4}t{        j|                  «       }|�|nt        j                  j                  «       Š‰r]|s[	 ‰j                  ||‰!‰«       n# tP        $ r}|‚d }~ww xY w	 ‰j�                  ||‰!‰«      ƒ d {  –—†7   n# tP        $ r}|‚d }~ww xY w‰"j                  }tƒ        ||¬*«      \  }}|tD        jF                  jH                  k(  �rL|j                  d+i «      }d,|j                  d-«      xs i v }|r£|s¡	 d t(        _B        ||d.<   ‰"|d/<   tu        |t†        jˆ                  «      rd0|d1<   ntu        |t†        jŠ                  «      rd2|d1<   t)        jŒ                  | i |¤Žƒ d {  –—†7  Š ‰ cY d }~t=        ‰ «      st?        ‰«       S S # tP        $ r Y �nZw xY wtu        |t(        jŽ                  j�                  «      �r1|�r.||v �r)|�s&t        | «      dkD  r	||   | d<   n||   |d<    ‰"| i |¤Žƒ d {  –—†7  Š ‰ cY d }~t=        ‰ «      st?        ‰«       S S |tD        j’                  jH                  k(  r»d,|j                  d-«      xs i v }|r¢|s 	 d t(        _B        ||d.<   ‰"|d/<   tu        |t†        jˆ                  «      rd0|d1<   ntu        |t†        jŠ                  «      rd2|d1<   t)        j”                  | i |¤Žƒ d {  –—†7  Š ‰ cY d }~t=        ‰ «      st?        ‰«       S S # tP        $ r Y nw xY w|j                  d.«      }|�t—        |d.|«       t™        ||¬*«      }t—        |d3|«       |‚d }~ww xY w# t=        ‰ «      st?        ‰«       w w xY w­w)5NrÇ   r�  rƒ  ræ  r   rž  Ú	fallbacksÚ_is_litellm_internal_callr‚  rè  r…  zASYNC kwargs[caching]: rˆ  Fr‰  z; kwargs.get('cache'): rŠ  rØ  r�  TrŽ  r�  r�  r  r»  r‘  r–  )r[  rV   rå  rä  r  r€  r—  )rÇ  rå  r˜  )r[  r\  rå  )rÇ  r'  rx  rP   Ú_defer_async_loggingc            	     óL   •— t        j                  t        ‰‰‰‰ ‰¬«      «       y )N©rÂ  rÇ  ré  r>  rD  )r§  Úcreate_taskrE  )r>  rD  rÂ  rÇ  ré  s   €€€€€r3   Ú_enqueue_deferred_loggingz@client.<locals>.wrapper_async.<locals>._enqueue_deferred_loggingŒ  s(   ø€ Ü×+Ñ+Ü8Ø,7Ø'-Ø+5Ø)1Ø=Yôõr5   rÃ  r=  )Ú_caching_handler_responseÚembedding_responseré  r>  )rx  rV   r™  rš  rs  rG  r'  Úexponential_backoff_retryÚretry_strategyÚconstant_retryrM  ©ÚreturnÚNone)Mrž  rŸ  r   r„  r…  r†  r‡  rw  ri   r°  r   r¡  rø  r÷  r   r:  rV  rè  r�  r¢  rp   r‡  r£  r  r  rD  rŠ  Ú_async_get_cacher¥  Úfinal_embedding_cached_responserÈ  rÄ  Ú embedding_all_elements_cache_hitr¦  r{   r  rŽ  r  r  r   rU   rD   ÚBaseExceptionr%  rü  rI  r�  Úwrap_streaming_result_for_cacheÚ	arealtimer{  rœ   rZ  Úasync_set_cacherÅ  r§  rÄ  rE  rC  r}  r„   Ú2_combine_cached_embedding_response_with_api_resultr²  r³  r´  Úasync_failure_handlerrK  rG  r®  r  r  Úacompletion_with_retriesr°  r  r  Úaresponses_with_retriesÚsetattrrQ  )$rP   rx  Ú_update_response_metadatarg   r¢  rå  rž  rÀ  Ú_deployment_call_end_timerX  Ú_hook_streamrÆ  r’  r»  r“  r¹  r3  Údeployment_errorrµ  r¶  r·  Ú_call_type_enumrÅ  r¼  rG  r™  r»  Údeployment_num_retriesrM  r>  rD  rÂ  rÇ  ré  r'  r(  s$                                @@@@@€€r3   Úwrapper_asynczclient.<locals>.wrapper_asyncÓ  sÙ
  ýè ø€ ä$Ð%6¸¸fÔEÜ$×-Ñ-×1Ñ1Ó3ˆ
ØˆÜ+2´3·;±;¼xÑ3HÐJdÓ+eÐ!Ø39·:±:Ð>SÐUYÓ3ZˆÜ#BÓ#DÐÙ9JØ/Ø!Ø!ô:
Ðð &×.Ñ.ˆ	Ø FÑ*Ü(+¬D¯J©J«LÓ(9ˆFÐ$Ñ%ä.1°$«i¸!ªm 4¨¢7ÀÇÁÈGÐUYÓAZˆØ.4¯j©j¸Ó.EÈTÐ.QÐ$Ø�
‰
Ð.°Ô5Ü+;×+?Ñ+?Ó+AÐ!àð 	"ðs	GØÐ"Ü&4Ð5F×5OÑ5OÐQZÐ\fÐ&xÐimÒ&xÐqwÑ&xÑ#�˜Vð Ð*ÐaÐ,aÓaÐ*ä+IÈ&ÐR[Ó+\×%\ˆOØÐ*Ø(�ð #)§*¡*¨XÓ"6ˆLØÐ'¨K×,>Ñ,>À,Ò,NØ%1�Ô"à,7ˆFÐ(Ñ)ä& vÔ.Ø/CˆKÔ,ä×!Ò!Ü×(Ñ(¬7×+=Ñ+=Ò=Ü-Ü%,×%:Ñ%:Ü#*×#5Ñ#5ôð ô  Ô!ÜØ-¨f¯j©j¸ÀEÓ.JÐ-KÐK\Ô]d×]jÑ]jÐ\kð  lCð  DJ÷  DNñ  DNð  OVð  X\ó  D]ð  C^ð  _ôð Nb×MrÑMrØ’k˜rØ"3Ø'Ø%Ø#ØØð Nsó N÷ HÐ%ð )Ð4à-×;Ñ;ÐGØ1×QÑQÐYà4×BÑBôD :¸&ÔAÜ9¸+ÕFð BðA /×OÑOÐSWÑWØ4×TÑTô~ :¸&ÔAÜ9¸+ÕFð Bðw —
‘
˜<¨Ó.Ð:ØÐ%Ü×)Ñ)¨TÑ1à¤×!6Ñ!6×!<Ñ!<Ò<Ø ¤I×$8Ñ$8×$>Ñ$>Ò>Ø ¤I×$@Ñ$@×$FÑ$FÒFðPØ!&�JØ—z‘z /°4Ó8ÐDØ'3°F·J±J¸Ó4OÐ3PÐ%Q˜
Ø#�HÜ˜4“y 1’}Ø#'¨¡7™ØŸ™ J°Ô5Ø#)¨*Ñ#5˜Ø-3¯Z©Z¸Ó-E�OØ1KÔ1IÓ1KØ#Ø#-Ø!)Ø(7Ø#'Ø$(ô2Ð'ð ,?�F˜<Ñ(ð
Ù0°$ÐA¸&ÑA×A�ô  ×(Ñ(×,Ñ,Ó.ˆHä$ØØ#õð '¨&Ñ0°VÐ<OÑ5PÐTXÑ5XØ$&�FÜ&/°Ó&7ò -™
˜˜UØŸ™ eÕ,ð-ä"×7Ñ7¸ÈÏÉÐT^Ð`dÓIeÔfôH :¸&ÔAÜ9¸+ÕFð BñE .Ø%Ø$/Ø#Ø%Ø#-Ø!)õð 0×OÑOØ%Ø"+ð Pó ôt :¸&ÔAÜ9¸+ÕFð Bðm œi×1Ñ1×7Ñ7Ò7Øôj :¸&ÔAÜ9¸+ÕFð Bôg !Ø"(ØØ &Ø"3Ø#õô &9×%<Ñ%<¸YÓ%GˆOØÐ*ÜFØ!'Ø#Ø-ô ÷ �ð '×6Ñ6ØØ"3ØØð	 7ó ÷ ð ñ -Ü˜;Ð(>ÀÔF÷	ñ 	ð =V�KÕ9ä×'Ñ'Ü4Ø(3Ø#)Ø'1Ø%-Ø9Uôôð ×EÑEØØ%Ø!ð Fô ô ˜6Ô#4Ô5Ø-Ð9Ø-×MÑMÐYà+×^Ñ^Ø.GØ'-Ø)Ø%ð	 _ó ôb :¸&ÔAÜ9¸+ÕFð BñU &ØØ'ØØØ%Ø!õð ôB :¸&ÔAÜ9¸+ÕFð BðW	 &]ùð4Húôd !ò PÜ!Ð$JÈ1È#Ð"N×OÒOûðPúð
 BúÜò 
Ü,4×,=Ñ,=×,AÑ,AÓ,CÐ)ðÜAØ%+Ø"2Ø"+ô÷ ñ ð øô %ò ØØðþð
úð`ùðúôD ó R	Ü)2×)=Ñ)=Ó)?Ðð 5NÐ4YÑ0Ô_g×_pÑ_p×_tÑ_tÓ_vˆHÙÑ#<ðØ×/Ñ/ØÐ.°
¸Hõøô !ò Ø�GûðúðØ%×;Ñ;¸AÐ?RÐT^Ð`hÓi×iÒiøÜ ò Ø�Gûðúð *×2Ñ2ˆIÜ":À&ÐTUÔ"VÑˆK˜ØœI×1Ñ1×7Ñ7Ó7Ø6<·j±jÐA_ÐacÓ6dÐ,à*7Ø—J‘J˜zÓ*Ò0¨bð+Ð'ñ
  Ñ(?ð&Ø.2œÔ+Ø0;˜˜}Ñ-Ø6G˜Ð2Ñ3Ü% a¬×)>Ñ)>Ô?Ø7R˜FÐ#3Ò4Ü'¨¬6¯?©?Ô;Ø7G˜FÐ#3Ñ4Ü'.×'GÑ'GÈÐ'XÐQWÑ'X×!XÐ!X˜ð  &œôn :¸&ÔAÜ9¸+ÕFð Bøôu %ò Úðúô
 ˜q¤'×"4Ñ"4×"OÑ"OÕPÚ4ØÐ!=Ò=Ú3ä˜4“y 1’}Ø">¸uÑ"E˜˜Qšà*FÀuÑ*M˜˜w™Ù#4°dÐ#E¸fÑ#E×EÐE�FØ!”MôV :¸&ÔAÜ9¸+ÕFð BðU œi×2Ñ2×8Ñ8Ò8Ø*7Ø—J‘J˜zÓ*Ò0¨bð+Ð'ñ
  Ñ(?ð&Ø.2œÔ+Ø0;˜˜}Ñ-Ø6G˜Ð2Ñ3Ü% a¬×)>Ñ)>Ô?Ø7R˜FÐ#3Ò4Ü'¨¬6¯?©?Ô;Ø7G˜FÐ#3Ñ4Ü'.×'FÑ'FÈÐ'WÐPVÑ'W×!WÐ!W˜ð  &œô, :¸&ÔAÜ9¸+ÕFð Bøô3 %ò Ùðúð
 -3¯J©J°}Ó,EÐ"Ø%Ð1Ü˜˜=Ð*@ÔAä1¸È1ÔMˆGÜ�A�y 'Ô*ØˆGûðeR	ûô@ :¸&ÔAÜ9¸+ÕFð BüsO  ˆDg+Ä8Z ÅXÅDZ ÉXÉ)Z É?g+ÊZ Ê0g+ËA=Z ÍBX	 ÏX1 ÏX.ÏX1 ÏBZ Ñg+Ñ2 Z Òg+Ò*Z Óg+Ó 8Z ÔZÔZ Ô5ZÔ6BZ ×g+×Z ×+g+ØZ ØZ Ø		X+ØX&Ø Z Ø&X+Ø+Z Ø.X1 Ø1	ZØ:Z ÙY1Ù*Y-Ù+Y1Ù0Z Ù1	Y=Ù:Z Ù<Y=Ù=Z Ú ZÚZ ÚZ Ú
gÚ:gÛ[(Û'gÛ(	[8Û1[3Û3[8Û8gÛ<\Ü\Ü\ÜgÜ	\*Ü#\%Ü%\*Ü*A*gÞA,`%à`à`%àgàgà	g àg+à%	`2à.gà1`2à2Agâbâgâgâg âg+â38gã,A,e<åeåe<ågågå g å$g+å<	fægæfæ?gçgçg çg(ç(g+)rö  rË   r   r®   rý  )r'  rË   r½  rà  r®   rv  r(  s   `     @r3   Úclientrá  Ÿ  s�   ù€ Ü ×&Ñ&€EÙ“w€Iä
ÐÓômó ðmô^	 ÐÓôLGó ðLGô\
 $1×#FÑ#FÐÙ/Ó1×CÑCÐDUÓV€Lñ ØÐàˆr5   c                ó¤  — | €y| j                  dd«      du s¸| j                  dd«      du s¤| j                  dd«      du s�| j                  dd«      du s|| j                  dd«      du sh| j                  dd«      du sT| j                  d	d«      du s@| j                  d
d«      du s,| j                  dd«      du s| j                  dd«      du s|du ryy)aj  
    Returns True if the call type is an internal async request.

    eg. litellm.acompletion, litellm.aimage_generation, litellm.acreate_batch, litellm._arealtime

    Args:
        kwargs (dict): The kwargs passed to the litellm function
        is_pass_through (bool): Whether the call is a pass-through call. By default all pass through calls are async.
    Fr  Tr  r‹  r  r  r  r  rŒ  Úacreate_batchÚacreate_fine_tuning_jobrv  )rx  Úis_pass_throughs     r3   r›  r›  ,  sÜ   € ð €~Øà�
‰
�= %Ó(¨DÑ0Ø�:‰:�l EÓ*¨dÑ2Ø�:‰:Ð'¨Ó/°4Ñ7Ø�:‰:�m UÓ+¨tÑ3Ø�:‰:Ð(¨%Ó0°DÑ8Ø�:‰:Ð&¨Ó.°$Ñ6Ø�:‰:�i Ó'¨4Ñ/Ø�:‰:�l EÓ*¨dÑ2Ø�:‰:�o uÓ-°Ñ5Ø�:‰:Ð/°Ó7¸4Ñ?Ø˜dÑ"àØr5   Ú_STREAMING_CALL_TYPESc                ó*   — d| v r| d   du ry|t         v S )a$  
    Returns True if the call type is a streaming request.
    Returns True if:
        - if "stream=True" in kwargs  (litellm chat completion, litellm text completion, litellm messages)
        - if call_type is generate_content_stream or agenerate_content_stream (litellm google genai)
    rè  T)ræ  rä  s     r3   r%  r%  V  s'   € ð �6Ñ˜f XÑ.°$Ñ6ØØÔ-Ð-Ð-r5   c                óP   — |�t        |d   |d   |d   ¬«      }|S t        | ¬«      S )NÚ
identifierÚrevisionÚ
auth_token)ré  rê  rë  ©rž  )Úcreate_pretrained_tokenizerÚ_select_tokenizer_helper)rž  Úcustom_tokenizerÚ
_tokenizers      r3   Ú_select_tokenizerrñ  e  s=   € ØÐ#Ü7Ø'¨Ñ5Ø% jÑ1Ø'¨Ñ5ô
ˆ
ð
 ÐÜ#¨%Ô0Ð0r5   c                óà   — t         j                  du rt        | «      S 	 t        | «      }|�|S 	 t        | «      S # t        $ r*}t        j                  d|«       Y d }~t        | «      S d }~ww xY w)NTzError selecting tokenizer: %s)rp   Údisable_hf_tokenizer_downloadÚ_return_openai_tokenizerÚ_return_huggingface_tokenizerrU   r  r<  )rž  rÇ  r3  s      r3   rî  rî  p  s}   € ä×,Ñ,°Ñ4Ü'¨Ó.Ð.ðAÜ5°eÓ<ˆØÐØˆMð ô $ EÓ*Ð*øô	 ò AÜ×ÑÐ<¸a×@Ð@ô $ EÓ*Ð*ûð	Aús   Ÿ: º	A-ÁA(Á(A-c                ó   — dt        «       dœS )NÚopenai_tokenizer©rL   Ú	tokenizer)r   rì  s    r3   rô  rô  €  s   € Ø&Ô5JÓ5LÑMÐMr5   c                ó   — | t         j                  v rd| v rt        j                  d«      }d|dœS | t         j                  v r"d| vrt        j
                  t        «      }d|dœS d| j                  «       v sd| j                  «       v rt        j                  d«      }d|dœS d	| j                  «       v rt        j                  d
«      }d|dœS y )Nz	command-rz#Xenova/c4ai-command-r-v01-tokenizerÚhuggingface_tokenizerrø  zclaude-3zllama-2Ú	replicatez#hf-internal-testing/llama-tokenizerzllama-3zXenova/llama-3-tokenizer)rp   Úcohere_modelsr   Úfrom_pretrainedÚanthropic_modelsÚfrom_strÚclaude_json_strrœ  )rž  Úcohere_tokenizerÚclaude_tokenizerrù  s       r3   rõ  rõ  „  sË   € Ø”×%Ñ%Ñ%¨+¸Ñ*>ä"+×";Ñ";Ð<aÓ"bÐØ/Ð>NÑOÐOà	”'×*Ñ*Ñ	*¨zÀÑ/FÜ"+×"4Ñ"4´_Ó"EÐØ/Ð>NÑOÐOà	�e—k‘k“mÑ	# {°e·k±k³mÑ'CÜ×-Ñ-Ð.SÓTˆ	Ø/¸iÑHÐHà	�e—k‘k“mÑ	#Ü×-Ñ-Ð.HÓIˆ	Ø/¸iÑHÐHàr5   rØ  c                óÒ   — |xs t        | ¬«      }t        |d   t        «      r|d   j                  |d¬«      }n|d   j                  |«      }t	        |d«      r|j
                  S |S )aÒ  
    Encodes the given text using the specified model.

    Args:
        model (str): The name of the model to use for tokenization.
        custom_tokenizer (Optional[dict]): A custom tokenizer created with the `create_pretrained_tokenizer` or `create_tokenizer` method. Must be a dictionary with a string value for `type` and Tokenizer for `tokenizer`. Default is None.
        text (str): The text to be encoded.

    Returns:
        enc: The encoded text.
    rì  rù  © )Údisallowed_specialÚids)rñ  r}  r   Úencoder®  r  )rž  Útextrï  Útokenizer_jsonÚencs        r3   r  r  ™  sl   € ð -ÒNÔ0AÈÔ0N€NÜ�. Ñ-¬xÔ8Ø˜[Ñ)×0Ñ0°È"Ð0ÓM‰à˜[Ñ)×0Ñ0°Ó6ˆô ˆs�EÔØ�w‰wˆØ€Jr5   c                ó°   — |xs t        | ¬«      }|d   dk(  r)|rt        |d   |«      }|d   j                  ||¬«      }|S |d   j                  |«      }|S )a  
    Decodes token ids using the selected tokenizer.

    Args:
        skip_special_tokens: For HuggingFace tokenizers, keep the historical
            LiteLLM round-trip behavior by omitting special tokens by default.
            Set to False to inspect decoded BOS/EOS tokens.
    rì  rL   rû  rù  )Úskip_special_tokens)rñ  Ú$_strip_huggingface_special_token_idsÚdecode)rž  Útokensrï  r  r
  Údecs         r3   r  r  ±  sq   € ð -ÒNÔ0AÈÔ0N€NØ�fÑÐ!8Ò8ÙÜ9¸.ÈÑ:UÐW]Ó^ˆFØ˜[Ñ)×0Ñ0°ÐM`Ð0ÓaˆØˆ
Ø
˜Ñ
%×
,Ñ
,¨VÓ
4€CØ€Jr5   c           	     óî   — 	 | j                  «       }|j                  «       D ��ch c]  \  }}t        |dd«      sŒ|’Œ }}}|s|S |D �cg c]	  }||vsŒ|‘Œ c}S # t        $ r |cY S w xY wc c}}w c c}w )NÚspecialF)Úget_added_tokens_decoderrU   rŠ  r„  )rù  r  Úadded_tokens_decoderÚtoken_idÚadded_tokenÚspecial_token_idsÚtokens          r3   r  r  É  s’   € ðØ&/×&HÑ&HÓ&JÐð
 /C×.HÑ.HÓ.J÷ Ù*�X˜{ÌgÐVaÐclÐnsÕNtŠð Ðñ  ñ ØˆØ%ÖH�e¨Ð6GÒ)GŠEÒHÐHøô ò ØŠðüó ùò
 Is'   ‚A ¥A,»A,Á
	A2ÁA2ÁA)Á(A)c                óÄ   — 	 t        j                  | ||¬«      }d|dœS # t        $ r7}t        j                  d|«       t        j                  | |¬«      }Y d}~Œ@d}~ww xY w)aï  
    Creates a tokenizer from an existing file on a HuggingFace repository to be used with `token_counter`.

    Args:
    identifier (str): The identifier of a Model on the Hugging Face Hub, that contains a tokenizer.json file
    revision (str, defaults to main): A branch or commit id
    auth_token (str, optional, defaults to None): An optional auth token used to access private repositories on the Hugging Face Hub

    Returns:
    dict: A dictionary with the tokenizer and its type.
    )rê  rë  zTError creating pretrained tokenizer: %s. Defaulting to version without 'auth_token'.)rê  Nrû  rø  )r   rþ  rU   r  r>  )ré  rê  rë  rù  r3  s        r3   rí  rí  ×  sf   € ðMÜ×-Ñ-ØØØ!ô
ˆ	ð ,¸)ÑDÐDøô ò MÜ×ÑÐsÐuvÔwÜ×-Ñ-¨jÀ8ÔL�	ûðMús   ‚ Ÿ	A¨-AÁAc                ó6   — t        j                  | «      }d|dœS )zø
    Creates a tokenizer from a valid JSON string for use with `token_counter`.

    Args:
    json (str): A valid JSON string representing a previously serialized tokenizer

    Returns:
    dict: A dictionary with the tokenizer and its type.
    rû  rø  )r   r   )Újsonrù  s     r3   Úcreate_tokenizerr  ð  s   € ô !×)Ñ)¨$Ó/€IØ+¸)ÑDÐDr5   rO  c	                óX   — t         j                  du ry t        «       | ||||||||«	      S )zh
    The same as `litellm.litellm_core_utils.token_counter`.

    Kept for backwards compatibility.
    Tr   )rp   Údisable_token_counterr   )	rž  rï  r	  r»  Úcount_response_tokensÚtoolsÚtool_choiceÚuse_default_image_token_countÚdefault_token_counts	            r3   Útoken_counterr%  ÿ  sC   € ô. ×$Ñ$¨Ñ,Øà#Ô!Ó#ØØØØØØØØ%Øó
ð 
r5   c                ó   — g d¢}| |v ryy)zU
    Helper function to know if a provider implementation supports httpx timeout
    )r®  ÚazureÚbedrockTFr  )rŸ  Úsupported_providerss     r3   Úsupports_httpx_timeoutr*  &	  s   € ò "@ÐàÐ1Ñ1Øàr5   c                ó   — t        | |d¬«      S )aŒ  
    Check if the given model supports system messages and return a boolean value.

    Parameters:
    model (str): The model name to be checked.
    custom_llm_provider (str): The provider to be checked.

    Returns:
    bool: True if the model supports system messages, False otherwise.

    Raises:
    Exception: If the given model is not found in model_prices_and_context_window.json.
    Úsupports_system_messages©rž  rŸ  r�  ©Ú_supports_factoryr�  s     r3   r,  r,  2	  s   € ô ØØ/Ø&ôð r5   c                ó   — t        | |d¬«      S )a‚  
    Check if the given model supports web search and return a boolean value.

    Parameters:
    model (str): The model name to be checked.
    custom_llm_provider (str): The provider to be checked.

    Returns:
    bool: True if the model supports web search, False otherwise.

    Raises:
    Exception: If the given model is not found in model_prices_and_context_window.json.
    Úsupports_web_searchr-  r.  r�  s     r3   r1  r1  G	  s   € ô ØØ/Ø!ôð r5   c                ó   — t        | |d¬«      S )a„  
    Check if the given model supports URL context and return a boolean value.

    Parameters:
    model (str): The model name to be checked.
    custom_llm_provider (str): The provider to be checked.

    Returns:
    bool: True if the model supports URL context, False otherwise.

    Raises:
    Exception: If the given model is not found in model_prices_and_context_window.json.
    Úsupports_url_contextr-  r.  r�  s     r3   r3  r3  \	  s   € ô ØØ/Ø"ôð r5   c                óâ   — 	 t        j                  | |¬«      \  } }}}t        | |¬«      }|j                  dd«      }|€d}|S # t        $ r"}t        j                  d| ||«       Y d}~yd}~ww xY w)aŽ  
    Check if the given model supports native streaming and return a boolean value.

    Parameters:
    model (str): The model name to be checked.
    custom_llm_provider (str): The provider to be checked.

    Returns:
    bool: True if the model supports native streaming, False otherwise.

    Raises:
    Exception: If the given model is not found in model_prices_and_context_window.json.
    r�  Úsupports_native_streamingTNz~Model not found or error in checking supports_native_streaming support. You passed model=%s, custom_llm_provider=%s. Error: %sF)rp   r»   Ú_get_model_info_helperrw  rU   r  r<  )rž  rŸ  r1  Ú
model_infor5  r3  s         r3   r5  r5  q	  s�   € ðÜ+2×+CÑ+CØÐ-@ô,
Ñ(ˆÐ" A qô 3¸ÐTgÔhˆ
Ø$.§N¡NÐ3NÐPTÓ$UÐ!Ø$Ð,Ø(,Ð%Ø(Ð(øÜò Ü×Ñð MØØØô		
ô ûðús   ‚A A Á	A.ÁA)Á)A.c                óÂ  — 	 t         j                  } || |¬«      \  } }}}t
        j                  j                  t
        j                  j                  t
        j                  j                  t
        j                  j                  t
        j                  j                  g}||v ryt        | |d¬«      S # t        $ r"}t        j                  d| ||«       Y d}~yd}~ww xY w)ak  
    Check if the given model + provider supports 'response_schema' as a param.

    Parameters:
    model (str): The model name to be checked.
    custom_llm_provider (str): The provider to be checked.

    Returns:
    bool: True if the model supports response_schema, False otherwise.

    Does not raise error. Defaults to 'False'. Outputs logging.error.
    r�  ztModel not found or error in checking response schema support. You passed model=%s, custom_llm_provider=%s. Error: %sNFTÚsupports_response_schemar-  )rö  r»   rU   r  r<  rp   rˆ   Ú	PREDIBASEÚFIREWORKS_AIÚ	LM_STUDIOÚNEBIUSÚ
DATABRICKSr/  )rž  rŸ  r»   r1  r3  Ú*PROVIDERS_GLOBALLY_SUPPORT_RESPONSE_SCHEMAs         r3   r9  r9  “	  s×   € ð
Ü"/×"@Ñ"@ÐÙ+;À%Ð]pÔ+qÑ(ˆÐ" A qô 	×Ñ×&Ñ&Ü×Ñ×)Ñ)Ü×Ñ×&Ñ&Ü×Ñ×#Ñ#Ü×Ñ×'Ñ'ð9Ð.ð ÐHÑHØÜØØ/Ø&ôð øô) ò Ü×Ñð CØØØô		
ô ûðús   ‚B3 Â3	CÂ<CÃCc                ó   — t        | |d¬«      S )z[
    Check if the given model supports parallel tool calls and return a boolean value.
    Ú"supports_parallel_function_callingr-  r.  r�  s     r3   rA  rA  ¿	  s   € ô ØØ/Ø0ôð r5   c                ó   — t        | |d¬«      S )á‘  
    Check if the given model supports function calling and return a boolean value.

    Parameters:
    model (str): The model name to be checked.
    custom_llm_provider (Optional[str]): The provider to be checked.

    Returns:
    bool: True if the model supports function calling, False otherwise.

    Raises:
    Exception: If the given model is not found or there's an error in retrieval.
    Úsupports_function_callingr-  r.  r�  s     r3   rD  rD  Ê	  s   € ô ØØ/Ø'ôð r5   c                ó   — t        | |d¬«      S )zU
    Check if the given model supports `tool_choice` and return a boolean value.
    Úsupports_tool_choicer-  r.  r�  s     r3   rF  rF  ß	  s   € ô  5Ð>QÐWmÔnÐnr5   c                óL   — t        | |¬«      }|�|j                  |d«      du ryy)zf
    Check if the given model supports a provider specific model info and return a boolean value.
    r�  NFT)Úget_provider_inforw  )rž  rŸ  r�  Úprovider_infos       r3   Ú_supports_provider_info_factoryrJ  æ	  s1   € ô
 -°5ÐNaÔb€MàÐ  ]×%6Ñ%6°s¸EÓ%BÀdÑ%JØØr5   c                ó*  — ddl m} 	  || |«      }|�| j                  |› d�«      } |}nt        j                  | |¬«      \  } }}}t        | |¬«      }|j                  |d«      du ry|j                  |«      €Vt        | «      }|�8t        j                  j                  |«      xs i }|j                  |d«      du ryt        | ||«      }	|	�|	S y# t        $ r9}
t        j                  d|| ||
«       t        | ||«      }	|	�|	cY d}
~
S Y d}
~
yd}
~
ww xY w)	rC  r   ©Ú declared_authenticating_providerNú/r�  FTzgModel not found or error in checking %s support. You passed model=%s, custom_llm_provider=%s. Error: %s)r  rM  Úremoveprefixrp   r»   r6  rw  Ú_get_model_cost_keyÚ
model_costrJ  rU   r  r<  )rž  rŸ  r�  rM  Údeclaredr1  r7  Úbare_model_keyÚ
bare_entryÚsupported_by_providerr3  s              r3   r/  r/  ò	  sH  € õ cð-Ù:¸5ÐBUÓVˆØÐØ×&Ñ&Ø�*˜A�óˆEð #+Ñä/6×/GÑ/GØÐ1Dô0Ñ,ˆEÐ&¨¨1ô 3¸ÐTgÔhˆ
à�>‰>˜#˜uÓ%¨Ñ-ØØ�^‰^˜CÓ Ð(ô
 %8¸Ó$>ˆNØÐ)Ü$+×$6Ñ$6×$:Ñ$:¸>Ó$JÒ$PÈb�
Ø—>‘> # uÓ-°Ñ5Øä$CÀEÐK^Ð`cÓ$dÐ!Ø$Ð0Ø,Ð,àøÜò Ü×ÑØuØØØØô	
ô !@ÀÐGZÐ\_Ó `ÐØ Ð,Ø(Õ(äûðús+   ˆAC Á(AC Â>C Ã	DÃ)DÄDÄDc                óÈ  — 	 t        j                  | |¬«      }|d   }|d   }t        ||¬«      }|j                  |«      }t	        |t
        «      r|S t        |«      }|�t         j                  j                  |«      nd}	t	        |	t        «      r#|	j                  |«      }
t	        |
t
        «      r|
S y# t        $ r#}t        j                  d|| ||«       Y d}~yd}~ww xY w)aä  Return a string value the model map declares for *key*, or ``None`` when it says nothing.

    The string-valued sibling of :func:`_supports_factory` and
    :func:`_is_explicitly_disabled_factory`, public where those two are not because it is read
    from the provider configs rather than from this module, sharing their
    ``get_llm_provider`` -> ``_get_model_info_helper`` chain and their unprefixed-twin
    fallback (#20885), so a provider-prefixed entry that omits the key still answers
    from the bare entry that carries it.

    ``None`` means "the map does not say", never "the map says no" - callers decide what
    an unknown declaration implies, and for a capability gate that decision must be the
    conservative one.
    r�  r   r  Nz^Model not found or error in reading %s. You passed model=%s, custom_llm_provider=%s. Error: %s)rp   r»   r6  rw  r}  r°  rP  rQ  r¯  rU   r  r<  )rž  rŸ  r�  ÚresolvedÚresolved_modelÚresolved_providerr7  rR  rS  rT  Úbare_declaredr3  s               r3   Údeclared_value_factoryr[  2
  sÜ   € ðÜ!×2Ñ2¸ÐTgÔhˆØ (¨¡ˆØ#+¨A¡;ÐÜ2¸Ð]nÔoˆ
Ø$Ÿ.™.¨Ó-ˆÜ�h¤Ô$ØˆOÜ 3°NÓ CˆØFTÐF`œG×.Ñ.×2Ñ2°>ÔBÐfjˆ
Ü�j¤$Ô'Ø#-§>¡>°#Ó#6ˆMÜ˜-¬Ô-Ø$Ð$ØøÜò Ü×ÑØlØØØØô	
ô ûðús   ‚AB5 ÁA B5 Â5	C!Â>CÃC!c                ón  — 	 t        j                  | |¬«      \  } }}}t        | |¬«      }|j                  |«      }|du ry|€Dt	        | «      }|�7t         j
                  j                  |«      xs i }|j                  |«      du ryy# t        $ r#}t        j                  d|| ||«       Y d}~yd}~ww xY w)ub  Return True only when the model map explicitly sets *key* to ``False``.

    This is the opt-out mirror of :func:`_supports_factory`.  Where
    ``_supports_factory`` requires an explicit ``True`` to return ``True``,
    this function requires an explicit ``False``.  A missing key (``None``)
    is treated as *not* disabled so that unknown or newly-added models are
    allowed through without any model-map entry.

    Uses the same ``get_llm_provider`` â†’ ``_get_model_info_helper`` chain as
    ``_supports_factory`` so caching, fallback, and normalisation improvements
    apply here automatically.
    r�  FTNznModel not found or error in checking %s disabled state. You passed model=%s, custom_llm_provider=%s. Error: %s)	rp   r»   r6  rw  rP  rQ  rU   r  r<  )	rž  rŸ  r�  r1  r7  ÚvalrS  rT  r3  s	            r3   Ú_is_explicitly_disabled_factoryr^  Z
  sÇ   € ðÜ+2×+CÑ+CØÐ-@ô,
Ñ(ˆÐ" A qô 3¸ÐTgÔhˆ
Ø—^‘^ CÓ(ˆØ�%‰<ØØˆ;Ü$7¸Ó$>ˆNØÐ)Ü$+×$6Ñ$6×$:Ñ$:¸>Ó$JÒ$PÈb�
Ø—>‘> #Ó&¨%Ñ/ØØøÜò Ü×ÑØ|ØØØØô	
ô ûðús   ‚>B ÁAB Â	B4ÂB/Â/B4c                ó   — t        | |d¬«      S )zECheck if a given model supports audio input in a chat completion callÚsupports_audio_inputr-  r.  r�  s     r3   r`  r`  �
  ó   € ä 5Ð>QÐWmÔnÐnr5   c                ó   — t        | |d¬«      S )zCCheck if a given model supports pdf input in a chat completion callÚsupports_pdf_inputr-  r.  r�  s     r3   rc  rc  †
  s   € ä 5Ð>QÐWkÔlÐlr5   c                ó   — t        | |d¬«      S )zFCheck if a given model supports audio output in a chat completion callr`  r-  r.  r�  s     r3   Úsupports_audio_outputre  ‹
  ra  r5   c                ó   — t        | |d¬«      S )a�  
    Check if the given model supports prompt caching and return a boolean value.

    Parameters:
    model (str): The model name to be checked.
    custom_llm_provider (Optional[str]): The provider to be checked.

    Returns:
    bool: True if the model supports prompt caching, False otherwise.

    Raises:
    Exception: If the given model is not found or there's an error in retrieval.
    Úsupports_prompt_cachingr-  r.  r�  s     r3   rg  rg  �
  s   € ô ØØ/Ø%ôð r5   c                ó   — t        | |d¬«      S )NÚ supports_prompt_cache_breakpointr-  r.  r�  s     r3   ri  ri  ¥
  s   € ÜØØ/Ø.ôð r5   c                ó   — t        | |d¬«      S )a‰  
    Check if the given model supports computer use and return a boolean value.

    Parameters:
    model (str): The model name to be checked.
    custom_llm_provider (Optional[str]): The provider to be checked.

    Returns:
    bool: True if the model supports computer use, False otherwise.

    Raises:
    Exception: If the given model is not found or there's an error in retrieval.
    Úsupports_computer_user-  r.  r�  s     r3   rk  rk  ­
  s   € ô ØØ/Ø#ôð r5   c                ó   — t        | |d¬«      S )a  
    Check if the given model supports vision and return a boolean value.

    Parameters:
    model (str): The model name to be checked.
    custom_llm_provider (Optional[str]): The provider to be checked.

    Returns:
    bool: True if the model supports vision, False otherwise.
    Úsupports_visionr-  r.  r�  s     r3   rm  rm  Â
  s   € ô ØØ/Øôð r5   c                ó   — t        | |d¬«      S )zQ
    Check if the given model supports reasoning and return a boolean value.
    Úsupports_reasoningr-  r.  r�  s     r3   ro  ro  Ô
  s   € ô  5Ð>QÐWkÔlÐlr5   c                ó   — t        | |d¬«      S )za
    Check if the given model supports native structured outputs and return a boolean value.
    Ú!supports_native_structured_outputr-  r.  r�  s     r3   rq  rq  Û
  s   € ô ØØ/Ø/ôð r5   c                ój  — 	 t        j                  | |¬«      \  } }}}t        | |¬«      }|j                  d«      }|€yt         j                  j                  |i «      }|j                  dd«      }|€yt        |t        «      r|S y# t        $ r"}t        j                  d| ||«       Y d}~yd}~ww xY w)zÎ
    Get a list of supported regions for a given model and provider.

    Parameters:
    model (str): The model name to be checked.
    custom_llm_provider (Optional[str]): The provider to be checked.
    r�  r�  NÚsupported_regionszvModel not found or error in checking supported_regions support. You passed model=%s, custom_llm_provider=%s. Error: %s)
rp   r»   r6  rw  rQ  r}  r­  rU   r  r<  )rž  rŸ  r1  r7  Ú	model_keyÚmodel_cost_datars  r3  s           r3   Úget_supported_regionsrv  æ
  sÌ   € ð Ü+2×+CÑ+CØÐ-@ô,
Ñ(ˆÐ" A qô 3¸ÐTgÔhˆ
ð &Ÿ>™>¨%Ó0ˆ	ØÐØä!(×!3Ñ!3×!7Ñ!7¸	À2Ó!FˆØ#2×#6Ñ#6Ð7JÈDÓ#QÐØÐ$Øô
 Ð'¬Ô.Ø$Ð$àøÜò Ü×Ñð EØØØô		
ô ûðús"   ‚<B ¿4B Á4B Â	B2ÂB-Â-B2c                ó   — t        | |d¬«      S )z]
    Check if the given model supports embedding image input and return a boolean value.
    Úsupports_embedding_image_inputr-  r.  r�  s     r3   rx  rx    s   € ô ØØ/Ø,ôð r5   c                ó   — |j                  «       D ]z  \  }}|€Œ	t        |t        «      rt        |«      | |<   Œ(t        |t        «      r>| j                  |«      }t        |t        «      r|j                  |«       || |<   Œp|| |<   Œv|| |<   Œ| | S r;   )rŠ  r}  r°  Ú_convert_stringified_numbersr¯  rw  rO   )Úexisting_dictÚnew_dictr`  ra  Úexisting_nested_dicts        r3   Ú_update_dictionaryr~    s”   € Ø—‘Ó ò %‰ˆˆ1Ø‰=ä˜!œSÔ!Ü#?ÀÓ#B�˜aÒ Ü˜AœtÔ$Ø'4×'8Ñ'8¸Ó';Ð$ÜÐ2´DÔ9Ø(×/Ñ/°Ô2Ø';�M !Ò$à'(�M !Ò$à#$�˜aÒ ð%ð Ðr5   c                ó®   — t        | t        «      r-	 d| j                  «       v sd| v rt        | «      S t	        | «      S | S # t
        t        f$ r | cY S w xY w)zYConvert stringified numbers (including scientific notation) to appropriate numeric types.r3  ú.)r}  r°  rœ  rN  rO  rU  rt  )rŽ  s    r3   rz  rz  0  s]   € ä�%œÔð		à�e—k‘k“mÑ# s¨e¡|Ü˜U“|Ð#ô ˜5“zÐ!ð €Løô œIÐ&ò 	àŠLð	ús   ’ A  ³
A  Á AÁA)zus.zeu.zapac.zjp.zau.zus-gov.zglobal.zap-northeast-1.Ú_BEDROCK_REGION_PREFIXES)Úcache_creation_input_token_costÚ)cache_creation_input_token_cost_above_1hrÚ1cache_creation_input_token_cost_above_200k_tokensÚcache_read_input_token_costÚ-cache_read_input_token_cost_above_200k_tokensÚ_CACHE_PRICING_FIELDSc                óN  — g }| j                  d«      }d}|t        |«      dz
  k  rP||   t        v rE|dz  }|j                  dj	                  ||d «      «       |t        |«      dz
  k  r||   t        v rŒE|r|d   n| }t
        D ]1  }|j                  |«      sŒ|j                  |t        |«      d «       Œ3 |r#t        ||¬«      }||k7  r|j                  |«       |D ]B  }t        j                  j                  |«      }	|	€Œ%|	j                  d«      €Œ7t        |	«      c S  y)aÁ  Best-effort lookup of a built-in ``model_cost`` entry for a custom key
    whose shape ``get_model_info`` cannot resolve (repeated provider prefixes
    like ``bedrock/bedrock/bedrock/us.anthropic.claude-sonnet-4-6`` or region
    aliases).

    Returns a copy of the matching entry so the caller can inherit its defaults
    (most importantly cache pricing) without mutating the shared built-in.
    Returns ``None`` when no safe match exists.
    rN  r   r  Néÿÿÿÿr�  Úlitellm_provider)r£  rø  r‰   rI  r   r�  Ú
startswithÚ_strip_model_namerp   rQ  rw  r¯  )
r�  rF  Ú
candidatesÚsegmentsr¶  ÚbaseÚregion_prefixÚstrippedÚ	candidateÚentrys
             r3   Ú!_resolve_builtin_model_cost_entryr”  T  s0  € ð $&€JØ—i‘i “n€HØ
€CØ
”�H“ Ñ!Ò
! h¨s¡m´Ñ&FØˆq‰ˆØ×Ñ˜#Ÿ(™( 8¨C¨D >Ó2Ô3ð ”�H“ Ñ!Ò
! h¨s¡m´Ò&Fñ %/�*˜R’.°C€DÜ1ò :ˆØ�?‰?˜=Õ)Ø×Ñ˜d¤3 }Ó#5Ð#7Ð8Õ9ð:ñ Ü+°$ÈHÔUˆØ�tÒØ×Ñ˜hÔ'àò ˆ	Ü×"Ñ"×&Ñ& yÓ1ˆØÑ §¡Ð+=Ó!>Ñ!JÜ˜“;Òðð r5   c                óŠ   — 	 t        | ¬«      }|d   t        j                  v r|S t	        |d   «      €|S y# t        $ r Y yw xY w)a¹  Resolve ``model`` to its built-in cost-map entry for registration merging.

    Returns ``None`` when the lookup raises or when it resolved via a
    fallback-generalization capability rule, detected as the resolved key missing
    ``litellm.model_cost`` while matching a capability rule. A rule-derived entry
    carries no pricing, so treating it as a hit would skip the built-in
    cache-pricing inheritance for prefix-mangled keys.
    rì  Nr�  )Úget_model_inforU   rp   rQ  r-   )rž  r=  s     r3   Ú(_get_builtin_model_info_for_registrationr—  v  sU   € ðÜ$¨5Ô1ˆð ˆE�{”g×(Ñ(Ñ(ØˆÜ'¨¨U©Ó4Ð<ØˆØøô ò Ùðús   ‚6 ¶	AÁAz#Final[dict[str, dict[str, object]]]Ú_runtime_registered_model_costc                  ó    — e Zd ZU dZdZded<   y)Ú_LiveDeploymentReplayz×Single-slot holder for the callback that rebuilds live router deployments.

    A class attribute rather than a module global so there is one writer and one
    reader, and neither needs a ``global`` statement.
    NzCallable[[], None] | Nonerc  )r‡  Ú
__module__Ú__qualname__Ú__doc__rc  Ú__annotations__r  r5   r3   rš  rš  �  s   … ñð +/€HÐ'Ô.r5   rš  c                ó   — | t         _        y)aj  Install the callback that re-asserts live router deployments after a refresh.

    ``litellm.router`` installs this at import time. The seam exists because the
    deployment metadata a refresh has to restore belongs to whichever Router
    objects are alive at that moment, which this module cannot see, and importing
    the router here would be circular.
    N)rš  rc  )Úreplays    r3   Úset_live_deployment_replayr¡  —  s   € ð &,ÔÕ"r5   c                 óŒ   — t         j                  �t         j                  «        t        rt        t	        t        «      ¬«       yy)aÞ  Re-apply runtime model metadata on top of a freshly adopted cost map.

    Adopting a new catalog replaces ``litellm.model_cost`` wholesale, which on
    its own discards everything registered at runtime: the deployment
    ``model_info`` the Router registers from ``model_list``, and pricing
    overrides passed to ``register_model``. Both are re-applied here so a price
    data reload only updates pricing rather than erasing operator-supplied model
    metadata.

    The two are restored differently, and the difference is what keeps this
    bounded. Deployment metadata is re-derived from the routers that are alive
    right now, so a deployment that has been deleted or repointed, and a router
    that has been discarded, are simply not part of the rebuild; nothing has to
    withdraw them and nothing accumulates. Only ``register_model`` calls that
    have no such owner are recorded and replayed, and a registration describing
    a single request opts out of even that.
    N)rQ  )rš  rc  r˜  Úregister_modelr¯  r  r5   r3   Ú(reapply_runtime_model_cost_registrationsr¤  ¢  s2   € ô$ ×%Ñ%Ð1Ü×&Ñ&Ô(Ý%Ü¤$Ô'EÓ"FÖGð &r5   )Úpersist_across_reloadsÚwarning_display_namec               ó  ‡— i }t        | t        «      r| }n&t        | t        «      rt        j                  | ¬«      }|r,|}|j                  «       D ]  \  }}t        |«      t        |<   Œ t        }|j                  «       D �]�  \  }}	|	j                  dd«      }
t        |«      Š|
|v st        ˆfd„|D «       «      r#t        j                  j                  |i «      }|}nÞt        ‰¬«      }|�t        t        |«      }|d   }nºi }|}t        ‰|
¬«      }|�8t        D ].  }|	j                  |«      �Œ|j                  |«      €Œ'||   ||<   Œ0 no|	j                  d	«      €^|	j                  d
«      €M|	j                  d«      €<|	j                  d«      €|	j                  d«      �t        j                   d|xs |«       |j                  d«      €|j#                  dd«       t        j                  j                  |«      }|€t        j                  j                  |«      }|€i }dD ]  }||vsŒ||	vsŒ|j#                  |d«       Œ  t%        ||	«      }t        j                  j'                  |i «      j)                  |«       t+        «        t        j,                  d||«       |	j                  d«      dk(  r5|t        j.                  vs�ŒKt        j.                  j1                  |«       �Œl|	j                  d«      dk(  r5|t        j2                  vs�Œ”t        j2                  j1                  |«       �Œµ|	j                  d«      dk(  r5|t        j4                  vs�ŒÝt        j4                  j1                  |«       �Œþ|	j                  d«      dk(  r5|t        j6                  vs�Œ&t        j6                  j1                  |«       �ŒG|	j                  d«      dk(  rM|j9                  dd«      }|d   t        j:                  vs�Œ„t        j:                  j1                  |d   «       �Œ¨|	j                  d«      dk(  r5|t        j<                  vs�ŒÐt        j<                  j1                  |«       �Œñ|	j                  d«      dk(  r5|t        j>                  vs�Œt        j>                  j1                  |«       �Œ:|	j                  d«      dk(  r5|t        j@                  vs�Œbt        j@                  j1                  |«       �Œƒ|	j                  d«      dk(  r5|t        jB                  vs�Œ«t        jB                  j1                  |«       �ŒÌ|	j                  d«      dk(  r5|t        jD                  vs�Œôt        jD                  j1                  |«       �Œ|	j                  d«      dk(  r5|t        jF                  vs�Œ=t        jF                  j1                  |«       �Œ^|	j                  d«      dk(  r5|t        jH                  vs�Œ†t        jH                  j1                  |«       �Œ§|	j                  d«      d k(  r5|t        jJ                  vs�ŒÏt        jJ                  j1                  |«       �Œð|	j                  d«      d!k(  r5|t        jL                  vs�Œt        jL                  j1                  |«       �Œ9|	j                  d«      d"k(  s�ŒO|t        jN                  vs�Œct        jN                  j1                  |«       �Œ„ | S )#aß  
    Register new / Override existing models (and their pricing) to specific providers.
    Provide EITHER a model cost dictionary or a url to a hosted json blob
    Example usage:
    model_cost_dict = {
        "gpt-4": {
            "max_tokens": 8192,
            "input_cost_per_token": 0.00003,
            "output_cost_per_token": 0.00006,
            "litellm_provider": "openai",
            "mode": "chat"
        },
    }

    ``persist_across_reloads`` controls whether the registration is replayed
    when the cost map is refreshed. It defaults to True because a caller
    registering a model is declaring durable intent. Pass False for a
    registration that only describes one request, so it is dropped rather than
    re-asserted over every future catalog.

    ``warning_display_name`` names the model in the missing-cache-pricing
    warning instead of the registered key, for callers that register under an
    opaque key (e.g. the router's hashed deployment ids).
    ©ÚurlrŠ  rØ  c              3  óF   •K  — | ]  }‰j                  |› d �«      –— Œ y­w)rN  N)r‹  )r@   rA   Ú_key_strs     €r3   rB   z!register_model.<locals>.<genexpr>ë  s'   øè ø€ ò =
Ø-.ˆH×Ñ 1 # Q ×(ñ=
ùs   ƒ!rì  Nr�  )r�  rF  r‚  r…  Útiered_pricingÚinput_cost_per_tokenÚoutput_cost_per_tokena'  register_model: model=%s has custom pricing but not in built-in cost map and no prefix/region variant matched; cache_creation_input_token_cost and cache_read_input_token_cost will default to 0 for this model (input/output cost tracking is unaffected). To track cache cost, add them to model_info)r­  r®  z0added/updated model=%s in litellm.model_cost: %sr®  útext-completion-openaiÚcohereÚ	anthropicÚ
openrouterrN  r  r‰  Úvercel_ai_gatewayzvertex_ai-text-modelszvertex_ai-code-text-modelszvertex_ai-chat-modelszvertex_ai-code-chat-modelsÚai21Ú	nlp_cloudÚaleph_alphar(  Únovita)(r}  r¯  r°  rp   Úget_model_cost_maprŠ  r˜  r+   rw  rF   rQ  r—  rª   r”  r‡  r  rõ  r÷  r~  Ú
setdefaultrO   Ú$_invalidate_model_cost_lowercase_mapr<  Úopen_ai_chat_completion_modelsÚaddÚopen_ai_text_completion_modelsrý  rÿ  r£  Úopenrouter_modelsÚvercel_ai_gateway_modelsÚvertex_text_modelsÚvertex_code_text_modelsÚvertex_chat_modelsÚvertex_code_chat_modelsÚai21_modelsÚnlp_cloud_modelsÚaleph_alpha_modelsÚbedrock_modelsÚnovita_models)rQ  r¥  r¦  Úloaded_model_costÚ_registrationsÚ_registered_keyÚ_registered_valueÚ_skip_get_model_info_providersr�  rŽ  rF  Úexisting_modelÚmodel_cost_keyÚbuiltin_model_infoÚbuiltin_entryr   Ú
_raw_entryÚ_cost_fieldÚupdated_dictionaryÚsplit_stringr«  s                       @r3   r£  r£  º  sö  ø€ ð> ÐÜ�*œdÔ#à&ÑÜ	�J¤Ô	$Ü#×6Ñ6¸:ÔFÐáØDUˆØ2@×2FÑ2FÓ2Hò 	VÑ.ˆOÐ.Ü>BÐCTÓ>UÔ*¨?Ò;ð	Vô -YÐ"à'×-Ñ-Ó/ó n/‰
ˆˆUà—9‘9Ð/°Ó4ˆÜ�s“8ˆØÐ5Ñ5¼ó =
Ø2Pô=
ô :
ô %×/Ñ/×3Ñ3°C¸Ó<ˆNØ ‰Nä!IÐPXÔ!YÐØ!Ð-Ü!%¤dÐ,>Ó!?�Ø!/°Ñ!6‘à!#�Ø!$�Ü AÀhÐYaÔ b�Ø Ð,Ü!6ò I˜Ø Ÿ9™9 UÓ+Ñ3¸×8IÑ8IÈ%Ó8PÑ8\Ø4AÀ%Ñ4H˜N¨5Ò1ñIð —I‘IÐ?Ó@ÐHØŸ	™	Ð"?Ó@ÐHØŸ	™	Ð"2Ó3Ð;àŸ	™	Ð"8Ó9ÐEÈÏÉÐSjÓIkÐIwô #×*Ñ*ð BØ,Ò3°ôð ×ÑÐ0Ó1Ð9Ø×ÑÐ1°4Ô8ô ×'Ñ'×+Ñ+¨NÓ;ˆ
ØÐÜ ×+Ñ+×/Ñ/°Ó4ˆJØÐØˆJØLò 	6ˆKØ *Ò,°ÀEÒ1IØ×"Ñ" ;°Õ5ð	6ô 0°ÀÓFÐÜ×Ñ×%Ñ% n°bÓ9×@Ñ@ÐASÔTô 	-Ô.ä×ÑÐOÐQ_ÐaoÔpà�9‰9Ð'Ó(¨HÒ4Øœ'×@Ñ@Ó@Ü×6Ñ6×:Ñ:¸3Ö?Ø�Y‰YÐ)Ó*Ð.FÒFØœ'×@Ñ@Ó@Ü×6Ñ6×:Ñ:¸3Ö?Ø�Y‰YÐ)Ó*¨hÒ6Øœ'×/Ñ/Ó/Ü×%Ñ%×)Ñ)¨#Ö.Ø�Y‰YÐ)Ó*¨kÒ9Øœ'×2Ñ2Ó2Ü×(Ñ(×,Ñ,¨SÖ1Ø�Y‰YÐ)Ó*¨lÒ:ØŸ9™9 S¨!Ó,ˆLØ˜BÑ¤w×'@Ñ'@Ó@Ü×)Ñ)×-Ñ-¨l¸2Ñ.>Ö?Ø�Y‰YÐ)Ó*Ð.AÒAØœ'×:Ñ:Ó:Ü×0Ñ0×4Ñ4°SÖ9Ø�Y‰YÐ)Ó*Ð.EÒEØœ'×4Ñ4Ó4Ü×*Ñ*×.Ñ.¨sÖ3Ø�Y‰YÐ)Ó*Ð.JÒJØœ'×9Ñ9Ó9Ü×/Ñ/×3Ñ3°CÖ8Ø�Y‰YÐ)Ó*Ð.EÒEØœ'×4Ñ4Ó4Ü×*Ñ*×.Ñ.¨sÖ3Ø�Y‰YÐ)Ó*Ð.JÒJØœ'×9Ñ9Ó9Ü×/Ñ/×3Ñ3°CÖ8Ø�Y‰YÐ)Ó*¨fÒ4Øœ'×-Ñ-Ó-Ü×#Ñ#×'Ñ'¨Ö,Ø�Y‰YÐ)Ó*¨kÒ9Øœ'×2Ñ2Ó2Ü×(Ñ(×,Ñ,¨SÖ1Ø�Y‰YÐ)Ó*¨mÒ;Øœ'×4Ñ4Ó4Ü×*Ñ*×.Ñ.¨sÖ3Ø�Y‰YÐ)Ó*¨iÒ7Øœ'×0Ñ0Ó0Ü×&Ñ&×*Ñ*¨3Ö/Ø�Y‰YÐ)Ó*¨hÔ6Øœ'×/Ñ/Ó/Ü×%Ñ%×)Ñ)¨#Ö.ð]n/ð^ Ðr5   c                ó2   — |�t        |t        «      r| |v ryy©NTF)r}  r­  ©r`  Úadditional_drop_paramss     r3   Ú_should_drop_paramrÚ  Y  s"   € ØÐ)¬jÐ9OÔQUÔ.VÐ[\Ð`vÑ[vØàr5   c                ó€   — i }| j                  «       D ](  \  }}||v sŒ|||   k7  sŒt        ||¬«      du sŒ$|||<   Œ* |S )NrØ  F)rŠ  rÚ  )Úpassed_paramsÚdefault_paramsrÙ  Únon_default_paramsr`  ra  s         r3   Ú_get_non_default_paramsrß  `  s]   € Ø "ÐØ×#Ñ#Ó%ò &‰ˆˆ1à�ÒØ�^ AÑ&Ó&Ü" QÐ?UÔVÐZ_Ò_à$%Ð˜qÒ!ð&ð Ðr5   c           
     óF  ‡‡‡— ddl m}	 t        «       }
|
j                  d«       |
j                  d«      Š|
j                  d«      Š|
j                  d«      }|j	                  «       D ]
  \  }}||
|<   Œ d d d d d dœ}|
j	                  «       D ��ci c]  \  }}||v sŒ|||   k7  sŒ||“Œ c}}Ši }ˆˆˆfd„}d }‰� t
        j                  | t        ‰«      ¬	«      }‰d
k(  s‰dk(  r‰}n’‰dk(  rWt        j                  «       j                  «       } ||¬«       t        j                  «       j                  ‰|| ‰�‰nd¬«      }n6|�4|j                  | ¬«      } ||¬«       |j                  ‰|| ‰�‰nd¬«      }t        ||
‰|	|j                  dd «      ¬«      }|S c c}}w )Nr   ©ÚOPENAI_TRANSCRIPTION_PARAMSrâ  rŸ  Údrop_paramsrx  )ÚlanguagerÒ  rg  ÚtemperatureÚtimestamp_granularitiesc                ó  •— t        ‰j                  «       «      dkD  rdt        ‰j                  «       «      }|D ]D  }‰du st        j                  du r|| vr‰j                  |d «       Œ0|| vsŒ5t        dd‰› d�¬«      ‚ ‰S y )Nr   Téô  z1Setting user/encoding format is not supported by ú=. To drop it from the call, set `litellm.drop_params = True`.©Ústatus_coderÔ  ©rø  Úkeysr­  rp   rã  r÷  r  )Úsupported_paramsrí  r`  rŸ  rã  rÞ  s      €€€r3   Ú_check_valid_argz;get_optional_params_transcription.<locals>._check_valid_arg�  s§   ø€ ÜÐ!×&Ñ&Ó(Ó)¨AÒ-ÜÐ1×6Ñ6Ó8Ó9ˆDØò 	�à 4Ñ'¬7×+>Ñ+>À$Ñ+FØÐ/Ñ/Ø&×*Ñ*¨1¨dÕ3ØÐ.Ò.Ü0Ø$'Ø"SÐTgÐShð  ifð  !gôð ð	ð &Ð%ð .r5   ©rž  rF  r®  r'  Úgroq©rî  F©rÞ  ró  rž  rã  rì  rÙ  ©ró  rÜ  rŸ  Úopenai_paramsrÙ  )Úlitellm.constantsrâ  Úlocalsr÷  rŠ  ÚProviderConfigManagerÚ'get_provider_audio_transcription_configrˆ   rp   ÚGroqSTTConfigÚget_supported_openai_params_sttÚmap_openai_params_sttr¼   Úmap_openai_paramsÚ/add_provider_specific_params_to_optional_paramsrw  )rž  rŸ  rä  rÒ  rg  rå  ræ  rã  rx  râ  rÜ  Úspecial_paramsr`  ra  rÝ  ró  rï  Úprovider_configrî  rÞ  s    `     `           @r3   Ú!get_optional_params_transcriptionr  m  sú  ú€ õ >ô "›8€Mà×ÑÐ3Ô4Ø'×+Ñ+Ð,AÓBÐØ×#Ñ# MÓ2€KØ2?×2CÑ2CÀHÓ2M€NØ×$Ñ$Ó&ò ‰ˆˆ1Øˆ�aÒðð ØØØØ#'ñ€Nð ,9×+>Ñ+>Ó+@×u¡4 1 aÀQÈ.ÒEXÐ]^ÐbpÐqrÑbsÓ]s˜!˜Q™$ÓuÐØ€Oö&ð <@€OØÐ&Ü/×WÑWØÜ!Ð"5Ó6ð Xó 
ˆð
 ˜hÒ&Ð*=ÀÒ*HØ,‰Ø	 Ò	&Ü"×0Ñ0Ó2×RÑRÓTÐÙÐ*:Õ;Ü!×/Ñ/Ó1×GÑGØ1Ø+ØØ'2Ð'>™ÀEð	 Hó 
‰ð 
Ð	$Ø*×FÑFÈUÐFÓSÐÙÐ*:Õ;Ø)×;Ñ;Ø1Ø+ØØ'2Ð'>™ÀEð	 <ó 
ˆô FØ'Ø#Ø/Ø1Ø%Ÿz™zÐ*BÀDÓIô€Oð Ðùóo vs   ÂFÂFÂ&Fc                ó<   — | €yddddddœ}|j                  | d«      S )z3Map OpenAI size parameter to Vertex AI aspectRatio.z1:1z16:9z9:16)Ú256x256Ú512x512Ú	1024x1024Ú	1792x1024Ú	1024x1792rv  )ÚsizeÚsize_to_aspect_ratios     r3   Ú*_map_openai_size_to_vertex_ai_aspect_ratior
  Æ  s8   € à€|Øð
 ØØØØñ#Ðð  ×#Ñ# D¨%Ó0Ð0r5   c           
     ó  ‡ ‡‡‡‡— t        «       Š‰j                  dd «      Š ‰j                  d«      Š‰j                  dd «      }
‰j                  dd «      Š‰j                  dd «      }	‰j                  d«      }|j                  «       D ]L  \  }}|j                  d«      r
‰dk7  r‰d	k7  s
|d
k(  r‰d	k7  rŒ,|j                  d«      r‰dk7  r‰dk7  rŒH|‰|<   ŒN d d d d d d d d d dœ	}t	        ‰||	¬«      Ši }ˆˆˆ ˆˆfd„}|
�=|
j                  ‰ xs d¬«      } ||¬«       |
j                  ‰|‰ xs d‰�‰nd¬«      }n¦‰dk(  s‰dk(  s‰t        j                  v r‰}n‡‰dk(  rOt        j                  j                  ‰ ¬«      }|j                  ‰ ¬«      } ||¬«       |j                  ‰i ¬«      }n3‰dk(  r.ddg}	  ||¬«       |�t        |«      |d<   |�t        |«      |d<   t        |j                  «       «      }|
�!|
j                  ‰ xs d¬«      }t        |«      }t        |‰‰xs d||	¬«      }|j                  «       D ��ci c]0  \  }}|€Œ	t!        |t"        t        f«      rt%        |«      dkD  sŒ.||“Œ2 }}}|S c c}}w )Nrž  rŸ  r   rã  rÙ  rx  Úaws_r(  Ú	sagemakerr�  Úvertex_r˜  r™  )	ÚnÚqualityrg  r  Ústylerò  ÚimageConfigr!  Úweb_search_options)rÜ  rÝ  rÙ  c                ó6  •— t        ‰j                  «       «      dkD  r|t        ‰j                  «       «      }|D ]\  }t        j                  du s‰du r)|| vr%‰j                  |d «       ‰j                  |d «       ŒB|| vsŒGt        dd|› d‰› d‰› d�¬«      ‚ ‰S y )	Nr   Trè  z	Setting `z` is not supported by ú, ré  rê  rì  )rî  rí  r`  rŸ  rã  rž  rÞ  rÜ  s      €€€€€r3   rï  z7get_optional_params_image_gen.<locals>._check_valid_arg  sÇ   ø€ ÜÐ!×&Ñ&Ó(Ó)¨AÒ-ÜÐ1×6Ñ6Ó8Ó9ˆDØò 
�ä×'Ñ'¨4Ñ/°;À$Ñ3FØÐ/Ñ/Ø&×*Ñ*¨1¨dÔ3Ø!×%Ñ% a¨Õ.ØÐ.Ò.Ü0Ø$'Ø"+¨A¨3Ð.DÐEXÐDYÐY[Ð\aÐ[bð  c`ð  !aôð ð
ð &Ð%ð .r5   rØ  rì  rò  Fró  r®  r'  ©rÞ  ró  r  r  ÚsampleCountÚaspectRatiorô  r   )r÷  r÷  rŠ  r‹  rß  r¼   rý  rp   Úopenai_compatible_providersÚBedrockImageGenerationÚget_config_classrO  r
  r­  rí  rþ  r}  r¯  rø  )rž  r  r  rg  r  r  rò  r  rŸ  rÙ  r   rã  rx  rÿ  r`  ra  rÝ  ró  rï  rî  Úconfig_classrõ  rÞ  rÜ  s   `       `  `          @@r3   Úget_optional_params_image_genr  ×  s  ü€ ô  "›8€MØ×Ñ˜g tÓ,€EØ'×+Ñ+Ð,AÓBÐØ#×'Ñ'Ð(9¸4Ó@€OØ×#Ñ# M°4Ó8€KØ*×.Ñ.Ð/GÈÓNÐØ2?×2CÑ2CÀHÓ2M€NØ×$Ñ$Ó&ò ‰ˆˆ1à�L‰L˜Ô Ø$¨	Ò1Ð6IÈ[Ò6XØ�OÒ#Ø# {Ò2àà�L‰L˜Ô#Ð(;¸{Ò(JÐObÐfvÒOvàØˆ�aÒðð ØØØØØØØØ"ñ
€Nô !8Ø#Ø%Ø5ô!Ðð
 *,€O÷&ð &ð  Ð"Ø*×FÑFÈUÊ[ÐVXÐFÓYÐÙÐ*:Õ;Ø)×;Ñ;Ø1Ø+Ø’+˜2Ø'2Ð'>™ÀEð	 <ó 
‰ð 	˜xÒ'Ø 'Ò)Ø¤'×"EÑ"EÑEà,‰Ø	 	Ò	)Ü%×<Ñ<×MÑMÐTYÐMÓZˆØ'×CÑCÈ%ÐCÓPÐÙÐ*:Õ;Ø&×8Ñ8ÐL^ÐprÐ8Ós‰Ø	 Ò	+Ø ˜=Ðð	ñ 	Ð*:Õ;Øˆ=Ü-0°«VˆO˜MÑ*ð ÐÜ-WÐX\Ó-]ˆO˜MÑ*ä# N×$7Ñ$7Ó$9Ó:€MØÐ"Ø*×FÑFÈUÊ[ÐVXÐFÓYÐÜÐ-Ó.ˆäEØ'Ø#Ø/Ò5°2Ø#Ø5ô€Oð )×.Ñ.Ó0÷Ù��A°A±MÌ:ÐVWÔZ^Ô`dÐYeÔKfÔjmÐnoÓjpÐstÓjtˆˆ1‰ð€Oñ ð Ðùós   É
J É$J É6J c           
     ó&  ‡ ‡‡‡— t        t        j                  t           d«      }	t	        «       }
|
j                  dd «      Š|
j                  d«      }|
j                  dd «      Š|
j                  dd «      }|
j                  dd «      xs g }|
j                  dd «       d;ˆˆˆ ˆfd„}t        j                  |
|‰|‰ ¬«      Šd }i }‰�@‰t        j                  j                  «       v r t        j                  ‰ t        ‰«      ¬	«      }|�a|j                  ‰ ¬
«      } ||¬«       |j                  ‰i ‰ ‰�‰nd¬«      }|�rî|D ]#  }|t        v rŒ||
v sŒ|
|   €Œ||vsŒ|
|   ||<   Œ% �nÄ‰dk(  rL‰ �Fd‰ vrBd‰v r>d|xs g vr6t         j"                  du s‰du r‰j                  dd «       nt%        dd¬«      ‚‰}�ns‰dk(  rA |	‰ ‰d¬«      } ||¬«       t!        j&                  «       j                  ‰i ‰ ‰�‰nd¬«      }�n-‰dk(  r? |	‰ xs ddd¬«      } ||¬«       t!        j(                  «       j                  ‰i ¬«      }�né‰dk(  r< |	‰ xs ddd¬«      } ||¬«       t         j*                  j                  ‰i |¬«      }�n¨‰dk(  s‰dk(  rd‰j-                  d«      d k(  r‰j                  d«        |	‰ dd¬«      } ||¬«       t!        j.                  «       j                  ‰i |¬«      \  }}�n:‰d!k(  rRt!        j0                  «       j                  «       } ||¬«       t!        j0                  «       j                  ‰i ¬«      }�nã‰d"k(  rçd#‰ v rt!        j2                  «       }n d$‰ v rt!        j4                  «       }n‡d%‰ v rt!        j6                  «       }nnd&‰ v rt!        j8                  «       }nUd'‰ v sd(‰ v rt!        j:                  «       }n8d)‰ j=                  «       v rt!        j>                  «       }ng } ||¬«       i |¥}|S |j                  «       } ||¬«       |j                  ‰i ¬«      }�n÷‰d*k(  r; |	‰ d*d¬«      } ||¬«       t!        j@                  «       j                  ‰i ¬«      }�n·‰d+k(  rA |	‰ d+d¬«      } ||¬«       t!        jB                  «       j                  ‰i ‰ ‰�‰nd¬«      }�nq‰d,k(  rÝ |	‰ d,d¬«      } ||¬«       t         jD                  jG                  ‰ «      r,t!        jD                  «       j                  ‰i ‰ ‰�‰nd¬«      }nvt         jH                  jK                  ‰ «      r,t!        jH                  «       j                  ‰i ‰ ‰�‰nd¬«      }n+t!        jL                  «       j                  ‰i ‰ ‰�‰nd¬«      }i |¥|¥}|S ‰d-k(  rA |	‰ d-d¬«      } ||¬«       t!        jN                  «       j                  ‰i ‰ ‰�‰nd¬«      }�nI‰d.k(  rG |	‰ d.d¬«      } ||¬«       t!        jP                  «       j                  ‰i ‰ ‰�‰nd¬«      }i |¥|¥}|S ‰d/k(  r< |	‰ d/d¬«      } ||¬«       t!        jR                  «       j                  ‰i ‰ ¬0«      }�n¼‰d1k(  rA |	‰ d1d¬«      } ||¬«       t!        jT                  «       j                  ‰i ‰ ‰�‰nd¬«      }�nv‰d2k(  rA |	‰ d2d¬«      } ||¬«       t!        jV                  «       j                  ‰i ‰ ‰�‰nd¬«      }�n0‰d3k(  r‘d‰v r‰j                  d«      |d<   tY        ‰j[                  «       «      d4kD  r÷t         j"                  du s‰du r3t]        ‰j[                  «       «      }|D ]  }‰j                  |d «       Œ n®t%        dd5‰› d6‰› d7�¬«      ‚‰dk7  r“‰d8k7  rŽ‰t         j^                  vr|tY        ‰j[                  «       «      d4kD  r]t         j"                  du s‰du r3t]        ‰j[                  «       «      }|D ]  }‰j                  |d «       Œ nt%        dd5‰› d6‰› d7�¬«      ‚‰}n‰}ta        ||
‰t]        tc        jZ                  «       «      |j-                  dd «      ¬9«      }d:|v r#tY        |d:   «      d4k(  r|j                  d:d «       |S )<Nr¼   rŸ  rx  rã  rÙ  Úallowed_openai_paramsc           	     óš   •— | €y i }‰D ]  }|| vsŒ‰|   ||<   Œ |r/t         j                  du s‰�‰du ry t        d‰› d|› d‰› d�¬«      ‚y )NTrè  ú does not support parameters: ú, for model=zf. To drop these, set `litellm.drop_params=True` or for proxy:

`litellm_settings:
 drop_params: true`
rê  )rp   rã  r  )rî  Úunsupported_paramsr`  rŸ  rã  rž  rÞ  s      €€€€r3   rï  z8get_optional_params_embeddings.<locals>._check_valid_argn  s—   ø€ ØÐ#ØØ$&ÐØ#ò 	>ˆAØÐ(Ò(Ø(:¸1Ñ(=Ð" 1Ò%ð	>ñ Ü×"Ñ" dÑ*¨{Ð/FÈ;ÐZ^ÑK^Øä,Ø #Ø2Ð3Ð3QÐRdÐQeÐeqÐrwÐqxð  ycð  dôð ð	 r5   )rÜ  rÿ  rŸ  rÙ  rž  rð  rì  rò  Fró  r®  ztext-embedding-3Ú
dimensionsTrè  z�Setting dimensions is not supported for OpenAI `text-embedding-3` and later models. To drop it from the call, set `litellm.drop_params = True`.rê  ÚtritonÚ
embeddings)rž  rŸ  Úrequest_typeÚ
databricksrØ  r  Ú
nvidia_nim)rÞ  ró  rx  r˜  r—  Úencoding_formatrN  Ú	lm_studior(  zamazon.titan-embed-text-v1zamazon.titan-embed-image-v1zamazon.titan-embed-text-v2:0zcohere.embedÚ
twelvelabsÚmarengoÚnovaÚmistralÚjina_aiÚvoyageÚsapÚinfinityÚfireworks_ai)rÞ  ró  rž  Ú	sambanovaÚovhcloudÚollamar   zSetting z is not supported by ré  r'  rô  Ú
extra_body)rî  úlist | None)2r„  r…  r†  r‡  r÷  r÷  ÚPreProcessNonDefaultParamsÚ(embedding_pre_process_non_default_paramsrˆ   Ú_member_map_rG   rø  Úget_provider_embedding_configr¼   rý  r*   rp   rã  r  ÚTritonEmbeddingConfigÚDatabricksEmbeddingConfigÚnvidiaNimEmbeddingConfigrw  ÚVertexAITextEmbeddingConfigÚLmStudioEmbeddingConfigrè   ré   rê   rë   rì   rœ  rç   ÚMistralEmbeddingConfigÚJinaAIEmbeddingConfigÚVoyageContextualEmbeddingConfigÚis_contextualized_embeddingsÚVoyageMultimodalEmbeddingConfigÚis_multimodal_embeddingsÚVoyageEmbeddingConfigÚGenAIHubEmbeddingConfigÚInfinityEmbeddingConfigÚFireworksAIEmbeddingConfigÚSambaNovaEmbeddingConfigÚOVHCloudEmbeddingConfigrø  rí  r­  r  rþ  r   )rž  rò  r*  r$  rŸ  rã  rÙ  r  rx  r¼   rÜ  rÿ  rï  r   ró  rî  ÚparamÚobjectÚfinal_paramsrí  r`  rÞ  s   `   ``               @r3   Úget_optional_params_embeddingsrR  T  s5
  û€ ô *1´·±¼XÑ1FÐHeÓ)fÐô "›8€MØ'×+Ñ+Ð,AÀ4ÓHÐØ)×-Ñ-¨hÓ7€Nà×#Ñ# M°4Ó8€KØ*×.Ñ.Ð/GÈÓNÐØ)×-Ñ-Ð.EÀtÓLÒRÐPRÐà×ÑÐ3°TÔ:÷ð ô  !;× cÑ cØ#Ø%Ø/Ø5Øð !dó !Ðð 37€Oà€OØÐ&Ð+>Ä,×B[ÑB[×BbÑBbÓBdÑ+dÜ/×MÑMØÜ!Ð"5Ó6ð Nó 
ˆð
 Ð"Ø(7×(SÑ(SÐZ_Ð(SÓ(`ÐÙÐ*:Õ;Ø)×;Ñ;Ø1ØØØ'2Ð'>™ÀEð	 <ó 
ˆò Ø)ò B�ØÔ3Ñ3ØØ˜MÒ)¨m¸EÑ.BÑ.NÐSXÐ`oÒSoØ-:¸5Ñ-A�O EÒ*ò	Bð 
 Ò	(ð ÐØ"¨%Ñ/ØÐ 2Ñ2ØÐ%:Ò%@¸bÑAô
 ×"Ñ" dÑ*¨k¸TÑ.AØ"×&Ñ& |°TÕ:ä,Ø #ð nôð ð -ŠØ	 Ò	(Ù6ØØ 3Ø%ô
Ðñ
 	Ð*:Õ;Ü!×7Ñ7Ó9×KÑKØ1ØØØ'2Ð'>™ÀEð	 Ló 
Šð 
 Ò	,Ù6Ø’+˜2Ø ,Ø%ô
Ðñ
 	Ð*:Õ;Ü!×;Ñ;Ó=×OÑOØ1À2ð Pó 
Šð 
 Ò	,Ù6Ø’+˜2Ø ,Ø%ô
Ðñ
 	Ð*:Õ;Ü!×:Ñ:×LÑLØ1À2Èfð Mó 
Šð 
 Ò	+Ð/BÀhÒ/Nð
 ×!Ñ!Ð"3Ó4¸Ò?Ø×"Ñ"Ð#4Ô5Ù6ØØ +Ø%ô
Ðñ
 	Ð*:Õ;ô ×/Ñ/Ó1×CÑCØ1À2Èfð Dó 
ñ	
ØÚð 
 Ò	+Ü"×:Ñ:Ó<×XÑXÓZÐÙÐ*:Õ;Ü!×9Ñ9Ó;×MÑMØ1À2ð Nó 
Šð 
 	Ò	)à'¨5Ñ0ô ×+Ñ+Ó-ñ ð +¨eÑ3Ü×CÑCÓE‰FØ+¨uÑ4Ü×0Ñ0Ó2‰FØ˜uÑ$Ü×9Ñ9Ó;‰FØ˜UÑ" i°5Ñ&8Ü×=Ñ=Ó?‰FØ�u—{‘{“}Ñ$Ü×6Ñ6Ó8‰Fà!ÐÙÐ.>Õ?Ø%˜f˜:ˆLØÐà!×=Ñ=Ó?ÐÙÐ*:Õ;Ø ×2Ñ2ÐFXÐjlÐ2ÓmŠØ	 	Ò	)Ù6ØØ )Ø%ô
Ðñ
 	Ð*:Õ;Ü!×8Ñ8Ó:×LÑLØ1À2ð Mó 
Šð 
 	Ò	)Ù6ØØ )Ø%ô
Ðñ
 	Ð*:Õ;Ü!×7Ñ7Ó9×KÑKØ1ØØØ'2Ð'>™ÀEð	 Ló 
Šð 
 Ò	(Ù6ØØ (Ø%ô
Ðñ
 	Ð*:Õ;Ü×2Ñ2×OÑOÐPUÔVÜ%×EÑEÓG×YÑYØ#5Ø "ØØ+6Ð+B™KÈð	 Zó ‰Oô ×4Ñ4×MÑMÈeÔTÜ%×EÑEÓG×YÑYØ#5Ø "ØØ+6Ð+B™KÈð	 Zó ‰Oô &×;Ñ;Ó=×OÑOØ#5Ø "ØØ+6Ð+B™KÈð	 Pó ˆOð 5˜/Ð4¨VÐ4ˆØÐØ	 Ò	%Ù6ØØ %Ø%ô
Ðñ
 	Ð*:Õ;Ü!×9Ñ9Ó;×MÑMØ1ØØØ'2Ð'>™ÀEð	 Nó 
Šð 
 
Ò	*Ù6ØØ *Ø%ô
Ðñ
 	Ð*:Õ;Ü!×9Ñ9Ó;×MÑMØ1ØØØ'2Ð'>™ÀEð	 Nó 
ˆð 5˜/Ð4¨VÐ4ˆØÐà	 Ò	.Ù6ØØ .Ø%ô
Ðñ
 	Ð*:Õ;Ü!×<Ñ<Ó>×PÑPØ1À2ÈUð Qó 
Šð 
 Ò	+Ù6ØØ +Ø%ô
Ðñ
 	Ð*:Õ;Ü!×:Ñ:Ó<×NÑNØ1ØØØ'2Ð'>™ÀEð	 Oó 
Šð 
 
Ò	*Ù6ØØ *Ø%ô
Ðñ
 	Ð*:Õ;Ü!×9Ñ9Ó;×MÑMØ1ØØØ'2Ð'>™ÀEð	 Nó 
Šð 
 Ò	(ØÐ-Ñ-Ø,>×,BÑ,BÀ<Ó,PˆO˜LÑ)ÜÐ!×&Ñ&Ó(Ó)¨AÒ-Ü×"Ñ" dÑ*¨k¸TÑ.AÜÐ.×3Ñ3Ó5Ó6�Øò 4�AØ&×*Ñ*¨1¨dÕ3ñ4ô -Ø #Ø&Ð'9Ð&:Ð:OÐPcÐOdð  ebð  côð ð
 	˜xÒ'Ø 7Ò*Ø¤w×'JÑ'JÑJäÐ!×&Ñ&Ó(Ó)¨AÒ-Ü×"Ñ" dÑ*¨k¸TÑ.AÜÐ.×3Ñ3Ó5Ó6�Øò 4�AØ&×*Ñ*¨1¨dÕ3ñ4ô -Ø #Ø&Ð'9Ð&:Ð:OÐPcÐOdð  ebð  côð ð
 1‰Oà,ˆäBØ'Ø#Ø/ÜÔ9×>Ñ>Ó@ÓAØ%Ÿz™zÐ*BÀDÓIô€Lð �|Ñ#¬¨L¸Ñ,FÓ(GÈ1Ò(LØ×Ñ˜ tÔ,àÐr5   c                óÐ   — t        | t        «      r3d| v r
| d   du r| d= | j                  «       D ]  \  }}t        |«       Œ | S t        | t        «      r| D ]  }t        |«       Œ | S )a  
    clean out 'additionalProperties = False'. Causes vertexai/gemini OpenAI API Schema errors - https://github.com/langchain-ai/langchainjs/issues/5240

    Relevant Issues: https://github.com/BerriAI/litellm/issues/6136, https://github.com/BerriAI/litellm/issues/6088
    ÚadditionalPropertiesF)r}  r¯  rŠ  Ú_remove_additional_propertiesr­  ©rj  r�  rŽ  Úitems       r3   rU  rU  ·  s�   € ô �&œ$Ôà! VÑ+°Ð7MÑ0NÐRWÑ0WØÐ-Ð.ð !Ÿ,™,›.ò 	1‰JˆC�Ü)¨%Õ0ð	1ð €Mô 
�FœDÔ	!àò 	0ˆDÜ)¨$Õ/ð	0ð €Mr5   c                óÂ   — t        | t        «      r,d| v r| d= | j                  «       D ]  \  }}t        |«       Œ | S t        | t        «      r| D ]  }t        |«       Œ | S )zy
    Relevant Issues: https://github.com/BerriAI/litellm/issues/6136, https://github.com/BerriAI/litellm/issues/6088
    Ústrict)r}  r¯  rŠ  Ú_remove_strict_from_schemar­  rV  s       r3   rZ  rZ  Î  sr   € ô �&œ$Ôà�vÑØ�xÐ ð !Ÿ,™,›.ò 	.‰JˆC�Ü& uÕ-ð	.ð €Mô 
�FœDÔ	!àò 	-ˆDÜ& tÕ,ð	-ð €Mr5   c                ó  — |dk  r| S t        | t        «      rM| j                  dd«       | j                  dd«       | j                  «       D ]  \  }}t	        ||dz
  «       Œ | S t        | t
        «      r| D ]  }t	        ||dz
  «       Œ | S )a  
    Remove JSON schema reference fields like '$id' and '$schema' that can cause issues with some providers.

    These fields are used for schema validation but can cause problems when the schema references
    are not accessible to the provider's validation system.

    Args:
        schema: The schema object to clean (dict, list, or other)
        max_depth: Maximum recursion depth to prevent infinite loops (default: 10)

    Relevant Issues: Mistral API grammar validation fails when schema contains $id and $schema references
    r   z$idNz$schemar  )r}  r¯  r÷  rŠ  Ú_remove_json_schema_refsr­  )rj  Ú	max_depthr�  rŽ  rW  s        r3   r\  r\  ã  s–   € ð �A‚~Øˆä�&œ$Ôà�
‰
�5˜$ÔØ�
‰
�9˜dÔ#ð !Ÿ,™,›.ò 	;‰JˆC�Ü$ U¨I¸©MÕ:ð	;ð €Mô 
�FœDÔ	!àò 	:ˆDÜ$ T¨9°q©=Õ9ð	:ð €Mr5   c                ó~   — g }|€i S | D ]  }||vsŒ|j                  |«       Œ |D ]  }| j                  |d«       Œ | S )z;
    Remove unsupported params from non_default_params
    N)rI  r÷  )rÞ  Úsupported_openai_paramsÚremove_keysrO  r�  s        r3   Ú_remove_unsupported_paramsra    sa   € ð €KØÐ&Øˆ	Ø#ò &ˆØÐ/Ò/Ø×Ñ˜uÕ%ð&ð ò *ˆØ×Ñ˜s DÕ)ð*àÐr5   c                óh   — | j                  «       D ��ci c]  \  }}|t        vsŒ||“Œ c}}S c c}}w )a   
    Filter out LiteLLM internal parameters from kwargs dict.

    Returns a new dict containing only non-LiteLLM parameters that should be
    passed to external provider APIs.

    Args:
        kwargs: Dictionary that may contain LiteLLM internal parameters

    Returns:
        Dictionary with LiteLLM internal parameters filtered out

    Example:
        >>> kwargs = {"query": "test", "shared_session": session_obj, "metadata": {}}
        >>> filtered = filter_out_litellm_params(kwargs)
        >>> # filtered = {"query": "test"}
    )rŠ  r›   )rx  r�  rŽ  s      r3   Úfilter_out_litellm_paramsrc    s.   € ð& *0¯©«×Y™:˜3 ¸3ÔFXÒ;XˆC�‰JÓYÐYùÓYs   ”.¥.c                óœ   — | dv ry	 t        | «      }t        j                  d|¬«      }t	        t        |dd«      «      S # t        $ r Y yw xY w)Nrš  TFrØ  rð  Úsupports_vertex_params)rˆ   rU  rø  Úget_provider_chat_configÚboolr„  )rŸ  rF  r   s      r3   Ú _provider_supports_vertex_paramsrh  )  s`   € ØÐ=Ñ=ØðÜ&Ð':Ó;ˆô 3×KÑKÐRTÐ_gÐKÓh€OÜ”˜Ð)AÀ5ÓIÓJÐJøô ò Ùðús   ‡? ¿	AÁ
Ac                  óp   — e Zd Ze	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„«       Ze	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„«       Zy)r:  c                ó´  — |j                  «       D ]^  \  }}|dk(  rŒ|j                  d«      r|dk7  r|j                  d«      r&|dk(  r|dk7  s|j                  d«      rt        |«      sŒZ|| |<   Œ` | j                  «       D ��ci c]E  \  }}|dk7  r;|dk7  r6|d	k7  r1|d
k7  r,|dk7  r'|dk7  r"||vr||v r|||   k7  rt        ||¬«      du r||“ŒG }}}|S c c}}w )NÚaws_bedrock_project_idr  r(  r  r�  r  rž  rŸ  Úapi_versionrã  r  rÙ  rØ  F)rŠ  r‹  rh  rÚ  )	rÜ  rÿ  rŸ  rÙ  Údefault_param_valuesÚ#additional_endpoint_specific_paramsr`  ra  rÞ  s	            r3   Ú#base_pre_process_non_default_paramsz>PreProcessNonDefaultParams.base_pre_process_non_default_params5  s$  € ð #×(Ñ(Ó*ò 	!‰DˆAˆqØÐ,Ò,ð à—‘˜VÔ$Ø(¨IÒ5Ð>Q×>\Ñ>\Ð]hÔ>iØ˜Ò'Ø'¨;Ò6Ø—<‘< 	Ô*Ü8Ð9LÔMàØ ˆM˜!Òð	!ð& &×+Ñ+Ó-÷%
á��1à�W’ØÐ.Ò.Ø˜Ò&Ø˜Ò&ØÐ0Ò0ØÐ1Ò1ØÐ@Ñ@ØÐ-Ñ-ØÐ-¨aÑ0Ò0Ü&¨ÐCYÔZÐ^cÑcð ˆq‰Dð%
Ðñ %
ð" "Ð!ùó#%
s   ÂA
Cc                ón   — t         j                  | |||t        D �ci c]  }|d “Œ c}dg¬«      }|S c c}w )NrÑ  ©rÜ  rÿ  rŸ  rÙ  rm  rn  )r:  ro  r*   )	rÜ  rÿ  rŸ  rÙ  rž  Úremove_sensitive_keysÚadd_provider_specific_paramsr`  rÞ  s	            r3   r;  zCPreProcessNonDefaultParams.embedding_pre_process_non_default_paramsb  sL   € ô %?×$bÑ$bØ'Ø)Ø 3Ø#9Ü3JÖ!K¨a ! T¡'Ò!KØ18°	ð %có %
Ðð "Ð!ùò	 "Ls   œ
2N)rÜ  r¯  rÿ  r¯  rŸ  r°  rÙ  r2  rm  r¯  rn  ú	list[str]rÌ  r¯  )FF)rÜ  r¯  rÿ  r¯  rŸ  r°  rÙ  r2  rž  r°  rr  rg  rs  rg  rÌ  r¯  )r‡  r›  rœ  Ústaticmethodro  r;  r  r5   r3   r:  r:  4  s¿   „ Øð*"Øð*"àð*"ð !ð*"ð !1ð	*"ð
 #ð*"ð .7ð*"ð 
ò*"ó ð*"ðX ð ',Ø-2ð"Øð"àð"ð !ð"ð !1ð	"ð
 ð"ð  $ð"ð '+ð"ð 
ò"ó ñ"r5   r:  c           	     ó  — t         j                  | |||t        dg¬«      }d|v r-|�|j                  |d   ¬«      |d<   nt	        |d   ¬«      |d<   d|v rzt        |t        «      rj|d   }	|	D ]`  }
|
j                  di «      }|j                  dd«      }|€Œ*t        j                  |«      }d	|v r|d	   d
u r|j                  d	d«       ||d<   Œb |r+t        || |t        t        j                  «       «      |¬«      }|rt        |«      }|S )zA
    Pre-process non-default params to a standardized format
    r»  rq  rg  Nri  r!  ÚfunctionrE   rT  Frô  )r:  ro  r   Ú$get_json_schema_from_pydantic_objectr­   r}  r­  rw  r‘  Údeepcopyr÷  rþ  rí  Úremove_sensitive_keys_from_dict)rÜ  rÿ  rŸ  rÙ  rž  rr  rs  r   rÞ  r!  r¸  Útool_functionrE   Únew_parameterss                 r3   Úpre_process_non_default_paramsr}  x  sa  € ô 4×WÑWØ#Ø%Ø/Ø5ÜAØ-7¨Lð Xó Ðð Ð.Ñ.ØÐ&Ø4C×4hÑ4hØ 2Ð3DÑ Eð 5ió 5ÐÐ0Ò1ô 5RØ 2Ð3DÑ Eô5ÐÐ0Ñ1ð Ð$Ñ$¬ØœDô*ð *¨'Ñ2ˆØò 	=ˆDØ ŸH™H Z°Ó4ˆMØ&×*Ñ*¨<¸Ó>ˆJØÑ%Ü!%§¡¨zÓ!:�Ø)¨^Ñ;ÀÐOeÑ@fÐjoÑ@oØ"×&Ñ&Ð'=¸tÔDØ.<�˜lÒ+ð	=ñ $ÜLØ.Ø'Ø 3ÜÔC×HÑHÓJÓKØ#9ô
Ðñ Ü<Ð=OÓPÐØÐr5   c                óž   ‡— g d¢}g }| D ](  Št        ˆfd„|D «       «      sŒ|j                  ‰«       Œ* |D ]  Š| j                  ‰«       Œ | S )z1
    Remove sensitive keys from a dictionary
    )r�  ÚsecretÚaccessÚ
credentialc              3  óB   •K  — | ]  }|‰j                  «       v –— Œ y ­wr;   r›  )r@   Úphraser�  s     €r3   rB   z2remove_sensitive_keys_from_dict.<locals>.<genexpr>¼  s   øè ø€ ÒI¨ˆv˜Ÿ™›Ô$ÑIùs   ƒ)rF   rI  r÷  )ÚdÚsensitive_key_phrasesr`  r�  s      @r3   rz  rz  µ  s^   ø€ ò $MÐØ€KØò $ˆÜÓIÐ3HÔIÕIØ×Ñ˜sÕ#ð$ð ò ˆØ	�‰ˆc�
ðà€Hr5   c                ó   — i }t         j                  }||d   v r±	 |dk(  r&t        j                  «       j                  | |¬«      }n…|dk(  r&t        j                  «       j                  | |¬«      }nZ|dk(  s|dk(  r&t        j
                  «       j                  | |¬«      }n*|dk(  r%t        j                  «       j                  | |¬«      }d|v s	d	|v sd
|v �r6|dk(  �r0|dk7  �r*|dk7  �r$|dk7  �r|dk7  �r|dk7  �r|dk7  �r|dk7  �r|dk7  �r |dk7  rû|dk7  rö|dk7  rñ|dk7  rì|dk7  rç|dk7  râ|dk7  rÝ|dk7  rØ|dk7  rÓ|dk7  rÎ|dk7  rÉ|dk7  rÄ|dk7  r¿|dk7  rº|dk7  rµ|t         j                  vr£|dk(  rVd |d!<   d"t         _        d
|v r(|j                  d
«      |d#<   |j                  d$d%«       |S d|v r|j                  d«      |d#<   |S t         j                  r'|j                  d
|j                  dd%«      «      |d#<   |S t        d&d'|› d(�¬)«      ‚|S )*z-For .completion(), preprocess optional paramsÚ	providersr'  r  r(  r˜  r™  ÚwatsonxÚ	functionsÚfunction_callr!  r7  r¯  ÚanyscaleÚtogether_airñ  r)  ÚcerebrasÚxaiÚ	ai21_chatÚ
volcengineÚdeepseekÚ	codestralr/  r±  Úcohere_chatr°  Úollama_chatr²  r³  ÚnebiusÚwandbr  ÚformatTÚfunctions_unsupported_modelr"  Nrè  z%Function calling is not supported by r€  rê  )rp   Ú!common_cloud_provider_auth_paramsÚAzureOpenAIConfigÚmap_special_auth_paramsÚAmazonBedrockGlobalConfigÚVertexAIConfigÚIBMWatsonXAIConfigr  Úadd_function_to_promptr÷  r  )rÜ  rÞ  rŸ  ró  Úcommon_auth_dicts        r3   Úpre_process_optional_paramsr¡  Ã  sµ  € à€Oä%×GÑGÐØÐ.¨{Ñ;Ñ;ð	ð  'Ò)Ü%×7Ñ7Ó9×QÑQØ#0À/ð Ró ‰Oð ! IÒ-Ü%×?Ñ?ÓA×YÑYØ#0À/ð Zó ‰Oð ! KÒ/Ð3FÐJZÒ3ZÜ%×4Ñ4Ó6×NÑNØ#0À/ð Oó ‰Oð ! IÒ-Ü%×8Ñ8Ó:×RÑRØ#0À/ð Só ˆOð
 Ð(Ñ(¨OÐ?QÑ,QÐU\Ð`rÒUrà 8Ó+Ø#Ð'?Ó?Ø# wÓ.Ø# {Ó2Ø# zÓ1Ø# }Ó4Ø# vÓ-Ø# |Ó3Ø# zÓ1Ø# uÒ,Ø# {Ò2Ø# |Ò3Ø# zÒ1Ø# {Ò2Ø# yÒ0Ø# {Ò2Ø# }Ò4Ø# xÒ/Ø# yÒ0Ø# }Ò4Ø# |Ò3Ø#Ð':Ò:Ø# xÒ/Ø# wÒ.Ø#¬7×+NÑ+NÑNà" hÒ.à,2� Ñ)Ø15”Ô.ØÐ0Ñ0ØEW×E[ÑE[Ð\cÓEd�OÐ$AÑBØ&×*Ñ*¨=¸$Ô?ð Ðð !Ð$6Ñ6ØEW×E[ÑE[Ð\gÓEh�OÐ$AÑBð Ðô ×/Ò/ØAS×AWÑAWØÐ/×3Ñ3°KÀÓFóB�Ð =Ñ>ð Ðô -Ø #ØCÐDWÐCXÐXYÐZôð ð
 Ðr5   c)           
     óà$  ‡ ‡‡‡‡;‡<— t        «       j                  «       Š<‰<j                  d«      }*‰<j                  dd «       d }+‰�A‰t        D �,cg c]  },|,j                  ‘Œ c},v r!t
        j                  ‰ t        ‰«      |(¬«      }+t        ‰<|*‰|!‰ |+¬«      Š;t        ‰<‰;‰¬«      }-dMˆˆˆ ˆˆ;ˆ<fd„}.t        t        j                  t           d«      }/ |/‰ ‰|(¬«      }0|0€
 |/‰ d	¬
«      }0|0xs g }0|xs g }|0j                  |«        |.|0xs g ¬«       ‰dk(  r=t        j                  «       j!                  ‰ ‰;|-‰�t#        ‰t$        «      r‰nd¬«      }-�n\‰dk(  rxt        j&                  «       j!                  ‰ ‰;|-‰�t#        ‰t$        «      r‰nd¬«      }-t        j&                  «       j!                  ‰ ‰;|-‰�t#        ‰t$        «      r‰nd¬«      }-�nß‰dk(  s‰dk(  r=t        j(                  «       j!                  ‰;|-‰ ‰�t#        ‰t$        «      r‰nd¬«      }-�n˜‰dk(  r-t        j*                  «       j!                  ‰;|-‰ ‰�‰nd¬«      }-�nf‰dk(  r=t        j,                  «       j!                  ‰;|-‰ ‰�t#        ‰t$        «      r‰nd¬«      }-�n$‰dk(  r=t        j.                  «       j!                  ‰;|-‰ ‰�t#        ‰t$        «      r‰nd¬«      }-�nâ‰dk(  r=t        j0                  «       j!                  ‰;|-‰ ‰�t#        ‰t$        «      r‰nd¬«      }-�n ‰dk(  r=t        j2                  «       j!                  ‰;|-‰ ‰�t#        ‰t$        «      r‰nd¬«      }-�n^‰dk(  r=t        j4                  «       j!                  ‰;|-‰ ‰�t#        ‰t$        «      r‰nd¬«      }-�n‰dk(  r©‰ t        j6                  v sZ‰ t        j8                  v sH‰ t        j:                  v s6‰ t        j<                  v s$‰ t        j>                  v s‰ t        j@                  v r=t        jB                  «       j!                  ‰;|-‰ ‰�t#        ‰t$        «      r‰nd¬«      }-�nn‰dk(  r=t        jD                  «       j!                  ‰;|-‰ ‰�t#        ‰t$        «      r‰nd¬«      }-�n,‰dk(  s	‰dk(  rAd‰ v r=t        jB                  «       j!                  ‰;|-‰ ‰�t#        ‰t$        «      r‰nd¬«      }-�nát        jF                  jI                  ‰ ‰¬
«      r=t        jF                  «       j!                  ‰ ‰;|-‰�t#        ‰t$        «      r‰nd¬«      }-�nƒ‰dk(  �rI‰ t        jJ                  v r~d‰ v r=t        jL                  «       j!                  ‰ ‰;|-‰�t#        ‰t$        «      r‰nd¬«      }-�n*t        jN                  «       j!                  ‰ ‰;|-‰�t#        ‰t$        «      r‰nd¬«      }-�ní‰ t        jP                  v r=t        jR                  «       j!                  ‰;|-‰ ‰�t#        ‰t$        «      r‰nd¬«      }-�nž|+�+|+j!                  ‰;|-‰ ‰�t#        ‰t$        «      r‰nd¬«      }-�nqt        jT                  «       j!                  ‰;|-‰ ‰�t#        ‰t$        «      r‰nd¬«      }-�n4‰dk(  r=t        jV                  «       j!                  ‰;|-‰ ‰�t#        ‰t$        «      r‰nd¬«      }-�
nò‰dk(  �r¹t        t        j                  t           d«      }1 |1jX                  ‰ «      }2 |1jZ                  ‰ «      }3|2d k(  s|2d!k(  r=t        j\                  «       j!                  ‰ ‰;|-‰�t#        ‰t$        «      r‰nd¬«      }-�
n`|2d	k(  r=t        j^                  «       j!                  ‰ ‰;|-‰�t#        ‰t$        «      r‰nd¬«      }-�
nd|3v rŸ|2d"k(  rš|3t        j`                  jc                  «       v r=t        j`                  «       j!                  ‰;|-‰ ‰�t#        ‰t$        «      r‰nd¬«      }-�	n¸t        jd                  «       j!                  ‰;|-‰ ‰�t#        ‰t$        «      r‰nd¬«      }-�	n{|+�	�x|+j!                  ‰;|-‰ ‰�t#        ‰t$        «      r‰nd¬«      }-|2d#k(  �	rI |1jf                  ‰<|-¬$«      }-�	n3‰d%k(  r=t        jh                  «       j!                  ‰ ‰;|-‰�t#        ‰t$        «      r‰nd¬«      }-�nñ‰d&k(  r=t        jj                  «       j!                  ‰;|-‰ ‰�t#        ‰t$        «      r‰nd¬«      }-�n¯‰d'k(  r=t        jl                  «       j!                  ‰ ‰;|-‰�t#        ‰t$        «      r‰nd¬«      }-�nm‰d(k(  r=t        jn                  «       j!                  ‰;|-‰ ‰�t#        ‰t$        «      r‰nd¬«      }-�n+‰d)k(  r=t        jp                  «       j!                  ‰;|-‰ ‰�t#        ‰t$        «      r‰nd¬«      }-�né‰d*k(  r=t        jr                  «       j!                  ‰;|-‰ ‰�t#        ‰t$        «      r‰nd¬«      }-�n§‰d+k(  r-|+�+|+j!                  ‰;|-‰ ‰�t#        ‰t$        «      r‰nd¬«      }-�nu‰d,k(  s‰dk(  r=t        jN                  «       j!                  ‰;|-‰ ‰�t#        ‰t$        «      r‰nd¬«      }-�n.‰d-k(  r=t        jL                  «       j!                  ‰;|-‰ ‰�t#        ‰t$        «      r‰nd¬«      }-�nì‰d.k(  r=t        jt                  «       j!                  ‰;|-‰ ‰�t#        ‰t$        «      r‰nd¬«      }-�nª‰d/k(  r=t        jv                  «       j!                  ‰;|-‰ ‰�t#        ‰t$        «      r‰nd¬«      }-�nh‰d0k(  r=t        jx                  «       j!                  ‰ ‰;|-‰�t#        ‰t$        «      r‰nd¬«      }-�n&‰d1k(  r=t        jz                  «       j!                  ‰;|-‰ ‰�t#        ‰t$        «      r‰nd¬«      }-�nä‰d2k(  r(t        j|                  «       j!                  ‰ ‰;|-¬3«      }-�n·‰d4k(  s‰d5k(  r=t        j~                  «       j!                  ‰;|-‰ ‰�t#        ‰t$        «      r‰nd¬«      }-�np‰d6k(  r=t        j€                  «       j!                  ‰;|-‰ ‰�t#        ‰t$        «      r‰nd¬«      }-�n.‰d7k(  r=t        j‚                  «       j!                  ‰;|-‰ ‰�t#        ‰t$        «      r‰nd¬«      }-�nì‰d8k(  r=t        j„                  «       j!                  ‰;|-‰ ‰�t#        ‰t$        «      r‰nd¬«      }-�nª‰d9k(  r=t        j†                  «       j!                  ‰;|-‰ ‰�t#        ‰t$        «      r‰nd¬«      }-�nh‰d:k(  r=t        jˆ                  «       j!                  ‰;|-‰ ‰�t#        ‰t$        «      r‰nd¬«      }-�n&‰d;k(  r=t        jŠ                  «       j!                  ‰;|-‰ ‰�t#        ‰t$        «      r‰nd¬«      }-�nä‰d<k(  r=t        jŒ                  «       j!                  ‰;|-‰ ‰�t#        ‰t$        «      r‰nd¬«      }-�n¢‰d=k(  r=t        jŽ                  «       j!                  ‰;|-‰ ‰�t#        ‰t$        «      r‰nd¬«      }-�n`‰d>k(  r=t        j�                  «       j!                  ‰;|-‰ ‰�t#        ‰t$        «      r‰nd¬«      }-�n‰d?k(  rut        j’                  «       j!                  ‰;|-‰ ‰�t#        ‰t$        «      r‰nd¬«      }-‰<D ]3  }4t        j”                  «       j—                  |4«      sŒ't™        d@|4› �«      ‚ �n¤‰dAk(  r=t        j”                  «       j!                  ‰;|-‰ ‰�t#        ‰t$        «      r‰nd¬«      }-�nb‰d	k(  r=t        jš                  «       j!                  ‰;|-‰ ‰�t#        ‰t$        «      r‰nd¬«      }-�n ‰dBk(  r=t        jœ                  «       j!                  ‰;|-‰ ‰�t#        ‰t$        «      r‰nd¬«      }-�nÞ‰dCk(  �rq|(xs ‰ }5t        jž                  «       j¡                  |5¬D«      r=t        jž                  «       j!                  ‰;|-|5‰�t#        ‰t$        «      r‰nd¬«      }-�nqt        j¢                  j¥                  |5¬D«      r=t        j¢                  «       j!                  ‰;|-|5‰�t#        ‰t$        «      r‰nd¬«      }-�nt§        j¨                  dEj«                  |t        j¬                  t¯        dF«      «      «       |xs/ t        j¬                  xs t¯        dF«      xs t        j°                  }t        j²                  «       j!                  ‰;|-|5|‰�t#        ‰t$        «      r‰nd¬G«      }-ng|+�*|+j!                  ‰;|-‰ ‰�t#        ‰t$        «      r‰nd¬«      }-n;t        j´                  «       j!                  ‰;|-‰ ‰�t#        ‰t$        «      r‰nd¬«      }-t·        |-‰<‰t¹        t»        j¼                  «       «      |!¬H«      }-t¿        dI|-› �«       tÁ        |-‰;|¬J«      }-|!rjt        t        j                  t           dK«      }6t        t        j                  t           dL«      }7|!D �8cg c]  }8 |6|8«      sŒ|8‘Œ }9}8|9D ]  }: |7|-|:«      }-Œ |-S c c},w c c}8w )NNrx  r’  )rž  rF  r’  )rÜ  rÿ  rŸ  rÙ  rž  r   )rÜ  rÞ  rŸ  c                óÖ  •— t        j                  d‰‰«       t        j                  d‰«       t        j                  d‰«       i }‰D ]#  }|| vsŒ|t        v rŒ|dk(  r‰dk(  rŒ‰|   ||<   Œ% |ryt        j
                  du s‰�‰du r|D ]  }‰j                  |d«       Œ yt        d‰› d	t        |j                  «       «      › d
‰› dt        |j                  «       «      › d�¬«      ‚y)z¼
        Check if the params passed to completion() are supported by the provider

        Args:
            supported_params: List[str] - supported params from the litellm config
        z.
LiteLLM completion() model= %s; provider = %sz*
LiteLLM: Params passed to completion() %sz6
LiteLLM: Non-Default params passed to completion() %sr  r  TNrè  r!  r"  z±. To drop these, set `litellm.drop_params=True` or for proxy:

`litellm_settings:
 drop_params: true`
. 
 If you want to use these params dynamically send allowed_openai_params=z in your request.rê  )
r  r=  r<  ÚPROVIDER_UNVALIDATED_PARAMSrp   rã  r÷  r  r­  rí  )	rî  r#  r`  rŸ  rã  rž  r  rÞ  rÜ  s	      €€€€€€r3   rï  z-get_optional_params.<locals>._check_valid_argZ  sP  ø€ ô 	×ÑÐMÈuÐViÔjÜ×ÑÐJÈMÔZÜ×ÑÐVÐXjÔkØ$&ÐØ#ò 	>ˆAØÐ(Ò(ØÔ3Ñ3ØØ˜’8  Q¢ØØ(:¸1Ñ(=Ð" 1Ò%ð	>ñ Ü×"Ñ" dÑ*¨{Ð/FÈ;ÐZ^ÑK^Ø+ò 4�AØ&×*Ñ*¨1¨dÕ3ñ4ô -Ø #Ø2Ð3Ð3QÔRVÐWi×WnÑWnÓWpÓRqÐQrÐr~ð  @Eð  Fð  F|ô  }Að  BT÷  BYñ  BYó  B[ó  }\ð  |]ð  ]nð  oôð ð r5   r¼   )rž  rŸ  r’  r®  r�  rò  r±  F)rž  rÞ  ró  rã  Úanthropic_textr“  r°  ró  r%  Úmaritalkrü  Ú	predibaseÚhuggingfacerŒ  r˜  r—  r™  r’  r  r(  ræ   ÚconverseÚconverse_likeÚinvokeÚclaude_platform)rÜ  ró  Ú
cloudflarer7  r”  rµ  ÚpetalsÚ	deepinfraÚ
perplexityr/  útext-completion-codestralútext-completion-inceptionr(  r)  r�  rŽ  )rž  rÞ  ró  r�  r´  r4  r�  Úhosted_vllmÚvllmrñ  Úbedrock_mantler‘  Útencentr²  rˆ  z™LiteLLM now defaults to Watsonx's `/text/chat` endpoint. Please use the `watsonx_text` provider instead, to call the `/text/generation` endpoint. Param: Úwatsonx_textr•  r'  rì  zoAzure optional params - api_version: api_version={}, litellm.api_version={}, os.environ['AZURE_API_VERSION']={}ÚAZURE_API_VERSION)rÞ  ró  rž  rl  rã  rô  z Final returned optional params: )ró  rÞ  r  r¶   rµ   )rî  rt  )ar÷  r‘  r÷  rˆ   rŽ  rø  rf  r}  r¡  r„  r…  r†  r‡  r’  rp   ÚAnthropicConfigrý  r}  rg  ÚAnthropicTextConfigÚCohereChatConfigÚTritonConfigÚMaritalkConfigÚReplicateConfigÚPredibaseConfigÚHuggingFaceChatConfigÚTogetherAIChatConfigrÂ  rÃ  rÀ  rÁ  Úvertex_language_modelsÚvertex_vision_modelsÚVertexGeminiConfigÚGoogleAIStudioGeminiConfigÚVertexAIAnthropicConfigÚis_supported_modelÚvertex_mistral_modelsÚCodestralTextCompletionConfigÚMistralConfigÚvertex_ai_ai21_modelsÚVertexAIAi21ConfigÚVertexAILlama3ConfigÚSagemakerConfigÚget_bedrock_routeÚget_base_modelÚAmazonConverseConfigÚAmazonBedrockOpenAIConfigÚAmazonAnthropicConfigÚ get_legacy_anthropic_model_namesÚAmazonAnthropicClaudeConfigÚmap_claude_platform_auth_paramsÚCloudflareChatConfigÚOllamaConfigÚOllamaChatConfigÚNLPCloudConfigÚPetalsConfigÚDeepInfraConfigÚInceptionTextCompletionConfigÚDatabricksConfigÚNvidiaNimConfigÚCerebrasConfigÚXAIChatConfigÚAI21ChatConfigÚFireworksAIConfigÚVolcEngineConfigÚHostedVLLMChatConfigÚ
VLLMConfigÚGroqChatConfigÚBedrockMantleChatConfigÚDeepSeekChatConfigÚTencentChatConfigÚOpenrouterConfigÚIBMWatsonXChatConfigrž  Úis_watsonx_text_paramrU  ÚOpenAIConfigÚNebiusConfigÚAzureOpenAIO1ConfigÚis_o_series_modelÚAzureOpenAIGPT5ConfigÚis_model_gpt_5_modelr  r<  r—  rl  r  ÚAZURE_DEFAULT_API_VERSIONrš  ÚOpenAILikeChatConfigrþ  r­  r   rí  rD  Ú_apply_openai_param_overrides)=rž  r‰  rŠ  rå  Útop_pr  rè  rñ  ÚstoprŽ  Úmax_completion_tokensÚ
modalitiesÚ
predictionÚaudioÚpresence_penaltyÚfrequency_penaltyÚ
logit_biasrò  rŸ  rg  Úseedr!  r"  Úmax_retriesÚlogprobsÚtop_logprobsÚextra_headersrl  Úparallel_tool_callsrã  r  Úreasoning_effortÚ	verbosityrÙ  r»  Úthinkingr  Úsafety_identifierÚstoreÚprompt_cache_keyr’  rx  rÿ  r   rF  ró  rï  r¼   rî  ræ   Úbedrock_routeÚbedrock_base_modelrO  Ú_azure_detection_modelr¶   rµ   rA   Únested_pathsÚpathrÞ  rÜ  s=   `    `            `          `                             @@r3   Úget_optional_paramsr    sè  ý€ ô\ "›8Ÿ=™=›?€MØ)×-Ñ-¨hÓ7€Nð ×Ñ�l DÔ)Ø)-€OØÐ&Ð+>ÔbnÖBoÐV^À8Ç>Ã>ÒBoÑ+oÜ/×HÑHØÜ!Ð"5Ó6Ø!ð Ió 
ˆô
 !?Ø#Ø%Ø/Ø5ØØ'ô!Ðô 2Ø#Ø-Ø/ô€O÷ò ô: *1´·±¼XÑ1FÐHeÓ)fÐÙ2ØÐ)<ÈôÐð ÐÙ6¸UÐX`ÔaÐà'Ò-¨2ÐØ1Ò7°RÐØ×ÑÐ1Ô2áØ)Ò/¨Rõð ˜kÒ)ä!×1Ñ1Ó3×EÑEØØ1Ø+Ø(3Ð(?ÄJÈ{Ô\`ÔDa™Ðglð	 Fó 
Šð 
Ð 0Ò	0Ü!×5Ñ5Ó7×IÑIØØ1Ø+Ø(3Ð(?ÄJÈ{Ô\`ÔDa™Ðglð	 Jó 
ˆô "×5Ñ5Ó7×IÑIØØ1Ø+Ø(3Ð(?ÄJÈ{Ô\`ÔDa™Ðglð	 Jó 
Šð 
 Ò	-Ð1DÈÒ1Pä!×2Ñ2Ó4×FÑFØ1Ø+ØØ(3Ð(?ÄJÈ{Ô\`ÔDa™Ðglð	 Gó 
Šð 
 Ò	(Ü!×.Ñ.Ó0×BÑBØ1Ø+ØØ'2Ð'>™ÀEð	 Có 
Šð 
 
Ò	*Ü!×0Ñ0Ó2×DÑDØ1Ø+ØØ(3Ð(?ÄJÈ{Ô\`ÔDa™Ðglð	 Eó 
Šð 
 Ò	+Ü!×1Ñ1Ó3×EÑEØ1Ø+ØØ(3Ð(?ÄJÈ{Ô\`ÔDa™Ðglð	 Fó 
Šð 
 Ò	+Ü!×1Ñ1Ó3×EÑEØ1Ø+ØØ(3Ð(?ÄJÈ{Ô\`ÔDa™Ðglð	 Fó 
Šð 
 Ò	-Ü!×7Ñ7Ó9×KÑKØ1Ø+ØØ(3Ð(?ÄJÈ{Ô\`ÔDa™Ðglð	 Ló 
Šð 
 Ò	-Ü!×6Ñ6Ó8×JÑJØ1Ø+ØØ(3Ð(?ÄJÈ{Ô\`ÔDa™Ðglð	 Kó 
Šð 
 Ò	+Ø”×+Ñ+Ñ+Ø”G×3Ñ3Ñ3Ø”G×.Ñ.Ñ.Ø”G×3Ñ3Ñ3Ø”G×2Ñ2Ñ2Ø”G×0Ñ0Ñ0ä!×4Ñ4Ó6×HÑHØ1Ø+ØØ(3Ð(?ÄJÈ{Ô\`ÔDa™Ðglð	 Ió 
Šð 
 Ò	(Ü!×<Ñ<Ó>×PÑPØ1Ø+ØØ(3Ð(?ÄJÈ{Ô\`ÔDa™Ðglð	 Qó 
Šð 
Ð 0Ò	0Ð5HÈKÒ5WÐ\dÐhmÑ\mÜ!×4Ñ4Ó6×HÑHØ1Ø+ØØ(3Ð(?ÄJÈ{Ô\`ÔDa™Ðglð	 Ió 
Šô 
×	(Ñ	(×	;Ñ	;À%Ð]pÐ	;Ô	qÜ!×9Ñ9Ó;×MÑMØØ1Ø+Ø(3Ð(?ÄJÈ{Ô\`ÔDa™Ðglð	 Nó 
Šð 
 Ó	+Ø”G×1Ñ1Ñ1Ø˜eÑ#Ü")×"GÑ"GÓ"I×"[Ñ"[ØØ'9Ø$3Ø0;Ð0GÌJÐWbÔdhÔLi¡Ðotð	 #\ó #’ô #*×"7Ñ"7Ó"9×"KÑ"KØØ'9Ø$3Ø0;Ð0GÌJÐWbÔdhÔLi¡Ðotð	 #Ló #’ð ”g×3Ñ3Ñ3Ü%×8Ñ8Ó:×LÑLØ#5Ø /ØØ,7Ð,CÌ
ÐS^Ô`dÔHe™[Ðkpð	 Mó ŠOð Ð(Ø-×?Ñ?Ø#5Ø /ØØ,7Ð,CÌ
ÐS^Ô`dÔHe™[Ðkpð	 @ó ŠOô &×:Ñ:Ó<×NÑNØ#5Ø /ØØ,7Ð,CÌ
ÐS^Ô`dÔHe™[Ðkpð	 Oó ŠOð 
 Ò	+ä!×1Ñ1Ó3×EÑEØ1Ø+ØØ(3Ð(?ÄJÈ{Ô\`ÔDa™Ðglð	 Fó 
Šð 
 	Ó	)Ü")¬#¯+©+´hÑ*?ÐASÓ"TÐØAÐ/×AÑAÀ%ÓHˆØ$CÐ$4×$CÑ$CÀEÓ$JÐØ˜JÒ&¨-¸?Ò*JÜ%×:Ñ:Ó<×NÑNØØ#5Ø /Ø,7Ð,CÌ
ÐS^Ô`dÔHe™[Ðkpð	 Oó ŠOð ˜hÒ&Ü%×?Ñ?ÓA×SÑSØØ#5Ø /Ø,7Ð,CÌ
ÐS^Ô`dÔHe™[Ðkpð	 Tó ŠOð Ð.Ñ.°=ÀHÒ3LØ!¤W×%BÑ%B×%cÑ%cÓ%eÑeÜ")×"?Ñ"?Ó"A×"SÑ"SØ'9Ø$3ØØ0;Ð0GÌJÐWbÔdhÔLi¡Ðotð	 #Tó #’ô #*×"EÑ"EÓ"G×"YÑ"YØ'9Ø$3ØØ0;Ð0GÌJÐWbÔdhÔLi¡Ðotð	 #Zó #’ð Ñ(Ø-×?Ñ?Ø#5Ø /ØØ,7Ð,CÌ
ÐS^Ô`dÔHe™[Ðkpð	 @ó ˆOð Ð 1Ó1Ø"RÐ"2×"RÑ"RØ"/Àô#’ð 
 Ò	,Ü!×6Ñ6Ó8×JÑJØØ1Ø+Ø(3Ð(?ÄJÈ{Ô\`ÔDa™Ðglð	 Kó 
Šð 
 Ò	(Ü!×.Ñ.Ó0×BÑBØ1Ø+ØØ(3Ð(?ÄJÈ{Ô\`ÔDa™Ðglð	 Có 
Šð 
 Ò	-Ü!×2Ñ2Ó4×FÑFØØ1Ø+Ø(3Ð(?ÄJÈ{Ô\`ÔDa™Ðglð	 Gó 
Šð 
 Ò	+Ü!×0Ñ0Ó2×DÑDØ1Ø+ØØ(3Ð(?ÄJÈ{Ô\`ÔDa™Ðglð	 Eó 
Šð 
 Ò	(Ü!×.Ñ.Ó0×BÑBØ1Ø+ØØ(3Ð(?ÄJÈ{Ô\`ÔDa™Ðglð	 Có 
Šð 
 Ò	+Ü!×1Ñ1Ó3×EÑEØ1Ø+ØØ(3Ð(?ÄJÈ{Ô\`ÔDa™Ðglð	 Fó 
Šð 
 Ò	,°Ð1LØ)×;Ñ;Ø1Ø+ØØ(3Ð(?ÄJÈ{Ô\`ÔDa™Ðglð	 <ó 
Šð 
 	Ò	)Ð-@ÀKÒ-OÜ!×/Ñ/Ó1×CÑCØ1Ø+ØØ(3Ð(?ÄJÈ{Ô\`ÔDa™Ðglð	 Dó 
Šð 
Ð ;Ò	;Ü!×?Ñ?ÓA×SÑSØ1Ø+ØØ(3Ð(?ÄJÈ{Ô\`ÔDa™Ðglð	 Tó 
Šð 
Ð ;Ò	;Ü!×?Ñ?ÓA×SÑSØ1Ø+ØØ(3Ð(?ÄJÈ{Ô\`ÔDa™Ðglð	 Tó 
Šð 
 Ò	,Ü!×2Ñ2Ó4×FÑFØ1Ø+ØØ(3Ð(?ÄJÈ{Ô\`ÔDa™Ðglð	 Gó 
Šð 
 Ò	,Ü!×1Ñ1Ó3×EÑEØØ1Ø+Ø(3Ð(?ÄJÈ{Ô\`ÔDa™Ðglð	 Fó 
Šð 
 
Ò	*Ü!×0Ñ0Ó2×DÑDØ1Ø+ØØ(3Ð(?ÄJÈ{Ô\`ÔDa™Ðglð	 Eó 
Šð 
 Ò	%Ü!×/Ñ/Ó1×CÑCØØ1Ø+ð Dó 
Šð
 
 Ò	+Ð/BÀfÒ/LÜ!×0Ñ0Ó2×DÑDØ1Ø+ØØ(3Ð(?ÄJÈ{Ô\`ÔDa™Ðglð	 Eó 
Šð 
 Ò	.Ü!×3Ñ3Ó5×GÑGØ1Ø+ØØ(3Ð(?ÄJÈ{Ô\`ÔDa™Ðglð	 Hó 
Šð 
 Ò	,Ü!×2Ñ2Ó4×FÑFØ1Ø+ØØ(3Ð(?ÄJÈ{Ô\`ÔDa™Ðglð	 Gó 
Šð 
 Ò	-Ü!×6Ñ6Ó8×JÑJØ1Ø+ØØ(3Ð(?ÄJÈ{Ô\`ÔDa™Ðglð	 Kó 
Šð 
 Ò	&Ü!×,Ñ,Ó.×@Ñ@Ø1Ø+ØØ(3Ð(?ÄJÈ{Ô\`ÔDa™Ðglð	 Aó 
Šð 
 Ò	&Ü!×0Ñ0Ó2×DÑDØ1Ø+ØØ(3Ð(?ÄJÈ{Ô\`ÔDa™Ðglð	 Eó 
Šð 
Ð 0Ò	0Ü!×9Ñ9Ó;×MÑMØ1Ø+ØØ(3Ð(?ÄJÈ{Ô\`ÔDa™Ðglð	 Nó 
Šð 
 
Ò	*Ü!×4Ñ4Ó6×HÑHØ1Ø+ØØ(3Ð(?ÄJÈ{Ô\`ÔDa™Ðglð	 Ió 
Šð 
 	Ò	)Ü!×3Ñ3Ó5×GÑGØ1Ø+ØØ(3Ð(?ÄJÈ{Ô\`ÔDa™Ðglð	 Hó 
Šð 
 Ò	,Ü!×2Ñ2Ó4×FÑFØ1Ø+ØØ(3Ð(?ÄJÈ{Ô\`ÔDa™Ðglð	 Gó 
Šð 
 	Ò	)Ü!×6Ñ6Ó8×JÑJØ1Ø+ØØ(3Ð(?ÄJÈ{Ô\`ÔDa™Ðglð	 Kó 
ˆð #ò 	ˆEÜ×)Ñ)Ó+×AÑAÀ%ÕHÜ ð pð  qvð  pwð  xóð ò	ð
 
 Ò	.Ü!×4Ñ4Ó6×HÑHØ1Ø+ØØ(3Ð(?ÄJÈ{Ô\`ÔDa™Ðglð	 Ió 
Šð 
 Ò	(Ü!×.Ñ.Ó0×BÑBØ1Ø+ØØ(3Ð(?ÄJÈ{Ô\`ÔDa™Ðglð	 Có 
Šð 
 Ò	(Ü!×.Ñ.Ó0×BÑBØ1Ø+ØØ(3Ð(?ÄJÈ{Ô\`ÔDa™Ðglð	 Có 
Šð 
 Ó	'Ø(2Ò(;°eÐÜ×&Ñ&Ó(×:Ñ:ÐAWÐ:ÔXÜ%×9Ñ9Ó;×MÑMØ#5Ø /Ø,Ø,7Ð,CÌ
ÐS^Ô`dÔHe™[Ðkpð	 Nó ŠOô ×*Ñ*×?Ñ?ÐF\Ð?Ô]Ü%×;Ñ;Ó=×OÑOØ#5Ø /Ø,Ø,7Ð,CÌ
ÐS^Ô`dÔHe™[Ðkpð	 Pó ŠOô × Ñ ð B÷  Iñ  IØ¤×!4Ñ!4´jÐATÓ6Uóôð ò 5Ü×&Ñ&ò5äÐ1Ó2ò5ô ×4Ñ4ð	 ô &×7Ñ7Ó9×KÑKØ#5Ø /Ø,Ø'Ø,7Ð,CÌ
ÐS^Ô`dÔHe™[Ðkpð Ló ‰Oð 
Ð	$Ø)×;Ñ;Ø1Ø+ØØ(3Ð(?ÄJÈ{Ô\`ÔDa™Ðglð	 <ó 
‰ô "×6Ñ6Ó8×JÑJØ1Ø+ØØ(3Ð(?ÄJÈ{Ô\`ÔDa™Ðglð	 Kó 
ˆô FØ'Ø#Ø/ÜÔ?×DÑDÓFÓGØ5ô€Oô Ð4°_Ð4EÐFÔGÜ3Ø'Ø-Ø3ô€Oñ Ü '¬¯©´HÑ(=Ð?OÓ PˆÜ%,¬S¯[©[¼Ñ-BÐDYÓ%ZÐØ*@ÖV QÁNÐSTÕDUšqÐVˆÐVØ ò 	IˆDÙ1°/À4ÓH‰Oð	Ið Ðùòw Cpùòn Ws   ÁAI&ÁI AI+ÁIAI+c                ó2  — |g d¢t         j                  z   v rÑt        d|¬«      du rÀt        |j	                  dd«      xs i «      }|D ]  }||vsŒ||   €Œ||   ||<   Œ t        | j                  d«      t        «      si | d<   i | d   ¥|¥}|�)|j                  «       D ��ci c]  \  }}||vsŒ||“Œ }	}}n|}	t        t        j                  t           d«      }
 |
|	¬«      | d<   | S |D ]#  }||vsŒ||   €Œt        ||¬«      rŒ||   | |<   Œ% | S c c}}w )z9
    Add provider specific params to optional_params
    )r®  r'  r¯  r8  rØ  FNr½   )r8  )rp   r  rÚ  r¯  r÷  r}  rw  rŠ  r„  r…  r†  r‡  )ró  rÜ  rŸ  rõ  rÙ  r8  r`  Úinitial_extra_bodyra  Úprocessed_extra_bodyr½   s              r3   rþ  rþ  d  sk  € ð ÒKÌg×NqÑNqÑqÑqä ÐE[Ô\Ð`eÑeÜ $ ]×%6Ñ%6°|ÀTÓ%JÒ%PÈbÓ QˆJØ"ò 5�Ø˜MÒ)¨m¸AÑ.>Ñ.JØ$1°!Ñ$4�J˜q’Mð5ô ˜o×1Ñ1°,Ó?ÄÔFØ02� Ñ-ð)Ø! ,Ñ/ð)àð)Ðð
 &Ð1Ø9K×9QÑ9QÓ9S×'w±°°AÐWXÐ`vÒWv¨¨1©Ð'wÐ$Ò'wà'9Ð$ä07¼¿¹ÄHÑ8MÐOkÓ0lÐ&Ù,FÐRfÔ,gˆO˜LÑ)ð Ðð ò 	6ˆAØ˜Ò%¨-¸Ñ*:Ñ*FÜ%¨ÐBXÕYØØ%2°1Ñ%5� Ò"ð		6ð
 Ðùó (xs   Â"DÂ/Dc                óT   — |r%|D ]   }|| v rŒ||vrŒ|j                  |«      | |<   Œ" | S )a_  
    If user passes in allowed_openai_params, apply them to optional_params

    These params will get passed as is to the LLM API since the user opted in to passing them in the request

    Only params the caller actually sent are forwarded. Previously this
    function unconditionally wrote `None` for any allowed param missing from
    the request, which then reached the provider SDK as a top-level kwarg it
    did not recognize (e.g. openai SDK raising
    `AsyncCompletions.create() got an unexpected keyword argument 'enable_thinking'`).
    See https://github.com/BerriAI/litellm/issues/25697
    )r÷  )ró  rÞ  r  rO  s       r3   rö  rö  �  sL   € ñ Ø*ò 	CˆEØ˜Ñ'ØØÐ.Ñ.ØØ%7×%;Ñ%;¸EÓ%BˆO˜EÒ"ð	Cð Ðr5   >   rò  rè  r  rñ  r¤  c                óN   — t        | «      }t        t        |«      «      t        z
  S )aù  The params a provider can actually be rejected for, i.e. the ones _check_valid_arg compares
    against its supported list.

    Anything outside this set never reaches that comparison. Endpoint and transport controls such as
    base_url, timeout, default_headers, organization and deployment_id are not chat completion
    params at all, so a caller filtering on "is this an OpenAI param" would discard configuration the
    request needs while never touching what the provider would have rejected.
    )r¯  Ú	frozensetÚget_non_default_paramsr¤  )rÜ  rI   s     r3   Úprovider_rejectable_paramsr  §  s%   € ô ˜Ó'€FÜÔ+¨FÓ3Ó4Ô7RÑRÐRr5   c                ó”   — | j                  «       D ��ci c]&  \  }}|dk7  r|dk7  r|t        v r|t        |   k7  r||“Œ( }}}|S c c}}w )Nrž  rŸ  )rŠ  r   )rÜ  r`  ra  rÞ  s       r3   r  r  ´  sg   € ð "×'Ñ'Ó)÷	!áˆAˆqà�ŠLØÐ*Ò*ØÔ9Ñ9ØÔ9¸!Ñ<Ò<ð 	
ˆ1‰ð	!Ðñ 	!ð Ðùó	!s   ”+Ac                óT   — | �| S |�|S |�t        |dz  dz  «      }|dk(  rd}|S |�|S y)a  
    Returns the max parallel requests to send to a deployment.

    Used in semaphore for async requests on router.

    Parameters:
    - max_parallel_requests - Optional[int] - max_parallel_requests allowed for that deployment
    - rpm - Optional[int] - requests per minute allowed for that deployment
    - tpm - Optional[int] - tokens per minute allowed for that deployment
    - default_max_parallel_requests - Optional[int] - default_max_parallel_requests allowed for any deployment

    Returns:
    - int or None (if all params are None)

    Order:
    max_parallel_requests > rpm > tpm / 6 (azure formula) > default max_parallel_requests

    Azure RPM formula:
    6 rpm per 1000 TPM
    https://learn.microsoft.com/en-us/azure/ai-services/openai/quotas-limits


    Néè  é   r   r  )rO  )Úmax_parallel_requestsÚrpmÚtpmÚdefault_max_parallel_requestsÚcalculated_rpms        r3   Úcalculate_max_parallel_requestsr#  Ä  sS   € ð: Ð(Ø$Ð$Ø	ˆØˆ
Ø	ˆÜ˜S 4™Z¨!™^Ó,ˆØ˜QÒØˆNØÐØ	&Ð	2Ø,Ð,Ør5   c                óŽ   — | j                  di «      j                  d«      }|€!| j                  di «      j                  d«      }|S )zÔ
    Returns the routing order for a deployment.

    Checks litellm_params first (static config), then model_info (dynamic/team
    models added via API where order lives in model_info, not litellm_params).
    rô  Úorderr7  rv  )Ú
deploymentr%  s     r3   Ú_get_deployment_orderr'  ï  sE   € ð �N‰NÐ+¨RÓ0×4Ñ4°WÓ=€EØ€}Ø—‘˜|¨RÓ0×4Ñ4°WÓ=ˆØ€Lr5   c                ó  — |�$| D �cg c]  }t        |«      |k(  sŒ|‘Œ }}|r|S | S | D ��cg c]  }t        |«      }|€Œ|‘Œ }}}|rt        |«      nd }|� | D �cg c]  }t        |«      |k(  sŒ|‘Œ }}|S | S c c}w c c}}w c c}w r;   )r'  Úmin)	Úhealthy_deploymentsÚtarget_orderr„  Úfilteredr&  ÚoÚ_valid_ordersÚ	min_orderÚfiltered_deploymentss	            r3   Ú_get_order_filtered_deploymentsr1  ü  sÄ   € ØÐØ&9Öf Ô=RÐSTÓ=UÐYeÓ=eš1ÐfˆÐfÙØˆOà"Ð"ð 0÷'ØÔ:OÐPZÓ:[°AÐ`aÑ`mŠð'€Mñ 'ñ :G¤3 }Ô#5ÈD€IàÐà)<ö'
Ø%Ô@UÐV`Ó@aÐenÓ@nŠJð'
Ðð '
ð $Ð#ØÐùò% gùó'ùò'
s    ‡A9›A9¬A>¿A>ÁBÁ/Bc                ó˜   — |s| S t        |«      }| D �cg c]+  }|j                  d«      xs i j                  d«      |vsŒ*|‘Œ- c}S c c}w )a=  
    Filter out deployments whose `model_info.id` appears in `excluded_deployment_ids`.

    Used by weighted-routing failover so a single logical request can re-pick
    across the remaining deployments in the same model group after one of them
    has failed.

    If the filter would leave no deployments, an empty list is returned so the
    caller raises its usual no-deployments error and the weighted-failover
    helper falls through to the cross-group fallback path. Returning the
    original unfiltered list here would re-include the just-failed deployment.
    r7  r¬  )rû  rw  )r*  Úexcluded_deployment_idsÚexcluded_setr„  s       r3   Ú"_get_excluded_filtered_deploymentsr5    sM   € ñ  #Ø"Ð"äÐ5Ó6€LØ*Öh�!¨q¯u©u°\Ó/BÒ/HÀb×.MÑ.MÈdÓ.SÐ[gÒ.gŠAÒhÐhùÒhs   ”+AÁ Ac                ó@  — | dk(  rX|j                   xs* t        j                   xs t        d«      xs t        d«      }|�t        |t        «      r|S |j                  S | dk(  r|j
                  }|�|S |j                  S | dk(  r|j                  }|�|S |j                  S )z=
    Return the region for a model, for a given provider
    r˜  ÚVERTEXAI_LOCATIONÚVERTEX_LOCATIONr(  rˆ  )Úvertex_locationrp   r  r}  r°  Úaws_region_nameÚwatsonx_region_nameÚregion_name)rŸ  rô  Úvertex_ai_locationr:  r;  s        r3   Ú_get_model_regionr>  *  sË   € ð ˜kÒ)ð ×*Ñ*ò -Ü×&Ñ&ò-äÐ-Ó.ò-ô Ð+Ó,ð	 	ð Ð)¬jÐ9KÌSÔ.QØ%Ð%ð ×%Ñ%Ð%ð 
 	Ò	)Ø!/×!?Ñ!?ˆØÐ&Ø"Ð"ð
 ×%Ñ%Ð%ð	 
 	Ò	)Ø%3×%GÑ%GÐØÐ*Ø&Ð&Ø×%Ñ%Ð%r5   c                ót  — t        j                  | j                  | ¬«      \  }}}}t        || ¬«      }|€!t	        j
                  d| j                  «       y|dk(  rEt        j                  «       j                  «       }t        j                  «       j                  «       }nâ|dk(  rEt        j                  «       j                  «       }t        j                  «       j                  «       }n˜|dk(  rEt        j                  «       j                  «       }t        j                  «       j                  «       }nN|dk(  rEt        j                  «       j                  «       }t        j                  «       j                  «       }ng }g }|D ]  }||j                  «       v sŒ y	 |D ]  }||j                  «       v sŒ y
 y)z…
    Infer if a model is in the EU or US region

    Returns:
    - str (region) - "eu" or "us"
    - None (if region not found)
    )rž  rô  )rŸ  rô  Nz'Cannot infer model region for model: %sr'  r˜  r(  rˆ  ÚeuÚus)rp   r»   rž  r>  r  r<  rš  Úget_eu_regionsÚget_us_regionsr�  rœ  rž  rœ  )rô  rž  rŸ  r1  Úmodel_regionÚ
eu_regionsÚ
us_regionsÚregions           r3   Ú_infer_model_regionrH  C  sˆ  € ô (/×'?Ñ'?Ø×"Ñ"°>ô(Ñ$€EÐ  1ô ,Ð@SÐdrÔs€LàÐÜ×ÑÐFÈ×H\ÑH\Ô]Øà˜gÒ%Ü×.Ñ.Ó0×?Ñ?ÓAˆ
Ü×.Ñ.Ó0×?Ñ?ÓA‰
Ø	 Ò	+Ü×+Ñ+Ó-×<Ñ<Ó>ˆ
Ü×+Ñ+Ó-×<Ñ<Ó>‰
Ø	 	Ò	)Ü×6Ñ6Ó8×GÑGÓIˆ
Ü×6Ñ6Ó8×GÑGÓI‰
Ø	 	Ò	)Ü×/Ñ/Ó1×@Ñ@ÓBˆ
Ü×/Ñ/Ó1×@Ñ@ÓB‰
àˆ
Øˆ
àò ˆØ�\×'Ñ'Ó)Ò)Ùðð ò ˆØ�\×'Ñ'Ó)Ò)Ùðð r5   c                óL   — | j                   dk(  ryt        | ¬«      }|�|dk(  ryy)ú8
    Return true/false if a deployment is in the EU
    r@  T©rô  F©r<  rH  ©rô  rD  s     r3   Ú_is_region_eurN  n  ó4   € ð ×!Ñ! TÒ)Øô .¸^ÔL€LØÐ L°DÒ$8ØØr5   c                óL   — | j                   dk(  ryt        | ¬«      }|�|dk(  ryy)z8
    Return true/false if a deployment is in the US
    rA  TrK  FrL  rM  s     r3   Ú_is_region_usrQ  |  rO  r5   c                ó$   — | j                   |k(  ryy)rJ  TF)r<  )rô  Úallowed_model_regions     r3   Úis_region_allowedrT  Š  s   € ð ×!Ñ!Ð%9Ò9ØØr5   c           	     ó¢  — d| j                   v rÁt        | j                  t        «      r§t        | j                  t        «      r�| j                   j                  dd«      }t        j                  «       j                  || j                  | j                  | j                  xs t        j                  d|xs d¬«      }|j                  dd«      }|S y)	zM
    Pass the litellm params for an azure model, and get back the region
    r'  zazure/rØ  é
   Úchat)rž  Úapi_keyrï  rl  rM  Úmodezx-ms-regionN)rž  r}  rX  r°  rï  Úreplacerp   ÚAzureChatCompletionÚget_headersrl  rô  rw  )rô  rY  Ú_modelr\  rG  s        r3   Úget_model_regionr^  “  s¶   € ð
 	�>×'Ñ'Ñ'Ü�~×-Ñ-¬sÔ3Ü�~×.Ñ.´Ô4à&×,Ñ,×4Ñ4°X¸rÓBˆÜ '× ;Ñ ;Ó =× IÑ IØØ"×*Ñ*Ø#×,Ñ,Ø&×2Ñ2ÒW´g×6WÑ6WØØ’˜ð !Jó !
ˆð %-§L¡L°ÀÓ$EˆØˆØr5   c                ód   — 	 | j                  d«      }t        |«      d d }|S # t        $ r Y yw xY w)Nr»  éd   rØ  )rw  r°  rU   )rx  Ú	_messagess     r3   Úget_first_chars_messagesrb  «  s=   € ðØ—J‘J˜zÓ*ˆ	Ü˜	“N 4 CÐ(ˆ	ØÐøÜò Ùðús   ‚ # £	/®/c                óH   — dj                  d„ | D «       «      }t        |«      S )NrØ  c              3  óB   K  — | ]  }|j                  «       rŒ|–— Œ y ­wr;   )Úisspace)r@   Úchars     r3   rB   z$_count_characters.<locals>.<genexpr>¶  s   è ø€ Ò"O¨DÀÇÁÅ¤4Ñ"Oùs   ‚˜)r   rø  )r	  Úfiltered_texts     r3   Ú_count_charactersrh  ´  s!   € àŸ7™7Ñ"O°DÔ"OÓO€MÜˆ}ÓÐr5   c                óÐ  — t        | d«      r»t        | d«      r¯t        | dd «      }|r t        |d«      r”|j                  }g }|D ]p  }t        |d«      r:|j                  D ]*  }t        |d«      sŒ|j	                  |j
                  «       Œ, ŒIt        |d«      sŒV|j	                  |j
                  «       Œr dj                  |«      S t        | d«      rBt        | d«      r6t        | dd«      }d|v sd	|v r!t        | dd«      }t        |t        «      r|S dS | j                  }g }	|D ]®  }
t        |
t        «      rF|
j                  j                  €Œ*|	j	                  t        |
j                  j                  «      «       ŒYt        |
t        «      sŒj|
j                  j                  €Œ�|	j	                  t        |
j                  j                  «      «       Œ° dj                  |	«      S )
NrL   r\  Úoutputr×  r	  rØ  Údeltaz
text.deltazoutput_text.delta)r®  r„  rj  r×  rI  r	  r   r}  r°  rn  r~   rÔ  r–   rk  )Úresponse_objÚresponses_api_responseÚoutput_listÚresponse_output_partsÚoutput_itemÚcontent_partÚ
event_typerk  Ú_choicesÚresponse_partsÚchoices              r3   Úget_response_stringrv  º  sÃ  € äˆ|˜VÔ$¬°¸zÔ)Jô )0°¸jÈ$Ó(OÐÙ!¤gÐ.DÀhÔ&OØ!7×!>Ñ!>ˆKð 79Ð!Ø*ò C�ä˜;¨	Ô2Ø(3×(;Ñ(;ò L˜Ü" <°Õ8Ø1×8Ñ8¸×9JÑ9JÕKñLô ˜[¨&Õ1Ø)×0Ñ0°×1AÑ1AÕBðCð —7‘7Ð0Ó1Ð1ô ˆ|˜VÔ$¬°¸wÔ)GÜ# L°&¸"Ó=ˆ
Ø˜:Ñ%Ð)<À
Ñ)JÜ" <°¸"Ó=ˆEÜ& u¬cÔ2�5Ð:¸Ð:ð ?K×>RÑ>R€Hð (*€NØò AˆÜ�fœgÔ&Ø�~‰~×%Ñ%Ñ1Ø×%Ñ%¤c¨&¯.©.×*@Ñ*@Ó&AÕBÜ˜Ô 0Õ1Ø�|‰|×#Ñ#Ñ/Ø×%Ñ%¤c¨&¯,©,×*>Ñ*>Ó&?Õ@ðAð �7‰7�>Ó"Ð"r5   c                ó"  — |xs t         j                  }| dk(  s| dk(  r#|xs t         j                  xs t        d«      }|S | dk(  s| dk(  r#|xs t         j                  xs t        d«      }|S | dk(  r#|xs t         j
                  xs t        d«      }|S | d	k(  r#|xs t         j                  xs t        d
«      }|S | dk(  r#|xs t         j                  xs t        d«      }|S | dk(  s| dk(  r#|xs t         j                  xs t        d«      }|S | dk(  r#|xs t         j                  xs t        d«      }|S | dk(  r#|xs t         j                  xs t        d«      }|S | dk(  r#|xs t         j                  xs t        d«      }|S | dk(  r0|xs* t         j                  xs t        d«      xs t        d«      }|S | dk(  r#|xs t         j                  xs t        d«      }|S | dk(  r!|xs t         j                  xs t        d«      }|S )Nr®  r¯  ÚOPENAI_API_KEYr±  r¥  ÚANTHROPIC_API_KEYr´  ÚAI21_API_KEYr¶  ÚALEPH_ALPHA_API_KEYÚbasetenÚBASETEN_API_KEYr°  r“  ÚCOHERE_API_KEYr¨  ÚHUGGINGFACE_API_KEYrµ  ÚNLP_CLOUD_API_KEYrü  ÚREPLICATE_API_KEYrŒ  ÚTOGETHERAI_API_KEYÚTOGETHER_AI_TOKENr•  ÚNEBIUS_API_KEYr–  ÚWANDB_API_KEY)rp   rX  Ú
openai_keyr  Úanthropic_keyÚai21_keyÚaleph_alpha_keyÚbaseten_keyÚ
cohere_keyÚhuggingface_keyÚnlp_cloud_keyÚreplicate_keyÚtogetherai_api_keyÚ
nebius_keyÚ	wandb_key)Úllm_providerÚdynamic_api_keyrX  s      r3   Úget_api_keyr”  è  sC  € ØÒ0¤§¡€Gà�xÒ <Ð3KÒ#KØÒOœW×/Ñ/ÒO´:Ð>NÓ3OˆðH €NðE 
˜Ò	$¨Ð8HÒ(HØÒUœW×2Ñ2ÒU´jÐATÓ6UˆðB €Nð? 
˜Ò	ØÒKœW×-Ñ-ÒK´¸NÓ1Kˆð< €Nð9 
˜Ò	&ØÒYœW×4Ñ4ÒY¼
ÐCXÓ8Yˆð6 €Nð3 
˜Ò	"ØÒQœW×0Ñ0ÒQ´JÐ?PÓ4Qˆð0 €Nð- 
˜Ò	! \°]Ò%BØÒOœW×/Ñ/ÒO´:Ð>NÓ3Oˆð* €Nð' 
˜Ò	&ØÒYœW×4Ñ4ÒY¼
ÐCXÓ8Yˆð$ €Nð! 
˜Ò	$ØÒUœW×2Ñ2ÒU´jÐATÓ6Uˆð €Nð 
˜Ò	$ØÒUœW×2Ñ2ÒU´jÐATÓ6Uˆð €Nð 
˜Ò	&àÒx”w×1Ñ1Òx´ZÐ@TÓ5UÒxÔYcÐdwÓYxð 	ð €Nð 
˜Ò	!ØÒOœW×/Ñ/ÒO´:Ð>NÓ3Oˆð €Nð 
˜Ò	 ØÒMœW×.Ñ.ÒM´*¸_Ó2MˆØ€Nr5   c                 óˆ   — dd l } ddl m } t        | d«      r |j                  | j                  «      S  |j                  «       S )Nr   ©rŸ  ÚUTC)rŸ  r®  r   r—  Úutcnow)ÚdtrŸ  s     r3   Úget_utc_datetimerš    s6   € ÛÝ!äˆr�5ÔØˆx�|‰|˜BŸF™FÓ#Ð#àˆx�‰Ó Ð r5   c                óT  — d„ }	 | t         j                  v rVdt         j                  |    v rt         j                  |    d   S dt         j                  |    v rt         j                  |    d   S t        j                  } || ¬«      \  } }}}|dk(  r || ¬«      }|S | t         j                  v rWdt         j                  |    v rt         j                  |    d   S dt         j                  |    v rt         j                  |    d   S yt	        «       ‚# t        $ r t	        d| › d	�«      ‚w xY w)
aY  
    Get the maximum number of output tokens allowed for a given model.

    Parameters:
    model (str): The name of the model.

    Returns:
        int: The maximum number of tokens allowed for the given model.

    Raises:
        Exception: If the model is not mapped yet.

    Example:
        >>> get_max_tokens("gpt-4")
        8192
    c                óä   — d| › d�}	 t         j                  j                  |t        ¬«      }|j	                  «        |j                  «       }|j                  d«      }|�|S y # t        $ r Y y w xY w©Nzhttps://huggingface.co/z/raw/main/config.json)rM  Úmax_position_embeddings©rp   Úmodule_level_clientrw  r#   Úraise_for_statusr  rU   ©Ú
model_nameÚ
config_urlr\  Úconfig_jsonrž  s        r3   Ú_get_max_position_embeddingsz4get_max_tokens.<locals>._get_max_position_embeddings/  s|   € à5°j°\ÐAVÐWˆ
ð	ä%×9Ñ9×=Ñ=¸jÔRqÐ=ÓrˆHØ×%Ñ%Ô'ð 5=·M±M³OˆKà-8¯_©_Ð=VÓ-WÐ#Ø&Ð2Ø.Ð.àøÜò 	Ùð	úó   ˆAA# Á#	A/Á.A/Úmax_output_tokensrŽ  rì  r¨  ©r£  NzModel zr isn't mapped yet. Add it here - https://github.com/BerriAI/litellm/blob/main/model_prices_and_context_window.json)rp   rQ  rö  r»   rU   )rž  r¦  r»   rŸ  r1  rŽ  s         r3   Úget_max_tokensrª    sD  € ò$ð&
Ø”G×&Ñ&Ñ&Ø"¤g×&8Ñ&8¸Ñ&?Ñ?Ü×)Ñ)¨%Ñ0Ð1DÑEÐEØ¤×!3Ñ!3°EÑ!:Ñ:Ü×)Ñ)¨%Ñ0°Ñ>Ð>Ü"/×"@Ñ"@ÐÙ+;À%Ô+HÑ(ˆÐ" A qØ -Ò/Ù <ÈÔ NˆJØÐØ”G×&Ñ&Ñ&Ø"¤g×&8Ñ&8¸Ñ&?Ñ?Ü×)Ñ)¨%Ñ0Ð1DÑEÐEØ¤×!3Ñ!3°EÑ!:Ñ:Ü×)Ñ)¨%Ñ0°Ñ>Ð>ð ô “+Ðøäò 
ÜØ�U�Gð  Nð  Oó
ð 	
ð
ús)   …<D Á*D Á--D Â<D Ã*D Ä
D ÄD'c                ó0   — t        j                  dd| «      S )Nz-\d+$rØ  ©ÚreÚsubr©  s    r3   Ú_strip_stable_vertex_versionr¯  [  s   € Ü�6‰6�(˜B 
Ó+Ð+r5   c                ó2   — ddl m}  |j                  | «      S )zë
    Get the base model from the given model name.

    Handle model names like - "us.meta.llama3-2-11b-instruct-v1:0" -> "meta.llama3-2-11b-instruct-v1"
    AND "meta.llama3-2-11b-instruct-v1:0" -> "meta.llama3-2-11b-instruct-v1"
    r   rå   )Ú!litellm.llms.bedrock.common_utilsræ   rÐ  )r£  ræ   s     r3   Ú_get_base_bedrock_modelr²  _  s   € õ Cà*Ð×*Ñ*¨:Ó6Ð6r5   c                ó0   — t        j                  dd| «      S )a  
    Strips the organization, custom suffix, and ID from an OpenAI fine-tuned model name.

    input: ft:gpt-3.5-turbo:my-org:custom_suffix:id
    output: ft:gpt-3.5-turbo

    Args:
    model_name (str): The full model name

    Returns:
    str: The stripped model name
    z(:[^:]+){3}$rØ  r¬  r©  s    r3   Ú!_strip_openai_finetune_model_namer´  k  s   € ô �6‰6�/ 2 zÓ2Ð2r5   c                ó”   — |r|dv rt        | ¬«      }|S |r
|dk(  s|dk(  s|r|dk(  rt        | ¬«      }|S d| v rt        | ¬«      }|S | S )N©r(  Úbedrock_converser©  r˜  r—  r(  zft:)r²  r¯  r´  )rž  rŸ  Ústripped_bedrock_modelÚstrip_versionÚstrip_finetunes        r3   rŒ  rŒ  {  si   € ÙÐ2Ð6UÑUÜ(?È5Ô(QÐØ%Ð%áØ  KÒ/Ð3FÈ(Ò3RÙØ  LÒ0ä;ÀuÔMˆØÐØ	�%‰Ü AÈUÔ SˆØÐàˆr5   údict[str, str] | NoneÚ_model_cost_lowercase_mapÚ_model_cost_mutation_generationc                 ó   — t         S r;   )r½  r  r5   r3   Ú"get_model_cost_mutation_generationr¿  ˜  s   € Ü*Ð*r5   c                 ój   — da t        dz  at        j                  «        t        j                  «        y)z×Invalidate the case-insensitive lookup map for model_cost.

    Call this whenever litellm.model_cost is modified to ensure the map is rebuilt.
    Also clears related LRU caches that depend on model_cost data.
    Nr  )r¼  r½  Ú_cached_get_model_infoÚcache_clearÚ_cached_get_model_info_helperr  r5   r3   rº  rº  œ  s/   € ð !%ÐÜ# qÑ(Ð#ô ×&Ñ&Ô(Ü!×-Ñ-Õ/r5   c                 ór   — t         j                  D � ci c]  } | j                  «       | “Œ c} at        S c c} w )zŒRebuild the case-insensitive lookup map from the current model_cost.

    Returns:
        The rebuilt map (guaranteed to be not None).
    )rp   rQ  rœ  r¼  )r`  s    r3   Ú!_rebuild_model_cost_lowercase_maprÅ  «  s1   € ô 8?×7IÑ7IÖ J°! §¡£¨A¡Ò JÐÜ$Ð$ùò !Ks   “4c                ón   — t        «       at        j                  | «      }|�|t        j                  v r|S y)zÄ
    Handle stale _model_cost_lowercase_map entry (key was popped).

    Rebuilds the map and retries the lookup.

    Returns:
        The matched key if found after rebuild, None otherwise.
    N)rÅ  r¼  rw  rp   rQ  )Úpotential_key_lowerÚmatched_keys     r3   Ú_handle_stale_map_entry_rebuildrÉ  ¶  s;   € ô !BÓ CÐÜ2×6Ñ6Ð7JÓK€KØÐ ;´'×2DÑ2DÑ#DØÐØr5   c                óp   — t         j                  D ]#  }|j                  «       | k(  sŒt        «       a|c S  y)zì
    Handle new key added to model_cost without invalidating _model_cost_lowercase_map.

    Scans model_cost for case-insensitive match and rebuilds the map if found.

    Returns:
        The matched key if found, None otherwise.
    N)rp   rQ  rœ  rÅ  r¼  )rÇ  r�  s     r3   Ú_handle_new_key_with_scanrË  É  s;   € ô ×!Ñ!ò ˆØ�9‰9‹;Ð-Ó-Ü(IÓ(KÐ%ØŠJðð r5   c                óä   — | t         j                  v r| S t        €
t        «       a| j	                  «       }t        j                  |«      }|�|t         j                  v r|S |�t        |«      }|�|S y)aþ  
    Get the actual key from model_cost, with case-insensitive fallback.

    WARNING: Only O(1) lookup operations are acceptable. O(n) lookups will cause severe
    CPU overhead. This function is called frequently during router operations.

    ALLOWED HELPER FUNCTIONS (conditionally called, O(n) operations are acceptable):
    - _rebuild_model_cost_lowercase_map: Rebuilds the lookup map (only when map is None)
    - _handle_stale_map_entry_rebuild: Rebuilds map when stale entry detected (rare case)

    If you need to add a new helper function with O(n) operations that is conditionally
    called and confirmed not to cause performance issues, add it to the allowed_helpers
    list in: tests/code_coverage_tests/check_get_model_cost_key_performance.py
    N)rp   rQ  r¼  rÅ  rœ  rw  rÉ  )Úpotential_keyrÇ  rÈ  s      r3   rP  rP  Ü  s†   € ð$ œ×*Ñ*Ñ*ØÐô !Ð(Ü$EÓ$GÐ!à!.×!4Ñ!4Ó!6ÐÜ+×/Ñ/Ð0CÓD€Kð Ð ;´'×2DÑ2DÑ#DØÐð ÐÜ5Ð6IÓJˆØÐ"ØÐàr5   c                ó(   — t         j                  |    S r;   )rp   rQ  ©r�  s    r3   Ú_get_model_info_from_model_costrÐ    s   € Ü×Ñ˜cÑ"Ð"r5   c                ó  — |r‹| j                  d«      �z| d   |k7  rr|dk(  r| d   j                  d«      s>|dk(  r| d   j                  d«      s%|j                  d«      r| d   j                  d«      ry|dk(  ry|dk(  r| d   dv ry|d	k(  ryy
y)a»  
    Check if the model info provider matches the custom provider.

    A missing ``litellm_provider`` key and a ``litellm_provider`` set to
    ``None`` both mean "no specific provider constraint" and are treated
    as a wildcard match. ``register_model`` may persist ``None`` here via
    ``get_model_info`` when a deployment is registered without a provider,
    so normalising the two cases keeps custom pricing applied consistently.
    rŠ  r˜  r4  r(  TÚlitellm_proxyÚazure_ai)r'  r®  ÚgithubF)rw  r‹  ©r7  rŸ  s     r3   Ú_check_provider_matchrÖ  	  sÀ   € ñ Ø�‰Ð)Ó*Ð6¸:ÐFXÑ;YÐ]pÒ;pð   ;Ò.ØÐ-Ñ.×9Ñ9¸+ÔFØ" nÒ4ØÐ-Ñ.×9Ñ9¸.ÔIØ"×-Ñ-¨iÔ8ØÐ-Ñ.×9Ñ9¸)ÔDàà ?Ò2àØ  JÒ.°:Ð>PÑ3Qð V
ñ 4
ð Ø  HÒ,àààr5   )ÚReadOnlyÚ	TypedDictc                  óJ   — e Zd ZU ded<   ded<   ded<   ded<   ded<   ded<   y	)
Ú'PotentialModelNamesAndCustomLLMProviderr°  Úsplit_modelÚcombined_model_nameÚstripped_model_nameÚcombined_stripped_model_namezReadOnly[str]Úprovider_prefixed_model_namerŸ  N)r‡  r›  rœ  rž  r  r5   r3   rÚ  rÚ  7  s&   … ØÓØÓØÓØ"%Ó%Ø"/Ó/ØÔr5   rÚ  c                ó¨   — |d   | |d   |d   |d   |d   f}t        d„ |D «       «      ry|D ]#  }t        |«      }|€Œ|€||fc S |i |¥d|i¥fc S  y)	aL  Resolve an unmapped model via the declarative capability generalization rules.

    Tries the same name candidates as the exact lookups, in the same order, and
    returns ``(matched_name, model_info)`` for the first candidate matched by at
    least one capability rule, with ``litellm_provider`` backfilled from the
    provider the caller requested. Rules lose to exact entries: if ANY candidate is
    an exact ``litellm.model_cost`` key (necessarily provider-mismatched, or the
    exact lookups would have returned it), the model is known rather than unmapped,
    and resolving it from rules would hand an unpriced rule-derived entry to
    callers whose fallback ladder (e.g. the cost calculator's model-name variants)
    still had a priced exact name to try. O(number of rules); only call after the
    exact lookups have missed.
    rÜ  rÛ  rÞ  rÝ  rß  c              3  ó6   K  — | ]  }t        |«      d u–— Œ y ­wr;   )rP  )r@   r’  s     r3   rB   z6_get_model_info_from_generalization.<locals>.<genexpr>Z  s   è ø€ Ò
R¸)Ô˜yÓ)°Ô5Ñ
Rùs   ‚NrŠ  )rF   r-   )rž  Úpotential_model_namesrŸ  r�  r’  Úgeneralized_infos         r3   Ú#_get_model_info_from_generalizationrä  @  s¤   € ð& 	Ð3Ñ4ØØ˜mÑ,ØÐ<Ñ=ØÐ3Ñ4ØÐ<Ñ=ð€Jô Ñ
RÀzÔ
RÔRØØò Xˆ	Ü;¸IÓFÐØÐ#ØØÐ&ØÐ.Ð.Ò.ØÐWÐ-ÐWÐ/AÐCVÑWÐWÒWðXð r5   c                óÀ  — |€3	 t         j                  } || ¬«      \  }}}}| }t        | |¬«      }|}| }nh|rG| j	                  |dz   «      r3| j                  dd«      d   }| }t        ||¬«      }|› d|› �}|› d| › �}n| }|› d| › �}t        | |¬«      }|› d|› �}|}|dv rddlm}	  |	|«      }t        |||||t        t        |«      ¬«      S # t        $ r | }Y Œºw xY w)	Nrì  r�  rN  r  r¶  r   )Ústrip_bedrock_routing_prefix)rÛ  rÜ  rÝ  rÞ  rß  rŸ  )rö  r»   rU   rŒ  r‹  r£  r±  ræ  rÚ  rª   r°  )
rž  rŸ  r»   rÛ  r1  rÜ  rÝ  rÞ  rß  ræ  s
             r3   Ú_get_potential_model_namesrç  f  sJ  € ØÐ"ð	 Ü&3×&DÑ&DÐÙ5EÈEÔ5RÑ2ˆKÐ,¨a°ð $ÐÜ/°eÐQdÔeÐØ':Ð$Ø',Ñ$Ù	 ×!1Ñ!1Ø˜cÑ!ô"ð —k‘k # qÓ)¨!Ñ,ˆØ#ÐÜ/°kÐWjÔkÐØ*=Ð)>¸aÐ@SÐ?TÐ'UÐ$Ø*=Ð)>¸aÀ¸wÐ'GÑ$àˆØ!4Ð 5°Q°u°gÐ>ÐÜ/°eÐQdÔeÐØ*=Ð)>¸aÐ@SÐ?TÐ'UÐ$Ø':Ð$àÐ=Ñ=ÝRá2°;Ó?ˆä2ØØ/Ø/Ø%AØ%AÜ ¤Ð&9Ó:ôð øô5 ò 	 ØŠKð	 ús   „C ÃCÃCc                óä   — d| › d�}	 t         j                  j                  |t        ¬«      }|j	                  «        |j                  «       }|j                  d«      }|�|S y # t        $ r Y y w xY wr�  rŸ  r¢  s        r3   r¦  r¦  �  s~   € à1°*°Ð=RÐS€Jðä!×5Ñ5×9Ñ9¸*ÔNmÐ9ÓnˆØ×!Ñ!Ô#ð 19·±³ˆð *5¯©Ð9RÓ)SÐà"Ð.Ø*Ð*àøÜò Ùðúr§  c                ó   — t        | ||¬«      S )z_
    _get_model_info_helper wrapped with lru_cache

    Speed Optimization to hit high RPS
    ©rž  rŸ  rï  )r6  rê  s      r3   rÃ  rÃ  §  s   € ô "ØØ/Øôð r5   c                óŠ   — d }|r(|t         v r t        j                  | t        |«      ¬«      }d }|r|j	                  | ¬«      }|S )Nrð  rì  )r‰   rø  Úget_provider_model_inforˆ   rH  )rž  rŸ  r   r7  s       r3   rH  rH  ¹  sX   € ð 04€OÙÐ2´oÑEä/×GÑGØ¤,Ð/BÓ"Cð Hó 
ˆð 48€JÙØ$×6Ñ6¸UÐ6ÓCˆ
àÐr5   c                óB   — t        d„ | j                  «       D «       «      S )zT
    Check if the potential model name is in the model cost (case-insensitive).
    c              3  óH   K  — | ]  }t        t        |«      «      d u–— Œ y ­wr;   )rP  r°  )r@   Úpotential_model_names     r3   rB   z9_is_potential_model_name_in_model_cost.<locals>.<genexpr>Ñ  s(   è ø€ ò à ô 	œCÐ 4Ó5Ó6¸dÔBñùs   ‚ ")rF   rG   )râ  s    r3   Ú&_is_potential_model_name_in_model_costrð  Ë  s'   € ô ñ à$9×$@Ñ$@Ó$Bôó ð r5   z_above_\d+k?_tokens$Ú_ABOVE_THRESHOLD_COST_KEYc           	     ó  — ddl m} 	 i t        j                  ¥t        j                  ¥}| |v r||    } |�|dk(  rd}|�O|dk(  rJd| z   t        j
                  v rd| z   } n/| dz   t        j                  v s| dz   t        j                  v r| dz   } t        | |xs  || «      ¬«      }t        j                  d	|«       |d
   }|d   }|d   }	|d   }
|d   }|d   }|}d}|r(|t        v r t        j                  | t        |«      ¬«      }|�)t        |dd«      }t!        |«      r	  || ||¬«      }|�|S 	 |dk(  rHt'        | ¬«      }t)        d�i d| “d|“dd“dd“dd“dd“dd“dd“dd“d d“d!d“d"d“d#d“d$d“d%d“d&d“d'd“ŽS 	 d}d}t+        |«      }|�+|}t-        t/        t0        |«      ¬(«      }t3        ||¬)«      sd}|€8t+        | «      }|�+|}t-        t/        t0        |«      ¬(«      }t3        ||¬)«      sd}|€8t+        |«      }|�+|}t-        t/        t0        |«      ¬(«      }t3        ||¬)«      sd}|€8t+        |	«      }|�+|}t-        t/        t0        |«      ¬(«      }t3        ||¬)«      sd}|€8t+        |«      }|�+|}t-        t/        t0        |«      ¬(«      }t3        ||¬)«      sd}|€8t+        |
«      }|�+|}t-        t/        t0        |«      ¬(«      }t3        ||¬)«      sd}|€t5        | ||¬*«      }|�|\  }}|�|€t7        d+«      ‚|j9                  d«      }|€t        j                  d,| |«       d}|j9                  d«      }|€t        j                  d-| |«       d}t)        d�i d|“d|j9                  dd«      “d|j9                  dd«      “d|j9                  dd«      “d|“d.|j9                  d.d«      “d/|j9                  d/d«      “d0|j9                  d0d«      “d1|j9                  d1d«      “d2|j9                  d2d«      “d3|j9                  d3d«      “d4|j9                  d4d«      “d5|j9                  d5d«      “d6|j9                  d6d«      “d7|j9                  d7d«      “d8|j9                  d8d«      “d9|j9                  d9d«      “d:|j9                  d:d«      “d;|j9                  d;d«      “d<|j9                  d<d«      “d=|j9                  d=d«      “d>|j9                  d>d«      “d?|j9                  d?d«      “d@|j9                  d@d«      “dA|j9                  dAd«      “dB|j9                  dBd«      “dC|j9                  dCd«      “dD|j9                  dDd«      “dE|j9                  dEd«      “dF|j9                  dFd«      “dG|j9                  dGd«      “dH|j9                  dHd«      “dI|j9                  dId«      “dJ|j9                  dJd«      “dK|j9                  dKd«      “dL|j9                  dLd«      “dM|j9                  dMd«      “dN|j9                  dNd«      “dO|j9                  dOd«      “dP|j9                  dPd«      “dQ|j9                  dQd«      “dR|j9                  dRd«      “dS|j9                  dSd«      “dT|j9                  dTd«      “dU|j9                  dU«      “dV|j9                  dV«      “d|“dW|j9                  dWd«      “dX|j9                  dXd«      “dY|j9                  dYd«      “dZ|j9                  dZd«      “d[|j9                  d[d«      “d\|j9                  d\d«      “d]|j9                  d]d«      “d^|j9                  d^d«      “d_|j9                  d_d«      “d`|j9                  d`d«      “da|j9                  dad«      “db|j9                  dbd«      “dc|j9                  dcd«      “dd|j9                  ddd«      “de|j9                  ded«      “df|j9                  dfd«      “dg|j9                  dgd«      “dh|j9                  dhd«      “di|j9                  did«      “dj|j9                  djd«      “dk|j9                  dkd«      “dl|j9                  dld«      “dm|j9                  dmd«      “dn|j9                  dnd«      “do|j9                  dod«      “dp|j9                  dpd«      “dq|j9                  dqd«      “dr|j9                  drd«      “ds|j9                  dsd«      “dt|j9                  dtd«      “d|j9                  d|«      “d|j9                  d«      “du|j9                  dud«      “d|j9                  dd«      “d |j9                  d d«      “dv|j9                  dvd«      “d!|j9                  d!d«      “dw|j9                  dwd«      “d"|j9                  d"d«      “d#|j9                  d#d«      “d$|j9                  d$d«      “d%|j9                  d%d«      “dx|j9                  dxd«      “dy|j9                  dyd«      “d'|j9                  d'd«      “dz|j9                  dzd«      “d{|j9                  d{d«      “d||j9                  d|d«      “d}|j9                  d}d«      “d~|j9                  d~d«      “d|j9                  dd«      “d€|j9                  d€d«      “d�|j9                  d�d«      “d‚|j9                  d‚d«      “dƒ|j9                  dƒd«      “d„|j9                  d„d«      “d…|j9                  d…d«      “d†|j9                  d†d«      “d‡|j9                  d‡d«      “dˆ|j9                  dˆd«      “d‰|j9                  d‰d«      “dŠ|j9                  dŠd«      “d‹|j9                  d‹d«      “dŒ|j9                  dŒd«      “d�|j9                  d�d«      “d&|j9                  d&d«      “dŽ|j9                  dŽd«      “d�|j9                  d�d«      “d�|j9                  d�d«      “d‘|j9                  d‘d«      “d’|j9                  d’d«      “d“|j9                  d“d«      “d”|j9                  d”d«      “d•|j9                  d•d«      “d–|j9                  d–d«      “d—|j9                  d—d«      “d˜|j9                  d˜d«      “Ž}|j;                  «       D ]%  \  }}||vsŒt<        j?                  |«      €Œ!|||<   Œ' |S # t"        $ r#}t        j$                  d| ||«       Y d}~�Œ•d}~ww xY w# t"        $ r-}t        j                  d™|«       t#        dš| › d›|› dœ�«      ‚d}~ww xY w)žzy
    Helper for 'get_model_info'. Separated out to avoid infinite loop caused by returning 'supported_openai_param's
    r   rL  Nr™  r˜  zmeta/z@latestr�  z8checking potential_model_names in litellm.model_cost: %srÜ  rÝ  rÞ  rß  rÛ  rŸ  rð  r–  )rž  rï  rX  zcCould not get dynamic model info for model=%s, provider=%s; falling back to the static cost map: %sr¨  r©  r�  rŽ  Úmax_input_tokensr¨  r­  r®  rŠ  rY  rW  r,  r9  rD  rF  Úsupports_assistant_prefillrg  ri  rk  rc  rÏ  rÕ  )rž  râ  rŸ  z|This model isn't mapped yet. Add it here - https://github.com/BerriAI/litellm/blob/main/model_prices_and_context_window.jsonz`model=%s, custom_llm_provider=%s has no input_cost_per_token in model_cost_map. Defaulting to 0.zamodel=%s, custom_llm_provider=%s has no output_cost_per_token in model_cost_map. Defaulting to 0.Úinput_cost_per_token_flexÚinput_cost_per_token_priorityÚinput_cost_per_token_ultrafastr‚  r„  Ú1cache_creation_input_token_cost_above_272k_tokensÚ:cache_creation_input_token_cost_above_272k_tokens_priorityÚ6cache_creation_input_token_cost_above_272k_tokens_flexÚ$cache_creation_input_token_cost_flexÚ(cache_creation_input_token_cost_priorityÚ)cache_creation_input_token_cost_ultrafastr…  Úprompt_cache_min_tokensr†  Ú6cache_read_input_token_cost_above_200k_tokens_priorityÚ-cache_read_input_token_cost_above_272k_tokensÚ6cache_read_input_token_cost_above_272k_tokens_priorityÚ2cache_read_input_token_cost_above_272k_tokens_flexÚ-cache_read_input_token_cost_above_512k_tokensÚ cache_read_input_token_cost_flexÚ$cache_read_input_token_cost_priorityÚ%cache_read_input_token_cost_ultrafastrƒ  Úinput_cost_per_characterÚ&input_cost_per_token_above_128k_tokensÚ&input_cost_per_token_above_200k_tokensÚ/input_cost_per_token_above_200k_tokens_priorityÚ&input_cost_per_token_above_272k_tokensÚ/input_cost_per_token_above_272k_tokens_priorityÚ+input_cost_per_token_above_272k_tokens_flexÚ&input_cost_per_token_above_512k_tokensÚinput_cost_per_queryÚinput_cost_per_secondÚinput_cost_per_audio_tokenÚinput_cost_per_image_tokenÚinput_cost_per_video_tokenÚinput_cost_per_imageÚinput_cost_per_audio_per_secondÚinput_cost_per_video_per_secondÚinput_cost_per_token_batchesÚoutput_cost_per_token_batchesÚoutput_cost_per_token_flexÚoutput_cost_per_token_priorityÚoutput_cost_per_token_ultrafastÚ(regional_processing_uplift_multiplier_euÚ(regional_processing_uplift_multiplier_usÚ#regional_endpoint_uplift_multiplierÚoutput_cost_per_audio_tokenÚoutput_cost_per_characterÚoutput_cost_per_reasoning_tokenÚ$output_cost_per_reasoning_token_flexÚ(output_cost_per_reasoning_token_priorityÚ'output_cost_per_token_above_128k_tokensÚ+output_cost_per_character_above_128k_tokensÚ'output_cost_per_token_above_200k_tokensÚ0output_cost_per_token_above_200k_tokens_priorityÚ'output_cost_per_token_above_272k_tokensÚ0output_cost_per_token_above_272k_tokens_priorityÚ,output_cost_per_token_above_272k_tokens_flexÚ'output_cost_per_token_above_512k_tokensÚoutput_cost_per_secondÚoutput_cost_per_second_1080pÚoutput_cost_per_second_480pÚoutput_cost_per_second_4kÚ output_cost_per_video_per_secondÚoutput_cost_per_imageÚoutput_cost_per_image_tokenÚoutput_cost_per_video_tokenÚoutput_vector_sizeÚcitation_cost_per_tokenr¬  Úsupported_endpointsrm  rA  r`  re  rx  r5  rq  r1  r3  ro  Úsupports_adaptive_thinkingÚsupports_legacy_thinkingÚthinking_always_onÚsupports_tool_searchÚ supports_mid_conversation_systemÚsupports_none_reasoning_effortÚ!supports_minimal_reasoning_effortÚsupports_low_reasoning_effortÚsupports_xhigh_reasoning_effortÚsupports_max_reasoning_effortÚreasoning_effort_levelsÚdefault_reasoning_effortÚ$bedrock_output_config_effort_ceilingÚ&bedrock_converse_supports_strict_toolsÚsearch_context_cost_per_queryÚweb_search_billing_unitÚ$google_maps_grounding_cost_per_queryr   r  Úocr_cost_per_pageÚocr_cost_per_creditÚannotation_cost_per_pageÚprovider_specific_entryÚuses_embed_contentÚsupports_image_sizezError getting model info: %sz#This model isn't mapped yet. model=z, custom_llm_provider=zb. Add it here - https://github.com/BerriAI/litellm/blob/main/model_prices_and_context_window.json.r  ) r  rM  rp   Ú
azure_llmsÚazure_embedding_modelsÚvertex_llama3_modelsrÈ  rË  rç  r  r<  r‰   rø  rì  rˆ   r„  ÚcallablerU   rõ  r¦  r�   rP  rÐ  rª   r°  rÖ  rä  rU  rw  rŠ  rñ  Úsearch)rž  rŸ  rï  rX  rM  rN  râ  rÜ  rÝ  rÞ  rß  rÛ  Úmodel_cost_custom_llm_providerr   Úprovider_get_model_infoÚprovider_model_infor3  rŽ  Ú_model_infor�  Ú_matched_keyÚgeneralizationÚ_input_cost_per_tokenÚ_output_cost_per_tokenÚreturned_model_infoÚcost_keyÚ
cost_values                              r3   r6  r6  Ú  s
  € õ cðu
ØTœw×1Ñ1ÐT´W×5SÑ5SÐTˆ
Ø�JÑØ˜uÑ%ˆEØÐ*Ð/BÐFVÒ/VØ"-ÐØÐ*Ð/BÀkÒ/QØ˜‰¤'×">Ñ">Ñ>Ø %™‘à˜	Ñ!¤W×%BÑ%BÑBÀeÈiÑFWÔ[b×[xÑ[xÑFxà 	Ñ)�ä'AØÐ-@Ò-kÑDdÐejÓDkô(
Ðô 	×ÑÐWÐYnÔoà%:Ð;PÑ%QÐØ%:Ð;PÑ%QÐØ.CÐDbÑ.cÐ$Ø.CÐDbÑ.cÐ$Ø2°=ÑAˆØ3Ð4IÑJÐØ0CÐ&à37ˆÙÐ#6¼/Ñ#IÜ3×KÑKØ¤lÐ3FÓ&Gð Ló ˆOð Ð&Ü-4°_ÐFVÐX\Ó-]Ð#ÜÐ/Ô0ðÙ1HØ#Ø!)Ø 'ô2Ð'ð
 +Ð6Ø2Ð2ð 7ð  -Ò/Ü <ÈÔ NˆJÜ ò Ùðá%ðñ "&ðñ #'ð	ñ
 &'ðñ '(ðñ "/ðñ ðñ *.ðñ *.ðñ +/ðñ &*ðñ ,0ðñ )-ðñ 26ðñ  '+ð!ñ" $(ð#ð ð(ð 26ˆKØ"ˆCô /Ð/BÓCˆLØÐ'Ø"�Ü=Ä$ÄsÈCÃ.ÔQ�Ü,Ø*Ø(Fõð #'�KØÐ"Ü2°5Ó9�ØÐ+Ø&�CÜ"AÄdÌ3ÐPSÃnÔ"U�KÜ0Ø#.Ø,Jõð '+˜ØÐ"Ü2°;Ó?�ØÐ+Ø&�CÜ"AÄdÌ3ÐPSÃnÔ"U�KÜ0Ø#.Ø,Jõð '+˜ØÐ"Ü2Ð3OÓP�ØÐ+Ø&�CÜ"AÄdÌ3ÐPSÃnÔ"U�KÜ0Ø#.Ø,Jõð '+˜ØÐ"Ü2Ð3FÓG�ØÐ+Ø&�CÜ"AÄdÌ3ÐPSÃnÔ"U�KÜ0Ø#.Ø,Jõð '+˜ØÐ"Ü2Ð3OÓP�ØÐ+Ø&�CÜ"AÄdÌ3ÐPSÃnÔ"U�KÜ0Ø#.Ø,Jõð '+˜àÐ"Ü(KØØ*?Ø(;ô)�ð
 "Ð-Ø'5Ñ$�C˜àÐ" c kÜ ð Sóð ð 3>·/±/ÐBXÓ2YÐ!Ø$Ð,ä×$Ñ$ØvØØ'ôð
 )*Ð%à3>·?±?ÐCZÓ3[Ð"Ø%Ð-ä×$Ñ$ØwØØ'ôð
 *+Ð&ä)6ò s*Ùðs*à&Ÿ?™?¨<¸Ô>ðs*ð "-§¡Ð1CÀTÔ!Jðs*ð #.§/¡/Ð2EÀtÔ"Lð	s*ñ
 &;ðs*ð +6¯/©/Ð:UÐW[Ô*\ðs*ð /:¯o©oÐ>]Ð_cÔ.dðs*ð 0;¯©Ð?_ÐaeÔ/fðs*ð 1<·±Ð@aÐcgÔ0hðs*ð CNÇ/Á/ØGÈôCðs*ð CNÇ/Á/ØGÈôCðs*ð  LWÏ?É?ØPÐRVôLð!s*ð& HSÇÁØLÈdôHð's*ð, 6A·_±_ÐEkÐmqÔ5rð-s*ð. :E¿¹Ø>Àô:ð/s*ð4 ;F¿/¹/Ø?Àô;ð5s*ð: -8¯O©OÐ<YÐ[_Ô,`ð;s*ð< )4¯©Ð8QÐSWÔ(Xð=s*ð> ?J¿o¹oØCÀTô?ð?s*ðD HSÇÁØLÈdôHðEs*ðJ ?J¿o¹oØCÀTô?ðKs*ðP HSÇÁØLÈdôHðQs*ðV DOÇ?Á?ØHÈ$ôDðWs*ð\ ?J¿o¹oØCÀTô?ð]s*ðb 2=·±ÐAcÐeiÔ1jðcs*ðd 6A·_±_ÐEkÐmqÔ5rðes*ðf 7B·o±oÐFmÐosÔ6tðgs*ðh ;F¿/¹/Ø?Àô;ðis*ðn *5¯©Ð9SÐUYÔ)Zðos*ðp 8C·±ÐGoÐquÔ7vðqs*ðr 8C·±ÐGoÐquÔ7vðss*ðt ALÇÁØEÀtôAðus*ðz 8C·±ÐGoÐquÔ7vð{s*ð| ALÇÁØEÀtôAð}s*ðB =H¿O¹OØAÀ4ô=ðCs*ðH 8C·±ÐGoÐquÔ7vðIs*ðJ &1§_¡_Ð5KÈTÔ%RðKs*ðL '2§o¡oÐ6MÈtÔ&TðMs*ðN ,7¯?©?Ð;WÐY]Ô+^ðOs*ðP ,7¯?©?Ð;WÐY]Ô+^ðQs*ðR ,7¯?©?Ð;WÐY]Ô+^ðSs*ðT &1§_¡_Ð5KÈTÔ%RðUs*ðV 1<·±Ð@aÐcgÔ0hðWs*ðX 1<·±Ð@aÐcgÔ0hðYs*ðZ .9¯_©_Ð=[Ô-\ð[s*ð\ /:¯o©oÐ>]Ô.^ð]s*ñ^ '=ð_s*ð` ,7¯?©?Ð;WÐY]Ô+^ðas*ðb 0;¯©Ð?_ÐaeÔ/fðcs*ðd 1<·±Ð@aÐcgÔ0hðes*ðf :E¿¹Ø>Àô:ðgs*ðl :E¿¹Ø>Àô:ðms*ðr 5@·O±OÐDiÐkoÔ4pðss*ðt -8¯O©OÐ<YÐ[_Ô,`ðus*ðv +6¯/©/Ð:UÐW[Ô*\ðws*ðx 1<·±Ð@aÐcgÔ0hðys*ðz 6A·_±_ÐEkÐmqÔ5rð{s*ð| :E¿¹Ø>Àô:ð}s*ðB 9D¿¹Ø=¸tô9ðCs*ðH =H¿O¹OØAÀ4ô=ðIs*ðN 9D¿¹Ø=¸tô9ðOs*ðT BMÇÁØFÈôBðUs*ðZ 9D¿¹Ø=¸tô9ð[s*ð` BMÇÁØFÈôBðas*ðf >I¿_¹_ØBÀDô>ðgs*ðl 9D¿¹Ø=¸tô9ðms*ðr (3§¡Ð7OÐQUÔ'Vðss*ðt .9¯_©_Ð=[Ð]aÔ-bðus*ðv -8¯O©OÐ<YÐ[_Ô,`ðws*ðx +6¯/©/Ð:UÐW[Ô*\ðys*ðz 2=·±ÐAcÐeiÔ1jð{s*ð| '2§o¡oÐ6MÈtÔ&Tð}s*ð~ -8¯O©OÐ<YÐ[_Ô,`ðs*ð@ -8¯O©OÐ<YÐ[_Ô,`ðAs*ðB $/§?¡?Ð3GÈÔ#NðCs*ðD )4¯©Ð8QÐSWÔ(XðEs*ðF  +Ÿ™Ð/?ÀÔFðGs*ðH "-§¡Ð1CÐEXÔ!YðIs*ðJ !—_‘_ VÔ,ðKs*ðL %0§O¡OÐ4IÈ4Ô$PðMs*ðN *5¯©Ð9SÐUYÔ)ZðOs*ðP *5¯©Ð9SÐUYÔ)ZðQs*ðR !,§¡Ð0AÀ4Ô HðSs*ðT +6¯/©/Ð:UÐW[Ô*\ðUs*ðV 4?·?±?ÐCgÐimÔ3nðWs*ðX &1§_¡_Ð5KÈTÔ%RðYs*ðZ ,7¯?©?Ð;WÐY]Ô+^ð[s*ð\ )4¯©Ð8QÐSWÔ(Xð]s*ð^ 2=·±ÐAcÐeiÔ1jð_s*ð` &1§_¡_Ð5KÈTÔ%Rðas*ðb '2§o¡oÐ6MÈtÔ&Tðcs*ðd $/§?¡?Ð3GÈÔ#Nðes*ðf 0;¯©Ð?_ÐaeÔ/fðgs*ðh +6¯/©/Ð:UÐW[Ô*\ðis*ðj 3>·/±/ÐBeÐgkÔ2lðks*ðl %0§O¡OÐ4IÈ4Ô$Pðms*ðn &1§_¡_Ð5KÈTÔ%Rðos*ðp $/§?¡?Ð3GÈÔ#Nðqs*ðr ,7¯?©?Ð;WÐY]Ô+^ðss*ðt *5¯©Ð9SÐUYÔ)Zðus*ðv $/§?¡?Ð3GÈÔ#Nðws*ðx &1§_¡_Ð5KÈTÔ%Rðys*ðz 2=·±ÐAcÐeiÔ1jð{s*ð| 0;¯©Ð?_ÐaeÔ/fð}s*ð~ 3>·/±/ÐBeÐgkÔ2lðs*ð@ /:¯o©oÐ>]Ð_cÔ.dðAs*ðB 1<·±Ð@aÐcgÔ0hðCs*ðD /:¯o©oÐ>]Ð_cÔ.dðEs*ðF )4¯©Ð8QÐSWÔ(XðGs*ðH *5¯©Ð9SÐUYÔ)ZðIs*ðJ 6A·_±_ÐEkÐmqÔ5rðKs*ðL 8C·±ÐGoÐquÔ7vðMs*ðN '2§o¡oÐ6MÈtÔ&TðOs*ðP /:¯o©oÐ>]Ð_cÔ.dðQs*ðR )4¯©Ð8QÐSWÔ(XðSs*ðT 6A·_±_ÐEkÐmqÔ5rðUs*ðV  —O‘O E¨4Ô0ðWs*ðX  —O‘O E¨4Ô0ðYs*ðZ #.§/¡/Ð2EÀtÔ"Lð[s*ð\ %0§O¡OÐ4IÈ4Ô$Pð]s*ð^ *5¯©Ð9SÐUYÔ)Zð_s*ð` )4¯©Ð8QÐSWÔ(Xðas*ðb $/§?¡?Ð3GÈÔ#Nðcs*ðd %0§O¡OÐ4IÈ4Ô$Pðes*Ððh )4×(9Ñ(9Ó(;ò ?Ñ$�˜*ØÐ#6Ò6Ô;T×;[Ñ;[Ð\dÓ;eÑ;qØ4>Ð'¨Ò1ð?ð 'Ð&øôI
 !ò Ü"×*Ñ*ðBàØ+Ø÷ò ûðûôJ
 ò 
Ü×ÑÐ;¸QÔ?ÜØ1°%°Ð8NÐObÐNcð  dFð  Gó
ð 	
ûð
úsV   ˆDs Ä!r Ä0As Å>ls ò s òs ò	sò(só s ósós ó	tó(s?ó?tc                óÊ   — t        j                  | |¬«      }t        | |||¬«      }t        | |¬«      }|r |j	                  «       D ]  \  }}|€Œ	|||<   Œ t        di |¤d|i¤ŽS )Nr�  ©rž  rŸ  rï  rX  r_  r  )rp   r¼   r6  rH  rŠ  rŒ   )	rž  rŸ  rï  rX  r_  rV  rI  r�  rŽ  s	            r3   Ú_build_model_infor`  ]  s‚   € ô &×AÑAÈÐcvÔwÐä/ØØ/ØØô	€Kô -°5ÐNaÔb€MÙØ'×-Ñ-Ó/ò 	)‰JˆC�ØÑ Ø#(�˜CÒ ð	)ô ÑT�{ÑTÐ<SÒTÐTr5   c                ó   — t        | ||¬«      S )Nrê  )r`  rê  s      r3   rÁ  rÁ  x  s   € ô  5Ð>QÐ\dÔeÐer5   c                ó<   — |�t        | |||«      S t        | ||«      S )aÅ  
    Get a dict for the maximum tokens (context window), input_cost_per_token, output_cost_per_token  for a given model.

    Parameters:
    - model (str): The name of the model.
    - custom_llm_provider (str | null): the provider used for the model. If provided, used to check if the litellm model info is for that provider.

    Returns:
        dict: A dictionary containing the following information:
            key: Required[str] # the key in litellm.model_cost which is returned
            max_tokens: Required[Optional[int]]
            max_input_tokens: Required[Optional[int]]
            max_output_tokens: Required[Optional[int]]
            input_cost_per_token: Required[float]
            input_cost_per_character: Optional[float]  # only for vertex ai models
            input_cost_per_token_above_128k_tokens: Optional[float]  # only for vertex ai models
            input_cost_per_character_above_128k_tokens: Optional[
                float
            ]  # only for vertex ai models
            input_cost_per_query: Optional[float] # only for rerank models
            input_cost_per_image: Optional[float]  # only for vertex ai models
            input_cost_per_audio_token: Optional[float]
            input_cost_per_audio_per_second: Optional[float]  # only for vertex ai models
            input_cost_per_video_per_second: Optional[float]  # only for vertex ai models
            output_cost_per_token: Required[float]
            output_cost_per_audio_token: Optional[float]
            output_cost_per_character: Optional[float]  # only for vertex ai models
            output_cost_per_token_above_128k_tokens: Optional[
                float
            ]  # only for vertex ai models
            output_cost_per_character_above_128k_tokens: Optional[
                float
            ]  # only for vertex ai models
            output_cost_per_image: Optional[float]
            output_vector_size: Optional[int]
            output_cost_per_video_per_second: Optional[float]  # only for vertex ai models
            output_cost_per_audio_per_second: Optional[float]  # only for vertex ai models
            litellm_provider: Required[str]
            mode: Required[
                Literal[
                    "completion", "embedding", "image_generation", "chat", "audio_transcription"
                ]
            ]
            supported_openai_params: Required[Optional[List[str]]]
            supports_system_messages: Optional[bool]
            supports_response_schema: Optional[bool]
            supports_vision: Optional[bool]
            supports_function_calling: Optional[bool]
            supports_tool_choice: Optional[bool]
            supports_prompt_caching: Optional[bool]
            supports_prompt_cache_breakpoint: Optional[bool]
            supports_audio_input: Optional[bool]
            supports_audio_output: Optional[bool]
            supports_pdf_input: Optional[bool]
            supports_web_search: Optional[bool]
            supports_url_context: Optional[bool]
            supports_reasoning: Optional[bool]
    Raises:
        Exception: If the model is not mapped yet.

    Example:
        >>> get_model_info("gpt-4")
        {
            "max_tokens": 8192,
            "input_cost_per_token": 0.00003,
            "output_cost_per_token": 0.00006,
            "litellm_provider": "openai",
            "mode": "chat",
            "supported_openai_params": ["temperature", "max_tokens", "top_p", "frequency_penalty", "presence_penalty"]
        }
    )r`  rÁ  r_  s       r3   r–  r–  �  s-   € ð^ ÐÜ  Ð(;¸XÀwÓOÐOÜ! %Ð)<¸hÓGÐGr5   c                óî   — t         j                  dt        j                  dt        j                  dt        j                  dt
        j                  dt        j                  dddi}|j                  | d«      S )	zíConverts standard python types to json schema types

    Parameters
    ----------
    python_type_name : str
        __name__ of type

    Returns
    -------
    str
        a standard JSON schema type, "string" if not recognized.
    ÚstringÚintegerÚnumberÚbooleanÚarrayrP  ÚNoneTypeÚnull)r°  r‡  rO  rN  rg  r­  r¯  rw  )Úpython_type_nameÚpython_to_json_schema_typess     r3   Újson_schema_typerm  Ù  s]   € ô 	�‰�hÜ�‰�iÜ�‰˜Ü�‰�yÜ�‰�wÜ�‰�xØ�Fð*Ðð '×*Ñ*Ð+;¸XÓFÐFr5   c                óz  — 	 ddl }ddlm} ddlm} | j                  } |j                  | «      } ||«      }dj                  |d   D �cg c]  }|j                  «       ‘Œ c}«      }	i }
g } |j                  | «      j                  }|j                  «       D �]Z  \  }}t        |d«      r t        |j                  j                  «      }nd}d}d}|d   D ]¦  }|j                   |k(  sŒt        |d	«      rQ|j"                  }d
|v r|j%                  d«      d   }n!d|v r	 t'        t)         ||«      «      «      }d}t        |«      }dj                  |j*                  D �cg c]  }|j                  «       ‘Œ c}«      }Œ¨ |||dœ}t-        |j                  «       D ��cg c]  \  }}t/        |t&        «      sŒ||f‘Œ c}}«      |
|<   |j0                  |j2                  k(  s�ŒJ|j5                  |«       �Œ] ||	d|
dœdœ}|r||d   d<   |S # t
        $ r}|‚d}~ww xY wc c}w # t
        $ r Y Œów xY wc c}w c c}}w )ad  Using type hints and numpy-styled docstring,
    produce a dictionary usable for OpenAI function calling

    Parameters
    ----------
    input_function : function
        A function with a numpy-style docstring

    Returns
    -------
    dictionnary
        A dictionnary to add to the list passed to `functions` parameter of `litellm.completion`
    r   N)Úliteral_eval)ÚNumpyDocStringú
ÚSummaryÚ
annotationÚ
ParametersrL   Úoptionalú,ú{rd  )rL   ÚdescriptionÚenumrP  ©rL   Ú
properties©Únamerx  rE   rE   Úrequired)r=   Úastro  Únumpydoc.docscraperp  rU   r‡  Úgetdocr   ÚstriprC   rE   rŠ  r®  rm  rs  r}  rL   r£  r°  r­  Údescr¯  r}  ÚdefaultÚemptyrI  )Úinput_functionr=   ro  rp  r3  r}  Ú	docstringÚnumpydocÚsrx  rE   Úrequired_paramsÚ
param_infoÚ
param_namerO  Ú
param_typeÚparam_descriptionÚ
param_enumÚ
param_dataÚ
param_dictr`  ra  rÇ  s                          r3   Úfunction_to_dictr’  ó  sR  € ðÛÝ$å5ð !×)Ñ)€DØ%�w—~‘~ nÓ5€IÙ$ YÓ/€HØŸ™°xÀ	Ñ7JÖ#K°! A§G¡G¥IÒ#KÓL€Kð €JØ€OØ)˜×)Ñ)¨.Ó9×DÑD€Jà'×-Ñ-Ó/ó %/Ñˆ
�EÜ�5˜,Ô'Ü)¨%×*:Ñ*:×*CÑ*CÓD‰JàˆJØ ÐØˆ
ð # <Ñ0ò 	TˆJØ�‰ *Ó,Ü˜: vÔ.à!+§¡�JØ! ZÑ/Ø%/×%5Ñ%5°cÓ%:¸1Ñ%=™
Ø 
Ñ*ð!Ü),¬T±,¸zÓ2JÓ-KÓ)L˜JØ)1˜Jô "2°*Ó!=�JØ$(§I¡IÀ*Ç/Á/Ö.R¸Q¨q¯w©w­yÒ.RÓ$SÑ!ð!	Tð& Ø,Øñ
ˆ
ô "&¸*×:JÑ:JÓ:L×&c±$°!°QÔPZÐ[\Ô^aÕPb¨¨1¢vÓ&cÓ!dˆ
�:Ñð �=‰=˜EŸK™KÔ'Ø×"Ñ" :Ö.ðK%/ðR Ø"àØ$ñ
ñ€Fñ Ø+:ˆˆ|Ñ˜ZÑ(à€MøôE ò Øˆûðüò $Løô:  )ò !Ù ð!üò /Sùó 'dsA   ‚H Á
HÄH#ÅH2ÆH7Æ6H7È	HÈHÈHÈ#	H/È.H/c                óf   — t        j                  | «      }|j                  |¬«      }t        |«      S )N©r  )rP  ÚURLÚ	copy_withr°  )Úoriginal_urlÚnew_pathr©  Úmodified_urls       r3   Ú
modify_urlrš  L  s+   € Ü—‘˜<Ó(€CØŸ-™-¨X˜-Ó6€LÜˆ|ÓÐr5   c                óf  — d}d}|r|}|r|}t        |«      D �cg c]  }d|dœg‘Œ
 }	}t        j                  «       }
	 t        j                  | |	|||¬«       t        j                  «       }||
z
  }|ddd dœS c c}w # t        $ r*}t        j                  «       }||
z
  }|dd|dœcY d }~S d }~ww xY w)	NzHey, how's it goingr`  rò  ©r¨  r×  )rž  r»  rŸ  rï  Úforce_timeoutrS  )Útotal_response_timeÚ
calls_madeÚstatusrV   Úfailed)ÚrangeÚtimerp   Úbatch_completionrU   )rž  rŸ  rï  rÒ  Ú	num_callsr�  Útest_promptÚ
test_callsr1  r»  ré  r>  Úresponse_timer3  s                 r3   Úload_test_modelr©  R  sÜ   € ð (€KØ€JÙØˆÙØˆ
ÜKPÐQ[ÓK\Ö]Àa °KÑ@ÒAÐ]€HÐ]ÜŸ	™	›€Jð
Ü× Ñ ØØØ 3ØØ'õ	
ô —9‘9“;ˆØ  :Ñ-ˆà#0ØØØñ	
ð 	
ùò ^øô$ ò 
Ü—9‘9“;ˆØ  :Ñ-ˆà#0ØØØñ	
õ 	
ûð
ús"   šA8¾9A= Á=	B0ÂB+Â%B0Â+B0c                óð   — | dk(  r"t        j                  «       j                  «       S | dk(  r"t        j                  «       j                  «       S | dk(  r"t        j                  «       j                  «       S g S )z,Return the fields required for each providerr(  r7  rÓ  )rp   rÞ  Úget_required_paramsrØ  ÚAzureAIStudioConfig©rŸ  s    r3   Úget_provider_fieldsr®  }  sk   € ð ˜lÒ*Ü×'Ñ'Ó)×=Ñ=Ó?Ð?à	 Ò	(Ü×#Ñ#Ó%×9Ñ9Ó;Ð;à	 
Ò	*Ü×*Ñ*Ó,×@Ñ@ÓBÐBð ˆ	r5   c                 óF  — t        «       j                  «       D � �ci c]  \  } }| |€d nt        |¬«      “Œ }} }i }i }t        j                  dd «      }|r|j                  d«      ng }|j                  «       D ]h  \  } }|€/t        j                  «       || <   t        j                  «       || <   Œ7t        j                  |¬«      || <   t        j                  |¬«      || <   Œj |D ]0  }t        j                  «       ||<   t        j                  «       ||<   Œ2 ||fS c c}} w )Nr¨  ÚNO_PROXYrv  )Úproxy)	r   rŠ  r   ÚosÚgetenvr£  rP  ÚHTTPTransportÚAsyncHTTPTransport)r�  r©  ÚproxiesÚsync_proxy_mountsÚasync_proxy_mountsÚno_proxyÚno_proxy_urlsr±  s           r3   Ú!create_proxy_transport_and_mountsr»  �  s%  € ÜSjÓSl×SrÑSrÓSt×uÁxÀsÈC�c 3 ;™4´E¸c´NÑBÐu€GÑuà!ÐØ "Ðô —i‘i 
¨DÓ1€HÙ2:˜8Ÿ>™>¨#Ô.À€Mà—m‘m“oò L‰
ˆˆUØˆ=Ü%*×%8Ñ%8Ó%:Ð˜cÑ"Ü&+×&>Ñ&>Ó&@Ð˜sÒ#ä%*×%8Ñ%8¸uÔ%EÐ˜cÑ"Ü&+×&>Ñ&>ÀUÔ&KÐ˜sÒ#ðLð ò =ˆÜ!&×!4Ñ!4Ó!6Ð˜#ÑÜ"'×":Ñ":Ó"<Ð˜3Òð=ð Ð0Ð0Ð0ùó+ vs   œDc                óÔ  — d}g }| €||dœS 	 t         j                  } || ¬«      \  }}}}|�	r||dk(  r)dt        j                  v rd}�nÕ|j                  d«       �nÂ|dk(  rOd	t        j                  v r(d
t        j                  v rdt        j                  v rd}�nƒ|j                  g d¢«       �nn|dk(  r;dt        j                  v sdt        j                  v rd}�nA|j                  d«       �n.|dk(  r)dt        j                  v rd}�n|j                  d«       �n |dk(  r)dt        j                  v rd}�nå|j                  d«       �nÒ|dk(  r)dt        j                  v rd}�n·|j                  d«       �n¤|dk(  r)dt        j                  v rd}�n‰|j                  d«       �nv|dk(  r)dt        j                  v rd}�n[|j                  d«       �nH|dk(  r=dt        j                  v rdt        j                  v rd}�n|j                  ddg«       �n|dk(  r)dt        j                  v rd}�në|j                  d«       �nØ|dk(  r)d t        j                  v rd}�n½|j                  d «       �nª|d!k(  r)d"t        j                  v rd}�n�|j                  d"«       �n||d#k(  r)d$t        j                  v rd}�na|j                  d$«       �nN|d%k(  r)d&t        j                  v rd}�n3|j                  d&«       �n |d'k(  r)d(t        j                  v rd}�n|j                  d(«       �
nò|d)k(  s|d*k(  r¦d+t        j                  v rd,t        j                  v sZd-t        j                  v sHd.t        j                  v s6d/t        j                  v s$d0t        j                  v sd1t        j                  v rd}�
nf|j                  d+«       |j                  d,«       �
nB|d2v r)d3t        j                  v rd}�
n(|j                  d3«       �
n|d4k(  r)d5t        j                  v rd}�	nú|j                  d5«       �	nç|d6k(  r)d7t        j                  v rd}�	nÌ|j                  d7«       �	n¹|d8k(  r)d9t        j                  v rd}�	nž|j                  d9«       �	n‹|d:k(  rLd;t        j                  v sd<t        j                  v rd}�	n^|j                  d;«       |j                  d<«       �	n:|d=k(  r)d>t        j                  v rd}�	n|j                  d>«       �	n|d?k(  r)d@t        j                  v rd}�nñ|j                  d@«       �nÞ|dAk(  r)dBt        j                  v rd}�nÃ|j                  dB«       �n°|d%k(  r)d&t        j                  v rd}�n•|j                  d&«       �n‚|dCk(  r)dDt        j                  v rd}�ng|j                  dD«       �nT|dEk(  r)d t        j                  v rd}�n9|j                  d «       �n&|dFk(  r)dGt        j                  v rd}�n|j                  dG«       �nø|dHk(  s|dIk(  r)dJt        j                  v rd}�nØ|j                  dJ«       �nÅ|dKk(  s|dLk(  r)dMt        j                  v rd}�n¥|j                  dM«       �n’|dNk(  r)dOt        j                  v rd}�nw|j                  dO«       �nd|dPk(  r)dQt        j                  v rd}�nI|j                  dQ«       �n6|dRk(  r)dSt        j                  v rd}�n|j                  dS«       �n|dTk(  r)dUt        j                  v rd}�ní|j                  dU«       �nÚ|dVk(  r)dWt        j                  v rd}�n¿|j                  dW«       �n¬|dXk(  r)dYt        j                  v rd}�n‘|j                  dY«       �n~|dZk(  r)d[t        j                  v rd}�nc|j                  d[«       �nP|d\k(  r_d]t        j                  v s6d^t        j                  v s$d_t        j                  v sd`t        j                  v rd}�nÿ|j                  d]«       �nì|dak(  r^dbt        j                  v r(dct        j                  v sddt        j                  v rd}�n­|j                  db«       |j                  dd«       �n‰|dek(  r)dft        j                  v rd}�nn|j                  df«       �n[|dgk(  r)dht        j                  v rd}�n@|j                  dh«       �n-|dik(  r)djt        j                  v rd}�n|j                  dj«       �nÿ|dkk(  r)dlt        j                  v rd}�nä|j                  dl«       �nÑ|dmk(  r)dnt        j                  v rd}�n¶|j                  dn«       �n£|dok(  �r�dpt        j                  v rd}�n‡|j                  dp«       �nt| t        j                  v sG| t        j                  v s5| t        j                  v s#| t        j                  v s| j                  dq«      r)dt        j                  v rd}�n|j                  d«       �nò| t        j                  v r;dt        j                  v sdt        j                  v rd}�n¸|j                  d«       �n¥| t        j                  v r)dt        j                  v rd}�n}|j                  d«       �nj| t        j                  v r)dt        j                  v rd}�nB|j                  d«       �n/| t        j                   v r)dt        j                  v rd}�n|j                  d«       �nô| t        j"                  v r)dt        j                  v rd}�nÌ|j                  d«       �n¹| t        j$                  v r)dt        j                  v rd}�n‘|j                  d«       �n~| t        j&                  v s'| t        j(                  v s| t        j*                  d   v r=dt        j                  v rdt        j                  v rd}�n|j                  ddg«       �n| t        j,                  v r)dt        j                  v rd}�nà|j                  d«       �nÍ| t        j.                  v r)d t        j                  v rd}�n¥|j                  d «       �n’| t        j0                  v r)d"t        j                  v rd}�nj|j                  d"«       �nW| t        j2                  v r)d$t        j                  v rd}�n/|j                  d$«       �n| t        j4                  v r'd&t        j                  v rd}nõ|j                  d&«       nã| t        j6                  v r'd(t        j                  v rd}n¼|j                  d(«       nª| t        j8                  v r'dft        j                  v rd}nƒ|j                  df«       nq| t        j:                  v r'dht        j                  v rd}nJ|j                  dh«       n8| t        j<                  v r&djt        j                  v rd}n|j                  dj«       dwdr„}	|�	 |	|ds«      }|�	 |	|dt«      }|�	 |	|du«      }t?        |«      dvk(  rd}||dœS # t        $ r d}Y �Œ;w xY w)xa  
    Checks if the environment variables are valid for the given model.

    Args:
        model (Optional[str]): The name of the model. Defaults to None.
        api_key (Optional[str]): If the user passed in an api key, of their own.

    Returns:
        dict: A dictionary containing the following keys:
            - keys_in_environment (bool): True if all the required keys are present in the environment, False otherwise.
            - missing_keys (List[str]): A list of missing keys in the environment.
    FN)Úkeys_in_environmentÚmissing_keysrì  r®  rx  Tr'  ÚAZURE_API_BASEr¸  ÚAZURE_API_KEY)r¿  r¸  rÀ  r±  ry  ÚANTHROPIC_AUTH_TOKENr°  r~  rü  r�  r²  ÚOPENROUTER_API_KEYr³  ÚVERCEL_AI_GATEWAY_API_KEYÚ	datarobotÚDATAROBOT_API_TOKENr˜  ÚVERTEXAI_PROJECTr7  r¨  r  r´  rz  rŒ  r‚  r¶  r{  r|  r}  rµ  r€  r(  r  ÚAWS_ACCESS_KEY_IDÚAWS_SECRET_ACCESS_KEYÚAWS_ROLE_ARNÚAWS_PROFILEÚAWS_WEB_IDENTITY_TOKEN_FILEÚ&AWS_CONTAINER_CREDENTIALS_RELATIVE_URIÚ"AWS_CONTAINER_CREDENTIALS_FULL_URI)r7  r”  ÚOLLAMA_API_BASEr‹  ÚANYSCALE_API_KEYr¯  ÚDEEPINFRA_API_KEYÚfeatherless_aiÚFEATHERLESS_AI_API_KEYr—  ÚGOOGLE_API_KEYÚGEMINI_API_KEYrñ  ÚGROQ_API_KEYr)  ÚNVIDIA_NIM_API_KEYr�  ÚCEREBRAS_API_KEYrŽ  ÚXAI_API_KEYr�  r�  ÚVOLCENGINE_API_KEYr’  r±  ÚCODESTRAL_API_KEYÚ	inceptionr²  ÚINCEPTION_API_KEYr‘  ÚDEEPSEEK_API_KEYr¶  ÚTENCENT_API_KEYr/  ÚMISTRAL_API_KEYÚpalmÚPALM_API_KEYr°  ÚPERPLEXITYAI_API_KEYr1  ÚVOYAGE_API_KEYr3  ÚINFINITY_API_KEYr4  ÚFIREWORKS_AI_API_KEYÚFIREWORKS_API_KEYÚFIREWORKSAI_API_KEYÚFIREWORKS_AI_TOKENr­  ÚCLOUDFLARE_API_KEYÚCLOUDFLARE_ACCOUNT_IDÚCLOUDFLARE_API_BASEr·  ÚNOVITA_API_KEYr•  r„  r–  r…  Ú	dashscopeÚDASHSCOPE_API_KEYÚ
modelscopeÚMODELSCOPE_API_KEYÚmoonshotÚMOONSHOT_API_KEYz	gpt-imagec                óR   — | D �cg c]  }||j                  «       vsŒ|‘Œ c}S c c}w )zDFilter out keys that contain the exclude_pattern (case insensitive).r›  )rí  Úexclude_patternr�  s      r3   Úfilter_missing_keysz1validate_environment.<locals>.filter_missing_keys)  s#   € à#ÖJ˜ ¸c¿i¹i»kÒ'I’ÒJÐJùÒJs   …$�$rX  rï  rl  r   )rí  rt  rô  r°  rÌ  rt  ) rö  r»   rU   r²  ÚenvironrI  r’  rp   r»  r½  Úopen_ai_embedding_modelsÚopenai_image_generation_modelsr‹  rÿ  rý  Úreplicate_modelsr¾  r¿  Údatarobot_modelsrÂ  rÀ  Úmodels_by_providerÚhuggingface_modelsrÄ  Útogether_ai_modelsrÆ  Úbaseten_modelsrÅ  rÈ  Únebius_modelsÚwandb_modelsrø  )
rž  rX  rï  rl  r½  r¾  r»   r1  rŸ  rõ  s
             r3   Úvalidate_environmentr  ¦  s¢  € ð$  ÐØ €Là€}à#6Ø(ñ
ð 	
ð
#Ü"/×"@Ñ"@ÐÙ'7¸eÔ'DÑ$ˆÐ  1ò Ø (Ò*Ø¤2§:¡:Ñ-Ø&*Ò#à×#Ñ#Ð$4Ö5Ø  GÒ+Ø¤2§:¡:Ñ-Ð2EÌÏÉÑ2SÐXgÔkm×kuÑkuÑXuØ&*Ò#à×#Ñ#Ò$\Ö]Ø  KÒ/Ø"¤b§j¡jÑ0Ð4JÌbÏjÉjÑ4XØ&*Ò#à×#Ñ#Ð$7Ö8Ø  HÒ,Ø¤2§:¡:Ñ-Ø&*Ò#à×#Ñ#Ð$4Ö5Ø  KÒ/Ø"¤b§j¡jÑ0Ø&*Ò#à×#Ñ#Ð$7Ö8Ø  LÒ0Ø#¤r§z¡zÑ1Ø&*Ò#à×#Ñ#Ð$8Ö9Ø Ð$7Ò7Ø*¬b¯j©jÑ8Ø&*Ò#à×#Ñ#Ð$?Ö@Ø  KÒ/Ø$¬¯
©
Ñ2Ø&*Ò#à×#Ñ#Ð$9Ö:Ø  KÒ/Ø!¤R§Z¡ZÑ/Ð4GÌ2Ï:É:Ñ4UØ&*Ò#à×#Ñ#Ð%7Ð9LÐ$MÖNØ  MÒ1Ø$¬¯
©
Ñ2Ø&*Ò#à×#Ñ#Ð$9Ö:Ø  FÒ*Ø¤§¡Ñ+Ø&*Ò#à×#Ñ# NÖ3Ø  MÒ1Ø#¤r§z¡zÑ1Ø&*Ò#à×#Ñ#Ð$8Ö9Ø  MÒ1Ø$¬¯
©
Ñ2Ø&*Ò#à×#Ñ#Ð$9Ö:Ø  IÒ-Ø ¤B§J¡JÑ.Ø&*Ò#à×#Ñ#Ð$5Ö6Ø  KÒ/Ø"¤b§j¡jÑ0Ø&*Ò#à×#Ñ#Ð$7Ö8Ø  IÒ-Ð1DÈÒ1SØ#¤r§z¡zÑ1Ð6MÔQS×Q[ÑQ[Ñ6[à¤"§*¡*Ñ,Ø ¤B§J¡JÑ.Ø0´B·J±JÑ>Ø;¼r¿z¹zÑIØ7¼2¿:¹:ÑEà&*Ò#à×#Ñ#Ð$7Ô8Ø×#Ñ#Ð$;Ö<Ø Ð$=Ñ=Ø ¤B§J¡JÑ.Ø&*Ò#à×#Ñ#Ð$5Ö6Ø  JÒ.Ø!¤R§Z¡ZÑ/Ø&*Ò#à×#Ñ#Ð$6Ö7Ø  KÒ/Ø"¤b§j¡jÑ0Ø&*Ò#à×#Ñ#Ð$7Ö8Ø Ð$4Ò4Ø'¬2¯:©:Ñ5Ø&*Ò#à×#Ñ#Ð$<Ö=Ø  HÒ,Ø ¤B§J¡JÑ.Ð4DÌÏ
É
Ñ4RØ&*Ò#à×#Ñ#Ð$4Ô5Ø×#Ñ#Ð$4Ö5Ø  FÒ*Ø¤§¡Ñ+Ø&*Ò#à×#Ñ# NÖ3Ø  LÒ0Ø#¤r§z¡zÑ1Ø&*Ò#à×#Ñ#Ð$8Ö9Ø  JÒ.Ø!¤R§Z¡ZÑ/Ø&*Ò#à×#Ñ#Ð$6Ö7Ø  IÒ-Ø ¤B§J¡JÑ.Ø&*Ò#à×#Ñ#Ð$5Ö6Ø  EÒ)Ø¤§
¡
Ñ*Ø&*Ò#à×#Ñ# MÖ2Ø  KÒ/Ø¤§¡Ñ+Ø&*Ò#à×#Ñ# NÖ3Ø  LÒ0Ø#¤r§z¡zÑ1Ø&*Ò#à×#Ñ#Ð$8Ö9Ø  KÒ/Ð3FÐJeÒ3eØ"¤b§j¡jÑ0Ø&*Ò#à×#Ñ#Ð$7Ö8Ø  KÒ/Ð3FÐJeÒ3eØ"¤b§j¡jÑ0Ø&*Ò#à×#Ñ#Ð$7Ö8Ø  JÒ.Ø!¤R§Z¡ZÑ/Ø&*Ò#à×#Ñ#Ð$6Ö7Ø  IÒ-Ø ¤B§J¡JÑ.Ø&*Ò#à×#Ñ#Ð$5Ö6Ø  IÒ-Ø ¤B§J¡JÑ.Ø&*Ò#à×#Ñ#Ð$5Ö6Ø  FÒ*Ø¤§¡Ñ+Ø&*Ò#à×#Ñ# NÖ3Ø  LÒ0Ø%¬¯©Ñ3Ø&*Ò#à×#Ñ#Ð$:Ö;Ø  HÒ,Ø¤2§:¡:Ñ-Ø&*Ò#à×#Ñ#Ð$4Ö5Ø  JÒ.Ø!¤R§Z¡ZÑ/Ø&*Ò#à×#Ñ#Ð$6Ö7Ø  NÒ2à&¬"¯*©*Ñ4Ø&¬"¯*©*Ñ4Ø(¬B¯J©JÑ6Ø'¬2¯:©:Ñ5à&*Ò#à×#Ñ#Ð$:Ö;Ø  LÒ0Ø#¤r§z¡zÑ1Ø'¬2¯:©:Ñ5Ð9NÔRT×R\ÑR\Ñ9\à&*Ò#à×#Ñ#Ð$8Ô9Ø×#Ñ#Ð$9Ö:Ø  HÒ,Ø¤2§:¡:Ñ-Ø&*Ò#à×#Ñ#Ð$4Ö5Ø  HÒ,Ø¤2§:¡:Ñ-Ø&*Ò#à×#Ñ#Ð$4Ö5Ø  GÒ+Ø¤"§*¡*Ñ,Ø&*Ò#à×#Ñ# OÖ4Ø  KÒ/Ø"¤b§j¡jÑ0Ø&*Ò#à×#Ñ#Ð$7Ö8Ø  LÒ0Ø#¤r§z¡zÑ1Ø&*Ò#à×#Ñ#Ð$8Ö9Ø  JÓ.Ø!¤R§Z¡ZÑ/Ø&*Ò#à×#Ñ#Ð$6Ö7ð ”W×;Ñ;Ñ;Øœ×>Ñ>Ñ>Øœ×8Ñ8Ñ8Øœ×>Ñ>Ñ>Ø×Ñ Ô,à¤2§:¡:Ñ-Ø&*Ò#à×#Ñ#Ð$4Ö5à”g×.Ñ.Ñ.Ø"¤b§j¡jÑ0Ð4JÌbÏjÉjÑ4XØ&*Ò#à×#Ñ#Ð$7Ö8à”g×+Ñ+Ñ+Ø¤2§:¡:Ñ-Ø&*Ò#à×#Ñ#Ð$4Ö5à”g×.Ñ.Ñ.Ø"¤b§j¡jÑ0Ø&*Ò#à×#Ñ#Ð$7Ö8à”g×/Ñ/Ñ/Ø#¤r§z¡zÑ1Ø&*Ò#à×#Ñ#Ð$8Ö9à”g×6Ñ6Ñ6Ø*¬b¯j©jÑ8Ø&*Ò#à×#Ñ#Ð$?Ö@à”g×.Ñ.Ñ.Ø$¬¯
©
Ñ2Ø&*Ò#à×#Ñ#Ð$9Ö:ð ”W×/Ñ/Ñ/Øœ×2Ñ2Ñ2Øœ×2Ñ2°;Ñ?Ñ?à!¤R§Z¡ZÑ/Ð4GÌ2Ï:É:Ñ4UØ&*Ò#à×#Ñ#Ð%7Ð9LÐ$MÖNà”g×0Ñ0Ñ0Ø$¬¯
©
Ñ2Ø&*Ò#à×#Ñ#Ð$9Ö:à”g×)Ñ)Ñ)Ø¤§¡Ñ+Ø&*Ò#à×#Ñ# NÖ3à”g×0Ñ0Ñ0Ø#¤r§z¡zÑ1Ø&*Ò#à×#Ñ#Ð$8Ö9à”g×0Ñ0Ñ0Ø$¬¯
©
Ñ2Ø&*Ò#à×#Ñ#Ð$9Ö:à”g×,Ñ,Ñ,Ø ¤B§J¡JÑ.Ø&*Ñ#à×#Ñ#Ð$5Õ6à”g×.Ñ.Ñ.Ø"¤b§j¡jÑ0Ø&*Ñ#à×#Ñ#Ð$7Õ8Ø”g×+Ñ+Ñ+Ø¤2§:¡:Ñ-Ø&*Ñ#à×#Ñ#Ð$4Õ5Ø”g×+Ñ+Ñ+Ø¤2§:¡:Ñ-Ø&*Ñ#à×#Ñ#Ð$4Õ5Ø”g×*Ñ*Ñ*Ø¤"§*¡*Ñ,Ø&*Ñ#à×#Ñ# OÔ4óKð ÐÙ*¨<¸ÓCˆàÐÙ*¨<¸ÓDˆàÐÙ*¨<¸ÓGˆä
ˆ<Ó˜AÒØ"Ðà#6ÈÑUÐUøôk ò #Ø"Óð#ús   �y ùy'ù&y'c                 ó,   — t        j                  | i |¤ŽS r;   )rp   r  )rP   rx  s     r3   Úacreater  <  s   € Ü×Ñ Ð/¨Ñ/Ð/r5   c                óþ   — 	 | t         j                  v s| t         j                  v r t        j                  j                  | «       y dddœg}t        j                  | |¬«       y # t        $ r t        d| d¬«      ‚w xY w)Nrò  zHello Worldrœ  ©rž  r»  rØ  )rÔ  rž  r’  )	rp   r»  r½  r®  ÚmodelsÚretriever  rU   r  r  s     r3   Úvalid_modelr  @  sr   € ðHà”G×:Ñ:Ñ:¸eÄw×GmÑGmÑ>mÜ�M‰M×"Ñ" 5Õ)à(.¸=ÑIÐJˆHÜ×Ñ U°XÖ>øÜò HÜ b°ÀBÔGÐGðHús   ‚AA$ ÁA$ Á$A<c                óv   — dddœg}	 t        j                  | ||d¬«       y# t        $ r Y yt        $ r Y yw xY w)aW  
    Checks if a given API key is valid for a specific model by making a litellm.completion call with max_tokens=10

    Args:
        model (str): The name of the model to check the API key against.
        api_key (str): The API key to be checked.

    Returns:
        bool: True if the API key is valid for the model, False otherwise.
    rò  zHey, how's it going?rœ  rV  )rž  r»  rX  rŽ  TF)rp   r  r  rU   )rž  rX  r»  s      r3   Úcheck_valid_keyr
  L  sL   € ð !'Ð3IÑJÐK€HðÜ×Ñ °À7ÐWYÕZØøÜò ÙÜò Ùðús   ˆ" ¢	8­8·8c                ó4   — | dk(  ry| dk(  ry| dk(  ry| dk\  ryy)a¸  
    Retries on 408, 409, 429 and 500 errors.

    Any client error in the 400-499 range that isn't explicitly handled (such as 400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found, etc.) would not trigger a retry.

    Reimplementation of openai's should retry logic, since that one can't be imported.
    https://github.com/openai/openai-python/blob/af67cfab4210d8e497c05390ce14f39105c77519/src/openai/_base_client.py#L639
    i˜  Ti™  i­  rè  Fr  )rë  s    r3   Ú_should_retryr  a  s9   € ð �cÒØð �cÒØð �cÒØð �cÒØàr5   c                óN  — 	 ddl }| �| j                  d«      }	 t        |«      }|S d}|S # t        $ r_ |j                  j                  |«      }|€d}n;|j                  j                  |«      }t        |t        j                  «       z
  «      }Y |S w xY w# t        $ r d}Y yw xY w)zÙ
    Reimplementation of openai's calculate retry after, since that one can't be imported.
    https://github.com/openai/openai-python/blob/af67cfab4210d8e497c05390ce14f39105c77519/src/openai/_base_client.py#L631
    r   Nzretry-afterr‰  )Úemailrw  rO  rU   ro   Úparsedate_tzÚ	mktime_tzr£  )Úresponse_headersr  Úretry_headerÚretry_afterÚretry_date_tupleÚ
retry_dates         r3   Ú&_get_retry_after_from_exception_headerr  ~  sÂ   € ðÛð Ð'Ø'7×';Ñ';¸MÓ'JˆLð@Ü! ,Ó/�ð Ðð ˆKàÐøô ò @Ø*/¯+©+×*BÑ*BÀ<Ó*PÐ Ø#Ð+Ø"$‘Kà(-¯©×(=Ñ(=Ð>NÓ(O�JÜ"% j´4·9±9³;Ñ&>Ó"?�Køð Ðð@ûô ò ØŠðús7   ‚B š+ ¥B §B «A$BÂB ÂBÂB ÂB$Â#B$c                óæ   — t        |«      }t        t        j                  «       z  }|�d|cxk  r	dk  r||z   S  || z
  }t        t	        d|«      z  }t        ||«      }t        |t        «      }||z   S )Nr   é<   g       @)r  r%   Úrandomr$   ÚpowÚmaxr)  r&   )Úremaining_retriesr  r  Úmin_timeoutr  ÚjitterrG  Úsleep_secondss           r3   Ú_calculate_retry_afterr      s‰   € ô @Ð@PÓQ€Kô œVŸ]™]›_Ñ,€Fð Ð 1 {Ô#8°bÒ#8Ø˜VÑ#Ð#ð $9ð %Ð'8Ñ8€KÜ'¬#¨c°;Ó*?Ñ?€Mô ˜ {Ó3€MÜ˜¤Ó7€Mà˜6Ñ!Ð!r5   c                ó@  — | }|g}	 t         j                  } || ¬«      d   } |j                  | «       |r-|D ]  }|ddœt        j
                  |<   Œ t        j                  S |D ]  }|||dœt        j                  |<   Œ t        j                  S # t        $ r Y Œhw xY w)a»  
    Register a prompt template to follow your custom format for a given model

    Args:
        model (str): The name of the model.
        roles (dict): A dictionary mapping roles to their respective prompt values.
        initial_prompt_value (str, optional): The initial prompt value. Defaults to "".
        final_prompt_value (str, optional): The final prompt value. Defaults to "".

    Returns:
        dict: The updated custom prompt dictionary.
    Example usage:
    ```
    import litellm
    litellm.register_prompt_template(
            model="llama-2",
        initial_prompt_value="You are a good assistant" # [OPTIONAL]
            roles={
            "system": {
                "pre_message": "[INST] <<SYS>>
", # [OPTIONAL]
                "post_message": "
<</SYS>>
 [/INST]
" # [OPTIONAL]
            },
            "user": {
                "pre_message": "[INST] ", # [OPTIONAL]
                "post_message": " [/INST]" # [OPTIONAL]
            },
            "assistant": {
                "pre_message": "
" # [OPTIONAL]
                "post_message": "
" # [OPTIONAL]
            }
        }
        final_prompt_value="Now answer as best you can:" # [OPTIONAL]
    )
    ```
    rì  r   rS  )rù  r   )ÚrolesÚinitial_prompt_valueÚfinal_prompt_value)rö  r»   rI  rU   rp   Úknown_tokenizer_configÚcustom_prompt_dict)	rž  r"  r#  r$  Útokenizer_configÚcomplete_modelÚpotential_modelsr»   r0  s	            r3   Úregister_prompt_templater*  »  sÉ   € ðT "€NØ-Ð.ÐðÜ"/×"@Ñ"@ÐÙ  uÔ-¨aÑ0ˆØ×Ñ Ô&ñ Ø!ò 	ˆAà-Ø#ñ1ŒG×*Ñ*¨1Ò-ð	ô ×%Ñ%Ð%ð "ò 	ˆAàØ(<Ø&8ñ-ŒG×&Ñ& qÒ)ð	ô ×%Ñ%Ð%øô! ò Ùðús   ‡-B Â	BÂBc                  ó@   — e Zd Z	 	 d	 	 	 d	d„Zd„ Zd„ Zd
d„Zd„ Zd„ Zy)ÚTextCompletionStreamWrapperNc                ó<   — || _         || _        || _        || _        y r;   )Úcompletion_streamrž  rñ  rŸ  )Úselfr.  rž  rñ  rŸ  s        r3   Ú__init__z$TextCompletionStreamWrapper.__init__ÿ  s#   € ð "3ˆÔØˆŒ
Ø,ˆÔØ#6ˆÕ r5   c                ó   — | S r;   r  ©r/  s    r3   Ú__iter__z$TextCompletionStreamWrapper.__iter__  ó   € Øˆr5   c                ó   — | S r;   r  r2  s    r3   Ú	__aiter__z%TextCompletionStreamWrapper.__aiter__  r4  r5   c                ó8  — 	 t        «       }|j                  dd «      |d<   d|d<   |j                  dd «      |d<   |j                  dd «      |d<   t        «       }t        |t        «      rt
        ‚|d   d   d   }|d	   |d
<   |j                  d«      |d<   |d   d   d   |d<   |d   d   d   |d<   |g|d<   | j                  r3| j                  j                  dd«      du r|j                  dd «      |d<   |S # t
        $ r}t        d|› d|› �«      ‚d }~ww xY w)Nr¬  r  rP  Úcreatedrž  rn  r   rk  r×  r	  Úreasoning_contentr-  Úfinish_reasonÚinclude_usageFTÚusagez=Error occurred converting to text completion object - chunk: z	; Error: )r˜   rw  r—   r}  r~   rU   rñ  )r/  r·  r\  Útext_choicesrk  r3  s         r3   Ú!convert_to_text_completion_objectz=TextCompletionStreamWrapper.convert_to_text_completion_object  sU  € ð	qÜ4Ó6ˆHØ"ŸY™Y t¨TÓ2ˆH�T‰NØ!2ˆH�XÑØ"'§)¡)¨I°tÓ"<ˆH�YÑØ %§	¡	¨'°4Ó 8ˆH�WÑÜ"-£-ˆLÜ˜%¤Ô)Ü�Ø  Ñ+¨AÑ.¨wÑ7ˆEØ#(¨Ñ#3ˆL˜Ñ Ø05·	±	Ð:MÓ0NˆLÐ,Ñ-Ø$)¨)Ñ$4°QÑ$7¸Ñ$@ˆL˜Ñ!Ø,1°)Ñ,<¸QÑ,?ÀÑ,PˆL˜Ñ)Ø#/ .ˆH�YÑð ×"Ò" t×':Ñ':×'>Ñ'>¸ÐPUÓ'VÐZ^Ñ'^Ø$)§I¡I¨g°tÓ$<�˜Ñ!àˆOøÜò 	qÜÐ[Ð\aÐ[bÐbkÐlmÐknÐoÓpÐpûð	qús   ‚C7C: Ã:	DÄDÄDc                óT  — t        «        	 | j                  D ]$  }|dk(  s|€t        ‚| j                  |¬«      }|c S  t        ‚# t        $ r t        ‚t        $ rK}t        t        j                  t           d«      } || j                  | j                  xs d|i i ¬«      ‚d }~ww xY w)NrÍ  ©r·  r·   rØ  )rž  rŸ  Úoriginal_exceptionÚcompletion_kwargsÚextra_kwargs)r˜   r.  rU   r>  ÚStopIterationr„  r…  r†  r‡  rž  rŸ  )r/  r·  Úprocessed_chunkr3  r·   s        r3   Ú__next__z$TextCompletionStreamWrapper.__next__*  s²   € äÔ ð	Ø×/Ñ/ò '�Ø˜F’? e mÜ#�OØ"&×"HÑ"HÈuÐ"HÓ"U�Ø&Ò&ð	'ô
  ÐøÜò 	 ÜÐÜò 	Ü$+¬C¯K©K¼Ñ,AÐCSÓ$TˆNÙ Ø—j‘jØ$(×$<Ñ$<Ò$BÀØ#$Ø"$Øôð ûð	ús   Œ1A ¾A ÁB'ÁAB"Â"B'c              ƒ  ó´   K  — 	 | j                   2 3 d {  –—† }|dk(  s|€t        ‚| j                  |¬«      }|c S 7 Œ'6 t        ‚# t        $ r t        ‚w xY w­w)NrÍ  r@  )r.  rU   r>  rD  ÚStopAsyncIteration)r/  r·  rE  s      r3   Ú	__anext__z%TextCompletionStreamWrapper.__anext__@  sn   è ø€ ð	%Ø#×5Ñ5÷ 'ð '�eØ˜F’? e mÜ#�OØ"&×"HÑ"HÈuÐ"HÓ"U�Ø&Ò&ð	'øÐ5ô
  ÐøÜò 	%Ü$Ð$ð	%üs5   ‚A„A �>”<•>˜#A »A¼>¾A ÁAÁA©NN)rñ  údict | NonerŸ  ú
str | None)r·  rŽ   )	r‡  r›  rœ  r0  r3  r6  r>  rF  rI  r  r5   r3   r,  r,  þ  s=   „ ð
 '+Ø*.ð
7ð $ð	
7ð
 (ó
7òòóqò2ó,	%r5   r,  c              #  óà  K  — t        |t        j                  «      r|‚t        |t        «      r|–— y t	        dt        |«      d«      D ]   }t        d|||dz    ¬«      }|€|| j                  d   _        npg }t	        |«      D ]Y  }t        j                  j                  |t        j                  j                  d|||dz    ¬«      ¬«      }|j                  |«       Œ[ || _        | –— Œ¢ y ­w©Nr   é   rª  rœ  )r-  rk  ©r}  rp   r  r�   r¢  rø  r‚   rn  rk  ro   r–   rI  ©	rw  Úmock_responserž  r  ÚiÚcompletion_objÚ_all_choicesÚjÚ_streaming_choices	            r3   Úmock_completion_streaming_objrX  L  sù   è ø€ Ü�-¤×!6Ñ!6Ô7ØÐÜ�-Ô!4Ô5ØÒØÜ�1”c˜-Ó(¨!Ó,ò ˆÜ K¸ÀqÈ1ÈqÉ5Ð9QÔRˆØˆ9Ø.<ˆN×"Ñ" 1Ñ%Õ+àˆLÜ˜1“Xò 7�Ü$+§M¡M×$BÑ$BØÜ!Ÿ-™-×-Ñ-°;ÈÐVWÐZ[Ð^_ÑZ_ÐH`Ð-Óað %Có %Ð!ð ×#Ñ#Ð$5Õ6ð7ð &2ˆNÔ"ØÓñùs   ‚C,C.c               óä  K  — t        |t        j                  «      r|‚t        |t        «      r|­–— y t	        dt        |«      d«      D ]¡  }t        d|||dz    ¬«      }|€|| j                  d   _        npg }t	        |«      D ]Y  }t        j                  j                  |t        j                  j                  d|||dz    ¬«      ¬«      }|j                  |«       Œ[ || _        | ­–— Œ£ y ­wrN  rP  rQ  s	            r3   Ú#async_mock_completion_streaming_objrZ  b  sû   è ø€ ô �-¤×!6Ñ!6Ô7ØÐÜ�-Ô!4Ô5ØÓØÜ�1”c˜-Ó(¨!Ó,ò ˆÜ K¸ÀqÈ1ÈqÉ5Ð9QÔRˆØˆ9Ø.<ˆN×"Ñ" 1Ñ%Õ+àˆLÜ˜1“Xò 7�Ü$+§M¡M×$BÑ$BØÜ!Ÿ-™-×-Ñ-°;ÈÐVWÐZ[Ð^_ÑZ_ÐH`Ð-Óað %Có %Ð!ð ×#Ñ#Ð$5Õ6ð7ð &2ˆNÔ"ØÔñùs   ‚C.C0c                óÆ   — 	 dd l } |j                  «        t        | d«      5 }t        j                  |«      }d d d «       |S # 1 sw Y   S xY w# t
        $ r}|‚d }~ww xY w)Nr   r�   )r²  ÚgetcwdÚopenr  ÚloadrU   )Úconfig_pathr²  Úconfig_filerã  r3  s        r3   Úread_config_argsra  ~  sa   € ð
Ûàˆ�	‰	ŒÜ�+˜sÓ#ð 	3 {Ü ŸI™I kÓ2ˆF÷	3ð ˆ÷		3ð ˆûÜò Øˆûðús3   ‚!A £A¹	A ÁAÁA ÁA Á	A ÁAÁA c                óˆ   — d| dœ}t        |g|«      }||kD  r%t        d«       t        |||«      }t        |g|«      }|||z
  fS )NÚsystemrœ  zH`tokentrimmer`: Warning, system message exceeds token limit. Trimming...)Úget_token_countrD  Úshorten_message_to_fit_limit)Úsystem_messagerŽ  rž  Úsystem_message_eventÚsystem_message_tokensÚnew_system_messages         r3   Úprocess_system_messagerj  �  sc   € Ø+3ÀÑ"OÐÜ+Ð-AÐ,BÀEÓJÐà˜zÒ)ÜÐ`Ôaä$@ÐAUÐWaÐchÓ$iÐÜ /Ð1CÐ0DÀeÓ LÐà Ð.CÑ!CÐCÐCr5   c                óZ  — | d d d…   } g }t        j                  d| ||«       | D ]m  }t        j                  d|«       t        ||«      }||z
  }t        j                  d||«       |dk  r n(t        |||||¬«      }t        j                  d|«       Œo t        j                  d|«       |S )	Nr‰  zEcalling process_messages with messages: %s, max_tokens: %s, model: %szprocessing final_messages: %sz%used_tokens: %s, available_tokens: %srO  )Úfinal_messagesrÔ  Úavailable_tokensrŽ  rž  z1final_messages after attempt_message_addition: %szFinal messages: %s)r  r<  rd  Úattempt_message_addition)r»  rŽ  rž  rl  rÔ  Úused_tokensrm  s          r3   Úprocess_messagesrp  œ  sÎ   € à™˜"˜‰~€HØ€NÜ×ÑØOÐQYÐ[eÐglôð ò bˆÜ×ÑÐ<¸nÔMÜ% n°eÓ<ˆØ%¨Ñ3ÐÜ×ÑÐDÀkÐScÔdØ˜qÒ Ùä1Ø)ØØ-Ø!Øô
ˆô 	×ÑÐPÐR`Õaðbô  ×ÑÐ-¨~Ô>ØÐr5   c                ó0  — |g| z   }t        ||¬«      }t        j                  d||«       ||k  r|S d|vr`t        j                  d«       t        |||«      }t	        || ||«      rt        j                  d«       |g| z   S t        j                  d«       | S )N©r»  rž  z'temp_message_tokens: %s, max_tokens: %srŠ  z*attempting to shorten message to fit limitz=can add message, returning [updated_message] + final_messagesz,cannot add message, returning final_messages)rd  r  r<  re  Úcan_add_message)rl  rÔ  rm  rŽ  rž  Útemp_messagesÚtemp_message_tokensÚupdated_messages           r3   rn  rn  ·  s§   € Ø#˜9 ~Ñ5€MÜ!0¸-ÈuÔ!UÐÜ×ÑÐBÐDWÐYcÔdØ˜jÒ(ØÐð 
 Ñ	'Ü×ÑÐIÔJä!=¸gÐGWÐY^Ó!_ˆÜ˜?¨N¸JÈÔNÜ× Ñ Ð!`ÔaØ#Ð$ ~Ñ5Ð5ä× Ñ Ð!OÔPØÐr5   c                ó,   — t        || gz   |«      |k  ryyr×  )rd  )rÔ  r»  rŽ  rž  s       r3   rs  rs  Ë  s   € Ü�x 7 )Ñ+¨UÓ3°zÒAØØr5   c                ó   — t        || ¬«      S )Nr  )r%  rr  s     r3   rd  rd  Ñ  s   € Ü˜u¨xÔ8Ð8r5   c                ó  — |�d|v r|dk  r| S | d   }d}t        j                  d|«       |t        k  r¯t        j                  d| «       t        | g|«      }t        j                  d||«       ||k  rno||z  }t	        t        |«      |z  «      d	z
  }t        d|«      }|d
z  }	|d|	 }
||	 d }|
dz   |z   }|| d<   t        j                  d|«       |}|d	z  }|t        k  rŒ¯|t        k\  r|rt        d|› dt        › d�«      ‚| S )a|  
    Shorten a message to fit within a token limit by removing characters from the middle.

    Args:
        message: The message to shorten
        tokens_needed: The maximum number of tokens allowed
        model: The model being used (optional)
        raise_error_on_max_limit: If True, raises an error when max attempts reached. If False, returns final trimmed content.
    NÚgptrV  r×  r   zcontent: %sz#getting token count for message: %sz#total_tokens: %s, tokens_needed: %sr  é   z..ztrimmed_content: %sz%Failed to trim message to fit within z tokens after z	 attempts)r  r<  r'   rd  rO  rø  r  rU   )rÔ  Útokens_neededrž  Úraise_error_on_max_limitr×  ÚattemptsÚtotal_tokensÚratioÚ
new_lengthÚhalf_lengthÚ	left_halfÚ
right_halfÚtrimmed_contents                r3   re  re  Õ  sM  € ð Ð˜U e™^°ÀÒ0CØˆà�iÑ €GØ€Hä×Ñ˜¨Ô0à
Ô0Ò
0Ü×ÑÐBÀGÔLÜ&¨ y°%Ó8ˆÜ×ÑÐBÀLÐR_Ô`à˜=Ò(Øà ,Ñ.ˆäœ˜W›¨Ñ-Ó.°Ñ2ˆ
Ü˜˜JÓ'ˆ
à  A‘oˆØ˜L˜[Ð)ˆ	Ø˜k˜\˜]Ð+ˆ
à# dÑ*¨ZÑ7ˆØ,ˆ�	ÑÜ×ÑÐ2°OÔDØ!ˆØ�A‰ˆð+ Ô0Ó
0ð. Ô.Ò.Ñ3KÜØ3°M°?À.ÔQlÐPmÐmvÐwó
ð 	
ð €Nr5   c                óL  — | }t        j                  | «      } 	 |€Z|t        j                  v rFt        j                  |   j	                  dt        j                  |   d   «      }t        ||z  «      }n| S d}| D ]  }|d   dk(  sŒ||rdndz  }||d   z  }Œ g }	t        | «      D ]  }|d   d	k7  r n|	j                  |«       Œ |	j                  «        t        |	«      r| dt        |	«        } t        |xs d| ¬
«      }
t        d|
› d|› �«       |
|k  r| |	z   S t        d| › d|
› d|› �«       d}|r1t        |||¬«      \  }}|dk(  r|gS | D �cg c]  }|d   dk7  sŒ|‘Œ } }t        j                  d|«       t        | ||¬«      }t        j                  d|«       |r|g|z   }t        |	«      dkD  r|j!                  |	«       t        j                  d||«       |r|t#        ||«      z
  }||fS |S c c}w # t$        $ r"}t        j&                  d|«       |cY d}~S d}~ww xY w)aã  
    Trim a list of messages to fit within a model's token limit.

    Args:
        messages: Input messages to be trimmed. Each message is a dictionary with 'role' and 'content'.
        model: The LiteLLM model being used (determines the token limit).
        trim_ratio: Target ratio of tokens to use after trimming. Default is 0.75, meaning it will trim messages so they use about 75% of the model's token limit.
        return_response_tokens: If True, also return the number of tokens left available for the response after trimming.
        max_tokens: Instead of specifying a model or trim_ratio, you can specify this directly.

    Returns:
        Trimmed messages and optionally the number of tokens available for response.
    Nró  rŽ  rØ  r¨  rc  rq  r×  r¸  r  zCurrent tokens: z, max tokens: zNeed to trim input messages: z, current_tokensz, max_tokens: )rf  rŽ  rž  r   zProcessed system message: %s)r»  rŽ  rž  zProcessed messages: %sz.Final messages: %s, return_response_tokens: %sz'Got exception while token trimming - %s)r‘  ry  rp   rQ  rw  rO  rÿ  rI  Úreverserø  r%  rD  rj  r  r<  rp  r’  rd  rU   rV   )r»  rž  Ú
trim_ratioÚreturn_response_tokensrŽ  Úoriginal_messagesÚmax_tokens_for_modelrf  rÔ  Útool_messagesÚcurrent_tokensrg  rl  Úresponse_tokensr3  s                  r3   Útrim_messagesr�    s™  € ð,  (ÐÜ�}‰}˜XÓ&€HðJ!ØÐàœ×*Ñ*Ñ*Ü.5×.@Ñ.@ÀÑ.G×.KÑ.KØ&¬×(:Ñ(:¸5Ñ(AÀ,Ñ(Oó/Ð$ô !Ð!5¸
Ñ!BÓC‘
ð
  �àˆØò 	5ˆGØ�v‰ (Ó*Ø©.¡$¸bÑ@�Ø '¨)Ñ"4Ñ4‘ð	5ð  "ˆä Ó)ò 	*ˆGØ�v‰ &Ò(ÙØ× Ñ  Õ)ð	*ð 	×ÑÔäˆ}ÔØÐ 5¤3 }Ó#5Ð"5Ð6ˆHä -°E²K¸RÈ(Ô SˆÜÐ(¨Ð(8¸ÀzÀlÐSÔTð ˜JÒ&Ø˜mÑ+Ð+ô 	Ø+¨H¨:Ð5EÀnÐEUÐUcÐdnÐcoÐpô	
ð -1ÐÙÜ/EØ-¸*ÈEô0Ñ,Ð  *ð ˜QŠØ,Ð-Ð-ð 08ÖW G¸7À6¹?ÈhÓ;VšÐWˆHÐWä×ÑÐ;Ð=QÔRÜ)°8È
ÐZ_Ô`ˆÜ×ÑÐ5°~ÔFñ  Ø2Ð3°nÑDˆNäˆ}Ó Ò!Ø×!Ñ! -Ô0ä×ÑÐMÈ~Ð_uÔvÙ!Ø%/´/À.ÐRWÓ2XÑ%XˆOØ! ?Ð2Ð2ØÐùò# Xøô$ ò !Ü× Ñ Ð!JÈAÔNØ Õ ûð!úsV   ™AG8 Á5G8 ÂBG8 Ä0G8 ÅG8 ÅG3ÅG3Å"BG8 Ç1G8 Ç3G8 Ç8	H#ÈHÈH#ÈH#)ÚInMemoryCachec                  ór   ‡ — e Zd Zddˆ fd„Zd	d„Zd
d„Z	 	 	 	 	 	 dd„Z	 	 d	 	 	 	 	 dd„Z	 	 	 	 	 	 dd„Zˆ xZ	S )ÚAvailableModelsCachec                ó4   •— t         ‰| �  ||«       d | _        y r;   )Úsuperr0  Ú	_env_hash)r/  Úttl_secondsÚmax_sizeÚ	__class__s      €r3   r0  zAvailableModelsCache.__init__v  s   ø€ Ü‰Ñ˜ hÔ/Ø%)ˆ�r5   c                óê   — t         j                  j                  «       D ��ci c]  \  }}|j                  d«      sŒ||“Œ }}}t	        t        t        |j                  «       «      «      «      S c c}}w )z/Create a hash of relevant environment variables)ÚOPENAIÚ	ANTHROPICÚAZUREÚAWS)r²  rö  rŠ  r‹  r°  Úhashr  )r/  r`  ra  Úenv_varss       r3   Ú_get_env_hashz"AvailableModelsCache._get_env_hashz  sX   € ä,.¯J©J×,<Ñ,<Ó,>×x¡D A qÀ!Ç,Á,ÐOvÕBw˜1˜a™4ÐxˆÑxÜ”4œ	 (§.¡.Ó"2Ó3Ó4Ó5Ð5ùó ys
   ¢A/¼A/c                óh   — | j                  «       }| j                  €|| _        y|| j                  k7  S )z+Check if environment variables have changedT)r   r•  )r/  Úcurrent_hashs     r3   Ú_check_env_changedz'AvailableModelsCache._check_env_changed  s3   € à"×0Ñ0Ó2ˆØ�>‰>Ð!Ø)ˆDŒNØØ˜tŸ~™~Ñ-Ð-r5   c                óž   — d}|�|j                  «       }|�|› d|› �}t        j                  |j                  «       «      j	                  «       S )NrØ  ú:)Úmodel_dump_jsonÚhashlibÚsha256r  Ú	hexdigest)r/  rŸ  rô  Ú	valid_strs       r3   Ú_get_cache_keyz#AvailableModelsCache._get_cache_key‡  sU   € ð
 ˆ	àÐ%Ø&×6Ñ6Ó8ˆIØÐ*Ø.Ð/¨q°°Ð<ˆIÜ�~‰~˜i×.Ñ.Ó0Ó1×;Ñ;Ó=Ð=r5   c                ó  — |€+| j                  «       r| j                  j                  «        y| j                  ||«      }t	        t
        t           dz  | j                  |«      «      }|�t        j                  |«      S |S )zGet cached model infoN)
r£  Ú
cache_dictÚclearr«  rª   r­  r°  Ú	get_cacher‘  ry  )r/  rŸ  rô  Ú	cache_keyrÇ  s        r3   Úget_cached_model_infoz*AvailableModelsCache.get_cached_model_info”  ss   € ð Ð! d×&=Ñ&=Ô&?Ø�O‰O×!Ñ!Ô#Øà×.Ñ.Ð/BÀNÓSˆ	äœT¤#™Y¨Ñ-¨t¯~©~¸iÓ/HÓIˆàÐÜ—=‘= Ó(Ð(Øˆr5   c                ór   — | j                  ||«      }| j                  |t        j                  |«      «       y)zSet cached model infoN)r«  Ú	set_cacher‘  ry  )r/  rŸ  rô  Úavailable_modelsr°  s        r3   Úset_cached_model_infoz*AvailableModelsCache.set_cached_model_info§  s/   € ð  ×.Ñ.Ð/BÀNÓSˆ	Ø�‰�y¤$§-¡-Ð0@Ó"AÕBr5   )i,  r  )r–  rO  r—  rO  ©rÌ  r°  ©rÌ  rg  )rŸ  rL  rô  úLiteLLM_Params | NonerÌ  r°  rJ  )rŸ  rL  rô  r¸  rÌ  r2  )rŸ  r°  rô  r¸  r´  rt  )
r‡  r›  rœ  r0  r   r£  r«  r±  rµ  Ú__classcell__©r˜  s   @r3   r’  r’  u  s�   ø„ ö*ó6ó
.ð>à'ð>ð .ð>ð 
ó	>ð +/Ø04ðà'ðð .ðð 
ó	ð&Cà ðCð .ðCð $÷	Cr5   r’  Ú_model_cachec                ó(  — g }t         j                  j                  «       }t        j                  D ]^  }| r|| k7  rŒ|j                  dd«      }|}|j                  «       › d�}|j                  «       › d�}||v s||v sŒN|j                  |«       Œ` |S )Nr1  rØ  Ú_API_KEY)r²  rö  rí  rp   rH  rZ  ÚupperrI  )rŸ  Úvalid_providersÚenviron_keysrF  Úenv_provider_1Úenv_provider_2Úexpected_provider_key_1Úexpected_provider_key_2s           r3   Ú#_infer_valid_provider_from_env_varsrÅ  ¶  s¬   € ð )+€OÜŸ*™*Ÿ/™/Ó+€LÜ×)Ñ)ò -ˆÙ 8Ð/BÒ#BØð "×)Ñ)¨#¨rÓ2ˆØ!ˆð &4×%9Ñ%9Ó%;Ð$<¸HÐ"EÐØ%3×%9Ñ%9Ó%;Ð$<¸HÐ"EÐØ" lÑ2Ð6MÐQ]Ò6]à×"Ñ" 8Õ,ð-ð  Ðr5   c                ó$  — 	 t         j                  ||«      }|�|S | j                  |�|j                  nd |�|j                  nd ¬«      }t         j                  |||«       |S # t        $ r"}t        j                  d|«       g cY d }~S d }~ww xY w)N)rX  rï  úError getting valid models: %s)	r»  r±  Ú
get_modelsrX  rï  rµ  rU   r  rõ  )r   rŸ  rô  r¥  r  r3  s         r3   Ú#_get_valid_models_from_provider_apirÉ  Î  sž   € ð
Ü+×AÑAÐBUÐWeÓfˆàÐ$Ø Ð Ø'×2Ñ2Ø.<Ð.H�N×*Ò*ÈdØ0>Ð0J�^×,Ò,ÐPTð 3ó 
ˆô
 	×*Ñ*Ð+>ÀÐPVÔWØˆøÜò Ü×ÑÐ?ÀÔCØ�	ûðús#   ‚A$ œAA$ Á$	BÁ-B
ÂBÂ
Bc                óV  — 	 ddl m} |€	 |d¬«      }|�||_        |�||_        | xs t        j
                  } g }g }|r|g}nt        |«      }|D ]¨  }t        j                  dt        |«      ¬«      }	|r||k7  rŒ+|dk(  r|j                  d«       ŒB|	�!| r|�|j                  t        |	||«      «       Œet        j                  t        j                  j!                  |g «      «      }
|j                  |
«       Œª |S # t"        $ r"}t%        j&                  d	|«       g cY d}~S d}~ww xY w)
a×  
    Returns a list of valid LLMs based on the set environment variables

    Args:
        check_provider_endpoint: If True, will check the provider's endpoint for valid models.
        custom_llm_provider: If provided, will only check the provider's endpoint for valid models.
        api_key: If provided, will use the API key to get valid models.
        api_base: If provided, will use the API base to get valid models.
    Returns:
        A list of valid LLMs
    r   rú   NrØ  rì  rð  r'  z	Azure-LLMrÇ  )Úlitellm.types.routerrû   rX  rï  rp   Úcheck_provider_endpointrÅ  rø  rì  rˆ   rI  r’  rÉ  r‘  ry  rû  rw  rU   r  rõ  )rÌ  rŸ  rô  rX  rï  rû   r¿  Úvalid_modelsrF  r   Úmodels_for_providerr3  s               r3   Úget_valid_modelsrÏ  ä  sU  € ð&4õ 	8àÐ!Ù+°"Ô5ˆNØÐØ%,ˆNÔ"ØÐØ&.ˆNÔ#ð #:Ò"\¼W×=\Ñ=\Ðð &(ˆØ)+ˆñ Ø2Ð3‰OäAÐBUÓVˆOà'ò 	9ˆHÜ3×KÑKØÜ% hÓ/ð Ló ˆOñ
 # xÐ3FÒ'FØà˜7Ò"Ø×#Ñ# KÕ0Ø Ð,Ñ1HÈXÐMaØ×#Ñ#Ü7Ø'Ø Ø&óõô '+§m¡m´G×4NÑ4N×4RÑ4RÐS[Ð]_Ó4`Ó&aÐ#Ø×#Ñ#Ð$7Õ8ð+	9ð. ÐøÜò Ü×ÑÐ?ÀÔCØ�	ûðús   ‚C:C= Ã=	D(ÄD#ÄD(Ä#D(c           	     óš  — t        «       sy 	 d|v r|d   du r| j                  dk(  s4d|v r|d   du r| j                  dk(  sd|v r|d   du r| j                  dk(  ry dj                  t        t        |«      «      }dj                  d	„ |j                  «       D «       «      }t        d
«       t        d«       |r"|r t        d| j                  › d|› d|› d�«       nW|rt        d| j                  › d|› d�«       n8|rt        d| j                  › d|› d�«       nt        d| j                  › d�«       t        d
«       y # t        $ r Y y w xY w)Nr  Tr  r  r  r‹  Úimg_generationr  c              3  ó0   K  — | ]  \  }}|› d |›�–— Œ y­w)ú=Nr  )r@   r�  rŽ  s      r3   rB   z/print_args_passed_to_litellm.<locals>.<genexpr>C  s   è ø€ Ò%Z¹Z¸SÀ%¨¨¨Q¨u¨iÔ&8Ñ%Zùs   ‚rq  z[92mRequest to litellm:[0mz[92mlitellm.ú(z)[0mz()[0m)r  r‡  r   ÚmapÚreprrŠ  rD  rU   )r'  rP   rx  Úargs_strÚ
kwargs_strs        r3   rž  rž  .  su  € ÜÔØð$ð ˜VÑ#Ø�}Ñ%¨Ñ-Ø!×*Ñ*¨lÒ:Ø˜vÑ%Ø�|Ñ$¨Ñ,Ø!×*Ñ*¨kÒ9à! VÑ+ØÐ,Ñ-°Ñ5Ø%×.Ñ.Ð2BÒBð àŸ)™)¤C¬¨d£OÓ4ˆØ ŸI™IÑ%ZÈ6Ï<É<Ë>Ô%ZÓZˆ
ÜØô	
ô 	Ø0ô	
ñ ‘FÜÐ,Ð->×-GÑ-GÐ,HÈÈ(ÈÐSUÐV`ÐUaÐaiÐjÕkÙÜÐ,Ð->×-GÑ-GÐ,HÈÈ(ÈÐS[Ð\Õ]ÙÜÐ,Ð->×-GÑ-GÐ,HÈÈ*ÈÐU]Ð^Õ_äÐ,Ð->×-GÑ-GÐ,HÈ	ÐRÔSÜ�dÕøÜò áðús   �AD> ÁC!D> Ä>	E
Å	E
c                óx   — 	 d| j                  d«      z   dz   |j                  d«      z   }|S # t        $ r Y y w xY w)Nztime-z%H-%M-%S-%fr1  r¬  )Ústrftimerw  rU   )ré  rl  Úresponse_ids      r3   Úget_logging_idrÜ  X  sK   € ðØ$ z×':Ñ':¸=Ó'IÑIÈCÑOÐR^×RbÑRbÐcgÓRhÑhˆØÐøÜò Ùðús   ‚*- ­	9¸9c                ó\  — | €y | j                  di «      }|�•|j                  dd «      }|�|S |j                  d«      xs i }t        t        j                  t           d«      } ||¬«      }|�|S |j                  di «      }t        t        j                  t           d«      } ||¬«      S y )Nrô  r’  rs  r¸   )rs  rð  )rw  r„  r…  r†  r‡  )Úmodel_call_detailsrô  Ú_base_modelrs  r¸   Úbase_model_from_metadatarð  s          r3   Ú_get_base_model_from_metadatará  `  sÎ   € ØÐ!ØØ.×2Ñ2Ð3CÀRÓH€NØÐ!Ø+×/Ñ/°¸dÓCˆØÐ"ØÐØ(×,Ñ,¨ZÓ8Ò>¸BˆäPWÜ�K‰KœÑ!Ð#OóQ
Ð2ñ +UÐ^fÔ*gÐ Ø#Ð/Ø+Ð+ð #1×"4Ñ"4Ð5GÈÓ"LÐÜ5<Ü�K‰KœÑ!Ð#Oó6
Ð2ñ :ÐCSÔTÐTØr5   c                  ó.   — e Zd Zddd„Zd„ Zd„ Zd„ Zd„ Zy)	ÚModelResponseIteratorc                óØ   — |du rXt        «       }|j                  d   j                  j                  |j                  d   j                  _        || _        d| _        y || _        d| _        y )NTr   F)r�   rn  rÔ  r×  rk  rw  Úis_done)r/  rw  Úconvert_to_deltaÚ_stream_responses       r3   r0  zModelResponseIterator.__init__{  sf   € Ø˜tÑ#Ü&9Ó&;ÐØ8F×8NÑ8NÈqÑ8Q×8YÑ8Y×8aÑ8aÐ×$Ñ$ QÑ'×-Ñ-Ô5ØGWˆDÔð ˆ�ð #1ˆDÔØˆ�r5   c                ó   — | S r;   r  r2  s    r3   r3  zModelResponseIterator.__iter__…  r4  r5   c                óL   — | j                   rt        ‚d| _         | j                  S ©NT)rå  rD  rw  r2  s    r3   rF  zModelResponseIterator.__next__ˆ  s"   € Ø�<Š<ÜÐØˆŒØ×"Ñ"Ð"r5   c                ó   — | S r;   r  r2  s    r3   r6  zModelResponseIterator.__aiter__�  r4  r5   c              ƒ  óT   K  — | j                   rt        ‚d| _         | j                  S ­wrê  )rå  rH  rw  r2  s    r3   rI  zModelResponseIterator.__anext__’  s&   è ø€ Ø�<Š<Ü$Ð$ØˆŒØ×"Ñ"Ð"ùs   ‚&(N©F)rw  rŽ   ræ  rg  ©r‡  r›  rœ  r0  r3  rF  r6  rI  r  r5   r3   rã  rã  z  s   „ ôòò#òó#r5   rã  c                  ó.   — e Zd Zddd„Zd„ Zd„ Zd„ Zd„ Zy)	ÚModelResponseListIteratorNc                ó.   — || _         d| _        || _        y ©Nr   )Úmodel_responsesr-  Údelay)r/  ró  rô  s      r3   r0  z"ModelResponseListIterator.__init__š  s   € Ø.ˆÔØˆŒ
Øˆ�
r5   c                ó   — | S r;   r  r2  s    r3   r3  z"ModelResponseListIterator.__iter__   r4  r5   c                ó  — | j                   t        | j                  «      k\  rt        ‚| j                  | j                      }| xj                   dz  c_         | j                  rt        j                  | j                  «       |S ©Nr  )r-  rø  ró  rD  rô  r£  Úsleep©r/  rw  s     r3   rF  z"ModelResponseListIterator.__next__£  s]   € Ø�:‰:œ˜T×1Ñ1Ó2Ò2ÜÐØ $× 4Ñ 4°T·Z±ZÑ @ˆØ�
Š
�a‰�
Ø�:Š:Ü�J‰J�t—z‘zÔ"ØÐr5   c                ó   — | S r;   r  r2  s    r3   r6  z#ModelResponseListIterator.__aiter__­  r4  r5   c              ƒ  ó$  K  — | j                   t        | j                  «      k\  rt        ‚| j                  | j                      }| xj                   dz  c_         | j                  r't        j                  | j                  «      ƒ d {  –—†  |S 7 Œ­wr÷  )r-  rø  ró  rH  rô  r§  rø  rù  s     r3   rI  z#ModelResponseListIterator.__anext__°  sl   è ø€ Ø�:‰:œ˜T×1Ñ1Ó2Ò2Ü$Ð$Ø $× 4Ñ 4°T·Z±ZÑ @ˆØ�
Š
�a‰�
Ø�:Š:Ü—-‘- §
¡
Ó+×+Ð+ØÐð ,ús   ‚BBÂBÂBr;   )rô  úfloat | Nonerî  r  r5   r3   rð  rð  ™  s   „ ôòòòór5   rð  c                  ó    ‡ — e Zd Zdˆ fd„Zˆ xZS )ÚCustomModelResponseIteratorc                ó"   •— t         ‰| �  «        y r;   )r”  r0  )r/  r˜  s    €r3   r0  z$CustomModelResponseIterator.__init__»  s   ø€ Ü‰ÑÕr5   rË  )r‡  r›  rœ  r0  r¹  rº  s   @r3   rþ  rþ  º  s   ø„ ÷ñ r5   rþ  c                ó   — t         j                  du ry| j                  d«      }|�%t        |t        «      r|j                  d«      dk(  ryd| vry| d   }t        |t
        «      sy|D ]c  }t        |t        «      sŒ|j                  d«      }|j                  d«      dk(  sŒ:|€Œ=t        |t        «      sŒN|j                  d«      dk(  sŒc y y)a+  
    Returns true, if message is marked as needing to be cached.

    Used for anthropic/gemini context caching.

    Follows the anthropic format {"cache_control": {"type": "ephemeral"}}

    Can be disabled globally by setting litellm.disable_anthropic_gemini_context_caching_transform = True
    TFÚcache_controlrL   Ú	ephemeralr×  r	  )rp   Ú2disable_anthropic_gemini_context_caching_transformrw  r}  r¯  r­  )rÔ  Úmessage_level_cache_controlr×  Úcontent_itemr  s        r3   Úis_cached_messager  ¿  sÛ   € ô ×AÑAÀTÑIØð *1¯©°_Ó)EÐà#Ð/ÜÐ2´DÔ9Ø'×+Ñ+¨FÓ3°{ÒBàà˜ÑØà˜YÑ'€Gô �gœtÔ$Øàò ˆä˜,¬Ô-Øà$×(Ñ(¨Ó9ˆà×Ñ˜VÓ$¨Ó.ØÑ)Ü˜=¬$Õ/Ø×!Ñ! &Ó)¨[Ó8áðð r5   c                óê   — 	 | j                  d«      sy| j                  d«      d   } t        j                  | d¬«      }t        j                  |«      j                  d«      | k(  S # t        $ r Y yw xY w)Nzdata:Frv  r  T)Úvalidaterž   )r‹  r£  Úbase64Ú	b64decodeÚ	b64encoder  rU   )r‰  Údecoded_bytess     r3   Úis_base64_encodedr  ð  su   € ðà�|‰|Øô
ð à�G‰G�C‹L˜‰Oˆô  &×/Ñ/°¸DÔAˆô ×Ñ Ó.×5Ñ5°gÓ>À!ÑCÐCøÜò Ùðús   ‚A& ”AA& Á&	A2Á1A2c                ó6   — d| v r| j                  d«      d   S | S )z3
    s: b64str OR data:image/png;base64,b64str
    rv  r  r¢  )r‰  s    r3   Úget_base64_strr    s"   € ð ˆa�xØ�w‰w�s‹|˜A‰ÐØ€Hr5   c                ó8   — | D ]  }|j                  d«      €Œ y y)zm
    Returns true, if messages has tool call blocks.

    Used for anthropic/bedrock message validation.
    r©  TFrv  )r»  rÔ  s     r3   Úhas_tool_call_blocksr    s*   € ð ò ˆØ�;‰;�|Ó$Ñ0Ùðð r5   c                óœ   — | D ]G  }|j                  d«      dk(  sŒ|j                  d«      }|€Œ,t        |d«      rt        |«      dkD  sŒG y y)a¤  
    Returns true if ANY assistant message has thinking_blocks.

    This is used to prevent dropping the thinking param when some messages
    in the conversation already contain thinking blocks. Dropping thinking
    when thinking blocks exist causes Anthropic error:
    "When thinking is disabled, an assistant message cannot contain thinking"

    Related issue: https://github.com/BerriAI/litellm/issues/18926
    r¨  rª  Úthinking_blocksÚ__len__r   TF©rw  r®  rø  )r»  rÔ  r  s      r3   Ú)any_assistant_message_has_thinking_blocksr    sY   € ð ò ˆØ�;‰;�vÓ +Ó-Ø%Ÿk™kÐ*;Ó<ˆOØÑ*´G¸OÈYÔ4WÔ[^Ð_nÓ[oÐrsÓ[sÙð	ð
 r5   c                óÒ   — d}| D ]+  }|j                  d«      dk(  sŒ|j                  d«      €Œ*|}Œ- |€y|j                  d«      }|du xs t        |d«      xr t        |«      dk(  S )	aø  
    Returns true if the last assistant message with tool_calls has no thinking_blocks.

    This is used to detect when thinking param should be dropped to avoid
    Anthropic error: "Expected thinking or redacted_thinking, but found tool_use"

    When thinking is enabled, assistant messages with tool_calls must include thinking_blocks.
    If the client didn't preserve thinking_blocks, we need to drop the thinking param.

    IMPORTANT: This should only be used in conjunction with
    any_assistant_message_has_thinking_blocks() to ensure we don't drop thinking
    when other messages in the conversation contain thinking blocks.

    Related issues: https://github.com/BerriAI/litellm/issues/14194, https://github.com/BerriAI/litellm/issues/9020
    Nr¨  rª  r©  Fr  r  r   r  )r»  Úlast_assistant_with_toolsrÔ  r  s       r3   Ú5last_assistant_with_tool_calls_has_no_thinking_blocksr  -  s„   € ð& !%ÐØò 0ˆØ�;‰;�vÓ +Ó-°'·+±+¸lÓ2KÑ2WØ(/Ñ%ð0ð !Ð(Øð 7×:Ñ:Ð;LÓM€OØ˜dÐ"Òi¤w¨À	Ó'JÒ'hÌsÐSbÓOcÐghÑOhÐir5   c           
     ó<   — t        dt        dddi dœ¬«      ¬«      gS )zÙ
    Prevent Anthropic from raising error when tool_use block exists but no tools are provided.

    Relevent Issues: https://github.com/BerriAI/litellm/issues/5388, https://github.com/BerriAI/litellm/issues/5747
    rw  Ú
dummy_toolzThis is a dummy tool callrP  rz  r|  )rL   rw  )rv   rw   r­  s    r3   Úadd_dummy_toolr  M  s2   € ô 	 ØÜ9Ø!Ø7à$Ø"$ñôô
	
ðð r5   )ÚChatCompletionAudioObjectÚChatCompletionImageObjectÚChatCompletionTextObjectÚChatCompletionUserMessageÚOpenAIMessageContentÚValidUserMessageContentTypesc                óš   — t        | t        «      r| j                  d¬«      S t        | t        «      r| S t	        dt        | «      › d�«      ‚)zÑ
    Converts a message to a dictionary if it's a Pydantic model.

    Args:
        message: The message, which may be a Pydantic model or a dictionary.

    Returns:
        dict: The converted message.
    T©Úexclude_nonezInvalid message type: z". Expected dict or Pydantic model.)r}  r   r«  r¯  rt  rL   ©rÔ  s    r3   Úconvert_to_dictr'  l  sK   € ô �'œ9Ô%Ø×!Ñ!¨tÐ!Ó4Ð4Ü	�GœTÔ	"ØˆäÐ0´°g³°Ð?aÐbÓcÐcr5   c                ó„   — g }| D ]8  }t        t        t        |«      «      }t        |¬«      }|j	                  |«       Œ: |S )Nr&  )rª   rr   r'  Úcleanup_none_field_in_messagerI  ©r»  Únew_messagesrÔ  Úconvert_msg_to_dictÚcleaned_messages        r3   Úconvert_list_message_to_dictr.  ~  sJ   € Ø€LØò -ˆÜ"Ô#3´_ÀWÓ5MÓNÐÜ7Ð@SÔTˆØ×Ñ˜OÕ,ð-ð Ðr5   c                ó
  — g }| D ]q  }|j                  d«      sd|d<   |j                  d«      rt        |d   ¬«      |d<   t        t        t	        |«      «      }t        |¬«      }|j                  |«       Œs t        |¬«      S )z{
    Ensures all messages are valid OpenAI chat completion messages.

    Handles missing role for assistant messages.
    r¨  rª  r©  )r!  r&  r€  )rw  Újsonify_toolsrª   rr   r'  r)  rI  Ú&validate_chat_completion_user_messagesr*  s        r3   Ú validate_and_fix_openai_messagesr2  ‡  s†   € ð €LØò -ˆØ�{‰{˜6Ô"Ø)ˆG�F‰OØ�;‰;�|Ô$Ü$1¸ÀÑ8MÔ$NˆG�LÑ!ä"Ô#3´_ÀWÓ5MÓNÐÜ7Ð@SÔTˆØ×Ñ˜OÕ,ð-ô 2¸<ÔHÐHr5   c                óÄ   — g }| €| S | D ]T  }t        |t        «      r |j                  |j                  «       «       Œ3t        |t        «      sŒD|j                  |«       ŒV |S )z<
    Ensure tools is List[dict] and not List[BaseModel]
    )r}  r   rI  r«  r¯  ©r!  Ú	new_toolsr¸  s      r3   Úvalidate_and_fix_openai_toolsr6  š  sa   € ð €IØ€}ØˆØò #ˆÜ�dœIÔ&Ø×Ñ˜TŸ_™_Ó.Õ/Ü˜œdÕ#Ø×Ñ˜TÕ"ð	#ð
 Ðr5   c                óü   — | du rt        ddt        dœ«      S | du ry| �t        | t        «      s| S t        | «      }d|v rd|vr|j	                  d«      |d<   nd|v rd|v r|j	                  d«       t        d|«      S )	zü
    Coerces bool thinking values (True becomes enabled with the default medium budget, False becomes None)
    and normalizes camelCase keys in the thinking param to snake_case.
    Handles clients that send budgetTokens instead of budget_tokens.
    Trõ   Úenabled)rL   Úbudget_tokensFNÚbudgetTokensr9  )rª   r    r}  r¯  r÷  )r  Ú
normalizeds     r3   Úvalidate_and_fix_thinking_paramr<  ©  sš   € ð �4ÑÜØ$ØÔ1`Ñaó
ð 	
ð �5ÑØØÐœz¨(´DÔ9ØˆÜ˜X›€JØ˜Ñ#¨¸zÑ(IØ&0§n¡n°^Ó&Dˆ
�?Ò#Ø	˜:Ñ	%¨/¸ZÑ*GØ�‰�~Ô&ÜÐ(¨*Ó5Ð5r5   c                ó|   — | j                  «       }|j                  «       D ��ci c]  \  }}|€Œ	||“Œ c}}S c c}}w )z¥
    Cleans up the message by removing the none field.

    remove None fields in the message - e.g. {"function": None} - some providers raise validation errors
    )r‘  rŠ  )rÔ  Únew_messager`  ra  s       r3   r)  r)  Â  s8   € ð !Ÿ™›€KØ(×.Ñ.Ó0×B‘T�Q˜°A±MˆAˆq‰DÓBÐBùÓBs   ¤
8¯8c                óÚ  — t        | «      D ]Ž  \  }}	 |d   dk(  r€|j                  d«      }|�mt        |t        «      rŒ3t        |t        «      rL|D ]G  }t        |t
        «      sŒ|j                  d«      t        vsŒ,t        d|j                  d«      › �«      ‚ Œ� | S # t        $ rB}t        |t        «      rt        d|› d�«      ‚d	t        |«      v rt        d
|› d�«      ‚|‚d}~ww xY w)a;  
    Ensures all user messages are valid OpenAI chat completion messages.

    Args:
        messages: List of message dictionaries
        message_content_type: Type to validate content against

    Returns:
        List[dict]: The validated messages

    Raises:
        ValueError: If any message is invalid
    r¨  rò  r×  NrL   zinvalid content type=zInvalid message at index zG. Please ensure all messages are valid OpenAI chat completion messages.zinvalid content typezInvalid user message at index zL. Please ensure all user messages are valid OpenAI chat completion messages.)	rü  rw  r}  r°  r­  r¯  r"  rU   ÚKeyError)r»  r¶  r0  Úuser_contentrW  r3  s         r3   r1  r1  Ì  s  € ô ˜HÓ%ò ‰ˆˆQð	Ø�‰y˜FÒ"Ø Ÿu™u YÓ/�ØÐ+Ü! ,´Ô4Ø Ü# L´$Ô7Ø$0ò `˜DÜ)¨$´Õ5Ø#'§8¡8¨FÓ#3Ô;WÒ#WÜ*3Ð6KÈDÏHÉHÐU[ÓL\ÐK]Ð4^Ó*_Ð$_ð`øðð0 €Oøô ò 
	Ü˜!œXÔ&ÜØ/°¨uÐ4{Ð|óð ð &¬¨Q«Ñ/ÜØ4°S°Eð  :Fð  Góð ð �ûð
	ús(   “+B¿%BÁ%BÁ=BÂ	C*Â(=C%Ã%C*c                ó  — | �t        | t        «      r| S t        | t        «      rN| j                  d«      }|dv rd| vr|S | j                  d«      �| j                  d«      €t	        d| › d�«      ‚| S t	        d| › dt        | «      › d�«      ‚)z�
    Confirm the tool choice is passed in the OpenAI format.

    Prevents user errors like: https://github.com/BerriAI/litellm/issues/7483
    rL   )ÚautoÚnoner~  rw  z!Invalid tool choice, tool_choice=z3. Please ensure tool_choice follows the OpenAI specz. Got=zW. Expecting str, or dict. Please ensure tool_choice follows the OpenAI tool_choice spec)r}  r°  r¯  rw  rU   rL   )r"  Útool_choice_types     r3   Ú$validate_chat_completion_tool_choicerF  õ  s·   € ð Ðœj¨´cÔ:ØÐÜ	�K¤Ô	&Ø&Ÿ?™?¨6Ó2ÐØÐ;Ñ;À
ÐR]Ñ@]Ø#Ð#ð �?‰?˜6Ó"Ð*¨k¯o©o¸jÓ.IÐ.QÜØ3°K°=Ð@sÐtóð ð ÐÜ
Ø
+¨K¨=¸¼tÀKÓ?PÐ>Qð  Rið  	jóð r5   c                óp   — | �3t        | t        «      r#t        j                  st	        | «      dkD  r| dd } | S )a  
    Validates and fixes OpenAI optional parameters.

    Args:
        stop: Stop sequences (string or list of strings)
        **kwargs: Additional optional parameters

    Returns:
        Validated stop parameter (truncated to 4 elements if needed)
    Né   )r}  r­  rp   Údisable_stop_sequence_limitrø  )rø  rx  s     r3   Úvalidate_openai_optional_paramsrJ    s6   € ð ÐœJ t¬TÔ2¼7×;^Ò;^äˆt‹9�qŠ=Ø˜˜�8ˆDà€Kr5   c                 ó´   — 	 t        j                  d«      j                  d«      } t        j                  | j                  «       «      S # t        $ r i cY S w xY w)Nrp   z+model_prices_and_context_window_backup.json)r   ÚfilesÚjoinpathr  ÚloadsÚ	read_textrU   )Úmodel_cost_paths    r3   Ú_get_bundled_model_cost_maprQ  "  sM   € ðÜ!*§¡°Ó!;×!DÑ!DÐErÓ!sˆÜ�z‰z˜/×3Ñ3Ó5Ó6Ð6øÜò ØŠ	ðús   ‚AA	 Á	AÁAc                óÔ   — | |j                   › d| › �f}|D ]'  }t        j                  j                  |«      }|€Œ%|c S  t	        «       }|D ]  }|j                  |«      }|€Œ|c S  i S )NrN  )rŽ  rp   rQ  rw  rQ  )rž  rF  Úcandidate_keysrt  r7  Úbundled_model_costs         r3   Ú)_get_model_cost_entry_for_provider_configrU  +  sŒ   € ð # x§~¡~Ð&6°a¸°wÐ$?Ð@€NØ#ò ˆ	Ü×'Ñ'×+Ñ+¨IÓ6ˆ
ØÑ!ØÒðô
 !<Ó =ÐØ#ò ˆ	Ø'×+Ñ+¨IÓ6ˆ
ØÑ!ØÒðð €Ir5   c                  óB  — e Zd ZU dZded<   ed+d„«       Zed,d-d„«       Zed.d„«       Zed.d„«       Z	ed.d„«       Z
ed.d	„«       Zed/d
„«       Zed/d„«       Ze	 d,	 	 	 	 	 	 	 d0d„«       Ze	 	 	 	 	 	 d1d„«       Ze	 	 	 	 	 	 	 	 	 	 d2d„«       Ze	 	 	 	 	 	 d3d„«       Ze ee¬«      	 	 	 	 	 	 d3d„«       «       Ze	 	 	 	 	 	 d4d„«       Ze	 d,	 	 	 	 	 d5d„«       Ze	 d,	 	 	 	 	 d6d„«       Ze	 	 	 	 d7d„«       Ze	 	 	 	 d8d„«       Ze	 	 	 	 	 	 d9d„«       Ze	 	 	 	 	 	 d:d„«       Ze	 	 	 	 	 	 d;d„«       Ze	 	 	 	 	 	 d<d„«       Ze	 	 	 	 	 	 d=d„«       Ze	 	 	 	 	 	 d>d„«       Ze	 	 	 	 d?d„«       Z e	 d,	 	 	 	 	 d@d„«       Z!e	 	 	 	 dAd„«       Z"e	 	 	 	 	 	 dBd „«       Z#e	 	 	 	 	 	 dCd!„«       Z$e	 	 	 	 dDd"„«       Z%e	 	 	 	 	 	 dEd#„«       Z&e	 	 	 	 	 	 dFd$„«       Z'e	 	 	 	 	 	 dGd%„«       Z(e	 	 	 	 	 	 dHd&„«       Z)e	 	 	 	 dId'„«       Z*e	 	 	 	 dJd(„«       Z+e	 	 	 	 	 	 dKd)„«       Z,e	 	 	 	 	 	 dLd*„«       Z-y)Mrø  Nz0dict[LlmProviders, tuple[Callable, bool]] | NoneÚ_PROVIDER_CONFIG_MAPc                 óâ  — i t         j                  d„ df“t         j                  d„ df“t         j                  d„ df“t         j                  d„ df“t         j
                  d„ df“t         j                  d„ df“t         j                  d	„ df“t         j                  d
„ df“t         j                  d„ df“t         j                  d„ df“t         j                  d„ df“t         j                  d„ df“t         j                  d„ df“t         j                  d„ df“t         j                  d„ df“t         j                   d„ df“t         j"                  d„ df“i t         j$                  d„ df“t         j&                  d„ df“t         j(                  d„ df“t         j*                  d„ df“t         j,                  d„ df“t         j.                  d„ df“t         j0                  d„ df“t         j2                  d„ df“t         j4                  d„ df“t         j6                  d„ df“t         j8                  d„ df“t         j:                  d„ df“t         j<                  d „ df“t         j>                  d!„ df“t         j@                  d"„ df“t         jB                  d#„ df“t         jD                  d$„ df“¥i t         jF                  d%„ df“t         jH                  d&„ df“t         jJ                  d'„ df“t         jL                  d(„ df“t         jN                  d)„ df“t         jP                  d*„ df“t         jR                  d+„ df“t         jT                  d,„ df“t         jV                  d-„ df“t         jX                  d.„ df“t         jZ                  d/„ df“t         j\                  d0„ df“t         j^                  d1„ df“t         j`                  d2„ df“t         jb                  d3„ df“t         jd                  d4„ df“t         jf                  d5„ df“¥i t         jh                  d6„ df“t         jj                  d7„ df“t         jl                  d8„ df“t         jn                  d9„ df“t         jp                  d:„ df“t         jr                  d;„ df“t         jt                  d<„ df“t         jv                  d=„ df“t         jx                  d>„ df“t         jz                  d?„ df“t         j|                  d@„ df“t         j~                  dA„ df“t         j€                  dB„ df“t         j‚                  dC„ df“t         j„                  dD„ df“t         j†                  dE„ df“t         jˆ                  dF„ df“¥i t         jŠ                  dG„ df“t         jŒ                  dH„ df“t         jŽ                  dI„ df“t         j�                  dJ„ df“t         j’                  dK„ df“t         j”                  dL„ df“t         j–                  dM„ df“t         j˜                  dN„ df“t         jš                  dO„ df“t         jœ                  dP„ df“t         jž                  dQ„ df“t         j                   dR„ df“t         j¢                  dS„ df“t         j¤                  dT„ df“t         j¦                  dU„ df“t         j¨                  dV„ df“t         jª                  dW„ df“¥i t         j¬                  dX„ df“t         j®                  dY„ df“t         j°                  dZ„ df“t         j²                  d[„ df“t         j´                  d\„ df“t         j¶                  d]„ df“t         j¸                  d^„ df“t         jº                  d_„ df“t         j¼                  d`„ df“t         j¾                  da„ df“t         jÀ                  db„ df“t         jÂ                  dc„ df“t         jÄ                  dd„ df“t         jÆ                  de„ df“t         jÈ                  df„ df“t         jÊ                  dg„ df“¥S )hzÔBuild the provider-to-config mapping dictionary.

        Returns a dict mapping provider to (factory_function, needs_model_parameter).
        This avoids expensive inspect.signature() calls at runtime.
        c                 ó*   — t        j                  «       S r;   )rp   ÚOpenAIGPTConfigr  r5   r3   ú<lambda>zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>M  s   € ¬'×*AÑ*AÓ*C€ r5   Fc                 ó*   — t        j                  «       S r;   )rp   r¹  r  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>N  ó   € ¬W×-DÑ-DÓ-F€ r5   c                ó,   — t         j                  | «      S r;   )rø  Ú_get_azure_ai_configrì  s    r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>R  s   € Ô3×HÑHÈÓO€ r5   Tc                ó,   — t         j                  | «      S r;   )rø  Ú_get_vertex_ai_configrì  s    r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>V  s   € Ô3×IÑIÈ%ÓP€ r5   c                ó,   — t         j                  | «      S r;   )rø  Ú_get_bedrock_configrì  s    r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>Z  s   € Ô3×GÑGÈÓN€ r5   c                ó,   — t         j                  | «      S r;   ©rø  Ú_get_cohere_configrì  s    r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>^  ó   € Ô3×FÑFÀuÓM€ r5   c                ó,   — t         j                  | «      S r;   re  rì  s    r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>b  rg  r5   c                 ó*   — t        j                  «       S r;   )rp   ré  r  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>f  ó   € ¬G×,FÑ,FÓ,H€ r5   c                 ó*   — t        j                  «       S r;   )rp   rê  r  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>g  ó   € ¬7×+DÑ+DÓ+F€ r5   c                 ó*   — t        j                  «       S r;   )rp   rç  r  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>h  ó   € ¬×(>Ñ(>Ó(@€ r5   c                 ó*   — t        j                  «       S r;   )rp   rè  r  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>j  ó   € œ×7Ñ7Ó9€ r5   c                 ó*   — t        j                  «       S r;   )rp   Ú	A2AConfigr  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>m  s   € ¤w×'8Ñ'8Ó':€ r5   c                 ó*   — t        j                  «       S r;   )rp   ÚBytezChatConfigr  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>n  ó   € ¬×)@Ñ)@Ó)B€ r5   c                 ó*   — t        j                  «       S r;   )rp   rÞ  r  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>o  ó   € ¬g×.FÑ.FÓ.H€ r5   c                 ó*   — t        j                  «       S r;   )rp   rá  r  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>p  ó   € ¤w×'<Ñ'<Ó'>€ r5   c                 ó*   — t        j                  «       S r;   )rp   ÚZAIChatConfigr  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>q  ry  r5   c                 ó*   — t        j                  «       S r;   )rp   ÚLambdaAIChatConfigr  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>r  ó   € ¬W×-GÑ-GÓ-I€ r5   c                 ó*   — t        j                  «       S r;   )rp   ÚInceptionChatConfigr  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>s  ó   € ¬W×-HÑ-HÓ-J€ r5   c                 ó*   — t        j                  «       S r;   )rp   ÚLlamaAPIConfigr  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>t  s   € ¬×)?Ñ)?Ó)A€ r5   c                 ó*   — t        j                  «       S r;   )rp   ÚOpenAITextCompletionConfigr  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>v  s   € œ×:Ñ:Ó<€ r5   c                 ó*   — t        j                  «       S r;   )rp   ÚSnowflakeConfigr  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>y  r]  r5   c                 ó*   — t        j                  «       S r;   )rp   ÚClarifaiConfigr  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>z  ó   € ¬G×,BÑ,BÓ,D€ r5   c                 ó*   — t        j                  «       S r;   )rp   rº  r  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>{  ó   € ´'×2MÑ2MÓ2O€ r5   c                 ó*   — t        j                  «       S r;   )rp   rÄ  r  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>|  s   € ´'×2LÑ2LÓ2N€ r5   c                 ó*   — t        j                  «       S r;   )rp   r×  r  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>}  ó   € ¬g×.JÑ.JÓ.L€ r5   c                 ó*   — t        j                  «       S r;   )rp   ÚSagemakerChatConfigr  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>~  rŒ  r5   c                 ó*   — t        j                  «       S r;   )rp   ÚSagemakerNovaConfigr  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>  rŒ  r5   c                 ó*   — t        j                  «       S r;   )rp   rÎ  r  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>€  r]  r5   c                 ó*   — t        j                  «       S r;   )rp   rã  r  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>�  s   € ´×0IÑ0IÓ0K€ r5   c                 ó*   — t        j                  «       S r;   )rp   ÚFriendliaiChatConfigr  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>‚  r�  r5   c                 ó*   — t        j                  «       S r;   )rp   rì  r  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>ƒ  s   € ¬7×+GÑ+GÓ+I€ r5   c                 ó*   — t        j                  «       S r;   )rp   rž  r  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>„  s   € ´×0JÑ0JÓ0L€ r5   c                 ó*   — t        j                  «       S r;   )rp   ÚEmpowerChatConfigr  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>…  rl  r5   c                 ó*   — t        j                  «       S r;   )rp   ÚMinimaxChatConfigr  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>†  rl  r5   c                 ó*   — t        j                  «       S r;   )rp   ÚGithubChatConfigr  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>‡  ó   € ¬'×*BÑ*BÓ*D€ r5   c                 ó*   — t        j                  «       S r;   )rp   ÚCompactifAIChatConfigr  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>ˆ  ó   € ¬w×/LÑ/LÓ/N€ r5   c                 ó*   — t        j                  «       S r;   )rp   ÚGithubCopilotConfigr  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>‰  rŒ  r5   c                 ó*   — t        j                  «       S r;   )rp   ÚChatGPTConfigr  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>Š  ó   € ¬7×+@Ñ+@Ó+B€ r5   c                 ó*   — t        j                  «       S r;   )rp   ÚGigaChatConfigr  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>‹  rŠ  r5   c                 ó*   — t        j                  «       S r;   )rp   ÚRAGFlowConfigr  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>Œ  r¨  r5   c                 ó*   — t        j                  «       S r;   ©rp   rõ  r  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>�  s   € ¬'×*FÑ*FÓ*H€ r5   c                 ó*   — t        j                  «       S r;   r®  r  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>Ž  s   € ´×1MÑ1MÓ1O€ r5   c                 ó*   — t        j                  «       S r;   r®  r  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>�  ó   € ¬w×/KÑ/KÓ/M€ r5   c                 ó*   — t        j                  «       S r;   )rp   ÚAiohttpOpenAIChatConfigr  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>‘  rp  r5   c                 ó*   — t        j                  «       S r;   )rp   rå  r  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>”  r±  r5   c                 ó*   — t        j                  «       S r;   )rp   ÚLlamafileChatConfigr  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>•  r�  r5   c                 ó*   — t        j                  «       S r;   )rp   ÚLMStudioChatConfigr  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>–  r~  r5   c                 ó*   — t        j                  «       S r;   )rp   ÚGaladrielChatConfigr  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>—  r�  r5   c                 ó*   — t        j                  «       S r;   )rp   r¾  r  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>˜  r]  r5   c                 ó*   — t        j                  «       S r;   )rp   rÀ  r  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>™  r£  r5   c                 ó*   — t        j                  «       S r;   )rp   rÁ  r  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>š  r±  r5   c                 ó*   — t        j                  «       S r;   )rp   rë  r  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>›  rw  r5   c                 ó*   — t        j                  «       S r;   )rp   ÚVercelAIGatewayConfigr  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>�  s   € œ×5Ñ5Ó7€ r5   c                 ó*   — t        j                  «       S r;   )rp   ÚCometAPIConfigr  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>   rŠ  r5   c                 ó*   — t        j                  «       S r;   )rp   ÚDataRobotConfigr  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>¡  r]  r5   c                 ó*   — t        j                  «       S r;   )rp   rÅ  r  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>¢  s   € ¬'×*LÑ*LÓ*N€ r5   c                 ó*   — t        j                  «       S r;   ©rp   râ  r  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>£  rn  r5   c                 ó*   — t        j                  «       S r;   rÇ  r  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>¤  ó   € ¬W×-CÑ-CÓ-E€ r5   c                 ó*   — t        j                  «       S r;   )rp   ÚAzureOpenAITextConfigr  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>¥  s   € ¬g×.KÑ.KÓ.M€ r5   c                 ó*   — t        j                  «       S r;   )rp   rÚ  r  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>¦  rÉ  r5   c                 ó*   — t        j                  «       S r;   )rp   ÚOobaboogaConfigr  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>§  r]  r5   c                 ó*   — t        j                  «       S r;   )rp   rÙ  r  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>¨  ó   € ¬w×/GÑ/GÓ/I€ r5   c                 ó*   — t        j                  «       S r;   )rp   rÜ  r  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>©  r]  r5   c                 ó*   — t        j                  «       S r;   )rp   ÚPerplexityChatConfigr  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>ª  r�  r5   c                 ó*   — t        j                  «       S r;   ©rp   rÊ  r  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>«  r¨  r5   c                 ó*   — t        j                  «       S r;   rÕ  r  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>¬  s   € ¬W×-BÑ-BÓ-D€ r5   c                 ó*   — t        j                  «       S r;   )rp   rß  r  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>­  s   € ¬g×.EÑ.EÓ.G€ r5   c                 ó*   — t        j                  «       S r;   )rp   rà  r  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>®  rŠ  r5   c                 ó*   — t        j                  «       S r;   )rp   ÚBasetenConfigr  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>¯  r¨  r5   c                 ó*   — t        j                  «       S r;   )rp   rä  r  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>°  rw  r5   c                 ó*   — t        j                  «       S r;   )rp   rÉ  r  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>²  ó   € œ×=Ñ=Ó?€ r5   c                 ó*   — t        j                  «       S r;   )rp   rÝ  r  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>¶  rÝ  r5   c                 ó*   — t        j                  «       S r;   )rp   ÚSambanovaConfigr  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>¹  r]  r5   c                 ó*   — t        j                  «       S r;   )rp   r½  r  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>º  rŠ  r5   c                 ó*   — t        j                  «       S r;   )rp   ræ  r  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>»  s   € ¬×(:Ñ(:Ó(<€ r5   c                 ó*   — t        j                  «       S r;   )rp   rØ  r  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>¼  ó   € ¬'×*>Ñ*>Ó*@€ r5   c                 ó*   — t        j                  «       S r;   )rp   r¿  r  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>½  r]  r5   c                 ó*   — t        j                  «       S r;   )rp   r¼  r  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>¾  rä  r5   c                 ó*   — t        j                  «       S r;   )rp   rÛ  r  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>¿  rä  r5   c                 ó*   — t        j                  «       S r;   )rp   ÚGenAIHubOrchestrationConfigr  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>Á  ó   € œ×;Ñ;Ó=€ r5   c                 ó*   — t        j                  «       S r;   )rp   ÚFeatherlessAIConfigr  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>Ä  rŒ  r5   c                 ó*   — t        j                  «       S r;   )rp   ÚNovitaConfigr  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>Å  rä  r5   c                 ó*   — t        j                  «       S r;   )rp   rï  r  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>Æ  rä  r5   c                 ó*   — t        j                  «       S r;   )rp   ÚWandbConfigr  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>Ç  s   € ¬×)<Ñ)<Ó)>€ r5   c                 ó*   — t        j                  «       S r;   )rp   ÚDashScopeChatConfigr  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>È  r�  r5   c                 ó*   — t        j                  «       S r;   )rp   ÚModelScopeChatConfigr  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>É  r�  r5   c                 ó*   — t        j                  «       S r;   )rp   ÚMoonshotChatConfigr  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>Ê  rj  r5   c                 ó*   — t        j                  «       S r;   )rp   ÚDockerModelRunnerChatConfigr  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>Ì  rê  r5   c                 ó*   — t        j                  «       S r;   )rp   ÚV0ChatConfigr  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>Ï  s   € ¤g×&:Ñ&:Ó&<€ r5   c                 ó*   — t        j                  «       S r;   )rp   ÚMorphChatConfigr  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>Ð  ru  r5   c                 ó*   — t        j                  «       S r;   )rp   ÚLiteLLMProxyChatConfigr  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>Ò  s   € œ×6Ñ6Ó8€ r5   c                 ó*   — t        j                  «       S r;   )rp   ÚGradientAIConfigr  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>Õ  rÐ  r5   c                 ó*   — t        j                  «       S r;   )rp   ÚNscaleConfigr  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>Ö  rä  r5   c                 ó*   — t        j                  «       S r;   )rp   ÚHerokuChatConfigr  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>×  r   r5   c                 ó*   — t        j                  «       S r;   )rp   ÚOCIChatConfigr  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>Ø  ry  r5   c                 ó*   — t        j                  «       S r;   )rp   ÚHyperbolicChatConfigr  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>Ù  r�  r5   c                 ó*   — t        j                  «       S r;   )rp   ÚOVHCloudChatConfigr  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>Ú  rj  r5   c                 ó*   — t        j                  «       S r;   )rp   ÚAmazonNovaChatConfigr  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>Û  r±  r5   c                 ó*   — t         j                  «       S r;   )rø  Ú_get_langgraph_configr  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>Ý  s   € Ô-×CÑCÓE€ r5   c                 ó*   — t         j                  «       S r;   )rø  Ú_get_langflow_configr  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>á  s   € Ô-×BÑBÓD€ r5   c                 ó*   — t        j                  «       S r;   )rp   ÚGDCGeminiConfigr  r5   r3   r[  zBProviderConfigManager._build_provider_config_map.<locals>.<lambda>å  s   € œ×/Ñ/Ó1€ r5   )frˆ   rš  r›  ÚAZURE_AIÚ	VERTEX_AIÚBEDROCKÚCOHEREÚCOHERE_CHATÚDEEPSEEKÚTENCENTÚGROQÚBEDROCK_MANTLEÚA2AÚBYTEZr>  ÚXAIÚZAIÚ	LAMBDA_AIÚ	INCEPTIONÚLLAMAÚTEXT_COMPLETION_OPENAIÚ	SNOWFLAKEÚCLARIFAIÚANTHROPIC_TEXTÚVERTEX_AI_BETAÚ
CLOUDFLAREÚSAGEMAKER_CHATÚSAGEMAKER_NOVAÚ	SAGEMAKERr;  Ú
FRIENDLIAIÚWATSONXÚWATSONX_TEXTÚEMPOWERÚMINIMAXÚGITHUBÚCOMPACTIFAIÚGITHUB_COPILOTÚCHATGPTÚGIGACHATÚRAGFLOWÚCUSTOMÚCUSTOM_OPENAIÚOPENAI_LIKEÚAIOHTTP_OPENAIÚHOSTED_VLLMÚ	LLAMAFILEr<  Ú	GALADRIELÚ	REPLICATEÚHUGGINGFACEÚTOGETHER_AIÚ
OPENROUTERÚVERCEL_AI_GATEWAYÚCOMETAPIÚ	DATAROBOTÚGEMINIÚAI21Ú	AI21_CHATÚ
AZURE_TEXTÚ	NLP_CLOUDÚ	OOBABOOGAÚOLLAMA_CHATÚ	DEEPINFRAÚ
PERPLEXITYÚMISTRALÚ	CODESTRALÚ
NVIDIA_NIMÚCEREBRASÚBASETENÚ
VOLCENGINEÚTEXT_COMPLETION_CODESTRALÚTEXT_COMPLETION_INCEPTIONÚ	SAMBANOVAÚMARITALKÚVLLMÚOLLAMAr:  ÚTRITONÚPETALSÚSAP_GENERATIVE_AI_HUBÚFEATHERLESS_AIÚNOVITAr=  ÚWANDBÚ	DASHSCOPEÚ
MODELSCOPEÚMOONSHOTÚDOCKER_MODEL_RUNNERÚV0ÚMORPHÚLITELLM_PROXYÚGRADIENT_AIÚNSCALEÚHEROKUÚOCIÚ
HYPERBOLICÚOVHCLOUDÚAMAZON_NOVAÚ	LANGGRAPHÚLANGFLOWÚGDCr  r5   r3   Ú_build_provider_config_mapz0ProviderConfigManager._build_provider_config_mapC  sÚ
  € ð^
ô ×ÑÑ"CÀUÐ!Kð^
ô ×"Ñ"Ñ%FÈÐ$Nð	^
ô ×!Ñ!ÙOØð$ð^
ô ×"Ñ"ÙPØð%ð^
ô × Ñ ÙNØð#ð^
ô& ×ÑÙMØð"ð'^
ô. ×$Ñ$ÙMØð'ð/^
ô8 ×!Ñ!Ñ$HÈ%Ð#Pð9^
ô: × Ñ Ñ#FÈÐ"Nð;^
ô< ×ÑÑ @À%ÐHð=^
ô> ×'Ñ'Ù9Øð*ð?^
ôF ×ÑÑ:¸EÐBðG^
ôH ×ÑÑ!BÀEÐ JðI^
ôJ ×#Ñ#Ñ&HÈ%Ð%PðK^
ôL ×ÑÑ>ÀÐFðM^
ôN ×ÑÑ>ÀÐFðO^
ôP ×"Ñ"Ñ%IÈ5Ð$QñQ^
ôR ×"Ñ"Ñ%JÈEÐ$RðS^
ôT ×ÑÑ!AÀ5Ð IðU^
ôV ×/Ñ/Ù<Øð2ðW^
ô^ ×"Ñ"Ñ%FÈÐ$Nð_^
ô` ×!Ñ!Ñ$DÀeÐ#Lða^
ôb ×'Ñ'Ñ*OÐQVÐ)Wðc^
ôd ×'Ñ'Ñ*NÐPUÐ)Vðe^
ôf ×#Ñ#Ñ&LÈeÐ%Tðg^
ôh ×'Ñ'Ñ*OÐQVÐ)Wði^
ôj ×'Ñ'Ñ*OÐQVÐ)Wðk^
ôl ×"Ñ"Ñ%FÈÐ$Nðm^
ôn ×%Ñ%Ñ(KÈUÐ'Sðo^
ôp ×#Ñ#Ñ&LÈeÐ%Tðq^
ôr × Ñ Ñ#IÈ5Ð"Qðs^
ôt ×%Ñ%Ñ(LÈeÐ'Tðu^
ôv × Ñ Ñ#FÈÐ"Nðw^
ôx × Ñ Ñ#FÈÐ"Nòy^
ôz ×ÑÑ"DÀeÐ!Lð{^
ô| ×$Ñ$Ñ'NÐPUÐ&Vð}^
ô~ ×'Ñ'Ñ*OÐQVÐ)Wð^
ô@ × Ñ Ñ#BÀEÐ"JðA^
ôB ×!Ñ!Ñ$DÀeÐ#LðC^
ôD × Ñ Ñ#BÀEÐ"JðE^
ôF ×ÑÑ"HÈ%Ð!PðG^
ôH ×&Ñ&Ñ)OÐQVÐ(WðI^
ôJ ×$Ñ$Ñ'MÈuÐ&UðK^
ôL ×'Ñ'Ù9Øð*ðM^
ôT ×$Ñ$Ñ'MÈuÐ&UðU^
ôV ×"Ñ"Ñ%JÈEÐ$RðW^
ôX ×"Ñ"Ñ%IÈ5Ð$QðY^
ôZ ×"Ñ"Ñ%JÈEÐ$Rð[^
ô\ ×"Ñ"Ñ%FÈÐ$Nð]^
ô^ ×$Ñ$Ñ'NÐPUÐ&Vð_^
ô` ×$Ñ$Ñ'MÈuÐ&Uòa^
ôb ×#Ñ#Ñ&HÈ%Ð%Pðc^
ôd ×*Ñ*Ù7Øð-ðe^
ôl ×!Ñ!Ñ$DÀeÐ#Lðm^
ôn ×"Ñ"Ñ%FÈÐ$Nðo^
ôp ×ÑÑ"NÐPUÐ!Vðq^
ôr ×ÑÑ @À%ÐHðs^
ôt ×"Ñ"Ñ%EÀuÐ$Mðu^
ôv ×#Ñ#Ñ&MÈuÐ%Uðw^
ôx ×"Ñ"Ñ%EÀuÐ$Mðy^
ôz ×"Ñ"Ñ%FÈÐ$Nð{^
ô| ×$Ñ$Ñ'IÈ5Ð&Qð}^
ô~ ×"Ñ"Ñ%FÈÐ$Nð^
ô@ ×#Ñ#Ñ&LÈeÐ%TðA^
ôB × Ñ Ñ#BÀEÐ"JðC^
ôD ×"Ñ"Ñ%DÀeÐ$LðE^
ôF ×#Ñ#Ñ&GÈÐ%OðG^
ôH ×!Ñ!Ñ$DÀeÐ#LòI^
ôJ × Ñ Ñ#BÀEÐ"JðK^
ôL ×#Ñ#Ñ&HÈ%Ð%PðM^
ôN ×2Ñ2Ù?Øð5ðO^
ôV ×2Ñ2Ù?Øð5ðW^
ô^ ×"Ñ"Ñ%FÈÐ$Nð_^
ô` ×!Ñ!Ñ$DÀeÐ#Lða^
ôb ×ÑÑ <¸eÐDðc^
ôd ×ÑÑ"@À%Ð!Hðe^
ôf ×"Ñ"Ñ%FÈÐ$Nðg^
ôh ×ÑÑ"@À%Ð!Hði^
ôj ×ÑÑ"@À%Ð!Hðk^
ôl ×.Ñ.Ù=Øð1ðm^
ôt ×'Ñ'Ñ*OÐQVÐ)Wðu^
ôv ×ÑÑ"@À%Ð!Hðw^
ôx ×ÑÑ"@À%Ð!Hðy^
ôz ×ÑÑ!>ÀÐ Fð{^
ô| ×"Ñ"Ñ%JÈEÐ$Rò}^
ô~ ×#Ñ#Ñ&LÈeÐ%Tð^
ô@ ×!Ñ!Ñ$HÈ%Ð#PðA^
ôB ×,Ñ,Ù=Øð/ðC^
ôJ �O‰OÑ<¸eÐDðK^
ôL ×ÑÑ!BÀEÐ JðM^
ôN ×&Ñ&Ù8Øð)ðO^
ôV ×$Ñ$Ñ'IÈ5Ð&QðW^
ôX ×ÑÑ"@À%Ð!HðY^
ôZ ×ÑÑ"DÀeÐ!Lð[^
ô\ ×ÑÑ>ÀÐFð]^
ô^ ×#Ñ#Ñ&LÈeÐ%Tð_^
ô` ×!Ñ!Ñ$HÈ%Ð#Pða^
ôb ×$Ñ$Ñ'MÈuÐ&Uðc^
ôd ×"Ñ"ÙEØð%ðe^
ôl ×!Ñ!ÙDØð$ðm^
ôt ×ÑÙ1Øðñu^
ð ^	
r5   c                ó  — |xs | }t        j                  «       j                  |¬«      rt        j                  «       S t         j                  j	                  |¬«      rt        j                  «       S t        j
                  «       S )aŒ  Get Azure config based on model type.

        When *base_model* is provided (e.g. ``"azure/gpt-5.2"``), it is used
        for model-type detection instead of *model* (the deployment name).
        This allows non-standard deployment names like ``"azure/foo"`` to be
        routed through the correct config when the user specifies the true
        underlying model via ``base_model``.
        rì  )rp   rð  rñ  rò  ró  rš  )rž  r’  Údetection_models      r3   Ú_get_azure_configz'ProviderConfigManager._get_azure_configê  sl   € ð ",Ò!4¨uˆÜ×&Ñ&Ó(×:Ñ:ÀÐ:ÔQÜ×.Ñ.Ó0Ð0Ü×(Ñ(×=Ñ=ÀOÐ=ÔTÜ×0Ñ0Ó2Ð2Ü×(Ñ(Ó*Ð*r5   c                ó0   — ddl m} |j                  | «      S )z(Get Azure AI config based on model type.r   ©ÚAzureFoundryModelInfo)Ú"litellm.llms.azure_ai.common_utilsrx	  Úget_azure_ai_config_for_model)rž  rx	  s     r3   r_  z*ProviderConfigManager._get_azure_ai_configû  s   € õ 	Mà$×BÑBÀ5ÓIÐIr5   c                ót  — d| v rt        j                  «       S d| v rt        j                  «       S d| v rddlm}  |«       S | t         j
                  v r,d| v rt        j                  «       S t        j                  «       S | t         j                  v rt        j                  «       S t        j                  «       S )z)Get Vertex AI config based on model type.r—  Úclaudezgpt-ossr   )ÚVertexAIGPTOSSTransformationr’  )rp   rÄ  rÆ  ÚFlitellm.llms.vertex_ai.vertex_ai_partner_models.gpt_oss.transformationr}	  rÈ  rÉ  rÊ  rË  rÌ  rÍ  )rž  r}	  s     r3   ra  z+ProviderConfigManager._get_vertex_ai_config   sª   € ð �uÑÜ×-Ñ-Ó/Ð/Ø˜ÑÜ×2Ñ2Ó4Ð4Ø˜%Ñõñ 0Ó1Ð1Ø”g×3Ñ3Ñ3Ø˜eÑ#Ü×<Ñ<Ó>Ð>Ü×(Ñ(Ó*Ð*Ø”g×3Ñ3Ñ3Ü×-Ñ-Ó/Ð/ä×/Ñ/Ó1Ð1r5   c                ó    — ddl m}  || ¬«      S )z"Get Bedrock config based on model.r   )Úget_bedrock_chat_configrì  )r±  r€	  )rž  r€	  s     r3   rc  z)ProviderConfigManager._get_bedrock_config   s   € õ 	Ná&¨UÔ3Ð3r5   c                ó    — t         j                  } |j                  | «      }|dk(  rt        j                  «       S t        j
                  «       S )z!Get Cohere config based on route.Úv2)rö  rí   Úget_cohere_routerp   ÚCohereV2ChatConfigr»  )rž  rí   Úroutes      r3   rf  z(ProviderConfigManager._get_cohere_config   sF   € ô "/×!>Ñ!>ˆØ7�×7Ñ7¸Ó>ˆØ�DŠ=Ü×-Ñ-Ó/Ð/Ü×'Ñ'Ó)Ð)r5   c                 ó   — ddl m}   | «       S )zGet LangGraph config.r   ©ÚLangGraphConfig)Ú*litellm.llms.langgraph.chat.transformationrˆ	  r‡	  s    r3   r	  z+ProviderConfigManager._get_langgraph_config(   s   € õ 	OáÓ Ð r5   c                 ó   — ddl m}   | «       S )zGet LangFlow config.r   ©ÚLangFlowConfig)Ú)litellm.llms.langflow.chat.transformationrŒ	  r‹	  s    r3   r	  z*ProviderConfigManager._get_langflow_config/   s   € õ 	MáÓÐr5   c                óâ  — |t         j                  k(  rdt        j                  j	                  | ¬«      rt        j                  S t        j
                  j                  | ¬«      rt        j
                  «       S |t         j                  k(  rt        j                  | |¬«      S t        j                  €t        j                  «       t        _
        t        j                  j                  |«      }|�|\  }}|r || «      S  |«       S ddlm} ddlm} |j#                  |j$                  «      rC|j                  |j$                  «      }|€t'        d|j$                  › d�«      ‚  ||«      «       S y)	al  
        Returns the provider config for a given provider.

        Uses O(1) dictionary lookup for fast provider resolution.
        Python classes take priority over JSON (they have custom overrides).

        For Azure, *base_model* (when set) drives model-type detection so that
        non-standard deployment names still route to the correct config.
        rì  )rž  r’  Nr   )Úcreate_config_class©ÚJSONProviderRegistryz	Provider z
 not found)rˆ   rš  rp   ÚopenaiOSeriesConfigÚis_model_o_series_modelÚOpenAIGPT5Configró  rœ  rø  ru	  rW  rr	  rw  Ú'litellm.llms.openai_like.dynamic_configr�	  Ú$litellm.llms.openai_like.json_loaderr‘	  ÚexistsrŽ  rU  )	rž  rF  r’  Úconfig_entryÚconfig_factoryÚneeds_modelr�	  r‘	  r   s	            r3   rf  z.ProviderConfigManager.get_provider_chat_config6   sC  € ð  ”|×*Ñ*Ò*Ü×*Ñ*×BÑBÈÐBÔOÜ×2Ñ2Ð2Ü×'Ñ'×<Ñ<À5Ð<ÔIÜ×/Ñ/Ó1Ð1ð ”|×)Ñ)Ò)Ü(×:Ñ:ÀÐS]Ð:Ó^Ð^ô !×5Ñ5Ð=Ü9N×9iÑ9iÓ9kÔ!Ô6ô 4×HÑH×LÑLÈXÓVˆØÐ#Ø*6Ñ'ˆN˜KÙÙ% eÓ,Ð,á%Ó'Ð'õ 	PÝMà×&Ñ& x§~¡~Ô6Ø%9×%=Ñ%=¸h¿n¹nÓ%MˆOØÐ&Ü  9¨X¯^©^Ð,<¸JÐ!GÓHÐHØ7Ñ& Ó7Ó9Ð9àr5   c                ó,	  — t         j                  j                  |k(  r3t         j                  j	                  | «      rt        j                  «       S t         j                  j                  |k(  r3t         j
                  j                  | «      rt        j
                  «       S t         j                  j                  |k(  rt        j                  «       S t         j                  j                  |k(  rt        j                  «       S t         j                  j                  |k(  rt        j                  «       S t         j                  j                  |k(  rt        j                  «       S t         j                  j                  |k(  rt        j                  «       S t         j                  j                   |k(  rt        j"                  «       S t         j                  j$                  |k(  rddlm}  |«       S t         j                  j*                  |k(  st         j                  j,                  |k(  rddlm}  |«       S t         j                  j2                  |k(  rddlm}  |«       S t         j                  j8                  |k(  rddlm}  |«       S t         j                  j>                  |k(  rddl m!}  |«       S t         j                  jD                  |k(  rt        jF                  «       S t         j                  jH                  |k(  rt        jJ                  «       S t         j                  jL                  |k(  rt        jN                  «       S t         j                  jP                  |k(  rt        jR                  «       S t         j                  jT                  |k(  rddl+m,}  |«       S t         j                  jZ                  |k(  rddl.m/}  |«       S t         j                  j`                  |k(  rt        jb                  «       S t         j                  jd                  |k(  rt        jf                  «       S t         j                  jh                  |k(  rdd	l5m6}	 |	jo                  | «      S t         j                  jp                  |k(  rt        jr                  «       S y )
Nr   )ÚOCIEmbedConfig)ÚCohereEmbeddingConfig)rD  )ÚVolcEngineEmbeddingConfig)ÚDashScopeEmbeddingConfig)ÚOpenrouterEmbeddingConfig)ÚVercelAIGatewayEmbeddingConfig)ÚSagemakerEmbeddingConfig):rp   rˆ   ÚVOYAGErE  rF  rG  rH  rI  r[	  r>  r.	  ÚIBMWatsonXEmbeddingConfigr]	  rJ  ÚINFINITYrK  rW	  rM  rk	  Ú%litellm.llms.oci.embed.transformationrœ	  r	  r	  Ú(litellm.llms.cohere.embed.transformationr�	  ÚJINA_AIÚ-litellm.llms.jina_ai.embedding.transformationrD  rT	  Ú0litellm.llms.volcengine.embedding.transformationrž	  ra	  Ú+litellm.llms.dashscope.embed.transformationrŸ	  rm	  rN  r%	  ÚSnowflakeEmbeddingConfigrD	  ÚCometAPIEmbeddingConfigr4	  ÚGithubCopilotEmbeddingConfigrB	  Ú0litellm.llms.openrouter.embedding.transformationr 	  rC	  Ú7litellm.llms.vercel_ai_gateway.embedding.transformationr¡	  r6	  ÚGigaChatEmbeddingConfigr<	  ÚHostedVLLMEmbeddingConfigr,	  Ú/litellm.llms.sagemaker.embedding.transformationr¢	  Úget_model_configrN	  ÚPerplexityEmbeddingConfig)
rž  rF  rœ	  r�	  rD  rž	  rŸ	  r 	  r¡	  r¢	  s
             r3   r=  z3ProviderConfigManager.get_provider_embedding_configi   sr  € ô × Ñ ×'Ñ'¨8Ò3Ü×7Ñ7×TÑTÐUZÔ[ä×:Ñ:Ó<Ð<ä× Ñ ×'Ñ'¨8Ò3Ü×7Ñ7×PÑPÐQVÔWä×:Ñ:Ó<Ð<Ü×!Ñ!×(Ñ(¨HÒ4Ü×0Ñ0Ó2Ð2Ü×!Ñ!×(Ñ(¨HÒ4Ü×0Ñ0Ó2Ð2Ü×!Ñ!×)Ñ)¨XÒ5Ü×4Ñ4Ó6Ð6Ü×!Ñ!×7Ñ7¸8ÒCÜ×2Ñ2Ó4Ð4Ü×!Ñ!×*Ñ*¨hÒ6Ü×2Ñ2Ó4Ð4Ü×!Ñ!×+Ñ+¨xÒ7Ü×3Ñ3Ó5Ð5Ü×!Ñ!×%Ñ%¨Ò1ÝLá!Ó#Ð#Ü×!Ñ!×(Ñ(¨HÒ4¼×8LÑ8L×8XÑ8XÐ\dÒ8dÝVá(Ó*Ð*Ü×!Ñ!×)Ñ)¨XÒ5õñ )Ó*Ð*Ü×!Ñ!×,Ñ,°Ò8õñ -Ó.Ð.Ü×!Ñ!×+Ñ+¨xÒ7õñ ,Ó-Ð-Ü×!Ñ!×*Ñ*¨hÒ6Ü×2Ñ2Ó4Ð4Ü×!Ñ!×+Ñ+¨xÒ7Ü×3Ñ3Ó5Ð5Ü×!Ñ!×*Ñ*¨hÒ6Ü×2Ñ2Ó4Ð4Ü×!Ñ!×0Ñ0°HÒ<Ü×7Ñ7Ó9Ð9Ü×!Ñ!×,Ñ,°Ò8õñ -Ó.Ð.Ü×!Ñ!×3Ñ3°xÒ?õñ 2Ó3Ð3Ü×!Ñ!×*Ñ*¨hÒ6Ü×2Ñ2Ó4Ð4Ü×!Ñ!×-Ñ-°Ò9Ü×4Ñ4Ó6Ð6Ü×!Ñ!×+Ñ+¨xÒ7õð ,×<Ñ<¸UÓCÐCÜ×!Ñ!×,Ñ,°Ò8Ü×4Ñ4Ó6Ð6Ør5   c                ó„  — t         j                  j                  |k(  st         j                  j                  |k(  r4t	        ||«      rt        j
                  «       S t        j                  «       S t         j                  j                  |k(  rt        j                  «       S t         j                  j                  |k(  rt        j                  «       S t         j                  j                  |k(  rt        j                  «       S t         j                  j                  |k(  rt        j                  «       S t         j                  j                  |k(  rt        j                   «       S t         j                  j"                  |k(  rt        j$                  «       S t         j                  j&                  |k(  rddlm}  || «      S t         j                  j,                  |k(  rt        j.                  «       S t         j                  j0                  |k(  rt        j2                  «       S t         j                  j4                  |k(  rt        j6                  «       S t         j                  j8                  |k(  rt        j:                  «       S t         j                  j<                  |k(  rddlm }  |«       S t        j
                  «       S )Nr   )Úget_nvidia_nim_rerank_config)ÚDashScopeRerankConfig)!rp   rˆ   r	  r	  Úshould_use_cohere_v1_clientÚCohereRerankConfigÚCohereRerankV2Configr	  ÚAzureAIRerankConfigr¥	  ÚInfinityRerankConfigr¨	  ÚJinaAIRerankConfigr<	  ÚHostedVLLMRerankConfigr@	  ÚHuggingFaceRerankConfigrM	  ÚDeepinfraRerankConfigrQ	  Ú+litellm.llms.nvidia_nim.rerank.common_utilsr·	  r	  ÚVertexAIRerankConfigr;  ÚFireworksAIRerankConfigr£	  ÚVoyageRerankConfigr.	  ÚIBMWatsonXRerankConfigra	  Ú,litellm.llms.dashscope.rerank.transformationr¸	  )rž  rF  rï  Úpresent_version_paramsr·	  r¸	  s         r3   Úget_provider_rerank_configz0ProviderConfigManager.get_provider_rerank_configÀ   s  € ô ×Ñ×&Ñ&¨(Ò2´g×6JÑ6J×6VÑ6VÐZbÒ6bÜ*¨8Ð5KÔLÜ×1Ñ1Ó3Ð3ä×3Ñ3Ó5Ð5Ü×!Ñ!×*Ñ*¨hÒ6Ü×.Ñ.Ó0Ð0Ü×!Ñ!×*Ñ*¨hÒ6Ü×/Ñ/Ó1Ð1Ü×!Ñ!×)Ñ)¨XÒ5Ü×-Ñ-Ó/Ð/Ü×!Ñ!×-Ñ-°Ò9Ü×1Ñ1Ó3Ð3Ü×!Ñ!×-Ñ-°Ò9Ü×2Ñ2Ó4Ð4Ü×!Ñ!×+Ñ+¨xÒ7Ü×0Ñ0Ó2Ð2Ü×!Ñ!×,Ñ,°Ò8õñ 0°Ó6Ð6Ü×!Ñ!×+Ñ+¨xÒ7Ü×/Ñ/Ó1Ð1Ü×!Ñ!×.Ñ.°(Ò:Ü×2Ñ2Ó4Ð4Ü×!Ñ!×(Ñ(¨HÒ4Ü×-Ñ-Ó/Ð/Ü×!Ñ!×)Ñ)¨XÒ5Ü×1Ñ1Ó3Ð3Ü×!Ñ!×+Ñ+¨xÒ7õñ )Ó*Ð*Ü×)Ñ)Ó+Ð+r5   c                ó0   — t         j                  | |¬«      S )Nrð  )rø  Ú._get_provider_anthropic_messages_config_cachedrð  s     r3   Ú&get_provider_anthropic_messages_configz<ProviderConfigManager.get_provider_anthropic_messages_configî   s   € ô
 %×SÑSÐZ_ÐjrÐSÓsÐsr5   r6   c                ó~  — | j                  «       }t        j                  j                  |k(  rt        j                  «       S t        j                  j
                  |k(  rddlm}  |j                  | «      S t        j                  j                  |k(  rd|v rçddl
m}  |«       S t        j                  j                  |k(  rd|v r¹ddlm}  |«       S t        j                  j                  |k(  rddlm}  |«       S t        j                  j$                  |k(  rddlm}  |«       S t        j                  j*                  |k(  rddlm}  |«       S t        j                  j0                  |k(  rd|v rdd	lm}	  |	«       S dd
lm}
 |
j;                  |j<                  «      }|�d|j>                  v rddl m!}  ||«      S y )Nr   rå   r|	  )Ú,VertexAIPartnerModelsAnthropicMessagesConfig)ÚAzureAnthropicMessagesConfig)ÚMinimaxMessagesConfig)ÚDeepSeekAnthropicMessagesConfig)ÚTencentAnthropicMessagesConfig)Ú$GithubCopilotAnthropicMessagesConfigr�	  z/v1/messages)Ú#JSONProviderAnthropicMessagesConfig)"rœ  rp   rˆ   r›  ÚAnthropicMessagesConfigr	  r±  ræ   Ú,get_bedrock_provider_config_for_messages_apir	  Úblitellm.llms.vertex_ai.vertex_ai_partner_models.anthropic.experimental_pass_through.transformationrÎ	  r	  Ú7litellm.llms.azure_ai.anthropic.messages_transformationrÏ	  r1	  Ú,litellm.llms.minimax.messages.transformationrÐ	  r	  Ú-litellm.llms.deepseek.messages.transformationrÑ	  r	  Ú,litellm.llms.tencent.messages.transformationrÒ	  r4	  Ú3litellm.llms.github_copilot.messages.transformationrÓ	  r–	  r‘	  rw  rŽ  r6  Ú0litellm.llms.openai_like.messages.transformationrÔ	  )rž  rF  Úmodel_lowerræ   rÎ	  rÏ	  rÐ	  rÑ	  rÒ	  rÓ	  r‘	  Újson_providerrÔ	  s                r3   rË	  zDProviderConfigManager._get_provider_anthropic_messages_config_cachedõ   s�  € ð #Ÿ[™[›]ˆÜ×Ñ×)Ñ)¨XÒ5Ü×2Ñ2Ó4Ð4ô ×!Ñ!×)Ñ)¨XÒ5ÝJàPÐ#×PÑPÐQVÓWÐWÜ×!Ñ!×+Ñ+¨xÒ7Ø˜;Ñ&õñ DÓEÐEÜ×!Ñ!×*Ñ*¨hÒ6Ø˜;Ñ&õñ 4Ó5Ð5Ü×!Ñ!×)Ñ)¨XÒ5õñ )Ó*Ð*Ü×!Ñ!×*Ñ*¨hÒ6õñ 3Ó4Ð4Ü×!Ñ!×)Ñ)¨XÒ5õñ 2Ó3Ð3Ü×!Ñ!×0Ñ0°HÒ<Ø˜;Ñ&õñ <Ó=Ð=åMà3×7Ñ7¸¿¹ÓGˆØÐ$¨¸=×;\Ñ;\Ñ)\õñ 7°}ÓEÐEØr5   c                ó<  — t        | |¬«      }t        j                  j                  |k(  r!|j	                  d«      dk(  rddlm}  |«       S t        j                  j                  |k(  rt        j                  «       S t        j                  j                  |k(  rddl
m}  |«       S t        j                  j                  |k(  r,d| v rt        j                  «       S t        j                  «       S t        j                  j                  |k(  rddlm}  |«       S t        j                  j$                  |k(  rdd	lm}  |«       S t        j                  j*                  |k(  rdd
lm}  |«       S t        j                  j0                  |k(  rddlm}  |«       S t        j                  j6                  |k(  rddlm}	  |	«       S t        j                  j<                  |k(  rddlm }
  |
«       S t        j                  jB                  |k(  rddl"m#}  |«       S t        j                  jH                  |k(  r@| jK                  d«      }|jM                  d«      rd|v rddl'm(}  |«       S ddl)m*}  |«       S t        j                  jV                  |k(  rddl,m-}  |«       S y )Nrð  Úaudio_transcription_configÚazure_speechr   )Ú#AzureSpeechAudioTranscriptionConfig)Ú"ElevenLabsAudioTranscriptionConfigzgpt-4o)Ú"HostedVLLMAudioTranscriptionConfig)Ú"IBMWatsonXAudioTranscriptionConfig)Ú OVHCloudAudioTranscriptionConfig)Ú ScalewayAudioTranscriptionConfig)ÚMistralAudioTranscriptionConfig)Ú"NvidiaRivaAudioTranscriptionConfig)ÚSonioxAudioTranscriptionConfigz
vertex_ai/r—  Ú
transcribe)Ú$VertexGeminiAudioTranscriptionConfig)Ú VertexAIAudioTranscriptionConfig)ÚGeminiAudioTranscriptionConfig).rU  rp   rˆ   rœ  rw  Ú5litellm.llms.azure.audio_transcription.transformationrã	  ÚDEEPGRAMÚ DeepgramAudioTranscriptionConfigÚ
ELEVENLABSÚ:litellm.llms.elevenlabs.audio_transcription.transformationrä	  rš  Ú!OpenAIGPTAudioTranscriptionConfigÚ%OpenAIWhisperAudioTranscriptionConfigr<	  Ú6litellm.llms.hosted_vllm.transcriptions.transformationrå	  r.	  Ú7litellm.llms.watsonx.audio_transcription.transformationræ	  rm	  Ú8litellm.llms.ovhcloud.audio_transcription.transformationrç	  ÚSCALEWAYÚ8litellm.llms.scaleway.audio_transcription.transformationrè	  rO	  Ú7litellm.llms.mistral.audio_transcription.transformationré	  ÚNVIDIA_RIVAÚ;litellm.llms.nvidia_riva.audio_transcription.transformationrê	  ÚSONIOXÚ6litellm.llms.soniox.audio_transcription.transformationrë	  r	  rO  r‹  ÚKlitellm.llms.vertex_ai.audio_transcription.gemini_transcribe_transformationrí	  Ú9litellm.llms.vertex_ai.audio_transcription.transformationrî	  rF	  Ú6litellm.llms.gemini.audio_transcription.transformationrï	  )rž  rF  Úmodel_cost_entryrã	  rä	  rå	  ræ	  rç	  rè	  ré	  rê	  rë	  Úbare_vertex_modelrí	  rî	  rï	  s                   r3   rù  z=ProviderConfigManager.get_provider_audio_transcription_config7!  sO  € ô
 #LØØô#
Ðô
 × Ñ ×&Ñ&¨(Ò2Ø ×$Ñ$Ð%AÓBÀnÒTõñ 7Ó8Ð8Ü×!Ñ!×*Ñ*¨hÒ6Ü×;Ñ;Ó=Ð=Ü×!Ñ!×,Ñ,°Ò8õñ 6Ó7Ð7Ü×!Ñ!×(Ñ(¨HÒ4Ø˜5Ñ Ü×@Ñ@ÓBÐBä×DÑDÓFÐFÜ×!Ñ!×-Ñ-°Ò9õñ 6Ó7Ð7Ü×!Ñ!×)Ñ)¨XÒ5õñ 6Ó7Ð7Ü×!Ñ!×*Ñ*¨hÒ6õñ 4Ó5Ð5Ü×!Ñ!×*Ñ*¨hÒ6õñ 4Ó5Ð5Ü×!Ñ!×)Ñ)¨XÒ5õñ 3Ó4Ð4Ü×!Ñ!×-Ñ-°Ò9õñ 6Ó7Ð7Ü×!Ñ!×(Ñ(¨HÒ4õñ 2Ó3Ð3Ü×!Ñ!×+Ñ+¨xÒ7Ø',×'9Ñ'9¸,Ó'GÐØ ×+Ñ+¨HÔ5¸,ÐJ[Ñ:[õñ <Ó=Ð=õñ 4Ó5Ð5Ü×!Ñ!×(Ñ(¨HÒ4õñ 2Ó3Ð3Ør5   c                ó‚  — ddl m} ddlm} t	        | t
        «      r| j                  n
t        | «      }d }t	        | t
        «      r| }n	 t        | «      }t        j                  ||«      }|�|S |j                  |«      r1|j                  |«      r |j                  |«      }|�  ||«      «       S y # t        $ r Y Œhw xY w)Nr   )Úcreate_responses_config_classr�	  )r•	  r
  r–	  r‘	  r}  rˆ   rŽ  r°  rU  rø  Ú _get_python_responses_api_configr—	  Úsupports_responses_apirw  )rF  rž  r
  r‘	  Úprovider_strÚprovider_enumrÇ  r   s           r3   Ú!get_provider_responses_api_configz7ProviderConfigManager.get_provider_responses_api_config•!  sÌ   € õ
	
õ 	Nô 1;¸8Ä\Ô0R˜hŸnšnÔX[Ð\dÓXeˆð .2ˆÜ�h¤Ô-Ø$‰MðÜ ,¨XÓ 6�ô
 .×NÑNÈ}Ð^cÓdˆØÐØˆMð  ×&Ñ& |Ô4Ð9M×9dÑ9dÐeqÔ9rØ%9×%=Ñ%=¸lÓ%KˆOØÐ*ØEÑ4°_ÓEÓGÐGàøô ò Ùðús   Á
B2 Â2	B>Â=B>c                ór  — | €yt         j                  j                  | k(  rt        j                  «       S t         j                  j                  | k(  rh|xr d|j                  «       v }|xr$ d|j                  «       v xs t        |«      xr | }|rt        j                  «       S t        j                  «       S t         j                  j                  | k(  rt        j                  «       S t         j                  j                  | k(  r&ddlm} |�	 ||¬«      rt        j                  «       S yt         j                  j                  | k(  rt        j                   «       S t         j                  j"                  | k(  rt        j$                  «       S t         j                  j&                  | k(  rt        j(                  «       S t         j                  j*                  | k(  rt        j,                  «       S t         j                  j.                  | k(  rt        j0                  «       S t         j                  j2                  | k(  r)|r&d|j                  «       v rt        j4                  «       S yt         j                  j6                  | k(  rt        j8                  «       S t         j                  j:                  | k(  rt        j<                  «       S t         j                  j>                  | k(  rPddl m!}m"} |r ||t         jF                  «      syt        jH                   ||t         jF                  «      dk(  ¬	«      S y)
zFCheck for Python-class-based responses API configs (custom overrides).Nrz  Úo_seriesr   )Ú%github_copilot_supports_responses_apirì  )Úmantle_base_segmentÚmantle_supports_responsesz	openai/v1)Úuse_openai_path)%rp   rˆ   rš  ÚOpenAIResponsesAPIConfigrœ  rœ  ro  Ú$AzureOpenAIOSeriesResponsesAPIConfigÚAzureOpenAIResponsesAPIConfigr	  ÚXAIResponsesAPIConfigr4	  Ú4litellm.llms.github_copilot.responses.transformationr
  ÚGithubCopilotResponsesAPIConfigr5	  ÚChatGPTResponsesAPIConfigrg	  ÚLiteLLMProxyResponsesAPIConfigrT	  ÚVolcEngineResponsesAPIConfigÚMANUSÚManusResponsesAPIConfigrN	  ÚPerplexityResponsesConfigr>  ÚDatabricksResponsesAPIConfigrB	  ÚOpenRouterResponsesAPIConfigr<	  ÚHostedVLLMResponsesAPIConfigr	  Ú(litellm.llms.bedrock_mantle.common_utilsr
  r
  rQ  ÚBedrockMantleResponsesAPIConfig)rF  rž  Úis_gpt_modelÚis_o_seriesr
  r
  r
  s          r3   r
  z6ProviderConfigManager._get_python_responses_api_configº!  s�  € ð ÐØä×Ñ×&Ñ&¨(Ò2Ü×3Ñ3Ó5Ð5Ü×!Ñ!×'Ñ'¨8Ò3ð #(Ò"B¨E°U·[±[³]Ð,BˆLØÒu Z°5·;±;³=Ð%@Ò%tÔEWÐX]ÓE^ÒEsÐgsÐcsˆKáÜ×CÑCÓEÐEä×<Ñ<Ó>Ð>Ü×!Ñ!×%Ñ%¨Ò1Ü×0Ñ0Ó2Ð2Ü×!Ñ!×0Ñ0°HÒ<õð ˆ}Ñ EÈEÕ RÜ×>Ñ>Ó@Ð@ØÜ×!Ñ!×)Ñ)¨XÒ5Ü×4Ñ4Ó6Ð6Ü×!Ñ!×/Ñ/°8Ò;Ü×9Ñ9Ó;Ð;Ü×!Ñ!×,Ñ,°Ò8Ü×7Ñ7Ó9Ð9Ü×!Ñ!×'Ñ'¨8Ò3Ü×2Ñ2Ó4Ð4Ü×!Ñ!×,Ñ,°Ò8Ü×4Ñ4Ó6Ð6Ü×!Ñ!×,Ñ,°Ò8á˜ %§+¡+£-Ñ/Ü×;Ñ;Ó=Ð=ØÜ×!Ñ!×,Ñ,°Ò8Ü×7Ñ7Ó9Ð9Ü×!Ñ!×-Ñ-°Ò9Ü×7Ñ7Ó9Ð9Ü×!Ñ!×0Ñ0°HÒ<÷ñ
 Ñ 9¸%Ä×ASÑASÔ TØÜ×:Ñ:Ù 3°E¼7×;MÑ;MÓ NÐR]Ñ ]ôð ð r5   c                óf   — t         j                  j                  | k(  rt        j                  «       S y)zÀ
        Get provider-specific Skills API configuration

        Args:
            provider: The LLM provider

        Returns:
            Provider-specific Skills API config or None
        N)rp   rˆ   r›  ÚAnthropicSkillsConfig)rF  s    r3   Úget_provider_skills_api_configz4ProviderConfigManager.get_provider_skills_api_config"  s*   € ô ×Ñ×)Ñ)¨XÒ5Ü×0Ñ0Ó2Ð2Ør5   c                óX   — t         j                  j                  | k(  rddlm}  |«       S y)z¾
        Get provider-specific Evals API configuration

        Args:
            provider: The LLM provider

        Returns:
            Provider-specific Evals API config or None
        r   )ÚOpenAIEvalsConfigN)rp   rˆ   rš  Ú(litellm.llms.openai.evals.transformationr*
  )rF  r*
  s     r3   Úget_provider_evals_api_configz3ProviderConfigManager.get_provider_evals_api_config"  s'   € ô ×Ñ×&Ñ&¨(Ò2ÝRá$Ó&Ð&Ør5   c                ó  — t         j                  |k(  rt        j                  «       S t         j                  |k(  rt        j
                  «       S t         j                  |k(  rt        j                  «       S t        j                  «       S r;   )	rˆ   r;  rp   ÚFireworksAITextCompletionConfigrA	  ÚTogetherAITextCompletionConfigrV	  rÝ  r…  rð  s     r3   Ú#get_provider_text_completion_configz9ProviderConfigManager.get_provider_text_completion_config'"  sj   € ô
 ×$Ñ$¨Ò0Ü×:Ñ:Ó<Ð<Ü×%Ñ%¨Ò1Ü×9Ñ9Ó;Ð;Ü×3Ñ3°xÒ?Ü×8Ñ8Ó:Ð:Ü×1Ñ1Ó3Ð3r5   c                óR  — t         j                  |k(  rt        j                  «       S t         j                  |k(  rt        j
                  «       S t         j                  |k(  rt        j                  «       S t         j                  |k(  rddl	m
}  |«       S t         j                  |k(  rt        j                  «       S t         j                  |k(  rt        j                  «       S t         j                  |k(  rt        j                   «       S t         j"                  |k(  rt        j$                  «       S t         j&                  |k(  st         j(                  |k(  rddlm}  |«       S t         j.                  |k(  st         j0                  |k(  rddlm}  |«       S t         j6                  |k(  rt        j8                  «       S t         j:                  |k(  rt        j<                  «       S t         j>                  |k(  rddl m!}  |«       S t         jD                  |k(  rddl#m$}  || ¬«      S y )Nr   )ÚVertexAIModelInfo)ÚOllamaModelInfo)ÚVLLMModelInforå   rw	  rì  )%rˆ   r;  rp   rã  rš  rZ  rF	  ÚGeminiModelInfor	  Ú#litellm.llms.vertex_ai.common_utilsr2
  rg	  rÿ  ÚTOPAZÚTopazModelInfor›  ÚAnthropicModelInfor	  ÚXAIModelInforZ	  rL	  Ú litellm.llms.ollama.common_utilsr3
  rY	  r<	  Úlitellm.llms.vllm.common_utilsr4
  ÚLEMONADEÚLemonadeChatConfigr&	  r‰  r	  r±  ræ   r	  ry	  rx	  )rž  rF  r2
  r3
  r4
  ræ   rx	  s          r3   rì  z-ProviderConfigManager.get_provider_model_info4"  s­  € ô
 ×$Ñ$¨Ò0Ü×,Ñ,Ó.Ð.Ü× Ñ  HÒ,Ü×*Ñ*Ó,Ð,Ü× Ñ  HÒ,Ü×*Ñ*Ó,Ð,Ü×#Ñ# xÒ/ÝMá$Ó&Ð&Ü×'Ñ'¨8Ò3Ü×1Ñ1Ó3Ð3Ü×Ñ 8Ò+Ü×)Ñ)Ó+Ð+Ü×#Ñ# xÒ/Ü×-Ñ-Ó/Ð/Ü×Ñ Ò)Ü×'Ñ'Ó)Ð)Ü× Ñ  HÒ,´×0HÑ0HÈHÒ0TåHá"Ó$Ð$Ü×Ñ (Ò*¬l×.FÑ.FÈ(Ò.Rõñ !“?Ð"Ü×"Ñ" hÒ.Ü×-Ñ-Ó/Ð/Ü×"Ñ" hÒ.Ü×)Ñ)Ó+Ð+Ü×!Ñ! XÒ-ÝJá#Ó%Ð%Ü×"Ñ" hÒ.ÝPá(¨uÔ5Ð5Ør5   c                ój  — t         j                  |k(  rddlm}  |«       S t         j                  |k(  rddlm}  |«       S t         j                  |k(  st         j                  |k(  rddl	m
}  |«       S t         j                  |k(  rddlm}  |«       S t         j                  |k(  rddlm}  |«       S y )Nr   )ÚBedrockPassthroughConfig)ÚBedrockMantlePassthroughConfig)ÚVLLMPassthroughConfig)ÚAzurePassthroughConfig)ÚWatsonxPassthroughConfig)rˆ   r	  Ú/litellm.llms.bedrock.passthrough.transformationr@
  r	  Ú6litellm.llms.bedrock_mantle.passthrough.transformationrA
  rY	  r<	  Ú,litellm.llms.vllm.passthrough.transformationrB
  rœ  Ú-litellm.llms.azure.passthrough.transformationrC
  r.	  Ú/litellm.llms.watsonx.passthrough.transformationrD
  )rž  rF  r@
  rA
  rB
  rC
  rD
  s          r3   Úget_provider_passthrough_configz5ProviderConfigManager.get_provider_passthrough_configd"  sª   € ô
 ×Ñ 8Ò+õñ ,Ó-Ð-Ü×(Ñ(¨HÒ4õñ 2Ó3Ð3Ü×Ñ (Ò*¬l×.FÑ.FÈ(Ò.Rõñ )Ó*Ð*Ü×Ñ 8Ò+õñ *Ó+Ð+Ü×!Ñ! XÒ-õñ ,Ó-Ð-Ør5   c                ó    — t         j                  |k(  rt        j                  «       S t         j                  |k(  rt        j
                  «       S y r;   )rˆ   rš  rp   ÚOpenAIImageVariationConfigr7
  ÚTopazImageVariationConfigrð  s     r3   Ú#get_provider_image_variation_configz9ProviderConfigManager.get_provider_image_variation_config‰"  sA   € ô
 ×Ñ (Ò*Ü×5Ñ5Ó7Ð7Ü×Ñ 8Ò+Ü×4Ñ4Ó6Ð6Ør5   c                óD  — t         j                  |k(  rddlm}  |«       S t         j                  |k(  rddlm}  |«       S t         j                  |k(  rddlm	}  |«       S t         j                  |k(  rddlm}  |«       S t         j                  |k(  rddlm}  |«       S y )Nr   )ÚGoogleAIStudioFilesHandler)ÚVertexAIFilesConfig)ÚBedrockFilesConfig)ÚManusFilesConfig)ÚAnthropicFilesConfig)rˆ   rF	  Ú(litellm.llms.gemini.files.transformationrP
  r	  Ú+litellm.llms.vertex_ai.files.transformationrQ
  r	  Ú)litellm.llms.bedrock.files.transformationrR
  r
  Ú'litellm.llms.manus.files.transformationrS
  r›  Ú+litellm.llms.anthropic.files.transformationrT
  )rž  rF  rP
  rQ
  rR
  rS
  rT
  s          r3   Úget_provider_files_configz/ProviderConfigManager.get_provider_files_config”"  s�   € ô
 ×Ñ (Ò*õñ .Ó/Ð/Ü×#Ñ# xÒ/ÝWá&Ó(Ð(Ü×!Ñ! XÒ-ÝTá%Ó'Ð'Ü×Ñ 8Ò+ÝPá#Ó%Ð%Ü×#Ñ# xÒ/ÝXá'Ó)Ð)Ør5   c                óD   — t         j                  |k(  rddlm}  |«       S y )Nr   )ÚBedrockBatchesConfig)rˆ   r	  Ú+litellm.llms.bedrock.batches.transformationr\
  )rž  rF  r\
  s      r3   Úget_provider_batches_configz1ProviderConfigManager.get_provider_batches_config±"  s!   € ô
 ×Ñ 8Ò+ÝXá'Ó)Ð)Ør5   c                óV   — ddl m} t        j                  | k(  r|j	                  «       S y )Nr   )ÚBedrockVectorStore)ÚClitellm.integrations.vector_store_integrations.bedrock_vector_storer`
  rˆ   r	  Úget_initialized_custom_logger)rF  r`
  s     r3   Ú get_provider_vector_store_configz6ProviderConfigManager.get_provider_vector_store_config¼"  s)   € õ	
ô ×Ñ 8Ò+Ø%×CÑCÓEÐEØr5   c                óÔ  — t         j                  j                  | k(  rddlm}  |«       S t         j                  j
                  | k(  rddlm}  |«       S t         j                  j                  | k(  r'|dk(  s|€ddl	m
}  |«       S |dk(  rddlm}  |«       S yt         j                  j                  | k(  rdd	lm}  |«       S t         j                  j                   | k(  rdd
lm}  |«       S t         j                  j&                  | k(  rddlm}  |«       S t         j                  j,                  | k(  rddlm}	  |	«       S t         j                  j2                  | k(  rddlm}
  |
«       S t         j                  j8                  | k(  rddlm}  |«       S t         j                  j>                  | k(  rddl m!}  |«       S t         j                  jD                  | k(  rddl#m$}  |«       S y)zT
        v2 vector store config, use this for new vector store integrations
        r   )ÚOpenAIVectorStoreConfig)ÚAzureOpenAIVectorStoreConfigÚrag_apiN)ÚVertexVectorStoreConfigÚ
search_api)Ú VertexSearchAPIVectorStoreConfig)ÚBedrockVectorStoreConfig)ÚPGVectorStoreConfig)ÚAzureAIVectorStoreConfig)ÚMilvusVectorStoreConfig)ÚGeminiVectorStoreConfig)ÚRAGFlowVectorStoreConfig)ÚS3VectorsVectorStoreConfig)ÚValkeyVectorStoreConfig)%rp   rˆ   rš  Ú0litellm.llms.openai.vector_stores.transformationre
  rœ  Ú/litellm.llms.azure.vector_stores.transformationrf
  r	  Ú;litellm.llms.vertex_ai.vector_stores.rag_api.transformationrh
  Ú>litellm.llms.vertex_ai.vector_stores.search_api.transformationrj
  r	  Ú1litellm.llms.bedrock.vector_stores.transformationrk
  Ú	PG_VECTORÚ3litellm.llms.pg_vector.vector_stores.transformationrl
  r	  Ú2litellm.llms.azure_ai.vector_stores.transformationrm
  ÚMILVUSÚ0litellm.llms.milvus.vector_stores.transformationrn
  rF	  Ú0litellm.llms.gemini.vector_stores.transformationro
  r7	  Ú1litellm.llms.ragflow.vector_stores.transformationrp
  Ú
S3_VECTORSÚ4litellm.llms.s3_vectors.vector_stores.transformationrq
  ÚVALKEYÚ0litellm.llms.valkey.vector_stores.transformationrr
  )rF  Úapi_typere
  rf
  rh
  rj
  rk
  rl
  rm
  rn
  ro
  rp
  rq
  rr
  s                 r3   Ú!get_provider_vector_stores_configz7ProviderConfigManager.get_provider_vector_stores_configÈ"  sÁ  € ô ×Ñ×&Ñ&¨(Ò2õñ +Ó,Ð,Ü×!Ñ!×'Ñ'¨8Ò3õñ 0Ó1Ð1Ü×!Ñ!×+Ñ+¨xÒ7Ø˜9Ò$¨Ð(8õñ /Ó0Ð0Ø˜\Ò)õñ 8Ó9Ð9ðb ôa ×!Ñ!×)Ñ)¨XÒ5õñ ,Ó-Ð-Ü×!Ñ!×+Ñ+¨xÒ7õñ 'Ó(Ð(Ü×!Ñ!×*Ñ*¨hÒ6õñ ,Ó-Ð-Ü×!Ñ!×(Ñ(¨HÒ4õñ +Ó,Ð,Ü×!Ñ!×(Ñ(¨HÒ4õñ +Ó,Ð,Ü×!Ñ!×)Ñ)¨XÒ5õñ ,Ó-Ð-Ü×!Ñ!×,Ñ,°Ò8õñ .Ó/Ð/Ü×!Ñ!×(Ñ(¨HÒ4õñ +Ó,Ð,Ør5   c                óX   — t         j                  j                  | k(  rddlm}  |«       S y )Nr   )ÚOpenAIVectorStoreFilesConfig)rp   rˆ   rš  Ú5litellm.llms.openai.vector_store_files.transformationr†
  )rF  r†
  s     r3   Ú&get_provider_vector_store_files_configz<ProviderConfigManager.get_provider_vector_store_files_config#  s+   € ô ×Ñ×&Ñ&¨(Ò2õñ 0Ó1Ð1Ør5   c                ód  — t         j                  |k(  rddlm}  || «      S t         j                  |k(  rddlm}  || «      S t         j                  |k(  rddlm	}  || «      S t         j                  |k(  rddlm}  || «      S t         j                  |k(  rddlm}  || «      S t         j                   |k(  rddlm}  || «      S t         j&                  |k(  rddlm}  || «      S t         j,                  |k(  rdd	lm}	  |	| «      S t         j2                  |k(  rdd
lm}
  |
«       S t         j8                  |k(  rddlm}  || «      S t         j>                  |k(  rddl m!}  || «      S t         jD                  |k(  rddl#m$}  || «      S t         jJ                  |k(  rddl&m'}  || «      S t         jP                  |k(  rddl)m*}  || «      S t         jV                  |k(  rddl,m-}  || «      S t         j\                  |k(  rddl/m0}  || «      S t         jb                  |k(  rddl2m3}  || «      S y )Nr   )Ú"get_openai_image_generation_config)Ú!get_azure_image_generation_config)Ú$get_azure_ai_image_generation_config)Ú&get_xinference_image_generation_config)Ú#get_recraft_image_generation_config)Ú get_aiml_image_generation_config)Ú$get_cometapi_image_generation_config)Ú"get_gemini_image_generation_config)Ú!LiteLLMProxyImageGenerationConfig)Ú"get_fal_ai_image_generation_config)Ú%get_stability_image_generation_config)Ú$get_runwayml_image_generation_config)Ú-get_black_forest_labs_image_generation_config)Ú%get_vertex_ai_image_generation_config)Ú&get_openrouter_image_generation_config)Ú%get_dashscope_image_generation_config)Ú&get_modelscope_image_generation_config)4rˆ   rš  Ú$litellm.llms.openai.image_generationrŠ
  rœ  Ú#litellm.llms.azure.image_generationr‹
  r	  Ú&litellm.llms.azure_ai.image_generationrŒ
  Ú
XINFERENCEÚ(litellm.llms.xinference.image_generationr�
  ÚRECRAFTÚ%litellm.llms.recraft.image_generationrŽ
  ÚAIMLÚ"litellm.llms.aiml.image_generationr�
  rD	  Ú&litellm.llms.cometapi.image_generationr�
  rF	  Ú$litellm.llms.gemini.image_generationr‘
  rg	  Ú:litellm.llms.litellm_proxy.image_generation.transformationr’
  ÚFAL_AIÚ$litellm.llms.fal_ai.image_generationr“
  Ú	STABILITYÚ'litellm.llms.stability.image_generationr”
  ÚRUNWAYMLÚ&litellm.llms.runwayml.image_generationr•
  ÚBLACK_FOREST_LABSÚ/litellm.llms.black_forest_labs.image_generationr–
  r	  Ú'litellm.llms.vertex_ai.image_generationr—
  rB	  Ú(litellm.llms.openrouter.image_generationr˜
  ra	  Ú'litellm.llms.dashscope.image_generationr™
  rb	  Ú(litellm.llms.modelscope.image_generationrš
  )rž  rF  rŠ
  r‹
  rŒ
  r�
  rŽ
  r�
  r�
  r‘
  r’
  r“
  r”
  r•
  r–
  r—
  r˜
  r™
  rš
  s                      r3   Ú$get_provider_image_generation_configz:ProviderConfigManager.get_provider_image_generation_config'#  s&  € ô
 ×Ñ (Ò*õñ 6°eÓ<Ð<Ü×Ñ 8Ò+õñ 5°UÓ;Ð;Ü×"Ñ" hÒ.õñ 8¸Ó>Ð>Ü×$Ñ$¨Ò0õñ :¸%Ó@Ð@Ü×!Ñ! XÒ-õñ 7°uÓ=Ð=Ü×Ñ (Ò*õñ 4°EÓ:Ð:Ü×"Ñ" hÒ.õñ 8¸Ó>Ð>Ü× Ñ  HÒ,õñ 6°eÓ<Ð<Ü×'Ñ'¨8Ò3õñ 5Ó6Ð6Ü× Ñ  HÒ,õñ 6°eÓ<Ð<Ü×#Ñ# xÒ/õñ 9¸Ó?Ð?Ü×"Ñ" hÒ.õñ 8¸Ó>Ð>Ü×+Ñ+¨xÒ7õñ AÀÓGÐGÜ×#Ñ# xÒ/õñ 9¸Ó?Ð?Ü×$Ñ$¨Ò0õñ :¸%Ó@Ð@Ü×#Ñ# xÒ/õñ 9¸Ó?Ð?Ü×$Ñ$¨Ò0õñ :¸%Ó@Ð@Ør5   c                ó†  — t         j                  |k(  rddlm}  |«       S t         j                  |k(  rddlm}  |«       S t         j                  |k(  rddlm	}  |«       S t         j                  |k(  rddlm}  |«       S t         j                  |k(  rddlm}  |«       S t         j                   |k(  rddlm}  || «      S y )Nr   )ÚOpenAIVideoConfig)ÚAzureVideoConfig)ÚGeminiVideoConfig)ÚVertexAIVideoConfig)ÚRunwayMLVideoConfig)Úget_hosted_vllm_video_config)rˆ   rš  Ú)litellm.llms.openai.videos.transformationrµ
  rœ  Ú(litellm.llms.azure.videos.transformationr¶
  rF	  Ú)litellm.llms.gemini.videos.transformationr·
  r	  Ú,litellm.llms.vertex_ai.videos.transformationr¸
  r«
  Ú+litellm.llms.runwayml.videos.transformationr¹
  r<	  Úlitellm.llms.hosted_vllm.videosrº
  )rž  rF  rµ
  r¶
  r·
  r¸
  r¹
  rº
  s           r3   Úget_provider_video_configz/ProviderConfigManager.get_provider_video_config”#  s¥   € ô
 ×Ñ (Ò*ÝSá$Ó&Ð&Ü×Ñ 8Ò+ÝQá#Ó%Ð%Ü× Ñ  HÒ,ÝSá$Ó&Ð&Ü×#Ñ# xÒ/ÝXá&Ó(Ð(Ü×"Ñ" hÒ.ÝWá&Ó(Ð(Ü×%Ñ%¨Ò1ÝTá/°Ó6Ð6Ør5   c                ó¢   — t         j                  | k(  rddlm}  |«       S | t         j                  t         j
                  fv rddlm}  |«       S y )Nr   )ÚOpenAIContainerConfig)ÚAzureContainerConfig)rˆ   rš  Ú-litellm.llms.openai.containers.transformationrÃ
  rœ  rI	  Ú,litellm.llms.azure.containers.transformationrÄ
  )rF  rÃ
  rÄ
  s      r3   Úget_provider_container_configz3ProviderConfigManager.get_provider_container_config³#  sN   € ô ×Ñ (Ò*õñ )Ó*Ð*Øœ×*Ñ*¬L×,CÑ,CÐDÑDõñ (Ó)Ð)Ør5   c                óD   — t         j                  |k(  rddlm}  |«       S y )Nr   )ÚGeminiRealtimeConfig)rˆ   rF	  Ú+litellm.llms.gemini.realtime.transformationrÉ
  )rž  rF  rÉ
  s      r3   Úget_provider_realtime_configz2ProviderConfigManager.get_provider_realtime_configÅ#  s!   € ô
 ×Ñ (Ò*ÝXá'Ó)Ð)Ør5   c                ó„   — t         j                  |k(  rddlm}  |«       S t         j                  |k(  rddlm}  |«       S y)z•
        Return the HTTP transformation config for realtime HTTP endpoints
        (POST /realtime/client_secrets and POST /realtime/calls).
        r   )ÚOpenAIRealtimeHTTPConfig)ÚAzureRealtimeHTTPConfigN)rˆ   rš  Ú0litellm.llms.openai.realtime.http_transformationrÍ
  rœ  Ú/litellm.llms.azure.realtime.http_transformationrÎ
  )rž  rF  rÍ
  rÎ
  s       r3   Ú!get_provider_realtime_http_configz7ProviderConfigManager.get_provider_realtime_http_configÐ#  sC   € ô ×Ñ (Ò*õñ ,Ó-Ð-Ü×Ñ Ò)õñ +Ó,Ð,Ør5   c                óÔ  — t         j                  |k(  rddlm}  || ¬«      S t         j                  |k(  rddlm}  |«       S t         j                  |k(  rddlm	}  |«       S t         j                  |k(  rddlm}  |«       S t         j                  |k(  rddlm}  || «      S t         j                   |k(  rddlm}  || «      S t         j&                  |k(  rdd	lm}  |«       S t         j,                  |k(  rdd
lm}	  |	| «      S t         j2                  |k(  rddlm}
  |
| «      S t         j8                  |k(  rddlm}  || «      S t         j>                  |k(  rddl m!}  || «      S y )Nr   )Úget_openai_image_edit_configrì  )ÚAzureImageEditConfig)ÚRecraftImageEditConfig)ÚBlackForestLabsImageEditConfig)Úget_azure_ai_image_edit_config)Úget_gemini_image_edit_config)ÚLiteLLMProxyImageEditConfig)Úget_vertex_ai_image_edit_config)Úget_stability_image_edit_config)Ú'get_bedrock_image_edit_config_for_model)Ú get_openrouter_image_edit_config)"rˆ   rš  Úlitellm.llms.openai.image_editrÓ
  rœ  Ú,litellm.llms.azure.image_edit.transformationrÔ
  r 
  Ú.litellm.llms.recraft.image_edit.transformationrÕ
  r­
  Ú8litellm.llms.black_forest_labs.image_edit.transformationrÖ
  r	  Ú litellm.llms.azure_ai.image_editr×
  rF	  Úlitellm.llms.gemini.image_editrØ
  rg	  Ú4litellm.llms.litellm_proxy.image_edit.transformationrÙ
  r	  Ú!litellm.llms.vertex_ai.image_editrÚ
  r©
  Ú!litellm.llms.stability.image_editrÛ
  r	  ÚLlitellm.llms.bedrock.image_edit.amazon_nova_canvas_image_edit_transformationrÜ
  rB	  Ú"litellm.llms.openrouter.image_editrÝ
  )rž  rF  rÓ
  rÔ
  rÕ
  rÖ
  r×
  rØ
  rÙ
  rÚ
  rÛ
  rÜ
  rÝ
  s                r3   Úget_provider_image_edit_configz4ProviderConfigManager.get_provider_image_edit_configè#  sS  € ô
 ×Ñ (Ò*ÝSá/°eÔ<Ð<Ü×Ñ 8Ò+õñ (Ó)Ð)Ü×!Ñ! XÒ-õñ *Ó+Ð+Ü×+Ñ+¨xÒ7õñ 2Ó3Ð3Ü×"Ñ" hÒ.ÝWá1°%Ó8Ð8Ü× Ñ  HÒ,ÝSá/°Ó6Ð6Ü×'Ñ'¨8Ò3õñ /Ó0Ð0Ü×#Ñ# xÒ/õñ 3°5Ó9Ð9Ü×#Ñ# xÒ/õñ 3°5Ó9Ð9Ü×!Ñ! XÒ-õñ ;¸5ÓAÐAÜ×$Ñ$¨Ò0õñ 4°EÓ:Ð:Ør5   c                óÊ  — ddl m} |t        j                  j                  k(  rddlm}  || ¬«      S |t        j                  j                  k(  rddlm	}  || ¬«      S |t        j                  j                  k(  r!ddlm}m} | dk(  r |«       S | dk(  r |«       S y	t        j                  }t        j                  j                   |i}|j#                  |d	«      }	|	€y	 |	«       S )
z=
        Get OCR configuration for a given provider.
        r   )ÚVertexAIOCRConfig)Úget_azure_ai_ocr_configrì  )Úget_vertex_ai_ocr_config)ÚReductoParseLegacyConfigÚReductoParseV3Configzparse-v3zparse-legacyN)Ú)litellm.llms.vertex_ai.ocr.transformationrë
  rp   rˆ   r	  Ú&litellm.llms.azure_ai.ocr.common_utilsrì
  r	  Ú'litellm.llms.vertex_ai.ocr.common_utilsrí
  ÚREDUCTOÚ'litellm.llms.reducto.ocr.transformationrî
  rï
  rö  rð   rO	  rw  )
rž  rF  rë
  rì
  rí
  rî
  rï
  rð   ÚPROVIDER_TO_CONFIG_MAPr  s
             r3   Úget_provider_ocr_configz-ProviderConfigManager.get_provider_ocr_config+$  sÙ   € õ 	Pð ”w×+Ñ+×4Ñ4Ò4ÝVá*°Ô7Ð7à”w×+Ñ+×5Ñ5Ò5ÝXá+°%Ô8Ð8à”w×+Ñ+×3Ñ3Ò3÷ð
 ˜
Ò"Ù+Ó-Ð-Ø˜Ò&Ù/Ó1Ð1Øä"/×"@Ñ"@Ðä× Ñ ×(Ñ(Ð*:ð)
Ðð 5×8Ñ8¸À4ÓHˆØÐØÙ‹~Ðr5   c                óÔ  — ddl m} ddlm} ddlm} ddlm} ddlm	} ddl
m} ddlm} dd	lm} dd
lm}	 ddlm}
 ddlm} ddlm} ddlm} ddlm} ddlm} ddlm} ddl m!} ddl"m#} ddl$m%} ddl&m'} i tP        jR                  |“tP        jT                  |“tP        jV                  |“tP        jX                  |“tP        jZ                  |“tP        j\                  |
“tP        j^                  |“tP        j`                  |	“tP        jb                  |“tP        jd                  |“tP        jf                  |“tP        jh                  |“tP        jj                  |“tP        jl                  |“tP        jn                  |“tP        jp                  |“tP        jr                  |“tP        jt                  |tP        jv                  |tP        jx                  |i¥}|j{                  | d«      }|€y |«       S )z@
        Get Search configuration for a given provider.
        r   )ÚAPISerpentSearchConfig)ÚBingGroundingSearchConfig)ÚAgentCoreSearchConfig)ÚBraveSearchConfig)ÚDataForSEOSearchConfig)ÚDuckDuckGoSearchConfig)ÚExaAISearchConfig)ÚFastCRWSearchConfig)ÚFirecrawlSearchConfig)ÚGooglePSESearchConfig)ÚLinkupSearchConfig)ÚNimbleSearchConfig)ÚParallelAISearchConfig)ÚPerplexitySearchConfig)ÚSearchAPIConfig)ÚSearXNGSearchConfig)ÚSerperSearchConfig)ÚTavilySearchConfig)ÚTinyfishSearchConfig)ÚYouComSearchConfigN)>Ú-litellm.llms.apiserpent.search.transformationrø
  Ú(litellm.llms.azure.search.transformationrù
  Ú*litellm.llms.bedrock.search.transformationrú
  Ú(litellm.llms.brave.search.transformationrû
  Ú-litellm.llms.dataforseo.search.transformationrü
  Ú-litellm.llms.duckduckgo.search.transformationrý
  Ú)litellm.llms.exa_ai.search.transformationrþ
  Ú*litellm.llms.fastcrw.search.transformationrÿ
  Ú,litellm.llms.firecrawl.search.transformationr   Ú-litellm.llms.google_pse.search.transformationr  Ú)litellm.llms.linkup.search.transformationr  Ú)litellm.llms.nimble.search.transformationr  Ú.litellm.llms.parallel_ai.search.transformationr  Ú-litellm.llms.perplexity.search.transformationr  Ú,litellm.llms.searchapi.search.transformationr  Ú*litellm.llms.searxng.search.transformationr  Ú)litellm.llms.serper.search.transformationr  Ú)litellm.llms.tavily.search.transformationr	  Ú+litellm.llms.tinyfish.search.transformationr
  Ú*litellm.llms.you_com.search.transformationr  r”   rN	  ÚTAVILYÚPARALLEL_AIÚEXA_AIÚBRAVEÚ
GOOGLE_PSEÚ
DATAFORSEOÚ	FIRECRAWLÚFASTCRWÚSEARXNGÚLINKUPÚ
DUCKDUCKGOÚ	SEARCHAPIÚSERPERÚYOU_COMÚ
APISERPENTÚTINYFISHÚ	AGENTCOREÚNIMBLEÚBING_GROUNDINGrw  )rF  rø
  rù
  rú
  rû
  rü
  rý
  rþ
  rÿ
  r   r  r  r  r  r  r  r  r  r	  r
  r  rõ
  r  s                          r3   Úget_provider_search_configz0ProviderConfigManager.get_provider_search_configU$  sÞ  € õ	
õ 	WÝTÝNÝXÝXÝOÝRÝVÝWÝPÝPõ	
õ 	YÝPÝRÝPÝPÝTÝQð)
Ü×&Ñ&Ð(>ð)
ä×"Ñ"Ð$6ð)
ô ×'Ñ'Ð)?ð)
ô ×"Ñ"Ð$5ð	)
ô
 ×!Ñ!Ð#4ð)
ô ×&Ñ&Ð(=ð)
ô ×&Ñ&Ð(>ð)
ô ×%Ñ%Ð'<ð)
ô ×#Ñ#Ð%8ð)
ô ×#Ñ#Ð%8ð)
ô ×"Ñ"Ð$6ð)
ô ×&Ñ&Ð(>ð)
ô ×%Ñ% ð)
ô ×"Ñ"Ð$6ð)
ô ×#Ñ#Ð%7ð)
ô  ×&Ñ&Ð(>ð!)
ô" ×$Ñ$Ð&:ð#)
ô$ ×%Ñ%Ð'<Ü×"Ñ"Ð$6Ü×*Ñ*Ð,Eñ))
Ðð, 5×8Ñ8¸À4ÓHˆØÐØÙ‹~Ðr5   c                ó„   — ddl m} ddlm} | t        j
                  k(  r |«       S | t        j                  k(  r |«       S y)zR
        Get sandbox (code execution) configuration for a given provider.
        r   )ÚE2BSandboxConfig)ÚOpenSandboxSandboxConfigN)Ú'litellm.llms.e2b.sandbox.transformationr5  Ú/litellm.llms.opensandbox.sandbox.transformationr6  r“   ÚE2BÚOPENSANDBOX)rF  r5  r6  s      r3   Úget_provider_sandbox_configz1ProviderConfigManager.get_provider_sandbox_config�$  sB   € õ 	Mõ	
ð Ô'×+Ñ+Ò+Ù#Ó%Ð%ØÔ'×3Ñ3Ò3Ù+Ó-Ð-Ør5   c                ó,  — ddl m} t        j                  j                  |k(  r| j                  d«      rddlm}  |«       S y
t        j                  j                  |k(  rddl	m
}  |«       S t        j                  j                  |k(  rddlm}  |«       S t        j                  j                  |k(  rddlm}  |«       S t        j                  j"                  |k(  rddlm}  |«       S t        j                  j(                  |k(  rdd	lm}  |«       S y
)zH
        Get text-to-speech configuration for a given provider.
        r   rà   zspeech/)ÚAzureAVATextToSpeechConfig)ÚElevenLabsTextToSpeechConfig)ÚRunwayMLTextToSpeechConfig)ÚVertexAITextToSpeechConfig)ÚMinimaxTextToSpeechConfig)ÚAWSPollyTextToSpeechConfigN)Ú3litellm.llms.base_llm.text_to_speech.transformationrá   rp   rˆ   rœ  r‹  Ú0litellm.llms.azure.text_to_speech.transformationr=  ró	  Ú5litellm.llms.elevenlabs.text_to_speech.transformationr>  r«
  Ú3litellm.llms.runwayml.text_to_speech.transformationr?  r	  Ú4litellm.llms.vertex_ai.text_to_speech.transformationr@  r1	  Ú2litellm.llms.minimax.text_to_speech.transformationrA  Ú	AWS_POLLYÚ4litellm.llms.aws_polly.text_to_speech.transformationrB  )	rž  rF  rá   r=  r>  r?  r@  rA  rB  s	            r3   Ú"get_provider_text_to_speech_configz8ProviderConfigManager.get_provider_text_to_speech_config¢$  sû   € õ	
ô ×Ñ×%Ñ%¨Ò1ð ×Ñ 	Ô*õñ 2Ó3Ð3ð> ô= ×!Ñ!×,Ñ,°Ò8õñ 0Ó1Ð1Ü×!Ñ!×*Ñ*¨hÒ6õñ .Ó/Ð/Ü×!Ñ!×+Ñ+¨xÒ7õñ .Ó/Ð/Ü×!Ñ!×)Ñ)¨XÒ5õñ -Ó.Ð.Ü×!Ñ!×+Ñ+¨xÒ7õñ .Ó/Ð/Ør5   c                óÜ   — t         j                  j                  |k(  rddlm}  |«       S t         j                  j
                  |k(  r%ddlm} ddlm	} |j                  | «      ry  |«       S y )Nr   )ÚGoogleGenAIConfig)ÚVertexAIGoogleGenAIConfig)ÚVertexAIPartnerModels)rp   rˆ   rF	  Ú/litellm.llms.gemini.google_genai.transformationrM  r	  Ú2litellm.llms.vertex_ai.google_genai.transformationrN  Ú4litellm.llms.vertex_ai.vertex_ai_partner_models.mainrO  Úis_vertex_partner_model)rž  rF  rM  rN  rO  s        r3   Ú1get_provider_google_genai_generate_content_configzGProviderConfigManager.get_provider_google_genai_generate_content_config×$  sg   € ô
 ×Ñ×&Ñ&¨(Ò2õñ %Ó&Ð&Ü×!Ñ!×+Ñ+¨xÒ7õõð %×<Ñ<¸UÔCØñ -Ó.Ð.Ør5   )rÌ  z)dict[LlmProviders, tuple[Callable, bool]]r;   )rž  r°  r’  rL  rÌ  rü   )rž  r°  rÌ  rü   )rÌ  rü   )rž  r°  rF  rˆ   r’  rL  rÌ  úBaseConfig | None)rž  r°  rF  rˆ   rÌ  zBaseEmbeddingConfig | None)
rž  r°  rF  rˆ   rï  rL  rÈ	  rt  rÌ  rÝ   )rž  r°  rF  rˆ   rÌ  z"BaseAnthropicMessagesConfig | None)rž  r°  rF  rˆ   rÌ  z#BaseAudioTranscriptionConfig | None)rF  zLlmProviders | strrž  rL  rÌ  úBaseResponsesAPIConfig | None)rF  zLlmProviders | Nonerž  rL  rÌ  rV  )rF  rˆ   rÌ  zBaseSkillsAPIConfig | None)rF  rˆ   rÌ  zBaseEvalsAPIConfig | None)rž  r°  rF  rˆ   rÌ  rý   )rž  rL  rF  rˆ   rÌ  zBaseLLMModelInfo | None)rž  r°  rF  rˆ   rÌ  zBasePassthroughConfig | None)rž  r°  rF  rˆ   rÌ  zBaseImageVariationConfig | None)rž  r°  rF  rˆ   rÌ  zBaseFilesConfig | None)rž  r°  rF  rˆ   rÌ  zBaseBatchesConfig | None)rF  rˆ   rÌ  zCustomLogger | None)rF  rˆ   rƒ
  rL  rÌ  zBaseVectorStoreConfig | None)rF  rˆ   rÌ  z!BaseVectorStoreFilesConfig | None)rž  r°  rF  rˆ   rÌ  ú BaseImageGenerationConfig | None)rž  rL  rF  rˆ   rÌ  zBaseVideoConfig | None)rF  rˆ   rÌ  zBaseContainerConfig | None)rž  r°  rF  rˆ   rÌ  zBaseRealtimeConfig | None)rž  r°  rF  rˆ   rÌ  zBaseRealtimeHTTPConfig | None)rž  r°  rF  rˆ   rÌ  zBaseImageEditConfig | None)rž  r°  rF  rˆ   rÌ  zBaseOCRConfig | None)rF  r”   rÌ  zBaseSearchConfig | None)rF  r“   rÌ  zBaseSandboxConfig | None)rž  r°  rF  rˆ   rÌ  zBaseTextToSpeechConfig | None)rž  r°  rF  rˆ   rÌ  z+BaseGoogleGenAIGenerateContentConfig | None).r‡  r›  rœ  rW  rž  ru  rr	  ru	  r_  ra  rc  rf  r	  r	  rf  r=  rÉ	  rÌ	  r   r   rË	  rù  r
  r
  r(
  r,
  r0
  rì  rJ
  rN
  rZ
  r^
  rc
  r„
  rˆ
  r³
  rÁ
  rÇ
  rË
  rÑ
  ré
  rö
  r3  r;  rK  rT  r  r5   r3   rø  rø  =  sE  … ð NRÐÐJÓQàòd
ó ðd
ðL ó+ó ð+ð  òJó ðJð ò2ó ð2ð* ò4ó ð4ð ò*ó ð*ð ò!ó ð!ð ò ó ð ð ð "&ð0Øð0àð0ð ð0ð 
ò	0ó ð0ðd ðTØðTàðTð 
$òTó ðTðl ð+,Øð+,àð+,ð ð+,ð !*ð	+,ð
 
ò+,ó ð+,ðZ ðtØðtàðtð 
,òtó ðtð ÙÐ1Ô2ð>Øð>àð>ð 
,ò>ó 3ó ð>ð@ ð[Øð[àð[ð 
-ò[ó ð[ðz ð !ð"Ø$ð"àð"ð 
'ò"ó ð"ðH ð !ðFØ%ðFàðFð 
'òFó ðFðP ðØðà	#òó ðð  ðØðà	"òó ðð$ ð
4Øð
4àð
4ð 
"ò
4ó ð
4ð ð-Øð-àð-ð 
!ò-ó ð-ð^ ð"Øð"àð"ð 
&ò"ó ð"ðH ðØðàðð 
)òó ðð ðØðàðð 
 òó ðð8 ðØðàðð 
"òó ðð ð	Øð	à	ò	ó ð	ð ð  $ðPØðPàðPð 
&òPó ðPðd ð	Øð	à	*ò	ó ð	ð ðjØðjàðjð 
*òjó ðjðX ðØðàðð 
 òó ðð< ðØðà	#òó ðð" ðØðàðð 
#òó ðð ðØðàðð 
'òó ðð. ð@Øð@àð@ð 
$ò@ó ð@ðD ð'Øð'àð'ð 
ò'ó ð'ðR ð8Ø!ð8à	 ò8ó ð8ðt ðØ"ðà	!òó ðð" ð2Øð2àð2ð 
'ò2ó ð2ðh ðØðàðð 
5òó ñr5   rø  c                óD  — t        t        j                  t           d«      }t	        t
         |t        | ¬«      «      «      }t	        t        dz  | j                  d«      xs |j                  d«      «      }t        j                  ry|dk(  rt        j                  dury|S )z°
    Used for enforcing `disable_end_user_cost_tracking` param.

    service_type: "litellm_logging" or "prometheus" - used to allow prometheus only disable cost tracking.
    r±   rK  NÚuser_api_key_end_user_idÚ
prometheusT)r„  r…  r†  r‡  rª   r¯  r°  rw  rp   Údisable_end_user_cost_trackingÚ-enable_end_user_cost_tracking_prometheus_only)rô  Úservice_typer±   Ú	_metadataÚend_user_ids        r3   Ú!get_end_user_id_for_cost_trackingr`  ú$  s‘   € ô /6´c·k±kÄ(Ñ6KÐMoÓ.pÐ$ÜœDÑ"BÄ4ÐWeÔCfÓ"gÓh€IäÜˆd‰
Ø×ÑÐ5Ó6Òc¸)¿-¹-ÐHbÓ:có€Kô ×-Ò-Øð �|Ò#Ü×@Ñ@ÈÑLØØÐr5   c                ón   — | syd|v xr d|v}| j                  d«      xs |xr | j                  d«       S )NFÚmax_chunks_per_docÚmax_tokens_per_docz
/v1/rerankz
/v2/rerank)Úendswith)rï  rÈ	  Úuses_v1_paramss      r3   r¹	  r¹	  %  sP   € ÙØØ1Ð5KÐKò ØÐ$:Ð:ð ð ×Ñ˜\Ó*Òf¨~Ò/eÀh×FWÑFWÐXdÓFeÐBeÐfr5   c                ó�   — t         �t         S 	 t        | ¬«      j                  d«      }|€t        S |S # t        $ r	 t        cY S w xY w)aš  
    Returns the smallest prefix `model` will actually cache.

    Resolution order is an explicitly configured `MINIMUM_PROMPT_CACHE_TOKEN_COUNT`, then the
    model's `prompt_cache_min_tokens` in the cost map, then the provider-agnostic default. The
    cost map is the source of truth because the real minimum is per-model and per-platform:
    Anthropic's ranges from 512 to 4096 and moves in both directions across releases, and the
    same model can differ by platform.

    Never raises. An unresolvable model falls back to the default rather than propagating, so a
    caller cannot mistake "no entry for this model" for "this prompt is not cacheable".
    rì  rþ  )r(   r–  rw  rU   r   )rž  Ú
min_tokenss     r3   Úget_prompt_cache_min_tokensrh   %  sV   € ô 1Ð<Ü8Ð8ð8Ü*°Ô7×;Ñ;Ð<UÓVˆ
ð ÐÜ7Ð7ØÐøô	 ò 8Ü7Ò7ð8ús   Ž3 ³AÁAc                óà   — 	 |€|€y|�| j                  |«      s|dz   | z   } t        ||| d¬«      }|€t        | ¬«      }||k\  S # t        $ r }t	        j
                  d|«       Y d}~yd}~ww xY w)aô  
    Returns true if the prompt is valid for prompt caching.

    The minimum cacheable prefix is per-model, so it is resolved from `model` unless the caller
    passes `min_token_count`. Callers that only hold a model-group alias (the router's deployment
    checks) must resolve the threshold themselves and pass it, because an alias resolves to
    nothing here and would silently fall back to the default.

    OpenAI's minimum is a flat 1024 across models, which the default already covers.
    NFrN  T)r»  r!  rž  r#  rì  z+Error in is_prompt_caching_valid_prompt: %s)r‹  r%  rh  rU   r  r>  )rž  r»  r!  rŸ  Úmin_token_countÚtoken_countr3  s          r3   Úis_prompt_caching_valid_promptrl  8%  sŽ   € ð"ØÐ  ØØÐ*°5×3CÑ3CÐDWÔ3XØ'¨#Ñ-°Ñ5ˆEÜ*ØØØØ*.ô	
ˆð Ð"Ü9ÀÔFˆOØ˜oÑ-Ð-øÜò Ü×ÑÐJÈAÔNÜûðús   ‚A ‡<A Á	A-ÁA(Á(A-c                óÜ   — d}t        j                  || «      }|syg }|D ]<  }t        t        |«      \  }}}}|dz  |dz  z   |z   |dz  z   }	|j	                  |	«       Œ> |rt        |«      S dS )a  
    Extracts the total duration (in seconds) from SRT or VTT content.

    Args:
        srt_or_vtt_content (str): The content of an SRT or VTT file as a string.

    Returns:
        Optional[float]: The total duration in seconds, or None if no timestamps are found.
    z"(\d{2}):(\d{2}):(\d{2})[.,](\d{3})Ni  r  g     @�@)r­  ÚfindallrÕ  rO  rI  r  )
Úsrt_or_vtt_contentÚtimestamp_patternÚ
timestampsÚ	durationsÚmatchÚhoursÚminutesÚsecondsÚmillisecondsÚtotal_secondss
             r3   Ú extract_duration_from_srt_or_vttry  \%  s�   € ð  EÐä=?¿Z¹ZÐHYÐ[mÓ=n€JáØð €Iàò (ˆÜ03´C¸³Ñ-ˆˆw˜ Ø ™ w°¡|Ñ3°gÑ=ÀÈvÑ@UÑUˆØ×Ñ˜Õ'ð(ñ
 'Œ3ˆy‹>Ð0¨DÐ0r5   c                óX  — t        j                  | «      }|j                  i ¬«      }|j                  j	                  d«      }|j                  d«      }|j                  d«      D �cg c]  }|sŒ|‘Œ	 }}|j                  d«      D �cg c]  }|sŒ|‘Œ	 }}g }	t        t        |«      «      D ]#  }
||
d |dt        |«      |
z
   k(  sŒ|d|
 |z   }	 n ||z   }	ddj                  |	«      z   }|j                  |¬«      }t        |j                  |j                  ¬«      «      S c c}w c c}w )zÿ
    Adds an ending path to an API base URL while preventing duplicate path segments.

    Args:
        api_base: Base URL string
        ending_path: Path to append to the base URL

    Returns:
        Modified URL string with proper path handling
    )rI   rN  Nr”  )rP  r•  r–  r  ÚrstripÚlstripr£  r¢  rø  r   r°  rI   )rï  Úending_pathr—  Úbase_urlÚ	base_pathÚend_pathr‰  Úbase_segmentsÚend_segmentsÚfinal_segmentsrS  Úmodified_pathr™  s                r3   Ú_add_path_to_api_baser…  y%  s<  € ô  Ÿ)™) HÓ-€LØ"×,Ñ,°BÐ,Ó7€HØ#×(Ñ(×/Ñ/°Ó4€IØ!×(Ñ(¨Ó-€Hð (1§¡°sÓ';ÖA !ºqšAÐA€MÐAØ&.§n¡n°SÓ&9Ö? ºQš1Ð?€LÐ?ð €NÜ”3�}Ó%Ó&ò 6ˆØ˜˜Ð Ð-E¬s°=Ó/AÀAÑ/EÐ FÓFØ*¨2¨AÐ.°Ñ=ˆNÙð6ð '¨Ñ5ˆð  §¡¨.Ó!9Ñ9€MØ"×,Ñ,°-Ð,Ó@€Lô ˆ|×%Ñ%¨\×-@Ñ-@Ð%ÓAÓBÐBùò% BùÚ?s   Á'D"Á/D"ÂD'ÂD'c                ó‚   — | j                  «       D ��ci c]  \  }}|t        j                  v sŒ|€Œ||“Œ  c}}S c c}}w r;   )rŠ  rp   ÚOPENAI_CHAT_COMPLETION_PARAMS)rI   r`  ra  s      r3   Úget_standard_openai_paramsrˆ  Ÿ%  s7   € Ø#Ÿ\™\›^×l‘T�Q˜¨q´G×4YÑ4YÒ/YÐ^_Ñ^kˆAˆq‰DÓlÐlùÓls   ”;¯;²;c                ó”   — t         j                  }|t        z   }| j                  «       D ��ci c]  \  }}||vsŒ||“Œ }}}|S c c}}w r;   )rp   r‡  r›   rŠ  )rx  rõ  rÝ  r`  ra  rÞ  s         r3   Ú!get_non_default_completion_paramsrŠ  £%  sU   € Ü"×@Ñ@€MØ)Ô,>Ñ>€NàŸ™›÷!Ù��A¨1°NÒ+Bˆˆ1‰ð!Ðñ !ð Ðùó	!s
   ­AºAc                óŽ   — d| v r| d   S d| v r| d   S | j                  d«      }t        |t        «      rd|v r|d   S d|v r|d   S y)z­Read AI-SDK-style reasoning summary from optional_params or nested extra_body.

    Uses key membership (not ``or`` chains) so falsy values like ``""`` are not skipped.
    ÚreasoningSummaryÚreasoning_summaryr8  N)rw  r}  r¯  )ró  r8  s     r3   Úpeek_reasoning_summary_aliasesrŽ  ­%  sq   € ð
 ˜_Ñ,ØÐ1Ñ2Ð2Ø˜oÑ-ØÐ2Ñ3Ð3Ø'×+Ñ+¨LÓ9€JÜ�*œdÔ#Ø Ñ+ØÐ0Ñ1Ð1Ø *Ñ,ØÐ1Ñ2Ð2Ør5   c                óZ  — t        | «      }|j                  dd«      }|j                  dd«      }|€|}|j                  d«      }t        |t         «      rTt        |«      }|j                  dd«      }|j                  dd«      }|€|}|€|}|r	||d<   ||fS |j                  dd«       ||fS )zTCopy optional_params; remove reasoningSummary aliases from top-level and extra_body.rŒ  Nr�  r8  )r¯  r÷  rw  r}  )ró  ÚopÚrs_valÚsnake_rs_valÚebÚ	eb_rs_valÚeb_snake_rs_vals          r3   Ú4strip_reasoning_summary_aliases_from_optional_paramsr–  ¿%  sÄ   € ô �_Ó%€BØ�V‰VÐ&¨Ó-€FØŸ&™&Ð!4°dÓ;€LØ€~ØˆØ	�‰�Ó	€BÜ�"”dÔÜ�"‹XˆØŸ6™6Ð"4°dÓ;ˆ	Ø!#§¡Ð(;¸TÓ!BˆØˆ>ØˆFØˆ~Ø(�ÙØ!ˆBˆ|Ñð ˆvˆ:Ðð �F‰F�< Ô&Øˆvˆ:Ðr5   c                ó€   — ddl m} |t        z   }| j                  «       D ��ci c]  \  }}||vsŒ||“Œ }}}|S c c}}w )Nr   rá  )rö  râ  r›   rŠ  )rx  râ  rÝ  r`  ra  rÞ  s         r3   Ú$get_non_default_transcription_paramsr˜  Ø%  sE   € Ý=à7Ô:LÑL€NØ28·,±,³.× \©$¨!¨QÀAÈ^ÒD[  A¡Ð \ÐÑ \ØÐùó !]s   £:°:c                ó0  — | €y| j                  «       D ��ci c](  \  }}|dk7  sŒt        |t        «      sŒt        |«      |“Œ* }}}t        |«      dkD  r-i }d}|j                  «       D ]  \  }}|dk  r|||<   |dz  }Œ |}|j	                  «       S c c}}w )a\  
    Add metadata to openai optional parameters, excluding hidden params.

    OpenAI 'metadata' only supports string values.

    Args:
        params (dict): Dictionary of API parameters
        metadata (dict, optional): Metadata to include in the request

    Returns:
        dict: Updated parameters dictionary with visible metadata only
    NÚhidden_paramsé   r   r  )rŠ  r}  r°  rø  r‘  )rs  r`  ra  Úvisible_metadataÚfiltered_metadatar¶  s         r3   Úadd_openai_metadatarž  à%  s½   € ð ÐØð 'Ÿn™nÓ.÷(Ù�a˜°!°Ó2FÌ:ÐVWÔY\ÕK]ŒˆA‹�‰	ð(Ðñ (ô
 ÐÓ˜rÒ!Ø#%ÐØˆØ$×*Ñ*Ó,ò 	‰DˆAˆqØ�RŠxØ'(Ð! !Ñ$Ø�1‰H‰Cð	ð -Ðà× Ñ Ó"Ð"ùó(s   —B¥B¶Bc                óˆ   — | sy | j                  d«      }t        |t        «      rt        |«      }|r|S t        | «      }|r|S y )Nrt  )rw  r}  r¯  rž  )rs  rt  Úcleaned_metadatas      r3   Úget_requester_metadatar¡  &  sO   € ÙØà (§¡Ð-AÓ BÐÜÐ$¤dÔ+Ü.Ð/AÓBÐÙØ#Ð#ä*¨8Ó4ÐÙØÐàr5   c           
     óh  — ddl m } ddlm}  |ddddœgdd	d
 |j                  «       d
d¬«      }t	        t
        | j                  «      }d}	  |di |¤|ddœ¤Ž |j                  j                  d«      }|rt        t        |«      S t        |¬«      S # t        $ r}t        |«      }Y d}~ŒRd}~ww xY w)zŽ
    Return the json str of the request

    This is currently in BETA, and tested for `/chat/completions` -> `litellm.completion` calls.
    r   r–  )ÚLoggingzgpt-3.5-turborò  Úhirœ  Fr  Ú1234T)rž  r»  rè  rå  ræ  ré  rÌ  Úlog_raw_request_responserØ  zmy-fake-api-key)r�  rX  NÚraw_request_typed_dict)r>  r  )rŸ  rU  r£  r   r„  rp   rŽ  rU   r°  rÞ  rw  rª   r’   )	Úendpointrx  rŸ  r£  r�  Úllm_api_endpointÚreceived_exceptionr3  r§  s	            r3   Úreturn_raw_requestr«  &  sÎ   € õ "åBá!(ØØ!¨dÑ3Ð4ØØØØ�8—<‘<“>ØØ!%ô	"Ðô &¤g¨x¯~©~Ó>ÐàÐð$Ùñ 	
Øð	
à 3Ø%ô	
ð %8×$JÑ$J×$NÑ$NÐOgÓ$hÐÙÜÔ'Ð)?Ó@Ð@ä"Ø$ô
ð 	
øô ò $Ü  ›VÕûð$ús   ÁB Â	B1ÂB,Â,B1c                óâ   — g }| D ]g  }t        |t        «      r|j                  d¬«      }n t        |t        «      r|j	                  «       }t        |t        «      sŒW|j                  |«       Œi |S )zn
    Fixes https://github.com/BerriAI/litellm/issues/9321

    Where user passes in a pydantic base model
    Tr$  )r}  r   r«  r¯  r‘  rI  r4  s      r3   r0  r0  ?&  sg   € ð $&€IØò #ˆÜ�dœIÔ&Ø—?‘?°�?Ó5‰DÜ˜œdÔ#Ø—9‘9“;ˆDÜ�dœDÕ!Ø×Ñ˜TÕ"ð#ð Ðr5   c                 ó   — t        ddd¬«      S )Nr   )Úprompt_tokensÚcompletion_tokensr  )rš   r  r5   r3   Úget_empty_usager°  P&  s   € ÜØØØôð r5   c                ó   — | s|s|ryyr×  r  )rR  Úmock_tool_callsÚmock_timeouts      r3   Úshould_run_mock_completionr´  X&  s   € ñ
 ™©<ØØr5   c                óh   — ddl m}  |«       }| |v r||    } || «      S t        dt        ›d| ›�«      ‚)zSLazy import handler for utils module with cached registry for improved performance.r   )Ú_get_lazy_import_registryzmodule z has no attribute )Úlitellm._lazy_importsr¶  ÚAttributeErrorr‡  )r}  r¶  ÚregistryÚhandler_funcs       r3   Ú__getattr__r»  b&  sG   € õ @á/Ó1€Hð ˆxÑØ& t™nˆÙ˜DÓ!Ð!ä
˜7¤8 ,Ð.@ÀÀÐIÓ
JÐJr5   )rH   rL   rÌ  rg  )rV   rU   rÌ  rU   )Fr9  )rB  rg  rC  z!Literal['DEBUG', 'INFO', 'ERROR'])rc  r°  rd  zLiteral['success', 'failure']rÌ  rÍ  )re  r0   rÌ  rg  )rx  údict[str, Any]rÌ  rt  )rx  údict[str, object]rÌ  rt  )rx  r¯  )r“  z*list[str | Callable | CustomLogger] | NonerÌ  r­  )rž  rL  rŸ  rL  rÌ  rg  )r¤  r°  r¥  r°  rÌ  r°  )r±  r¯  r²  r°  rÌ  r¯  )r»  r­  r²  r°  rÌ  r­  )rÂ  rP  rÌ  rÍ  )rÇ  rP  rÌ  rg  )r'  r°  r(  rË   ré  zdatetime.datetimerP   r¥   rÉ  rg  rx  r¥   rÌ  z+tuple[LiteLLMLoggingObject, dict[str, Any]])rÂ  rÉ   rD  rg  )rx  r¼  rV   rU   rÌ  z!tuple[int | None, dict[str, Any]])rx  r½  rV   rU   rÌ  z"float | int | httpx.Timeout | Noner·  )rx  r¼  rå  r°  )r[  r¯  r\  rP  rå  zCallTypes | NonerÌ  z
Any | None)r[  úMapping[str, object]rV   rU   rå  r°  rÌ  rÍ  )ró  rK  rí  )rx  rK  rå  rg  rÌ  rg  )rx  r½  rå  zCallTypes | strrÌ  rg  r;   )rž  r°  rï  z!CustomHuggingfaceTokenizer | None)rž  r°  rÌ  r•   )rž  r°  rÌ  zSelectTokenizerResponse | None)rØ  rØ  N)rï  rK  )rØ  r  NT)r  úSequence[int]rï  rK  r  rg  )rù  r   r  r¿  rÌ  r¿  )ÚmainN)ré  r°  rë  rL  )r  r°  )	rØ  NNNFNNFN)rï  z%dict | SelectTokenizerResponse | Noner	  ústr | list[str] | Noner»  zSequence | Noner   úbool | Noner!  ú$list[ChatCompletionToolParam] | Noner"  z)ChatCompletionNamedToolChoiceParam | Noner#  rÂ  r$  ú
int | NonerÌ  rO  )rŸ  r°  rÌ  rg  )rž  r°  rŸ  rL  rÌ  rg  )rž  r°  rŸ  rL  r�  r°  rÌ  zLiteral[True] | None)rž  r°  rŸ  rL  r�  r°  rÌ  rg  )rž  r°  rŸ  rL  r�  r°  rÌ  rL  )rž  r°  rŸ  rL  rÌ  r2  )r{  r¯  r|  r¯  rÌ  r¯  )r�  r°  rF  r°  rÌ  zdict[str, object] | None)rž  r°  rÌ  zModelInfo | None)r   zCallable[[], None]rÌ  rÍ  rË  )rQ  z
str | dictr¥  rg  r¦  rL  )rÜ  r¯  rÝ  r¯  rÙ  r9  rÌ  r¯  )NNNNNN)rž  r°  rŸ  r°  rä  rL  rÒ  rL  rg  rL  rå  rÄ  ræ  z'list[Literal['word', 'segment']] | Nonerã  rÂ  )r  rL  rÌ  r°  )NNNNNNNNNNNN)rž  rL  r  rÄ  r  rL  rg  rL  r  rL  r  rL  rò  rL  r  rK  rŸ  rL  rÙ  r9  r   rW  rã  rÂ  )NNNrØ  NNN)rž  r°  rò  rL  r*  rL  r$  rÄ  rã  rÂ  rÙ  r2  r  r2  )rV  )rÞ  r¯  r_  r2  rÌ  r¯  )rx  r¯  rÌ  r¯  )FFN)rÜ  r¯  rÿ  r¯  rŸ  r°  rÙ  r2  rž  r°  rr  rg  rs  rg  r   rU  rÌ  r¯  )r„  r¯  rÌ  r¯  )rÜ  r¯  rÞ  r¯  rŸ  r°  rÌ  r¯  )(NNNNNFNNNNNNNNNNNrØ  NNNNNNNNNNNNNNNNNNNNNN)rž  r°  r  r2  r»  úlist[AllMessageValues] | Noner  úAnthropicThinkingParam | Noner  zOpenAIWebSearchOptions | Noner	  rL  r
  rÂ  r  rL  r’  rL  )ró  r¯  rÜ  r¯  rŸ  r°  rõ  rt  rÙ  r9  rÌ  r¯  )ró  r¯  rÞ  r¯  r  r­  )rÜ  r¾  rÌ  zfrozenset[str])rÜ  r¯  rÌ  r¯  )
r  rÄ  r  rÄ  r   rÄ  r!  rÄ  rÌ  rÄ  )r&  z
dict | AnyrÌ  rÄ  )r*  ú
list[dict]r+  rÄ  rÌ  r­  )r*  rÇ  r3  zIterable[str] | NonerÌ  r­  )rŸ  r°  rô  rû   rÌ  rL  )rô  rû   rÌ  zAllowedModelRegion | None)rô  rû   rÌ  rg  )rô  rû   rS  r°  rÌ  rg  )rô  rû   rY  rL  rÌ  rL  )rx  r¯  rÌ  r°  )r	  r°  rÌ  rO  )rl  z#ModelResponse | ModelResponseStreamrÌ  r°  )r’  r°  r“  rL  )rž  r°  rÌ  rÄ  r¶  )r£  r°  rÌ  r°  )rž  r°  rŸ  rL  rÌ  r°  )rÌ  rO  )rÌ  zdict[str, str])rÇ  r°  rÌ  rL  )rÍ  r°  rÌ  rL  )r�  r°  rÌ  r¯  )r7  r¯  rŸ  rL  rÌ  rg  )rž  r°  râ  rÚ  rŸ  rL  rÌ  ztuple[str, dict] | None)rž  r°  rŸ  rL  rÌ  rÚ  )r£  r°  rÌ  rÄ  )rž  r°  rŸ  rL  rï  rL  rÌ  r�   )rž  r°  rŸ  rL  rÌ  z ProviderSpecificModelInfo | None)râ  rÚ  rÌ  rg  )NNN)
rž  r°  rŸ  rL  rï  rL  rX  rL  rÌ  r�   )
rž  r°  rŸ  rL  rï  rL  rX  rL  rÌ  rŒ   rJ  )rž  r°  rŸ  rL  rï  rL  rÌ  rŒ   )rk  r°  )rÌ  r¯  )rØ  rØ  rØ  r   r   )rž  r°  rŸ  r°  rï  r°  rÒ  r°  r¥  rO  r�  rO  )rŸ  r°  rÌ  zlist[ProviderField])NNNN)
rž  rL  rX  rL  rï  rL  rl  rL  rÌ  r¯  )rž  r°  rX  r°  )rë  rO  )r  úhttpx.Headers | Nonerò  )
r  rO  r  rO  r  rÈ  r  rO  rÌ  zfloat | int)
rž  r°  r"  r¯  r#  r°  r$  r°  r'  r¯  )r  rÄ  )rR  z)str | MockException | ModelResponseStreamr  rÄ  )rž  rL  r}  rg  )rž  rL  rˆ  rN  r‰  rg  )rŸ  rL  rÌ  rt  )r   r¬   rŸ  r°  rô  r¸  rÌ  rt  )NNNNN)rÌ  rÂ  rŸ  rL  rô  r¸  rX  rL  rï  rL  rÌ  rt  )rÔ  rr   rÌ  rg  )r‰  r°  rÌ  rg  )r‰  r°  rÌ  r°  )r»  úlist[AllMessageValues]rÌ  rg  )rŸ  r°  rÌ  zlist[ChatCompletionToolParam])rÔ  zBaseModel | dictrÌ  r¯  )r»  r£   )r»  r­  )r!  r9  rÌ  zlist[dict] | None)r  z$AnthropicThinkingParam | bool | NonerÌ  rÆ  )rÔ  rr   )r»  rÉ  )r"  údict | str | NonerÌ  rÊ  )rø  rÁ  rÌ  rÁ  )rÌ  r¼  )rž  r°  rF  rˆ   rÌ  r¼  )rù  )rô  r¯  r]  z(Literal['litellm_logging', 'prometheus']rÌ  rL  )rï  rL  rÈ	  rt  )rž  r°  rÌ  rO  )rž  r°  r»  rÅ  r!  rÃ  rŸ  rL  rj  rÄ  rÌ  rg  )ro  r°  rÌ  rü  )rï  r°  r}  r°  rÌ  r°  )rI   r¾  rÌ  r¯  )rx  r¾  rÌ  r¯  )ró  r¯  rÌ  úobject | None)ró  r¯  rÌ  ztuple[dict, object | None])rs  zMapping[str, object] | NonerÌ  r»  )rs  r¾  )r¨  r{   rx  r¯  rÌ  r’   )r!  zSequence[object]rÌ  rÇ  )rÌ  rš   )rR  rË  r²  rË  r³  rË  rÌ  rg  )r}  r°  rÌ  r¥   (d  r�  Ú
__future__r   r  r§  r	  Úbinasciir©  r‘  rŸ  r§  r=   ÚioÚ	itertoolsr  Úloggingr²  r  r­  ÚstructÚ
subprocessr…  ÚtextwrapÚ	threadingr£  r²  Údataclassesr   r   Ú	functoolsr   r   Ú	importlibr   r	   r
   Úos.pathr   r   r   Útypesr   ÚdotenvrP  r®  Útiktokenr   Úhttpx._utilsr   Ú
openai.libr   r   Ú*openai.types.chat.completion_create_paramsr   Úpydanticr   r   Ú
tokenizersr   rp   Úlitellm.litellm_core_utilsÚ/litellm.litellm_core_utils.json_validation_ruleÚlitellm._internal_contextr   r·  r   r   r   Úlitellm._uuidr   rö  r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   Ú3litellm.litellm_core_utils.fallback_generalizationsr-   rb   rh   r\   r1   r4   rJ   rX   r^   rd   ri   rk   rq   Úlitellm.types.llms.openairr   rs   rt   ru   rv   rw   rx   ry   Úlitellm.types.utilsrz   r{   r|   r}   r~   r   r€   r�   r‚   rƒ   r„   r…   r†   r‡   rˆ   r‰   rŠ   r‹   rŒ   r�   rŽ   r�   r�   r‘   r’   r“   r”   r•   r–   r—   r˜   r™   rš   r›   rŽ  rœ   rž  rL  rM  r]  Úfr^  Ú	json_dataÚImportErrorr¸  rt  Ú	open_textÚdumpsr  Úimportlib.metadataÚcollections.abcr    r¡   r¢   r£   Útypingr¤   r¥   r¦   r§   r¨   r©   rª   r«   ro   rö  Ú litellm.llms.base_llm.base_utilsr¬   r­   rc   ra   rg   r2   r0   Ú)litellm.litellm_core_utils.cached_importsr®   r¯   r°   r  r±   r²   r³   Ú.litellm.litellm_core_utils.credential_accessorr´   Ú0litellm.litellm_core_utils.dot_notation_indexingrµ   r¶   Ú2litellm.litellm_core_utils.exception_mapping_utilsr·   Ú-litellm.litellm_core_utils.get_litellm_paramsr¸   r¹   r  rº   r»   Ú6litellm.litellm_core_utils.get_supported_openai_paramsr¼   Ú,litellm.litellm_core_utils.llm_request_utilsr½   ÚFlitellm.litellm_core_utils.llm_response_utils.convert_dict_to_responser¾   r¿   rÀ   rÁ   rÂ   Ú:litellm.litellm_core_utils.llm_response_utils.get_api_baserÃ   ÚBlitellm.litellm_core_utils.llm_response_utils.get_formatted_promptrÄ   Ú9litellm.litellm_core_utils.llm_response_utils.get_headersrÅ   Ú?litellm.litellm_core_utils.llm_response_utils.response_metadatarÆ   rÇ   r#  rÈ   Ú*litellm.litellm_core_utils.redact_messagesrÉ   rÊ   Ú litellm.litellm_core_utils.rulesrË   rÆ  rÍ   Ú/litellm.litellm_core_utils.thread_pool_executorrÎ   Ú7litellm.llms.base_llm.anthropic_messages.transformationrÏ   Ú8litellm.llms.base_llm.audio_transcription.transformationrÐ   Ú,litellm.llms.base_llm.batches.transformationrÑ   Ú/litellm.llms.base_llm.containers.transformationrÒ   Ú.litellm.llms.base_llm.embedding.transformationrÓ   Ú*litellm.llms.base_llm.files.transformationrÔ   Ú1litellm.llms.base_llm.google_genai.transformationrÕ   Ú/litellm.llms.base_llm.image_edit.transformationrÖ   Ú5litellm.llms.base_llm.image_generation.transformationr×   Ú5litellm.llms.base_llm.image_variations.transformationrØ   Ú(litellm.llms.base_llm.ocr.transformationrÙ   Ú0litellm.llms.base_llm.passthrough.transformationrÚ   Ú2litellm.llms.base_llm.realtime.http_transformationrÛ   Ú-litellm.llms.base_llm.realtime.transformationrÜ   Ú+litellm.llms.base_llm.rerank.transformationrÝ   Ú,litellm.llms.base_llm.sandbox.transformationrÞ   Ú+litellm.llms.base_llm.search.transformationrß   rC  rá   Ú1litellm.llms.base_llm.vector_store.transformationrâ   Ú7litellm.llms.base_llm.vector_store_files.transformationrã   Ú+litellm.llms.base_llm.videos.transformationrä   r±  ræ   Ú5litellm.llms.bedrock.embed.amazon_nova_transformationrç   Ú9litellm.llms.bedrock.embed.amazon_titan_g1_transformationrè   ÚAlitellm.llms.bedrock.embed.amazon_titan_multimodal_transformationré   Ú9litellm.llms.bedrock.embed.amazon_titan_v2_transformationrê   Ú0litellm.llms.bedrock.embed.cohere_transformationrë   Ú<litellm.llms.bedrock.embed.twelvelabs_marengo_transformationrì   Ú litellm.llms.cohere.common_utilsrí   Ú&litellm.llms.custom_httpx.http_handlerrî   rï   Ú'litellm.llms.mistral.ocr.transformationrð   Úlitellm.proxy._typesrñ   Ú*litellm.router_utils.get_retry_from_policyrò   ró   Úlitellm.types.llms.anthropicrô   rõ   rö   r÷   rø   Úlitellm.types.rerankrù   rË  rû   Ú)litellm.llms.base_llm.chat.transformationrü   Ú/litellm.llms.base_llm.completion.transformationrý   Ú*litellm.llms.base_llm.evals.transformationrþ   Ú.litellm.llms.base_llm.responses.transformationrÿ   Ú+litellm.llms.base_llm.skills.transformationr   Úlitellm.secret_managers.mainr  Ú_loggingr  r  Úcaching.cachingr  r  r  r  r	  r
  r°  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r   r!  r"  r#  r$  r%  r&  r'  r(  r)  r*  r+  r,  r-  r.  r/  r0  r1  r3  r  r4  r5  r6  r7  rD  rL  rf  rW  r^  rz  r�  r�  r•  r   r¦  r¶  r¹  r¿  rÄ  rÈ  r:  rE  rK  rQ  rS  rV  rZ  rD   r{  rá  r›  r  r   r!  ræ  r%  rñ  rî  rô  rõ  r  r  r  rí  r  r%  r*  r,  r1  r3  r5  r9  rA  rD  rF  rJ  r/  r[  r^  r`  rc  re  rg  ri  rk  rm  ro  rq  rv  rx  r~  rz  r�  r‡  r”  r—  r˜  rš  r¡  r¤  r£  rÚ  rß  r  r
  r  rR  rU  rZ  r\  ra  rc  rh  r:  r}  rz  r¡  r  rþ  rö  r¤  r  r  r#  r'  r1  r5  r>  rH  rN  rQ  rT  r^  rb  rh  rv  r”  rš  rª  r¯  r²  r´  rŒ  r¼  r½  r¿  rº  rÅ  rÉ  rË  rP  rÐ  rÖ  Útyping_extensionsr×  rØ  rÚ  rä  rç  r¦  rÃ  rH  rð  Úcompilerñ  r6  r`  rÁ  r–  rÂ  Ú
cache_inform  r’  rš  r©  r®  r»  r  r  r  r
  r  r  r   r*  r,  rX  rZ  ra  rj  rp  rn  rs  rd  re  r�  Úlitellm.caching.in_memory_cacher�  r’  r»  rÅ  rÉ  rÏ  rž  rÜ  rá  rã  rð  rþ  r  r  r  r  r  r  r  r  r  r  r   r!  r"  r'  r.  r2  r6  r<  r)  r1  rF  rJ  rQ  rU  rø  r`  r¹	  rh  rl  ry  r…  rˆ  rŠ  rŽ  r–  r˜  rž  r¡  r«  r0  r°  r´  r»  )Úcts   0r3   ú<module>r.     s0  ðÚ Mõ #ã 
Û Û Û Û Û Û Û Û Û 	Û Û Û Û 	Û Û 	Û Û ó Û Û Û Û ß (ß &Ý Ý Ý ß *Ñ *Ý "ã Û Û Û Ý Ý 0ß *Ý EÝ Ý Ý  ã Û !ó 7Ý 6÷ñ õ
 ÷÷ ÷ ÷ õ õ&ð Ð ØÐ ØÐ Ø€òñ �4Ôóoó ðoôò2ò#òð  Ð ò÷	÷ 	ó 	÷#÷ #÷ #÷ #÷ #÷ #÷ #÷ #÷ #ðJ <EÖ#E°R B§H¢H¨b¡LÒ#EÐ �[Ó Eð
!ð 	ˆ	�ŠÐ?Ó@ß	ŠÐ,Ó	-ß	Šˆc˜GˆÓ	$ð!ð )*à�D—I’I˜a“Lˆ	÷!ð �$—*’*˜YÓ'€Û ß AÓ Aß V× VÓ Vå *÷ò
 ÷õ @÷ñ ÷
ñ õ
 R÷õ R÷÷õõ X÷õ õ Xõõ÷õ÷õ 7ÝPÝHõõõ
 OÝSÝRÝJõõ Tõ÷÷ GÐFßVÐV÷ð ÷ QÐPßLÐLßNÐNßLÐL÷ð ÷ XÐW÷ð ÷ LÐKßBÐB÷ð ÷ð ÷ð ÷ð ÷ð ÷ð ÷ AÐ@ßTÔTßHÐHß7Ð7÷ô ÷ô ÷÷ ÷
 4Ð3ß3Ð3ç @Ð @ß TÐ Tß IÐ Iß QÐ Qß KÐ Kß 3Ð 3ç 6Ô 6÷÷ ÷ ô ÷÷ ÷ ÷ ÷ ÷ ÷ ÷ ð ñ$ ß%ð "Ñ �UÓ !ØÑ �5Ó Ø�Ø�ˆÓ Ø�	ˆ5Ó Ø��Ó Ø��Ó Ø�ˆeÓ ØÑ �5Ó Ø��Ó Ø�ˆuÓ Ø!Ñ �UÓ !Ø�ˆeÓ Ø��Ó Ø��Ó Ø�
ˆEÓ Ø�ˆuÓ ØÑ �%Ó Ø�ˆeÓ Ø�ˆ%Ó ØÑ �%Ó Ø�ˆeÓ Ø�ˆuÓ Ø��Ó Ø"$�ÐÓ $Ø�Ø35Ñ Ð0Ó 5Ø,.�Ð)Ó .Ø��Ó Ø"Ñ �eÓ "ð2 Ø3:ñàðð 1õó(	Eõ%AðPvØ ðvà	õvðvØ ðvà	õvõõõ$$ðØAðà	õõ;õõõ>
õõ8õ 3ðR ñ]Øð]àð]ð "ð]ð ð	]ð
 ð]ð ð]ð 1õ]ð@
Ø%ð
ð
 #'õ
õ@õ2õ<õ
ð.ØðØ"(ðØ5Eðàõð.2Ø&ð2Ø3<ð2ØILð2à	õ2ðjTð !õTónJ
ð^ "ñØðàðð 
õò@  )à×)Ò)Ø×*Ò*Ø×)Ò)×/Ò/Ø×*Ò*×0Ò0ð	ó Ñ �uó ð.Øð.àð.ð 
õ.÷1ñ Ð-Ô.ó+ó /ñ+õNõ÷*ð2 ØØ$(Ø $ñ	àðð "ðð õ	õ0I÷Eõ2Eð  Ø>BØ#'Ø $Ø).Ø26Ø=AØ16Ø&*ñ$à;ð$ð !ð$ð ð	$ð
 'ð$ð 0ð$ð ;ð$ð $/ð$ð $ð$ð 	õ$õN	õ÷*÷*õ*÷D)÷X÷÷*oõ	õ=õ@%õP$÷No÷
m÷
o÷
÷*÷÷*÷$m÷÷(÷Võó&ð 	#Ñ ˜%ó 	ð Ñ �uó õõDð( GIÑ Ð CÓ H÷/ò /õ,õHð6 $(Ø'+ñ	\Øð\ð !ð\ð %õ	\õ~õ
ð   ØØ"&Ø"ØGKØ#ñVØðVàðVð ðVð ð	Vð
  ðVð ðVð EðVð õVõr1ð$ ØØØ"&ØØØØ#Ø&*Ø*.Ø8<Ø#ñzØðzàðzð ðzð  ð	zð
 ðzð ðzð ðzð ðzð $ðzð (ðzð 6ðzð õzð@ Ø"&Ø!ØØ#Ø/3Ø.2ñ`àð`ð ð`ð  ð	`ð
 ð`ð ð`ð -ð`ð ,õ`óFó.õ*õBõZõ,K÷A"ò A"ðT #(Ø).Ø)-ñ:Øð:àð:ð ð:ð -ð	:ð
 ð:ð  ð:ð #'ð:ð 'ð:ð 
õ:õzõKðd ØØØ
Ø
ØØØ	ØØØØØ
ØØØØ	ØØØ	Ø
ØØØØØØØØØ.2ØØØØ.2Ø.2Ø8<Ø$(ØØ#'Ø!ñWP	ð ðP	ðB ,ðCP	ðJ ,ðKP	ðL ,ðMP	ðN 6ðOP	ðP "ðQP	ðR ðSP	ðT !ðUP	ðV õWP	ðp +/ñ&Øð&àð&ð ð&ð ð	&ð
 (ð&ð 
õ&õRò. &/Ò/bÓ%cÑ ˜UÓ cõ
Sõð (Ø%ð(à	ð(ð 
ð(ð $.ð	(ð
 õ(õV
÷ð2 59ñiØ#ðià1ðið 
õiö.&ö2(öVöööö0öö+#ö\(ôV!ö;
ö|,ö	7ö3ö ð( 48Ñ Ñ0Ô 7ð ()Ñ  Ô (ö+ö0ö%ðØðàöð&Øðàöö&&öR#ö(÷V 2Õ 1ö©iõ ð#Øð#àBð#ð $ð#ð ö	#öL'öTñ. Ð-Ô.ð  ñØðà#ðð ðð ô	ó /ñö"ð$	ØBð	à	ö	ð $. 2§:¢:Ñ.EÓ#FÑ ˜5Ô Fð
 '+ØØñ	@
Øð@
à#ð@
ð ð@
ð ð	@
ð
 ö@
ðJ '+ØØñ	UØðUà#ðUð ðUð ð	Uð
 öUñ6 Ð-Ô.ð '+ØñfØðfà#ðfð ðfð ô	fó /ñfð '+ØØñ	QHØðQHà#ðQHð ðQHð ð	QHð
 öQHñh 4×?Ò?�Õ Ù2×=Ò=�Õ öGö4Vôrð  "ØØØØñ(
Øð(
àð(
ð ð(
ð ð	(
ð
 ð(
ð ö(
öVô 1ð4 ØØØ"ñ	SVØðSVàðSVð ðSVð ð	SVð
 
öSVôl0ô	Höö*ð< .2ñØ*öðJ .2Øñ	"Øð"àð"ð +ð"ð ð	"ð
 ö"ð: Ø "Ø Øð@&Øð@&àð@&ð ð@&ð ð	@&ð
 ö@&÷FK%ô K%÷\ð ð4 ñ	à<ðð ö	ö8ô"
Dôô6ô(ô9÷2ð 2ðt Ø*Ø#(Øðb!àðb!ð ðb!ð !ö	b!÷J :Ñ 9ö:C™=õ :Cò| +Ó,�ˆeÔ ,ð '+ñØ#ðàöð6 -1ñØ%ðàðð *ðð ö	ð. ,0Ø&*Ø,0ØØñGØ(ðGà#ðGð *ðGð ð	Gð
 ðGð öGôT'ôTö÷4#ô #÷>ô öB (õ ö
.öbö&ö	ðØ$ðà	öð*jØ$ðjà	öjö@÷*÷ ÷ ô ödö$öIö&ð6Ø2ð6à"ö6ö2Cö&ðRØ"ðàö÷4ð ñ& �1Ôôó ñðØðàðð ö÷$zô zð~- >OñØðà:ðð öö:göð6 37Ø&*Ø"&ñ!Øð!à+ð!ð 0ð!ð $ð	!ð
  ð!ð 
ö!öH1ö:#CöLmööð$Øðàöö2ð #Ø)ð #àö #öFö"(
öVö"ðØ ðà"ðð  ðð 
ö	÷KùòMk $F÷!ñ !ûð 	�^ YÐ/ò !Ø	ˆ×	Ò	ÐDÐF`Ó	að !ÐefØ�D—I’I˜a“Lˆ	÷!÷ !ñ !ýð!úsH   Æ1{Ç5{ È{È{ û{û{ û|(û;|ü	|(ü|!	ü|(ü'|(