
    Cj"                      % S r SSKJr  SSKrSSKrSSKrSSKrSSKrSSKrSSK	r	SSK
r
SSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKJrJr  SSKJrJr  SSK J!r!  SSKJ"r"  SSKJ#r#  SS	K$J%r%J&r&J'r'  SSK(r(SSK)r)SSK*r*SSK+r+SS
K)J,r,  SSK-J.r.  SSK/J0r0J1r1  SSK2J3r3  SSK4J5r5  SSK+J6r6  SSK7J8r8  SSK9r9SSK:r9SSK;r9SSK<J=r=  SSK>J?r?J@r@JArA  SSKBJCrC  SSKDJErEJFrFJGrGJHrHJIrIJJrJJKrKJLrLJMrMJNrNJOrOJPrP  SqQSqRSqSSqTS rUS rVS rWS rXSqYS rZSSK[J\r\J]r]J^r^J_r_J`r`JaraJbrbJcrc  SSKdJere  SSKdJfrfJgrgJhrhJiriJjrjJkrkJlrlJmrmJnrnJoroJprpJqrqJrrrJsrsJtrtJuruJvrvJwrwJxrxJyryJzrzJ{r{J|r|J}r}J~r~JrJrJrJrJrJrJrJr  \g V s0 s H  o GR                  U _M     sn rS\S'    \!GR                  " S5      GR                  S 5      GR                  S!S"S#9 r\GR                  " \5      rSSS5        \GR(                  " \5      rSSKr SS$KJrJrJrJrJrJrJrJrJrJrJrJrJrJr  SS%KJrJr  \(       Ga  SS&KJrJr  SS'KJr  SS(KJr  SS)KJr  SS*KJr  SS+KJr  SS,KJrJr  SS-KJr  SS.KJrJrJrJrJr  SS/KJr  SS0KJr  SS1KJr  SS2KJrJr  SS3KJr  SS4KJr  SS5KJr  SS6KJr  SS7KJr  SS8KJr  SS9KJr  SS:KJr  SS;KJr  SS<KJrJrJr  SS=KJrJrJr  SS>KJrJr  SS?KJrJr  SS@KJr  SSAKJr  SSBKJr  SSCKJr  SSDKJr  SSEKJr  SSFKJr  SSGKJr  SSHKJrJr  SSIKJrJr  SSJKGJ Gr   SSKGKGJGr  SSLGKGJGr  SSMGKGJGr  SSNGKGJGr  SSOGK	GJ
Gr
  SSPGKGJGr  SSQGKGJGr  SSRGKGJGr  SSSGKGJGr  SSTGKGJGr  SSUGKGJGr  SSVGKGJGrGJGr  SSWGKGJGr  SSXK[GJGrGJGrGJGr  SSYGKGJ Gr   SSZGK!GJ"Gr"  SS[GK#GJ$Gr$  SS\GK%GJ&Gr&  SS]GK'GJ(Gr(  SS^GK)GJ*Gr*  SS_GK+GJ,Gr,  S`SaGK-GJ.Gr.GJ/Gr/  S`SbGK0GJ1Gr1GJ2Gr2GJ3Gr3GJ4Gr4GJ5Gr5GJ6Gr6  S`ScGK7GJ8Gr8GJ9Gr9GJ:Gr:GJ;Gr;GJ<Gr<GJ=Gr=GJ>Gr>GJ?Gr?GJ@Gr@GJAGrAGJBGrBGJCGrCGJDGrDGJEGrEGJFGrF  \(       a  SSdK9GJGGrG  SGrHSGrISGqJSGrKSGrLSGrMSGrNSGrOSGrPSGrQSGrRSGrSSGrTSGrUSGrVSGrWSGrXSGrYSGrZSGr[SGr\SGr]SGr^SGr_/ Gq`Se\Sf'   SGqa0 GrbSg\Sh'   0 GrcSg\Si'   SGrdSGre  GS<   GS=Sk jjGrfSl Grg      GS>Sm jGrh    GS?Sn jGri    GS?So jGrjGS@Sp jGrkGS@Sq jGrlGSASr jGrm    GSBSs jGrnGSCSt jGroGSDSu jGrp      GSESv jGrqGSESw jGrr      GSFSx jGrs  GSGSy jGrt    GSHSz jGru      GSIS{ jGrv      GSJS| jGrwGSKS} jGrxGSLS~ jGry        GSMS jGrz  GSNS jGr{S Gr| GSO     GSPS jjGr}G\~" \gGR                  \gGR                   \gGR                  GR                  \gGR                   GR                  15      Gr      GSQS jGr GSR   GSSS jjGr\" \GS9GSTS j5       GrGSTS jGrGSUS jGrGSVGSWS jjGrS/ SS4     GSXS jjGr      GSYS jGr GSZ   GS[S jjGrGS\S jGr         GS]                 GS^S jjGrGS_S jGrGS`S jGrGSRGS`S jjGrGSRGS`S jjGrGS`S jGr GSR     GS`S jjGr GSR     GS`S jjGr GSR     GS`S jjGrGSRGS`S jjGr        GSaS jGrGSbS jGr        GSbS jGrGSRGS`S jjGrGSRGS`S jjGr GSR     GS`S jjGr GSR     GS`S jjGr GSR     GS`S jjGrGSRGS`S jjGrGSRGS`S jjGr GSR     GS`S jjGr GSR     GScS jjGr GSR     GS`S jjGrGSdS jGrS GrSGrSGr      GSeS jGrGSfS jGrGSKS jGr        GSgS jGr      GSh               GSiS jjGrGSjS jGr            GSk                       GSlS jjGr       GSm             GSnS jjGrS GrS GrGSoS jGr      GSpS jGrGSqS jGr " S S5      Gr   GSr                 GSsS jjGrGStS jGr        GSuS jGr                                      GSv             GSwS jjGr GSR           GSxS jjGr      GSyS jGrGSzS jGr          GS{S jGrGS|S jGr GSR     GS}S jjGr GSR     GS~S jjGr      GSS jGrGSS jGrGSS jGrGSS jGr      GSS jGr      GSS jGrGSS jGrGSS jGrGSS jGrGSS jGrS GrGSS jGrGSS jGrGSS jGrGSS jGrGSS jGrSGqSg\S'   SGqS\S'   GSS jGrGSS jGrGSS jGr    GSS jGr    GSS jGrGSS jGrGSS jGrGSS jGrSSGKGJGr   " S SG\5      Gr      GSS jGrGSS jGr\" \GS9 GSR       GSS jj5       Gr      GSS jGr    GSS jGr   GS         GSS jjGr   GS         GSS jjGr\" \GS9  GS       GSS jj5       Gr   GS         GSS jjGrG\GR                  G\Gl        G\GR                  G\Gl        GSS jGrGSS jGrS Gr     GS           GSS jjGrGSS jGrS Gr    GS         GSS jjGrS GrS GrS GrGSS jGrGSS jGr GSR GSS jjGr  GS         GSS jjGr0 SS0 4         GSS jjGr " S S5      Gr GSR GSS jjGr GSR   GSS jjGrGSS jGrGS  GrGS GrGS GrGS GrGS Gr GSO   GSGS jjGr S\HSjS4     GSGS jjGrSGSGKGJGr   " GS GS	G\5      GrG\" 5       Gr GSR   GSGS
 jjGr GSR       GSGS jjGr     GS           GSGS jjGrGS Gr	GS Gr
GSRGS jGr " GS GS5      Gr " GS GS5      Gr " GS GS\5      GrGSGS jGrGSGS jGrGSGS jGrGSGS jGr    GSGS jGr    GSGS jGrGSGS jGrSGSK[GJGrGJGrGJGrGJGrGJGrGJGr  GSGS jGrGSGS jGrGSGS  jGrGSGS! jGr    GSGS" jGr GSGS# jGr!GSGS$ jGr"    GSGS% jGr# GSR   GSGS& jjGr$\" S`S9GSGS' j5       Gr%      GSGS( jGr& " GS) GS*5      Gr' GS     GSGS+ jjGr(    GSGS, jGr)  GS         GSGS- jjGr*GSGS. jGr+GSGS/ jGr,GSGS0 jGr-GSqGS1 jGr.GSGS2 jGr/    GSGS3 jGr0GSqGS4 jGr1    GSGS5 jGr2GSGS6 jGr3GSGS7 jGr4GSGS8 jGr5GSGS9 jGr6        GSGS: jGr7GSGS; jGr8gs  sn f ! , (       d  f       GN= f! \\\4 aH    \!GR&                  " SS 5       r\GR                  " \5      rSSS5         GM  ! , (       d  f        GN= ff = f(  zGUtility helpers for LiteLLM core request handling and provider support.    )annotationsN)	dataclassfield)	lru_cachewraps)	resources)iscoroutine)StringIO)abspathdirnamejoin)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_TRIM_RATIOFUNCTION_DEFINITION_TOKEN_COUNTINITIAL_RETRY_DELAYJITTERMAX_RETRY_DELAYMAX_TOKEN_TRIMMING_ATTEMPTS MINIMUM_PROMPT_CACHE_TOKEN_COUNTOPENAI_EMBEDDING_PARAMSTOOL_CHOICE_OBJECT_TOKEN_COUNTc                 ,    [         c  SSKJn   U q [         $ )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_loggerr)   r(   s    _/home/rurouni/.local/share/pipx/venvs/strix-agent/lib/python3.13/site-packages/litellm/utils.py_get_cached_custom_loggerr-   T   s     C$    c                 ,    [         c  SSKJn   U q [         $ )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_guardrailr1   r0   s    r,   _get_cached_custom_guardrailr4   b   s     I*r.   c                 ,    [         c  SSKJn   U q [         $ )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_handlerr7   r6   s    r,   $_get_cached_caching_handler_responser:   p   s     &J"8""r.   c                 ,    [         c  SSKJn   U q [         $ )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)_LLMCachingHandlerr9   r=   r<   s    r,   _get_cached_llm_caching_handlerr?   ~   s     !E.r.   c                 d    [         c$  SSKn U R                  R                  R                  q [         $ )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    r,   _get_cached_audio_utilsrG      s+     ";%88DDJJr.   )AllMessageValuesAllPromptValuesChatCompletionAssistantToolCall"ChatCompletionNamedToolChoiceParamChatCompletionToolParam$ChatCompletionToolParamFunctionChunkOpenAITextCompletionUserMessageOpenAIWebSearchOptions)	FileTypes)!OPENAI_RESPONSE_HEADERS	CallTypesChatCompletionDeltaToolCallChatCompletionMessageToolCallChoicesCostPerTokenCredentialItemCustomHuggingfaceTokenizerDelta	EmbeddingEmbeddingResponseFunctionImageResponseLlmProvidersLlmProvidersSetLLMResponseTypesMessage	ModelInfoModelInfoBaseModelResponseModelResponseStreamProviderFieldProviderSpecificModelInfoRawRequestTypedDictSandboxProvidersSearchProvidersSelectTokenizerResponseStreamingChoicesTextChoicesTextCompletionResponseTranscriptionResponseUsageall_litellm_paramsdict_CALL_TYPE_ENUM_MAPz%litellm.litellm_core_utils.tokenizerszanthropic_tokenizer.jsonrutf-8)encoding)TYPE_CHECKINGAnyCallableDictIterableListLiteralMappingOptionalTupleTypeUnioncastget_args)BaseLLMModelInfotype_to_response_format_param)r7   r=   r(   )BaseFilesConfig)BaseRealtimeHTTPConfig)AllowedModelRegion)exception_type)_is_non_openai_azure_modelget_llm_provider)get_supported_openai_params)LiteLLMResponseObjectHandler#_handle_invalid_parallel_tool_calls convert_to_model_response_objectconvert_to_streaming_response#convert_to_streaming_response_async)get_api_base)ResponseMetadata)_parse_content_for_reasoning)LiteLLMLoggingObject(redact_message_input_output_from_logging)CustomStreamWrapper)$BaseGoogleGenAIGenerateContentConfig)BaseOCRConfig)BaseSandboxConfig)BaseSearchConfigBaseTextToSpeechConfigBedrockModelInfo)CohereModelInfo)MistralOCRConfig)get_coroutine_checkerget_litellm_logging_classget_set_callbacks) get_litellm_metadata_from_kwargsmap_finish_reasonprocess_response_headers)delete_nested_valueis_nested_path)*_get_base_model_from_litellm_call_metadataget_litellm_params)_ensure_extra_body_is_safe)get_formatted_prompt)get_response_headers)update_response_metadata)Rules)executor)BaseAnthropicMessagesConfig)BaseAudioTranscriptionConfig)AsyncHTTPHandlerHTTPHandler)!get_num_retries_from_retry_policyreset_retry_policy)BaseBatchesConfig)BaseContainerConfig)BaseEmbeddingConfig)BaseImageEditConfig)BaseImageGenerationConfig)BaseImageVariationConfig)BasePassthroughConfig)BaseRealtimeConfig)BaseRerankConfig)BaseVectorStoreConfig)BaseVectorStoreFilesConfig)BaseVideoConfig)ANTHROPIC_API_ONLY_HEADERSAnthropicThinkingParam)RerankResponse) ChatCompletionDeltaToolCallChunkChatCompletionToolCallChunk#ChatCompletionToolCallFunctionChunkLiteLLM_Params)
get_secret)
BaseConfig)BaseTextCompletionConfig)BaseEvalsAPIConfig)BaseResponsesAPIConfig)BaseSkillsAPIConfig   )_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)MockExceptionOptional[List[str]]callback_listOptional[Dict[str, str]]additional_detailslocal_cacheFc                    US:X  a  [         R                  " U 5        O9US:X  a  [         R                  " U 5        OUS:X  a  [         R                  " U 5        [        R
                  SL a  USL a  [        U 5        g g g ! [         a     g f = f)NDEBUGINFOERRORTF)r   debuginfoerrorrF   set_verboseprint	Exception)print_statementlogger_only	log_levels      r,   print_verboser     s    

  1& 0'!  1$&;%+?/" ,@& s   A9A> >
B
Bc                    [         R                   Hw  n U S   [         R                  ;  a"  [         R                  R                  U S   5        U S   [         R                  ;  d  MU  [         R                  R                  U S   5        My     g)z*
Add custom_llm provider to provider list
providerN)rF   custom_provider_mapprovider_listappend_custom_providers)
custom_llms    r,   custom_llm_setupr    sl     11
j!)>)>>!!((J)?@j!)B)BB%%,,Z
-CD 2r.   c                   SSK Jn  SSKJn  U [         R                  ;  a+  [
        R                  " SU  S[         R                   35        gU" [        X 5      SSS9nU(       Gav  US:X  a  [        U5      S	L a  [         R                  R                  U5        [         R                  R                  U5        U [         R                  ;   a  [         R                  R                  U 5        U [         R                  ;   a   [         R                  R                  U 5        ggUS
:X  a  [        U5      S	L a  [         R                  R!                  U5        [         R                  R#                  U5        U [         R$                  ;   a  [         R$                  R                  U 5        U [         R&                  ;   a   [         R&                  R                  U 5        ggggg)z4
Add a custom logger callback to the specific event
r   )+_custom_logger_compatible_callbacks_literal)$_init_custom_logger_compatible_classz	Callback z@ is not a valid custom logger compatible callback. Known list - Ninternal_usage_cache
llm_routersuccessFfailure)rF   r  *litellm.litellm_core_utils.litellm_loggingr	  )_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_callback0_custom_logger_class_exists_in_failure_callbacksadd_litellm_failure_callback"add_litellm_async_failure_callbackfailure_callback_async_failure_callback)callbacklogging_eventr  r	  callback_classs        r,   -_add_custom_logger_callback_to_specific_eventr      s    D wHHHz!abi  cT  cT  bU  V	
 	98C!N Y&@P ,,II ,,OO 7333((// 7::://66 ;
 Y&@P ,,II ,,OO 7333((// 7::://66 ; '+ r.   c                l   ^  [        U 4S j[        R                  [        R                  -    5       5      $ )az  
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
c              3  N   >#    U  H  n[        U[        T5      5      v   M     g 7fN
isinstancetype.0cbr  s     r,   	<genexpr>C_custom_logger_class_exists_in_success_callbacks.<locals>.<genexpr>J  '      LB 	2tN+,,L   "%)anyrF   r  r  r  s   `r,   r  r  @  0      **W-L-LL  r.   c                l   ^  [        U 4S j[        R                  [        R                  -    5       5      $ )az  
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
c              3  N   >#    U  H  n[        U[        T5      5      v   M     g 7fr#  r$  r'  s     r,   r*  C_custom_logger_class_exists_in_failure_callbacks.<locals>.<genexpr>Z  r,  r-  )r.  rF   r  r  r/  s   `r,   r  r  P  r0  r.   c                    U R                  S5      =(       d    0 nUR                  S5      =(       d    0 nUR                  S5      =(       d    / nU$ )z,
Get the request guardrails from the kwargs
metadatarequester_metadata
guardrailsget)kwargsr5  r6  applied_guardrailss       r,   get_request_guardrailsr<  `  sH     zz*%+H!&:;Ar+//=Cr.   c                `   [        U 5      n/ n[        5       n[        R                   H  nUc  M  [	        XC5      (       d  M  UR
                  c  M)  UR                  SL a  UR                  UR
                  5        MU  UR
                  U;   d  Mg  UR                  UR
                  5        M     U$ )zP
- Add 'default_on' guardrails to the list
- Add request guardrails to the list
T)r<  r4   rF   	callbacksr%  guardrail_name
default_onr  )r:  request_guardrailsr;  r1   r  s        r,   get_applied_guardrailsrB  j  s     0724O%%Jx$I$I&&2&&$.&--h.E.EF,,0BB&--h.E.EF & r.   c                   [        [        R                  [           S5      nU R	                  S5      nU(       aL  [
        R                  (       a6  UR                  U5      nUR                  5        H  u  pEX@;  d  M  XPU'   M     ggg)zA
Updates kwargs with the credentials if credential_name in kwarg
CredentialAccessorlitellm_credential_nameN)	getattrsysmodules__name__r9  rF   credential_listget_credential_valuesitems)r:  rD  credential_namecredential_accessorkeyvalues         r,   load_credentials_from_listrQ  ~  so    
 !X!68LMjj!:;O7220FFW-335JC #s 6 3r.   c                r    [         R                  R                  5       nU (       a  UR                  U 5        U$ r#  )rF   r>  copyextend)dynamic_callbacksreturned_callbackss     r,   get_dynamic_callbacksrW    s1     !**//1!!"34r.   c                    US;   a%  US;   a  U SL=(       a    SU R                  5       ;   $ gU SL=(       a    SU R                  5       ;   $ )zB
Check if the target model is a Gemini or Vertex AI Gemini model.
)gemini	vertex_aivertex_ai_beta)rZ  r[  NrY  Tlowermodelcustom_llm_providers     r,   _is_gemini_modelra    sQ     GG"AA$BU[[])BB :U[[]!::r.   c                :    X;   a  U R                  US5      S   $ U $ )z/
Remove thought signature from a tool call ID.
r   r   split)tool_call_id	separators     r,   !_remove_thought_signature_from_idrg    s(      !!)Q/22r.   c                   U R                  S5      nU R                  S5      nUS:X  a  [        U[        5      (       a  / nU H  n[        US5      (       a  UR	                  5       nO9[        U[
        5      (       a  UR                  5       nOUR                  U5        M^  [        UR                  S5      [        5      (       a  XS   ;   a  [        US   U5      US'   UR                  U5        M     X@S'   U $ )zL
Process assistant message to remove thought signatures from tool call IDs.
role
tool_calls	assistant
model_dumpid)
r9  r%  listhasattrrl  rr   rS  r  strrg  )msg_copythought_signature_separatorri  rj  new_tool_callstctc_dicts          r,   %_process_assistant_message_tool_callsrv    s     <<Dl+J{z*d;;Br<((--/B%%'')%%b) '++d+S11.$-?$E'B%GDM !!'*% & "0Or.   c                    U R                  S5      S:X  a>  [        U R                  S5      [        5      (       a  XS   ;   a  [        U S   U5      U S'   U $ )zE
Process tool message to remove thought signature from tool_call_id.
ri  toolre  )r9  r%  rp  rg  )rq  rr  s     r,   _process_tool_message_idry    sW     ||Fv%*X\\.5QSV*W*W&>*BB'H(*E(H^$ Or.   c                    / nU  H  n[        US5      (       a  UR                  5       nO9[        U[        5      (       a  UR	                  5       nOUR                  U5        M^  [        XA5      n[        XA5      nUR                  U5        M     U$ )z?
Remove thought signatures from tool call IDs in all messages.
rl  )ro  rl  r%  rr   rS  r  rv  ry  )messagesrr  processed_messagesmsgmsg_dicts        r,   (_remove_thought_signatures_from_messagesr    s     3%%~~'HT""xxzH %%c* 9

 ,HR!!(+' * r.   c                  ^0 [         R                  SL a  [        R                  " S5         [	        5         [        U5      nSU;   a  US   OS n[        [        R                  [           S5      nU" 5       nUR                  SS 5      n	[        U	S9n
[        U
5      S:  Ga  U
 GHq  m0[        T0[        5      (       aV  [         R                  R                   R#                  T0S S S9m0T0b(  [%        U04S	 j[         R&                   5       5      (       a  Mo  T0[         R(                  ;  a  [         R(                  R+                  T05        T0[         R,                  ;  a  [         R.                  R1                  T05        T0[         R2                  ;  a  [         R.                  R5                  T05        T0[         R&                  ;  a  [         R.                  R7                  T05        T0[         R8                  ;  d  GMR  [         R.                  R;                  T05        GMt     [=        S
[         R&                   35        [        [         R(                  5      S:  d:  [        [         R,                  5      S:  d  [        [         R2                  5      S:  a  [        [>        5      S:X  au  [A        [C        [         R(                  [         R,                  -   [         R2                  -   5      5      q[        [        R                  [           S5      nU" 5       " [>        US9  [        [         R(                  5      S:  a  / n[E        [         R(                  5       HN  u  nm0URG                  T05      (       d  M  [         RH                  R+                  T05        UR+                  U5        MP     [K        U5       H"  n[         R(                  R                  U5        M$     [        [         R,                  5      S:  Ga  / n[E        [         R,                  5       H  u  nm0URG                  T05      (       a2  [         R.                  R7                  T05        UR+                  U5        MN  T0S:X  d  T0S:X  a2  [         R.                  R7                  T05        UR+                  U5        M  T0[         RL                  ;   d  M  [        T0[        5      (       d  M  [O        T0S5        M     [K        U5       H"  n[         R,                  R                  U5        M$     [        [         R2                  5      S:  a  / n[E        [         R2                  5       H  u  nm0URG                  T05      (       a2  [         R.                  R;                  T05        UR+                  U5        MN  T0[         RL                  ;   d  Md  [        T0[        5      (       d  M{  [O        T0S5        M     [K        U5       H"  n[         R2                  R                  U5        M$     S nS nS nS nURQ                  SS 5      b  [        US   [@        5      (       a  / n[E        US   5       Hh  u  nm0URG                  T05      (       d  T0S:X  d  T0S:X  d  M*  Ub'  [        U[@        5      (       a  UR+                  T05        OT0/nUR+                  U5        Mj     [K        U5       H  nUS   R                  U5        M     UR                  S5      nURQ                  SS 5      b)  [        US   [@        5      (       a  UR                  S5      n[R        (       ah   SSK*J+n  U" U5      n[         RZ                  (       a6  UR                  SS 5        UR                  SS 5        UR                  SS 5        [S        SSU 3SS9  SU;   a  US   q.[        U5      S:  a  US   OURQ                  SS 5      nU nU[^        R`                  Rb                  :X  d=  U[^        Rd                  Rb                  :X  d  U[^        Rf                  Rb                  :X  Ga  S n[        U5      S:  a  US   nOURQ                  SS 5      (       a  US   n[        [        R                  [           S5      nURh                  " 5       (       a  [        U[@        5      (       a  [        U5      S:  a  [        US   [j        5      (       ay  S US   ;   ap  [m        5       nU HB  nURQ                  S S!5      nUc  M  [        U[        5      (       d  M1  URo                  U5        MD     URq                  URs                  5       US"9  [        U[@        5      (       a  [        U5      S:  a   SS#K:J;n  SS$K<J=n  URQ                  S%5      nU(       d  U(       a   U" UUS&9u  nn  n[}        UU5      (       dY  [        R~                  " S'5        [        UU5      nSU;   a  UUS'   GOa[        U5      S:  a  [A        U5      n UU S'   [        U 5      nGO5GO3U[^        R                  Rb                  :X  d  U[^        R                  Rb                  :X  a(  [        U5      S:  a  US   OURQ                  SS 5      nGOU[^        R                  Rb                  :X  d  U[^        R                  Rb                  :X  a  [        U5      S:  a  US   OUS   nGOxU[^        R                  Rb                  :X  d  U[^        R                  Rb                  :X  a  [        U5      S:  a  US   OUS   nGO!U[^        R                  Rb                  :X  d  U[^        R                  Rb                  :X  a  [        U5      S:  a  US   OUS   nGOU[^        R                  Rb                  :X  d  U[^        R                  Rb                  :X  a  URQ                  S)5      nGO{U[^        R                  Rb                  :X  d  U[^        R                  Rb                  :X  aL  [        U5      S:  a  US   OUS*   n"[        5       n#U#R                  U"S+9n$S,U;   a	  U$US,   S-'   OS-U$0US,'   U$nGOU[^        R                  Rb                  :X  d  U[^        R                  Rb                  :X  a  URQ                  SS.5      nGOU[^        R                  Rb                  :X  d  U[^        R                  Rb                  :X  a@  [        U5      S:  a  US   O)URQ                  S5      =(       d    URQ                  SS/5      nGO'U[^        R                  Rb                  :X  dZ  U[^        R                  Rb                  :X  d<  U[^        R                  Rb                  :X  d  U[^        R                  Rb                  :X  a   SS0KXJYn%  SS1KZJ[n&  [        U5      S:  a  US   OURQ                  S25      n'[        U5      S:  a  US   OURQ                  SS!5      n(U'(       aK  U%" 5       n)U)R                  U(U'URQ                  S35      S49n*U*RQ                  S/ 5      n+U&" U+5      =(       d    S/nOS/nOS/nS6n,[        UUS79(       a  Sn,[        [        R                  [           S85      n-U-" 5       " UUU,US9   URQ                  S:5      U=(       d    S!UUUUUUUUS;9n.S<S!0n/S,U;   a  US,   U/S,'   S=U;   aZ  [        US=   [j        5      (       aB  US=   R                  5       U/S='   U/RQ                  S,5      (       d  US=   R                  5       U/S,'   U.R                  US!0 U/URQ                  S>S 5      S?9  U.U4$ ! [X         a    Un GNf = f! [X         a     GNf = f! [X         a-  n![        R                  " S([        U!5       35         S n!A!GNVS n!A!ff = f! [X         a/  n![        R~                  " S5[        U!5       35        S/n S n!A!GNS n!A!ff = f! [X         a  n![        R                  " S@5        U!eS n!A!ff = f)ANTze`litellm.set_verbose` is deprecated. Please set `os.environ['LITELLM_LOG'] = 'DEBUG'` for debug logs.rm  r   r>  )rU  r   r
  c              3  N   >#    U  H  n[        U[        T5      5      v   M     g 7fr#  r$  )r(  r)  r  s     r,   r*  !function_setup.<locals>.<genexpr>$  s&      /"AB #2tH~66"Ar-  z8Initialized litellm callbacks, Async Success Callbacks: r   )r   function_iddynamodb	openmeterr  r  r  s3r  )safe_deep_copyr{  inputpromptzlitellm.llm_callzKeyword Args: r   )categorymessagelevel	logger_fnr_  r   r   content r  r_  )r   )THOUGHT_SIGNATURE_SEPARATORr`  r^  zCRemoving thought signatures from tool call IDs for non-Gemini modelz6Error removing thought signatures from tool call IDs: queryfile)file_objr5  file_checksumspeechzdefault-message-value)GoogleGenAIAdapter)get_last_user_messagecontentsconfig)r_  r  r  z0Error extracting messages from Google contents: Fr:  	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_callbacksr:  r;  api_baselitellm_metadatastream_options)r_  useroptional_paramslitellm_paramsr  zKlitellm.utils.py::function_setup() - [Non-Blocking] Error in function_setup)arF   r   r   warningr  rB  rF  rG  rH  rI  poprW  lenr%  rp  rC   litellm_loggingr	  r.  r  input_callbackr  r  r  r  r  r  r  r  r  r   r   rn  set	enumerateis_async_callable_async_input_callbackreversedr  r   r9  add_breadcrumb'litellm.litellm_core_utils.core_helpersr  r   turn_off_message_logginguser_logger_fnrR   
completionrP  acompletionanthropic_messageshas_pre_call_rulesrr   r
   writepre_call_rulesgetvalue1litellm.litellm_core_utils.get_llm_provider_logicr   3litellm.litellm_core_utils.prompt_templates.factoryr  ra  r   r  tuple	embedding
aembeddingimage_generationaimage_generation
moderationamoderationatext_completiontext_completionrerankarerankatranscriptiontranscriptionrG   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_completion_is_streaming_requestrS  update_environment_variables	exception)1original_function	rules_objr  argsr:  r;  r  get_coroutine_checker_fncoroutine_checkerrU  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_objrD   r  r  r  contents_parammodel_paramadaptertransformedtransformed_messagesr  r   logging_objr  r  s1                                                   @r,   function_setupr    s     d"s	
U 	 4F; 6:V^VD\ $+KK!#:$
  56 JJ{D) 	 .@QR}!)h,,&99IInn t  o  H  '3 /")"A"A/ , , !7#9#99**11(;7#;#;;44QQRZ[7#;#;;44QQRZ[7#B#BB44WWX`a7#B#BB44WWX`a) ** J7KjKjJkl
 &&'!+7++,q07++,q0
 !**../../M !(H(=?R SmUw%%&*"$#,W-C-C#Dx$66x@@1188B'..u5 $E ""56&&**51 7w''(1,"$#,W-E-E#Fx$66x@@44WW  (..u5+x;/F 44WW  (..u5 Q QQ"8S11A(IV# $G( ""56((,,U3 7 w''(1,"$#,W-E-E#Fx$66x@@44WW  (..u5 Q QQ"8S11A(IV $G ""56((,,U3 7
  	"
  	(
  	"
  	( ::($/;
%&A
 A
 #%#,V4F-G#Hx%77AA:-4'6Bz7H H 8>>xH;C*7'..u5 $I ""56)*..u5 7(.

3E(F%::($/;
%&A
 A
 )/

3E(F%>(R!/!7 //"":t4""7D1""8T2+((89
 & #K0Nt9q=Qfjj$.G%	--333I11777I88>>>H4y1}7J--!*-CKK17;E((**x..MA%x{D11!,!!AeeIr2G*z'3/G/GW- "
 (( //+ )  (D))c(ma.?-
 +1**5J*K' /5!;K&+4G<8A2Aq ,E3FGG&,,a
 .V$&A.*
 &/1CF:. Y](,T
I+=IaL#(#3D ,,222I00666"%d)a-tAwVZZ5NH33999I77==="%d)a-tAwVH5EH--333I11777"%d)a-tAwVG_H33999I55;;;"%d)a-tAwVH5EH))///9	@Q@Q@W@W3Wzz'*H11777I33999.1$i!m47I13K'CCYCWMV#6Cz"?3&5}%Ez"$H**000IAQAQAWAW4Wzz'84H--333I//555
 t9q= QZZ( C::j*AB	  33999I77===I==CCCI>>DDD3 -0IMavzz*?U),TQd1gFJJwPR<S!02G")"R"R)!/%zz(3 #S #K
 ,7??:r+J(-.BC 32 
  7H /H 
 F$+KK!#>%
! 01"#45#ZZ(:;#)r!&?&?,K,K1
$ +5b)9)/
);N:&'J%&-
 -
 288J1K1P1P1RN-.
 "%%j11-34F-G-L-L-Nz*00)!::&6= 	1 	
 F""[  (!'(N  ) ! !. ! "**PQTUVQWPXY p  3$$Fs1vhO 3	3p    Y	
 	s  G 5E1 *D< * C  5B* #C  $|6 2F8 . A +} 	}	 >}  *} ?N B(~ 0 1~ 3D 6} } 	
}} }} 
~$"~ ~ 
$  
7227c                   #    USL aM  [        SU R                   35        SSKJn  UR	                  U R                  XUS9S9  U R                  UUUS9  g g 7f)NFz>Async Wrapper: Completed Call, calling async_success_handler: r   )GLOBAL_LOGGING_WORKERresultr  end_time)async_coroutine)r   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         r,   _client_async_logging_helperr    s}      	%-L[MnMnLop	
 	T<<'==x >  	= 	
 	AA! 	B 	
' 	.s   AAc                N   U R                  SS5      nUc  [        R                  nU R                  SS5      (       ag  [        [        R
                  [           S5      n[        [        R
                  [           S5      nU" UU R                  S5      S9nU" 5       U S'   Ub  UnX 4$ )za
Get the number of retries from the kwargs and the retry policy.
Used for the wrapper functions.
num_retriesNretry_policyr   r   r  r  )r9  rF   r   rF  rG  rH  rI  )r:  r  r   r   r   retry_policy_num_retriess         r,   _get_wrapper_num_retriesr    s     **]D1K))zz.$'',3KK!#F-
) %S[[%:<PQ#DN3$
  "4!5~#/2Kr.   c                    [        [        [        [        [        [
        R                  4      U R                  SS5      5      nU$ )zA
Get the timeout from the kwargs
Used for the wrapper functions.
timeoutN)r   r   r   floatinthttpxr   r9  )r:  r  r  s      r,   _get_wrapper_timeoutr
    s:     uc5==012FJJy$4OG Nr.   c                p    [        [        R                  [           S5      nU" 5       R	                  U 5      $ )Nr   )rF  rG  rH  rI  r  )rP  r   s     r,   check_coroutiner    s-    #CKK$9;RS "44U;;r.   c                  #     [        U5      nU R                  5       n[        5       n[        R
                   H5  n[        XT5      (       d  M  UR                  X25      I Sh  vN nUc  M3  UnM7     U$ ! [         a    Sn Nsf = f N#7f)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)rR   
ValueErrorrS  r-   rF   r>  r%  async_pre_call_deployment_hook)r:  r  typed_call_typemodified_kwargsr)   r  r  s          r,   r  r    s     #I. kkmO,.L%%h--#BB F !"( &   s?   BA4 ;BB"B#B,B4B BBBc                  #     [        U5      n[        5       n[        R                   HE  n[        XT5      (       d  M  UR                  U [        [        U5      U5      I Sh  vN nUc  MC  Us  $    U$ ! [         a    Sn Nsf = f N#7f)zX
Allow modifying / reviewing the response just after it's received from the deployment.
N)	rR   r  r-   rF   r>  r%  'async_post_call_success_deployment_hookr   r`   )request_dataresponser  r  r)   r  r  s          r,   r  r    s     #I. -.L%%h--#KKd#3X> F ! & O  s>   BA4 +B$B"B#B,B4B BBBc                    U c  g UR                   nU[        R                  R                  :X  d  U[        R                  R                  :X  Ga  [        U 5      nUSL a  g [        U [        5      (       Ga  [        U R                  5      S:  Ga  U R                  S   R                  R                  nUGb  UR                  XqS9  Ub  UR                  S5      OS nUb  UO[        R                  n	U	SL a   Ub  SU;   a  US    b  S n
[        US   [         5      (       a  US   R                  S5       b  US   n
O3["        R$                  R'                  US   5      (       a  [)        US   S9n
U
b.  [        R*                  R,                  R/                  U
S   S   US	9  Ub  SU;   a  [        US   [         5      (       a  S
US   ;   ax  US   S
   S:X  ak  SUS   ;   aa  [        US   S   [         5      (       aE  SUS   ;   a;  US   S   SL a/  [        R*                  R,                  R/                  US   S   US	9  g g g g g g g g g g g g g g ! [0         a     Nf = f! [2         a  nUeS nAff = f)NTr   r  enable_json_schema_validationresponse_formatjson_schemar  schema)r  r  r&  json_objectresponse_schemaenforce_validation)rI  rR   r  rP  r  r  r%  rd   r  choicesr  r  post_call_rulesr9  rF   r  rr   r   _completionsis_basemodel_typer   rC   json_validation_rulevalidate_schema	TypeErrorr   )original_responser_  r  r  r  r  is_coroutinemodel_response_per_request_validation_enable_json_schema_validationjson_response_formatr  s               r,   post_call_processingr,    sU   k$)22IY11777	 5 5 ; ;;./@A4' ##4mDD 1 9 9:Q>8I8Q8Q9!''' ' *5%55N5X
 $3#> !0 3 34S T%) 4 $;#F !8%,%J%J ;
  >E'!)(7(C,=,P,;<M,N/3-4 PT(<,60?@Q0R04-. -. 1@@Q0R0V0V0=1. 4818
 DS0AD.,@ .6-B-B-T-T,;<M,N.* .* 1NDS8IE612 -A ,@+K,3,F,F,[,[,k,k7K4A822:8< :H	 -l -. !0 ;$5$H$.?P/QSW$X$X$*o>O.P$P$34E$Fv$N#0%1$5#23D#E%F$.$34E$F(9%& %)	%" %" %9#23D#E%F$34E$F$8%" $(%( !( : : O O _ _+:;L+M(9,& .<	 !` !"%(%F%"%F%1 %Q %Y %I !<s 6 ? E <F (1 !)$(!)@  sJ   I AI  BI 7B*I !BI 
II II 
I,%I''I,c                .  ^ ^ [        [        R                  [           S5      nU" 5       m[	        T 5      U U4S j5       n[	        T 5      U U4S j5       n[        [        R                  [           S5      nU" 5       R                  T 5      nU(       a  U$ U$ )Nr   c                   > TR                   n[        U5      (       a  [        R                  bU  UR	                  S5      =(       d    0 R	                  SS 5      nUb(  [        R                  [        U5      ::  a  [        S5      eT" U 0 UD6n[        UUS9(       a[  SU;   aS  US   SL aK  / n[        U5       H  u  pgUR                  U5        M     [        R                  " XQR	                  SS 5      S9$ U$ U$ [        TX5        [        R                  R                  5       nS nUR	                  S	S 5      n	S
U;  a!  [        [        R                   " 5       5      US
'   [        U 5      S:  a  U S   OUR	                  SS 5      n
 U	c  [#        TR                   TU/U Q70 UD6u  pU	c   S5       e[%        U5        XS	'   ['        5       nU" TUUS9nXl        [        R*                  (       aH  [        R,                  [        R*                  :  a&  [/        [        R,                  [        R*                  S9e[        R                  bU  UR	                  S5      =(       d    0 R	                  SS 5      nUb(  [        R                  [        U5      ::  a  [        S5      e[1        SUR	                  SS5       S[        R2                   SUR	                  S0 5      R	                  SS5       35        UR	                  SS 5      c  [        R2                  c  UR	                  SS5      SL Ga  UR	                  S0 5      R	                  SS5      SLa  UR	                  SS5      SLa  UR	                  SS5      SLa  UR	                  SS5      SLa  UR	                  SS5      SLa  UR	                  SS5      SLa  UR	                  SS5      SLax  UR	                  SS5      SLac  [4        R6                  " S5        UR9                  U
=(       d    STU	UUUU S 9nUR:                  b"  [4        R6                  " S!5        UR:                  $ UR	                  S"S 5      b  U
b  [        R<                  SL a  U[>        R@                  RB                  :X  d<  U[>        RD                  RB                  :X  d  U[>        RF                  RB                  :X  a   U
nUR	                  S#S 5      b  S$UR	                  S#5       3nS n[        U 5      S%:  a  U S%   nOUR	                  SS 5      (       a  US   nUR	                  S"5      n[I        5       " U
UUUS S S&9nUUS"'   T" U 0 UD6n[        R                  R                  5       n[        UUS9(       a  SU;   aS  US   SL aK  / n[        U5       H  u  pgUR                  U5        M     [        R                  " XQR	                  SS 5      S9$ [K        [L        RN                  [            S(5      nU" UU	U
UUUS)9  U$ SU;   a
  US   SL a  U$ SU;   a
  US   SL a  U$ SU;   a
  US   SL a  U$ SU;   a
  US   SL a  U$ S*U;   a
  US*   SL a  U$ [P        RR                  " U5      (       a  U$ [U        UU
=(       d    S UTTS+9  URW                  UU US,9  [4        RX                  " S-5        [Z        R\                  " 5       n[K        [L        RN                  [            S.5      nUR^                  " UR`                  U	Rb                  UUU5        [K        [L        RN                  [            S(5      nU" UU	U
UUUS)9  U$ ! [         a"  n[1        S'[        U5       35         S nAGNS nAff = f! [         Ga  nTR                   nU[>        RD                  RB                  :X  Ga  UR	                  S/S 5      =(       d    [        Rd                  =(       d    S nUR	                  S0S 5      (       ab  [K        [L        RN                  [            S15      n[K        [L        RN                  [            S25      nU" UUR	                  S05      S39nU" 5       US0'   S [        l2        UR	                  S40 5      nS5UR	                  S5      =(       d    0 ;   nU(       a  U(       d  [g        U[h        Rj                  5      (       d>  [g        U[h        Rl                  5      (       d  [g        U[h        Rn                  5      (       a   UUS/'   [        Rp                  " U 0 UD6s S nA$ GO[g        U[        Rr                  Rt                  5      (       aA  U(       a:  U
U;   a4  U(       d-  [        U 5      S:  a	  UU
   U S'   OUU
   US'   T" U 0 UD6s S nA$ GO}U[>        Rv                  RB                  :X  Ga^  UR	                  S/S 5      =(       d    [        Rd                  =(       d    S nUR	                  S0S 5      (       ab  [K        [L        RN                  [            S15      n[K        [L        RN                  [            S25      nU" UUR	                  S05      S39nU" 5       US0'   S [        l2        S5UR	                  S5      =(       d    0 ;   nU(       a  U(       d}  [g        U[h        Rj                  5      (       d>  [g        U[h        Rl                  5      (       d  [g        U[h        Rn                  5      (       a   UUS/'   [        Rx                  " U 0 UD6s S nA$ [z        R|                  " 5       n[        R                  R                  5       nU	(       a  U	R                  UUUU5        UeS nAff = f)6Nr5  previous_modelszMax retries per request hit!r  complete_responseTr{  r{  litellm_logging_objr  r   r_  3logging_obj should not be None after function_setupr  request_kwargsr  current_cost
max_budgetzSYNC kwargs[caching]: cachingF; 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  r:  r  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_  r:  r  r  r  r&  r_  r  r  r  )r  r  r:  z0Wrapper: Completed Call, calling success_handlerr   r   r  r   r   r  context_window_fallback_dictmodel_group)@rI  _is_async_requestrF   num_retries_per_requestr9  r  r   r  r  r  stream_chunk_builderprint_args_passed_to_litellmdatetimenowrp  r   uuid4r  rQ  r?   _llm_caching_handlerr8  _current_costr   r   r;  r   r   _sync_get_cachecached_resultmodify_paramsrR   r  rP  r  r  r   rF  rG  rH  asyncior	   r,  sync_set_cacher   contextvarscopy_contextsubmitrunsuccess_handlerr   r%  openair   r   r   completion_with_retries
exceptionsr   r  responses_with_retries	traceback
format_excfailure_handler)r  r:  r  r/  r  chunksidxchunkr  r  r_  r=   rS  caching_handler_responserC  r{  rD  modified_max_tokensr  r  r   ctxr   r   r   r   rJ  _is_litellm_router_calltraceback_exceptionr  r  s                                r,   wrapperclient.<locals>.wrapper  s    &..	V$$..:#)::j#9#?R"D"D%t# #.66#o:NN'(FGG '77F$#
 (6123t;F&/&7
e, '8"77J)E  "MM 	%%6E&&**,
6<jj!47

 F*(+DJJL(9F$%*-d)a-tAwVZZQU=Vg	"&4%..	:'HL'PV'# 'EDE' 'v.,7() ? A8I"3%%9 
 0D, !!((7+=+==-%,%:%:#*#5#5  ..:#)::j#9#?R"D"D%t# #.66#o:NN'(FGG (Iu)E(FFWX_XeXeWf  gJ  KQ  KU  KU  V]  _a  Kb  Kf  Kf  gq  sx  Ky  Jz  { #JJy$7? ' 9!::i74?

7B/33JFdRJJ|U34?JJ159EJJ}e4D@JJ0%8DJJ/7tCJJy%0<JJ|U34? $$%AB(88#kr*;$/#-"+%! 9  ) ,99E"((63AAA 

<.:%)) !6!6!<!<< I$8$8$>$>> I$@$@$F$FFU!&Jzz/48D'3FJJ4O3P%Q
#H4y1}#'7J55#)*#5&,jj&>O*B*D##-!)(7#'$(+' ,?F<( '77F((,,.H$#
 (6123t;F&/&7
e, '8"77J)E 
 07H-/I0, -%$/#%#-!) "M&(VM-Bd-J'F<,@D,H"f,8I1Jd1R!V+7G0HD0Pf$	):d)B$$V,, !"(mt &"3# !// 0   RS **,Cs{{84jAHOO++ (/H%'A($ %'%! Mo ! U!$J3q6("STTUp  ^	)22II00666JJ}d3Rw7J7JRd  ::nd338?H-/R95 *1H-/C*& #D"#%+ZZ%?#K
 +, >*  # 06zz2B0, +8JJz*0b+'  (? #1foo66%a88%a)B)BCC0;}-&>>OOO D
 q'"4"4"O"OPP4!==34y1}">u"EQ*Fu*Mw,d=f==i11777JJ}d3Rw7J7JRd  ::nd338?H-/R95 *1H-/C*& #D"#%+ZZ%?#K
 +, >*  # +8JJz*0b+'  (? #1foo66%a88%a)B)BCC0;}-&==tNvNN"+"6"6"8((,,.H ++*J G}^	s   J:]+ ?B]+ B\< B]+ -]+ ]+ ]+ $]+ 4]+ ]+ ]+ 1C
]+ <
](]#]+ #]((]+ +m6FmmA&m7m=E9m6m<Ammc                   >^^^^^#    [        TX5        [        R                  R                  5       mS m[        [        R
                  [           S5      nUR                  SS 5      m[        5       nU" TUTS9nTR                  nSU;  a!  [        [        R                  " 5       5      US'   [        U 5      S:  a  U S   OUR                  SS 5      nUR                  S5      S LmUR                  SS 5        [        R                  " 5       n Tc  [        TR                  T T/U Q70 UD6u  mnTc   S	5       e[!        X5      I S h  vN nUb  UnUR                  S
5      n	U	b  TR"                  U	:w  a  U	Tl        TUS'   [%        U5        UTl        [(        R*                  (       aH  [(        R,                  [(        R*                  :  a&  [/        [(        R,                  [(        R*                  S9e[1        5       (       aB  [3        SUR                  SS5       S[(        R4                   SUR                  SS 5       35        UR7                  U=(       d    STTTUUU S9I S h  vN n
U
bB  U
R8                  b  U
R:                   c  U
R8                  $ U
R<                  SL a  U
R:                  $ UR                  SS 5      b  Ub  [(        R>                  SL a  U[@        RB                  RD                  :X  d<  U[@        RF                  RD                  :X  d  U[@        RH                  RD                  :X  a   UnUR                  SS 5      b  SUR                  S5       3nS n[        U 5      S:  a  U S   nOUR                  SS 5      (       a  US   nUR                  S5      n[K        5       " UUUUS S S9nXS'   T" U 0 UD6I S h  vN m[        R                  R                  5       m[O        UUS9(       ah  SU;   aU  US   SL aM  / n[Q        T5       H  u  nnURS                  U5        M     [(        RT                  " UUR                  SS 5      S9$ U" TTUUTTS9  T$ U[@        RV                  RD                  :X  a  T$ [Y        TUUTT S 9  [Z        R                  U5      nUb  []        UTUS!9I S h  vN mUR_                  TTUU S"9I S h  vN   U(       dG  [        TS#S5      (       a  S2UUUUU4S$ jjnUTl0        O![b        Rd                  " [g        TTTTTS%95        TRi                  TTTS&9  [k        T[l        5      (       a#  U
b   U
R:                   b  URo                  U
TTTS'9$ U" TTUUTTS9  T$  GN( GN! [L         a"  n[3        S[        U5       35         S nAGNS nAff = f GN N N! [L         Ga   n[p        Rr                  " 5       n[        R                  R                  5       mT(       ad  U(       d]   TRu                  UUTT5        O! [L         a  nUeS nAff = f TRw                  UUTT5      I S h  vN    O! [L         a  nUeS nAff = fTR                  n[y        XS(9u  nnU[@        RB                  RD                  :X  GaE  UR                  S)0 5      nS*UR                  S+5      =(       d    0 ;   nU(       a  U(       d   S [(        l=        UUS,'   TUS-'   [k        U[|        R~                  5      (       a  S.US/'   O$[k        U[|        R                  5      (       a  S0US/'   [(        R                  " U 0 UD6I S h  vN  s S nA$ ! [L         a     GOTf = f[k        U[(        R                  R                  5      (       aJ  U(       aC  UU;   a=  U(       d6  [        U 5      S:  a	  UU   U S'   OUU   US'   T" U 0 UD6I S h  vN  s S nA$ OU[@        R                  RD                  :X  a  S*UR                  S+5      =(       d    0 ;   nU(       a  U(       d   S [(        l=        UUS,'   TUS-'   [k        U[|        R~                  5      (       a  S.US/'   O$[k        U[|        R                  5      (       a  S0US/'   [(        R                  " U 0 UD6I S h  vN  s S nA$ ! [L         a     Of = f[        US,U5        [        XS(9n[        US1U5        UeS nAff = f7f)3Nr   r2  r4  r  r   r_  	fallbacks_is_litellm_internal_callr3  r  r6  zASYNC kwargs[caching]: r9  Fr:  z; kwargs.get('cache'): r;  r  r>  Tr?  r@  rA  r   r{  rB  rG  r  r0  r1  rH  rI  )r  r  r  )r  r  r:  r  _defer_async_loggingc            
     H   > [         R                  " [        TTTT TS95        g )Nr  r  r  r  r  )rX  create_taskr  )r  r  r  r  r  s   r,   _enqueue_deferred_logging@client.<locals>.wrapper_async.<locals>._enqueue_deferred_logging  s(    ++8,7'-+5)1=Yr.   ru  r  )_caching_handler_responseembedding_responser  r  )r:  r  rJ  rK  r5  r   r  exponential_backoff_retryretry_strategyconstant_retryr  returnNone)HrO  rP  rQ  rF  rG  rH  rI  r9  r?   rp  r   rR  r  r  r   r  r  r  rQ  rS  rF   r8  rT  r   r   r   r;  _async_get_cacherV  final_embedding_cached_response embedding_all_elements_cache_hitrW  rR   r  rP  r  r  r   r   r  r  r  rN  	arealtimer,  rs   r  async_set_cacherw  rX  rv  r  r  r%  r[   2_combine_cached_embedding_response_with_api_resultrc  rd  re  async_failure_handlerr  r   r_  r   r   acompletion_with_retriesra  r   r  aresponses_with_retriessetattrr
  )!r  r:  _update_response_metadatar=   rS  r  r_  rr  r  _hook_streamry  rC  r{  rD  rj  r  rf  rg  rh  _call_type_enumrw  rm  r   rJ  rl  r  r  r  r  r  r  r  r  s!                             @@@@@r,   wrapper_asyncclient.<locals>.wrapper_async  sd	    $%6E&&**,
$+KK!#=%
! 7=jj!47
 <=4E/!!5
 &..	F*(+DJJL(9F$%*-d)a-tAwVZZQU=V'-zz+'>d'J$

.5$4$8$8$:!h	"&4%..	:'HL'PV'#V 'EDE' %C6$UUO*( "::h/L'K,>,>,,N%1",7F()&v./CK,!!((7+=+==-%,%:%:#*#5#5   !!-fjjE.J-KK\]d]j]j\k  lC  DJ  DN  DN  OV  X\  D]  C^  _ +;;+2&7 +)'! <   & )4-;;G1QQ 5BBB.OOSWW4TTT 

<.:%)) !6!6!<!<< I$8$8$>$>> I$@$@$F$FFU!&Jzz/48D'3FJJ4O3P%Q
#H4y1}#'7J55#)*#5&,jj&>O*B*D##-!)(7#'$(+' ,?<(
 -d=f==F((,,.H$#
 (6123t;F&/&7
Ue, '8"77J)E  .%$/#%#-!) "Mi11777 "( &"3# 255i@O*F!'#-   '66"3	 7    -;(>FF	 	 =VK9''4(3#)'1%-9U EE%! F  6#455-9-MM ,^^.G'-)%	 _   &'%! MK V6j ! U!$J3q6("STTU >PF  W	"+"6"6"8((,,.H#<//.
H ! G%;;.
H   ! G *22I":&"VKI11777/5zz2B0, +8JJz*0b+'
  (?   + 1<}-6G23%v44  8SF#34'6??;;7GF#34%,%E%Et%Vv%VVVV$  q'"4"4"O"OPP4!==34y1}">u"EQ*Fu*Mw!2D!CF!CCCCi22888*7JJz*0b+'
  (?   + 1<}-6G23%v44  8SF#34'6??;;7GF#34%,%D%Dd%Uf%UUUU$  =+ +&FGAy'*GoW	s  Dc9V+ U/DV+ "U2#-V+ cV+ +c,BV+ 0BU5 4V+ ?V$ BV+ cV+ cV+ 8c93V+ ,V'-V+ V)BV+ !c"V+ .c/V+ 2V+ 5
V!?VV+ V!!V+ 'V+ )V+ +c6Ac8Xc
XXXc"Y 9X<:Y ?c 
Y
YYA7c	A7] ]]cc
]c]A+c_c	c
cA
cA7bbbcc
b)&c(b))(cccr   )rF  rG  rH  rI  r   r  )r  r   rn  r  r   r'  r  s   `     @r,   clientr    s    CKK)73EI
Y Yv
 B BH
 $CKK$9;RS(*<<=NOL r.   c                   U c  gU R                  SS5      SL d  U R                  SS5      SL d  U R                  SS5      SL d  U R                  SS5      SL d  U R                  SS5      SL dn  U R                  SS5      SL dY  U R                  S	S5      SL dD  U R                  S
S5      SL d/  U R                  SS5      SL d  U R                  SS5      SL d  USL a  gg)aR  
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_jobr8  )r:  is_pass_throughs     r,   rL  rL  B  s     ~

=%(D0::lE*d2::'/47::mU+t3::(%0D8::&.$6::i'4/::lE*d2::ou-5::/74?d"r.   c                2    SU ;   a	  U S   SL a  gU[         ;   $ )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)_STREAMING_CALL_TYPESr  s     r,   r  r  l  s'     6fX.$6---r.   c                F    Ub  [        US   US   US   S9nU$ [        U S9$ )N
identifierrevision
auth_token)r  r  r  r_  )create_pretrained_tokenizer_select_tokenizer_helper)r_  custom_tokenizer
_tokenizers      r,   _select_tokenizerr  {  s?     #0'5%j1'5


 #%00r.   maxsizec                    [         R                  SL a  [        U 5      $  [        U 5      nUb  U$  [        U 5      $ ! [         a#  n[
        R                  " SU 35         S nAN3S nAff = f)NTzError selecting tokenizer: )rF   disable_hf_tokenizer_download_return_openai_tokenizer_return_huggingface_tokenizerr   r   r   )r_  r  r  s      r,   r  r    su    ,,4'..@.u5M  $E**	  @:1#>??@s   < 
A)A$$A)c                    S[        5       S.$ )Nopenai_tokenizerr&  	tokenizer)r   r  s    r,   r  r    s    &5J5LMMr.   c                   U [         R                  ;   a!  SU ;   a  [        R                  " S5      nSUS.$ U [         R                  ;   a%  SU ;  a  [        R
                  " [        5      nSUS.$ SU R                  5       ;   d  SU R                  5       ;   a  [        R                  " S5      nSUS.$ S	U R                  5       ;   a  [        R                  " S
5      nSUS.$ g )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)rF   cohere_modelsr   from_pretrainedanthropic_modelsfrom_strclaude_json_strr]  )r_  cohere_tokenizerclaude_tokenizerr  s       r,   r  r    s    %%%+*>$441
 0>NOO	'**	*z/F$--o>/>NOO	ekkm	#{ekkm'C--.ST	/iHH	ekkm	#--.HI	/iHHr.   r  c                    U=(       d	    [        U S9n[        US   [        5      (       a  US   R                  USS9nOUS   R                  U5      n[	        US5      (       a  UR
                  $ U$ )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   encodero  r  )r_  textr  tokenizer_jsonencs        r,   r  r    sr     &G):)GN.-x88[)00"0M[)006 sEwwJr.   Tc                    U=(       d	    [        U S9nUS   S:X  a*  U(       a  [        US   U5      nUS   R                  XS9nU$ US   R                  U5      nU$ )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  r&  r  r  )skip_special_tokens)r  $_strip_huggingface_special_token_idsdecode)r_  tokensr  r  r  decs         r,   r  r    sy     &G):)GNf!889{+VF [)00 1 
 


%
,
,V
4CJr.   c           	         U R                  5       nUR                  5        VVs1 s H  u  p4[        USS5      (       d  M  UiM     nnnU(       d  U$ U Vs/ s H  ofU;  d  M
  UPM     sn$ ! [         a    Us $ f = fs  snnf s  snf )NspecialF)get_added_tokens_decoderr   rL  rF  )r  r  added_tokens_decodertoken_idadded_tokenspecial_token_idstokens          r,   r  r    s    (AAC &:%?%?%A%A!H;	51 	%A  
 %Hve6G)GEvHH   Is(   A- A?A?	B$B-A<;A<c                     [         R                  " XUS9nSUS.$ ! [         a8  n[        R                  " SU S35        [         R                  " XS9n SnANBSnAff = f)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  z%Error creating pretrained tokenizer: z-. Defaulting to version without 'auth_token'.)r  Nr  r  )r   r  r   r   r   )r  r  r  r  r  s        r,   r  r    sk    M--j
	 ,)DD  M3A36cd	
 --jL		Ms    
A.AAc                8    [         R                  " U 5      nSU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     r,   create_tokenizerr  	  s     ""4(I+)DDr.   r  c	                Z    [         R                  SL a  g[        5       " U UUUUUUUU5	      $ )z\
The same as `litellm.litellm_core_utils.token_counter`.

Kept for backwards compatibility.
Tr   )rF   disable_token_counterr   )	r_  r  r  r{  count_response_tokenstoolstool_choiceuse_default_image_token_countdefault_token_counts	            r,   token_counterr  #	  s@    . $$,!#%
 
r.   c                    / SQnX;   a  gg)zM
Helper function to know if a provider implementation supports httpx timeout
)r_  azurebedrockTFr  )r`  supported_providerss     r,   supports_httpx_timeoutr  J	  s     91r.   c                    [        U USS9$ )ah  
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`  rO  _supports_factoryr^  s     r,   r  r  V	  s     /& r.   c                    [        U USS9$ )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     r,   r  r  k	  s     /! r.   c                    [        U USS9$ )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     r,   r  r  	  s     /" r.   c                     [         R                  " XS9u  p  n[        XS9nUR                  SS5      nUc  SnU$ ! [         a2  n[
        R                  " SU  SU S[        U5       35         SnAgSnAff = f)	aj  
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_streamingTNzYModel not found or error in checking supports_native_streaming support. You passed model=, custom_llm_provider=	. Error: F)rF   r   _get_model_info_helperr9  r   r   r   rp  )r_  r`  r  
model_infor  r  s         r,   r  r  	  s    +2+C+C,
(Aq ,

 %/NN3NPT$U!$,(,%(( ghmgn  oE  FY  EZ  Zc  dg  hi  dj  ck  l	
 	s   9< 
A8(A33A8c                    [        [        R                  [           S5      nU" XS9u  p  n[        R                  R                  [        R                  R                  [        R                  R                  [        R                  R                  [        R                  R                  /nX;   a  g[        U US	S
9$ ! [         a2  n[
        R                  " SU  SU S[        U5       35         SnAgSnAff = f)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   r^  zOModel not found or error in checking response schema support. You passed model=r  r  NFTsupports_response_schemar  )rF  rG  rH  rI  r   r   r   rp  rF   r^   	PREDIBASEFIREWORKS_AI	LM_STUDIONEBIUS
DATABRICKSr  )r_  r`  r   r  r  *PROVIDERS_GLOBALLY_SUPPORT_RESPONSE_SCHEMAs         r,   r  r  	  s    	"3;;x#8:LM+;,
(Aq 	&&))&&##''2. H/& #  ]^c]ddz  |O  {P  PY  Z]  ^_  Z`  Ya  b	
 	s   +B= =
C9(C44C9c                    [        U USS9$ )zS
Check if the given model supports parallel tool calls and return a boolean value.
"supports_parallel_function_callingr  r  r^  s     r,   r  r  	  s     /0 r.   c                    [        U USS9$ )m  
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     r,   r  r  	  s      /' r.   c                    [        XSS9$ )zM
Check if the given model supports `tool_choice` and return a boolean value.
supports_tool_choicer  r  r^  s     r,   r  r  
       BX r.   c                H    [        XS9nUb  UR                  US5      SL a  gg)z^
Check if the given model supports a provider specific model info and return a boolean value.
r^  NFT)get_provider_infor9  )r_  r`  rO  provider_infos       r,   _supports_provider_info_factoryr  
  s3     &M  ]%6%6sE%Bd%Jr.   c                    [         R                  " XS9u  p  n[        XS9nUR                  US5      SL a  gUR                  U5      c]  [	        U 5      nUb>  [         R
                  R                  U5      =(       d    0 nUR                  US5      SL a  g[        XU5      nUb  U$ g! [         aK  n[        R                  " SU SU  SU S[        U5       35        [        XU5      nUb  Us SnA$  SnAgSnAff = f)	r  r^  FTN%Model not found or error in checking z support. You passed model=r  r  )rF   r   r  r9  _get_model_cost_key
model_costr  r   r   r   rp  )	r_  r`  rO  r  r  bare_model_key
bare_entrysupported_by_providerr  s	            r,   r  r   
  sG   (+2+C+C,
(Aq ,

 >>#u%-^^C (
 17N)$//33NCIr
>>#u-5$CC%! %0,, 3C58STYSZZp  rE  qF  FO  PS  TU  PV  OW  X	
 !@!
 !,((s)   6B) AB) B) )
C>3;C9.C>9C>c                    [         R                  " XS9u  p  n[        XS9nUR                  U5      nUSL a  gUcK  [	        U 5      nUb=  [         R
                  R                  U5      =(       d    0 nUR                  U5      SL a  gg! [         a5  n[        R                  " SU SU  SU S[        U5       35         SnAgSnAff = f)	u>  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^  FTNr   z" disabled state. You passed model=r  r  )
rF   r   r  r9  r  r  r   r   r   rp  )	r_  r`  rO  r  r  valr  r  r  s	            r,   _is_explicitly_disabled_factoryr  Y
  s    +2+C+C,
(Aq ,

 nnS!%<;07N)$//33NCIr
>>#&%/ 3C5 9  %w&<=P<Q R!fX	

 s   7B	 AB	 	
C+CCc                    [        XSS9$ )zECheck if a given model supports audio input in a chat completion callsupports_audio_inputr  r  r^  s     r,   r
  r
  
  s    BX r.   c                    [        XSS9$ )zCCheck if a given model supports pdf input in a chat completion callsupports_pdf_inputr  r  r^  s     r,   r  r  
  s    BV r.   c                    [        XSS9$ )zFCheck if a given model supports audio output in a chat completion callr
  r  r  r^  s     r,   supports_audio_outputr  
  r  r.   c                    [        U USS9$ )ai  
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     r,   r  r  
  s      /% r.   c                    [        U USS9$ )ae  
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     r,   r  r  
  s      /# r.   c                    [        U USS9$ )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     r,   r  r  
  s     / r.   c                    [        XSS9$ )zI
Check if the given model supports reasoning and return a boolean value.
supports_reasoningr  r  r^  s     r,   r  r  
  s     BV r.   c                    [        U USS9$ )zY
Check if the given model supports native structured outputs and return a boolean value.
!supports_native_structured_outputr  r  r^  s     r,   r  r  
  s     // r.   c                    [         R                  " XS9u  p  n[        XS9nUR                  S5      nUc  g[         R                  R                  U0 5      nUR                  SS5      nUc  g[        U[        5      (       a  U$ g! [         a2  n[        R                  " SU  SU S[        U5       35         SnAgSnAff = f)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^  rO  Nsupported_regionszQModel not found or error in checking supported_regions support. You passed model=r  r  )rF   r   r  r9  r  r%  rn  r   r   r   rp  )r_  r`  r  r  	model_keymodel_cost_datar  r  s           r,   get_supported_regionsr  
  s    +2+C+C,
(Aq ,

 NN5)	!,,00B?+//0CTJ$
 '..$$ _`e_ff|  ~Q  }R  R[  \_  `a  \b  [c  d	
 	s"   5B 5B .B 
C(B==Cc                    [        U USS9$ )zU
Check if the given model supports embedding image input and return a boolean value.
supports_embedding_image_inputr  r  r^  s     r,   r  r    s     /, r.   c                B   UR                  5        H  u  p#Uc  M
  [        U[        5      (       a  [        U5      X'   M.  [        U[        5      (       aC  U R                  U5      n[        U[        5      (       a  UR                  U5        X@U'   M  X0U'   M  X0U'   M     U $ r#  )rL  r%  rp  _convert_stringified_numbersrr   r9  update)existing_dictnew_dictkvexisting_nested_dicts        r,   _update_dictionaryr(  )  s     =!S!!#?#B At$$'4'8'8';$2D99(//2';!$'(!$#$a  ! r.   c                    [        U [        5      (       a1   SU R                  5       ;   d  SU ;   a  [        U 5      $ [	        U 5      $ U $ ! [
        [        4 a    U s $ f = f)zYConvert stringified numbers (including scientific notation) to appropriate numeric types.r  .)r%  rp  r]  r  r  r  r%  )rP  s    r,   r!  r!  <  s`    %		ekkm#se|U|# 5z! 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.)cache_creation_input_token_cost)cache_creation_input_token_cost_above_1hr1cache_creation_input_token_cost_above_200k_tokenscache_read_input_token_cost-cache_read_input_token_cost_above_200k_tokensc                |   / nU R                  S5      nSnU[        U5      S-
  :  aS  X4   [        ;   aG  US-  nUR                  SR	                  X4S 5      5        U[        U5      S-
  :  a  X4   [        ;   a  MG  U(       a  US   OU n[
         H8  nUR                  U5      (       d  M  UR                  U[        U5      S 5        M:     U(       a  [        XQS9nXu:w  a  UR                  U5        U HF  n[        R                  R                  U5      n	U	c  M'  U	R                  S5      c  M;  [        U	5      s  $    g)a  Best-effort lookup of a built-in ``model_cost`` entry for a custom key
whose shape ``get_model_info`` cannot resolve (double provider prefixes
like ``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.
/r   r   Nr^  litellm_provider)rd  r  r_   r  r   _BEDROCK_REGION_PREFIXES
startswith_strip_model_namerF   r  r9  rr   )
rO  r   
candidatessegmentsrg  baseregion_prefixstripped	candidateentrys
             r,   !_resolve_builtin_model_cost_entryr>  `  s    Jyy~H
C
H!
!hm&Fq#((8D>23 H!
!hm&F (:b>SD1??=))d3}#5#789 2 $4Nh'	""&&y1+=!>!J;   r.   c                  ^ 0 n[        U [        5      (       a  U nO)[        U [        5      (       a  [        R                  " U S9n[
        R                  R                  [
        R                  R                  1nUR                  5        GH  u  p4UR                  SS5      n[        U5      mXR;   d  [        U4S jU 5       5      (       a#  [        R                  R                  U0 5      nUnO [        [        [        US95      nUS   nUR                  S5      c  UR)                  SS5        [        R                  R                  U5      n
U
c  [        R                  R                  U5      n
U
c  0 n
S H#  nX;  d  M
  X;  d  M  UR)                  US5        M%     [+        Xd5      n[        R                  R-                  U0 5      R/                  U5        [1        5         [$        R2                  " SU SU 35        UR                  S5      S:X  a9  U[        R4                  ;  a"  [        R4                  R7                  U5        GM  GM  UR                  S5      S:X  a9  U[        R8                  ;  a"  [        R8                  R7                  U5        GM  GM  UR                  S5      S:X  a9  U[        R:                  ;  a"  [        R:                  R7                  U5        GM\  GM_  UR                  S5      S:X  a9  U[        R<                  ;  a"  [        R<                  R7                  U5        GM  GM  UR                  S5      S:X  aQ  UR?                  SS5      nUS   [        R@                  ;  a%  [        R@                  R7                  US   5        GM  GM  UR                  S5      S:X  a9  U[        RB                  ;  a"  [        RB                  R7                  U5        GM^  GMa  UR                  S5      S:X  a9  U[        RD                  ;  a"  [        RD                  R7                  U5        GM  GM  UR                  S5      S:X  a9  U[        RF                  ;  a"  [        RF                  R7                  U5        GM  GM  UR                  S5      S:X  a9  U[        RH                  ;  a"  [        RH                  R7                  U5        GMH  GMK  UR                  S5      S:X  a9  U[        RJ                  ;  a"  [        RJ                  R7                  U5        GM  GM  UR                  S5      S:X  a9  U[        RL                  ;  a"  [        RL                  R7                  U5        GM  GM  UR                  S5      S:X  a9  U[        RN                  ;  a"  [        RN                  R7                  U5        GM2  GM5  UR                  S5      S:X  a9  U[        RP                  ;  a"  [        RP                  R7                  U5        GM  GM  UR                  S5      S :X  a9  U[        RR                  ;  a"  [        RR                  R7                  U5        GM  GM  UR                  S5      S!:X  d  GM  U[        RT                  ;  d  GM   [        RT                  R7                  U5        GM"     U $ ! [         a    0 nUn[!        TUS9nUb>  ["         H1  n	UR                  U	5      b  M  UR                  U	5      c  M+  X   Xi'   M3      GNUR                  S	5      c,  UR                  S
5      c  [$        R&                  " SU S35         GN>f = f)"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"
    },
}
urlr3  r  c              3  L   >#    U  H  nTR                  U S 35      v   M     g7f)r1  N)r5  )r(  p_key_strs     r,   r*  !register_model.<locals>.<genexpr>  s)      =
2PQH1#Q((2Ps   !$r  rO  )rO  r   Nr+  r.  zregister_model: model=z not in built-in cost map and no prefix/region variant matched; cache cost fields will default to 0. To track cache cost, add cache_creation_input_token_cost and cache_read_input_token_cost to model_info)input_cost_per_tokenoutput_cost_per_tokenzadded/updated model=z in litellm.model_cost: r_  text-completion-openaicohere	anthropic
openrouterr1  r   r2  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%  rr   rp  rF   get_model_cost_mapr^   GITHUB_COPILOTrP  CHATGPTrL  r9  r.  r  r   get_model_infor   r>  _CACHE_PRICING_FIELDSr   r  r  r(  
setdefaultr"  $_invalidate_model_cost_lowercase_mapr   open_ai_chat_completion_modelsaddopen_ai_text_completion_modelsr  r  rd  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)r  loaded_model_cost_skip_get_model_info_providersrO  rP  r   existing_modelmodel_cost_keybuiltin_entryr   
_raw_entry_cost_fieldupdated_dictionarysplit_stringrD  s                 @r,   register_modelro    s     *d##&	J	$	$#66:F
 	##))""&"
 (--/
99/4s85 =
2P=
 :
 :
 %//33C<N N!%dN,E!F!/!6: 019148 ''++N;
 ++//4JJLK,1I"";5 M 0F%%nb9@@AST 	-.">"22J>JZ[	
 99'(H4'@@@66::3? AYY)*.FF'@@@66::3? AYY)*h6'///%%))#. 0YY)*k9'222((,,S1 3YY)*l:99S!,LBw'@'@@))--l2.>? AYY)*.AA':::0044S9 ;YY)*.EE'444**..s3 5YY)*.JJ'999//33C8 :YY)*.EE'444**..s3 5YY)*.JJ'999//33C8 :YY)*f4'---##'', .YY)*k9'222((,,S1 3YY)*m;'444**..s3 5YY)*i7'000&&**3/ 1YY)*h6'///%%))#.e 0f M  !#!$ A 8! !,!6!IIe,4 - 1 1% 8 D4A4HN1 "7 II?@H		"?@H"**0 6H H#s$   /Z//4]
']
;
]
>]
	]
c                @    Ub  [        U[        5      (       a  X;   a  ggNTF)r%  rn  r%  additional_drop_paramss     r,   _should_drop_paramrt    s"    *-t44'r.   c                    0 nU R                  5        H(  u  pEXA;   d  M  XQU   :w  d  M  [        XBS9SL d  M$  XSU'   M*     U$ )Nrr  F)rL  rt  )passed_paramsdefault_paramsrs  non_default_paramsr%  r&  s         r,   _get_non_default_paramsry  "  sR     ##%A&&"QV %&q! & r.   c           
     8  ^^^ SSK Jn	  [        5       n
U
R                  S5        U
R                  S5      mU
R                  S5      mU
R                  S5      nUR	                  5        H	  u  pXU'   M     S S S S S S.nU
R	                  5        VVs0 s H  u  pX;   d  M  XU   :w  d  M  X_M     snnm0 nUUU4S jnS nTb  [
        R                  U [        T5      S	9nTS
:X  d  TS:X  a  TnOTS:X  aT  [        R                  " 5       R                  5       nU" US9  [        R                  " 5       R                  TUU Tb  TOSS9nO/Ub,  UR                  U S9nU" US9  UR                  TUU Tb  TOSS9n[        UU
TU	UR                  SS 5      S9nU$ s  snnf )Nr   OPENAI_TRANSCRIPTION_PARAMSr|  r`  drop_paramsr:  )languager  r  temperaturetimestamp_granularitiesc                  > [        TR                  5       5      S:  ah  [        TR                  5       5      nU HG  nTSL d  [        R                  SL a  X ;  a  TR                  US 5        M4  X ;  d  M;  [        SST S3S9e   T$ g )Nr   T  z1Setting user/encoding format is not supported by =. To drop it from the call, set `litellm.drop_params = True`.status_coder  r  keysrn  rF   r}  r  r   )supported_paramsr  r%  r`  r}  rx  s      r,   _check_valid_arg;get_optional_params_transcription.<locals>._check_valid_argY  s    !&&()A-*//12D4'7+>+>$+F/&**1d3.0$'"STgSh  if  !g   &% .r.   r_  r   r_  r  groqr  Frx  r  r_  r}  r  rs  r  rv  r`  openai_paramsrs  )litellm.constantsr|  localsr  rL  ProviderConfigManager'get_provider_audio_transcription_configr^   rF   GroqSTTConfigget_supported_openai_params_sttmap_openai_params_sttr   map_openai_params/add_provider_specific_params_to_optional_paramsr9  )r_  r`  r~  r  r  r  r  r}  r:  r|  rv  special_paramsr%  r&  rw  r  r  provider_configr  rx  s    `     `           @r,   !get_optional_params_transcriptionr  2  s    > HM34'++,AB##M2K"&&x0N$$&a ' #'N "''))DA 	$%):$: 	)
 O& ?CO&/WW!"56 X 

 h&*=*H,		&"002RRT*:;!//1GG1+'2'>E	 H 
 
	$*FFUFS*:;);;1+'2'>E	 < 
 F'#/1%zz*BDIO ws   FF)Fc                >    U c  gSSSSSS.nUR                  U S5      $ )z3Map OpenAI size parameter to Vertex AI aspectRatio.z1:1z16:9z9:16)256x256512x512	1024x1024	1792x1024	1024x1792r8  )sizesize_to_aspect_ratios     r,   *_map_openai_size_to_vertex_ai_aspect_ratior    s=    |
   ##e r.   c           
     H  ^ ^^^^ [        5       mTR                  SS 5      m TR                  S5      mTR                  SS 5      n
TR                  SS 5      mTR                  SS 5      n	TR                  S5      nUR                  5        H`  u  pUR                  S5      (       a  TS:w  a  TS	:w  a  M)  US
:X  a  TS	:w  a  M7  UR                  S5      (       a  TS:w  a  TS:w  a  M[  UTU'   Mb     S S S S S S S S S S.	n[	        TUU	S9m0 nUUU UU4S jnU
b?  U
R                  T =(       d    SS9nU" US9  U
R                  TUT =(       d    STb  TOSS9nOTS:X  d  TS:X  d  T[        R                  ;   a  TnO|TS:X  aC  [        R                  R                  T S9nUR                  T S9nU" US9  UR                  T0 S9nO3TS:X  a-  SS/n U" US9  Ub  [        U5      US'   Ub  [        U5      US'   [        UR                  5       5      nU
b#  U
R                  T =(       d    SS9n[        U5      n[        UTT=(       d    SUU	S9nUR                  5        VVs0 s H8  u  pUc  M
  [!        U["        [        45      (       a  [%        U5      S:  d  M6  X_M:     nnnU$ s  snnf )Nr_  r`  r  r}  rs  r:  aws_r  	sagemakerr@  vertex_rZ  r[  )	nqualityr  r  styler  imageConfigr  web_search_options)rv  rw  rs  c                @  > [        TR                  5       5      S:  a  [        TR                  5       5      nU H_  n[        R                  SL d  TSL a+  X ;  a&  TR                  US 5        TR                  US 5        MF  X ;  d  MM  [        SSU ST ST S3S9e   T$ g )	Nr   Tr  z	Setting `z` is not supported by , r  r  r  )r  r  r%  r`  r}  r_  rx  rv  s      r,   r  7get_optional_params_image_gen.<locals>._check_valid_arg  s    !&&()A-*//12D''4/;$3F/&**1d3!%%a..0$'"+A3.DEXDYY[\a[b  c`  !a   &% .r.   r  r  r  Fr  r_  r  rx  r  r  r  sampleCountaspectRatior  r   )r  r  rL  r5  ry  r   r  rF   openai_compatible_providersBedrockImageGenerationget_config_classr  r  rn  r  r  r%  rr   r  )r_  r  r  r  r  r  r  r  r`  rs  r  r}  r:  r  r%  r&  rw  r  r  r  config_classr  rx  rv  s   `       `  `          @@r,   get_optional_params_image_genr    s+     HMgt,E'++,AB#''(94@O##M48K*../GN"&&x0N$$&<<9,1D1S/!&9[&HLL###{2#'77a '  "
N 1#%5
 ')O& &  "*FF+2 G 
 	*:;);;1++2'2'>E	 < 
 	x'')'"E"EE,			)55FFUFS'CC%CP*:;&8812 9 
 
	+=	 	*:;=-0VOM* -W.OM*  $N$7$7$9:M"*FF+2 G 
 -.E'#/52#5O $))++DA 	",Qt"="=Q! 	+  
 s   	J'(JJc           
       ^ ^^^ [        [        R                  [           S5      n	[	        5       n
U
R                  SS 5      mU
R                  S5      nU
R                  SS 5      mU
R                  SS 5      nU
R                  SS 5      =(       d    / nU
R                  SS 5        S:UUU U4S jjn[        R                  U
UTUT S9mS n0 nTb?  T[        R                  R                  5       ;   a  [        R                  T [        T5      S	9nUbj  UR                  T S
9nU" US9  UR                  T0 T Tb  TOSS9nU(       a5  U H/  nU[        ;   a  M  UU
;   d  M  U
U   c  M  UU;  d  M'  U
U   UU'   M1     GOTS:X  ae  T b^  ST ;  aX  STR!                  5       ;   aD  SU=(       d    / ;  a5  ["        R$                  SL d  TSL a  TR                  SS 5        O
['        SSS9eTnGO.TS:X  a:  U	" T TSS9nU" US9  ["        R(                  " 5       R                  T0 T Tb  TOSS9nGOTS:X  a<  U	" T =(       d    SSSS9nU" US9  ["        R*                  " 5       R                  T0 S9nGOTS:X  a8  U	" T =(       d    SSSS9nU" US9  ["        R,                  R                  T0 US9nGOnTS:X  d  TS:X  a7  U	" T SSS9nU" US9  ["        R.                  " 5       R                  T0 US9u  nnGO+TS:X  aN  ["        R0                  " 5       R                  5       nU" US9  ["        R0                  " 5       R                  T0 S9nGOTS :X  a  S!T ;   a  ["        R2                  " 5       nOS"T ;   a  ["        R4                  " 5       nOS#T ;   a  ["        R6                  " 5       nO|S$T ;   d  S%T ;   a  ["        R8                  " 5       nOZS&T ;   d  S'T ;   a  ["        R:                  " 5       nO8S(T R=                  5       ;   a  ["        R>                  " 5       nO/ nU" US9  0 UEnU$ UR                  5       nU" US9  UR                  T0 S9nGOTS):X  a3  U	" T S)SS9nU" US9  ["        R@                  " 5       R                  T0 S9nGOTS*:X  a:  U	" T S*SS9nU" US9  ["        RB                  " 5       R                  T0 T Tb  TOSS9nGO`TS+:X  a  U	" T S+SS9nU" US9  ["        RD                  RG                  T 5      (       a+  ["        RD                  " 5       R                  T0 T Tb  TOSS9nOy["        RH                  RK                  T 5      (       a+  ["        RH                  " 5       R                  T0 T Tb  TOSS9nO*["        RL                  " 5       R                  T0 T Tb  TOSS9n0 UEUEnU$ TS,:X  a:  U	" T S,SS9nU" US9  ["        RN                  " 5       R                  T0 T Tb  TOSS9nGO<TS-:X  a@  U	" T S-SS9nU" US9  ["        RP                  " 5       R                  T0 T Tb  TOSS9n0 UEUEnU$ TS.:X  a4  U	" T S.SS9nU" US9  ["        RR                  " 5       R                  T0 T S/9nGOTS0:X  a:  U	" T S0SS9nU" US9  ["        RT                  " 5       R                  T0 T Tb  TOSS9nGO|TS1:X  a:  U	" T S1SS9nU" US9  ["        RV                  " 5       R                  T0 T Tb  TOSS9nGO<TS2:X  a  ST;   a  TR                  S5      US'   [Y        TR!                  5       5      S3:  a^  ["        R$                  SL d  TSL a5  [[        TR!                  5       5      nU H  nTR                  US 5        M     O['        SS4T S5T S63S9eOTS:w  a  TS7:w  a  T["        R\                  ;  a~  [Y        TR!                  5       5      S3:  a^  ["        R$                  SL d  TSL a5  [[        TR!                  5       5      nU H  nTR                  US 5        M     O['        SS4T S5T S63S9eTnOTn[_        UU
T[[        [`        R                   " 5       5      URc                  SS 5      S89nS9U;   a$  [Y        US9   5      S3:X  a  UR                  S9S 5        U$ );Nr   r`  r:  r}  rs  allowed_openai_paramsc           	        > U c  g 0 nTR                  5        H  nX ;  d  M
  TU   X'   M     U(       a/  [        R                  SL d  Tb  TSL a  g [        ST SU ST S3S9eg )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  )r  rF   r}  r   )r  unsupported_paramsr%  r`  r}  r_  rx  s      r,   r  8get_optional_params_embeddings.<locals>._check_valid_argF  s    ##((*A((:1(="% + ""d*'K4,?, #233QRdQeeqrwqx  yc  d  r.   )rv  r  r`  rs  r_  r  r  r  Fr  r_  ztext-embedding-3
dimensionsTr  zSetting 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)rx  r  r:  rZ  rY  	lm_studior  zamazon.titan-embed-text-v1zamazon.titan-embed-image-v1zamazon.titan-embed-text-v2:0zcohere.embed-multilingual-v3zcohere.embed-v4
twelvelabsmarengonovamistraljina_aivoyagesapinfinityfireworks_ai)rx  r  r_  	sambanovaovhcloudollamar   zSetting z is not supported by r  r  r  
extra_body)r  Optional[list])2rF  rG  rH  rI  r  r  PreProcessNonDefaultParams(embedding_pre_process_non_default_paramsr^   _member_map_valuesr  get_provider_embedding_configr   r  r%   r  rF   r}  r   TritonEmbeddingConfigDatabricksEmbeddingConfignvidiaNimEmbeddingConfigVertexAITextEmbeddingConfigLmStudioEmbeddingConfigAmazonTitanG1Config&AmazonTitanMultimodalEmbeddingG1ConfigAmazonTitanV2ConfigBedrockCohereEmbeddingConfig TwelveLabsMarengoEmbeddingConfigr]  AmazonNovaEmbeddingConfigMistralEmbeddingConfigJinaAIEmbeddingConfigVoyageContextualEmbeddingConfigis_contextualized_embeddingsVoyageMultimodalEmbeddingConfigis_multimodal_embeddingsVoyageEmbeddingConfigGenAIHubEmbeddingConfigInfinityEmbeddingConfigFireworksAIEmbeddingConfigSambaNovaEmbeddingConfigOVHCloudEmbeddingConfigr  rn  r  r  r   r9  )r_  r  encoding_formatr  r`  r}  rs  r  r:  r   rv  r  r  r  r  r  paramobjectfinal_paramsr  r%  rx  s   `   ``               @r,   get_optional_params_embeddingsr  *  s0
    #*H<#
 HM'++,A4H"&&x0N##M48K*../GN)--.EtLRPR3T: & 	#KK') 3#9 	L 	
  6:OO'<#<#<#C#C#EE/MM!"56 N 

 "+:+V+V ,W ,
 	*:;);;1'2'>E	 < 
 )33]*%e,8_4-:5-AOE* * 
	( "%/ 2 7 7 99%:%@bA
 ""d*kT.A"&&|T:, # n  -		(6 3%

 	*:;!779KK1'2'>E	 L 
 
	,6+2 ,%

 	*:;!;;=OO12 P 
 
	,6+2 ,%

 	*:;!::LL12f M 
 
	+/Bh/N6 +%

 	*:; //1CC12f D 
	
 
	+++-IIK 	 	*:;!99;MM12 N 
 
		)'50!557F*e3CCEF+u4002F+u48IU8R99;FU"i5&8==?Fu{{}$668F!.>?%f:L!==?*:; 2212 3 
 
		)6 )%

 	*:;!88:LL12 M 
 
		)6 )%

 	*:;!779KK1'2'>E	 L 
 
	(6 (%

 	*:;22OOPUVV779KK'9$&/:/FE	 L   44MMeTT779KK'9$&/:/FE	 L   &;;=OO#5 "+6+BK	 P O 5/4V4		%6 %%

 	*:;!99;MM1'2'>E	 N 
 

	*6 *%

 	*:;!99;MM1'2'>E	 N 
 5/4V4		.6 .%

 	*:;!<<>PP12U Q 
 
	+6 +%

 	*:;!::<NN1'2'>E	 O 
 

	*6 *%

 	*:;!99;MM1'2'>E	 N 
 
	(--,>,B,B<,POL)!&&()A-##t+{d/B.3356A&**1d3  - #&'9&::OPcOd  eb  c  . 	x'7*w'J'JJ!&&()A-##t+{d/B.3356A&**1d3  - #&'9&::OPcOd  eb  c 
 1O,B'#/9>>@A%zz*BDIL |#L,F(G1(Lt,r.   c                    [        U [        5      (       a7  SU ;   a  U S   SL a  U S	 U R                  5        H  u  p[        U5        M     U $ [        U [        5      (       a  U  H  n[        U5        M     U $ )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%  rr   rL  _remove_additional_propertiesrn  r  rO  rP  items       r,   r  r    s{     &$!V+7M0NRW0W-. !,,.JC)%0 ) M 
FD	!	!D)$/  Mr.   c                    [        U [        5      (       a/  SU ;   a  U S	 U R                  5        H  u  p[        U5        M     U $ [        U [        5      (       a  U  H  n[        U5        M     U $ )zq
Relevant Issues: https://github.com/BerriAI/litellm/issues/6136, https://github.com/BerriAI/litellm/issues/6088
strict)r%  rr   rL  _remove_strict_from_schemarn  r  s       r,   r  r    sl     &$vx  !,,.JC&u- ) M 
FD	!	!D&t,  Mr.   c                2   US::  a  U $ [        U [        5      (       aM  U R                  SS5        U R                  SS5        U R                  5        H  u  p#[	        X1S-
  5        M     U $ [        U [
        5      (       a  U  H  n[	        XAS-
  5        M     U $ )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%  rr   r  rL  _remove_json_schema_refsrn  )r  	max_depthrO  rP  r  s        r,   r   r     s     A~&$

5$

9d# !,,.JC$UM: ) M 
FD	!	!D$Tq=9  Mr.   c                    / nUc  0 $ U R                  5        H  nX1;  d  M
  UR                  U5        M     U H  nU R                  US5        M     U $ )z3
Remove unsupported params from non_default_params
N)r  r  r  )rx  supported_openai_paramsremove_keysr  rO  s        r,   _remove_unsupported_paramsr    s]     K&	#((*/u% + sD) r.   c                p    U R                  5        VVs0 s H  u  pU[        ;  d  M  X_M     snn$ s  snnf )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"}
)rL  rq   )r:  rO  rP  s      r,   filter_out_litellm_paramsr    s9    ( &,\\^%3zssBT7T

^  s   22c                  ~    \ rS rSr\              SS j5       r\  S               SS jj5       rSrg)	r  i  c           	        UR                  5        Hw  u  pgUS:X  a  M  UR                  S5      (       a  US:w  a  UR                  S5      (       d  MA  US:X  a  US:w  a  MO  UR                  S5      (       a  US:w  a  US:w  a  Ms  XpU'   My     U R                  5        VVs0 s H]  u  pgUS	:w  d  M  US
:w  d  M  US:w  d  M  US:w  d  M%  US:w  d  M-  US:w  d  M5  Xe;  d  M<  Xd;   d  MC  XtU   :w  d  MM  [        XcS9SL d  M[  Xg_M_     nnnU$ s  snnf )Naws_bedrock_project_idr  r  r  r@  r  rZ  r[  r_  r`  api_versionr}  r  rs  rr  F)rL  r5  rt  )	rv  r  r`  rs  default_param_values#additional_endpoint_specific_paramsr%  r&  rx  s	            r,   #base_pre_process_non_default_params>PreProcessNonDefaultParams.base_pre_process_non_default_params  sk    #((*DA,, ||F###y0+66{CCo%*=*LY''';6'+;; !% +. &++-
-W  ..	 
 &  &  00  11  @  -  a00  '  AD- 	 
( "!)
sB   D/D7D?DDDDD%D/
D=Dc                l    [         R                  U UUU[         Vs0 s H  owS _M     snS/S9nU$ s  snf )Nr  rv  r  r`  rs  r  r  )r  r  r%   )	rv  r  r`  rs  r_  remove_sensitive_keysadd_provider_specific_paramsr%  rx  s	            r,   r  CPreProcessNonDefaultParams.embedding_pre_process_non_default_paramsF  sR     'JJ+-$7'=7N%O7N!g7N%O5<I K  	 "! &Ps   1r  N)rv  rr   r  rr   r`  rp  rs  r   r  rr   r  	List[str]r  rr   )FF)rv  rr   r  rr   r`  rp  rs  r   r_  rp  r  boolr  r  r  rr   )rI  
__module____qualname____firstlineno__staticmethodr  r  __static_attributes__r  r.   r,   r  r    s    1"1"1" !1" !4	1"
 #1" .71" 
1" 1"f  ',-2""" !" !4	"
 "  $" '+" 
" "r.   r  c           	     8   [         R                  U UUU[        S/S9nSU;   a(  Ub  UR                  US   S9US'   O[	        US   S9US'   SU;   a  [        U[        5      (       aq  US   n	U	 Hf  n
U
R                  S0 5      nUR                  SS5      nUc  M,  [        R                  " U5      nS	U;   a  US	   S
L a  UR                  S	S5        XS'   Mh     U(       a)  [        UU U[        [        R                  " 5       5      US9nU(       a  [        U5      nU$ )z9
Pre-process non-default params to a standardized format
r{  r  r  Nr  r  function
parametersr  Fr  )r  r  r   $get_json_schema_from_pydantic_objectr   r%  rn  r9  rS  deepcopyr  r  r  remove_sensitive_keys_from_dict)rv  r  r`  rs  r_  r  r  r  rx  r  rx  tool_functionr  new_parameterss                 r,   pre_process_non_default_paramsr$  ^  sh    4WW#%/5A-7L X  ..&DD$67H$I E  01 5R 23D E501 $$D* * #7+   !HHZ4M&**<>J%!%z!:*n<&'=>%G"&&'=tD.<l+  $L.' 3CHHJK#9
 <=OPr.   c                   ^ / SQn/ nU R                  5        H0  m[        U4S jU 5       5      (       d  M  UR                  T5        M2     U H  mU R                  T5        M     U $ )z)
Remove sensitive keys from a dictionary
)rO  secretaccess
credentialc              3  H   >#    U  H  oTR                  5       ;   v   M     g 7fr#  r\  )r(  phraserO  s     r,   r*  2remove_sensitive_keys_from_dict.<locals>.<genexpr>  s     I3H$3Hs   ")r  r.  r  r  )dsensitive_key_phrasesr  rO  s      @r,   r!  r!    s]     FKvvxI3HIIIs#  	c
 Hr.   c                j   0 n[         R                  nX$S   ;   a   US:X  a#  [         R                  " 5       R                  XS9nOUS:X  a#  [         R                  " 5       R                  XS9nOWUS:X  d  US:X  a#  [         R
                  " 5       R                  XS9nO(US:X  a"  [         R                  " 5       R                  XS9nSU;   d  S	U;   d  S
U;   Ga[  US:X  GaT  US:w  GaM  US:w  GaF  US:w  Ga?  US:w  Ga8  US:w  Ga1  US:w  Ga*  US:w  Ga#  US:w  Ga  US:w  Ga  US:w  Ga  US:w  Ga  US:w  Ga   US:w  a  US:w  a  US:w  a  US:w  a  US:w  a  US:w  a  US:w  a  US:w  a  US:w  a  US:w  a  US:w  a  U[         R                  ;  a  US:X  aZ  S US!'   S"[         l        S
U;   a(  UR                  S
5      US#'   UR                  S$S%5        U$ SU;   a  UR                  S5      US#'   U$ [         R                  (       a'  UR                  S
UR                  SS%5      5      US#'   U$ [        S&S'U S(3S)9eU$ )*z-For .completion(), preprocess optional params	providersr  r  r  rZ  r[  watsonx	functionsfunction_callr  r  rH  anyscaletogether_air  r  cerebrasxai	ai21_chat
volcenginedeepseek	codestralr  rJ  cohere_chatrI  ollama_chatrK  rL  nebiuswandbr  formatTfunctions_unsupported_modelr  Nr  z%Function calling is not supported by r*  r  )rF   !common_cloud_provider_auth_paramsAzureOpenAIConfigmap_special_auth_paramsAmazonBedrockGlobalConfigVertexAIConfigIBMWatsonXAIConfigr  add_function_to_promptr  r   )rv  rx  r`  r  common_auth_dicts        r,   pre_process_optional_paramsrI    s    O@@{;;	 ')%779QQ#0 R O !I-113KK'4 L    ;."&66%446NN#0 O O !I-%88:RR#0 S O 	))00((  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) . 00*..w7 $$AB '**%t& ! !$66*..{; $$AB  ..ASAWAW/33KFB =>  - #CDWCXXYZ 
 r.   c'           
     "'  ^ ^^^^9^: [        5       R                  5       m:T:R                  S5      n(T:R                  SS 5        S n)TbC  T[         V*s/ s H  n*U*R                  PM     sn*;   a  [
        R                  T [        T5      U&S9n)[        T:U(TU!T U)S9m9[        T:T9TS9n+SLUUU UU9U:4S jjn,[        [        R                  [           S5      n-U-" T TU&S9n.U.c  U-" T S	S
9n.U.=(       d    / n.U=(       d    / nU.R                  U5        U," U.=(       d    / S9  TS:X  aA  [        R                  " 5       R!                  T T9U+Tb  [#        T[$        5      (       a  TOSS9n+GOgTS:X  a  [        R&                  " 5       R!                  T T9U+Tb  [#        T[$        5      (       a  TOSS9n+[        R&                  " 5       R!                  T T9U+Tb  [#        T[$        5      (       a  TOSS9n+GOTS:X  d  TS:X  aA  [        R(                  " 5       R!                  T9U+T Tb  [#        T[$        5      (       a  TOSS9n+GOTS:X  a,  [        R*                  " 5       R!                  T9U+T Tb  TOSS9n+GObTS:X  aA  [        R,                  " 5       R!                  T9U+T Tb  [#        T[$        5      (       a  TOSS9n+GOTS:X  aA  [        R.                  " 5       R!                  T9U+T Tb  [#        T[$        5      (       a  TOSS9n+GOTS:X  aA  [        R0                  " 5       R!                  T9U+T Tb  [#        T[$        5      (       a  TOSS9n+GOTS:X  aA  [        R2                  " 5       R!                  T9U+T Tb  [#        T[$        5      (       a  TOSS9n+GOFTS:X  aA  [        R4                  " 5       R!                  T9U+T Tb  [#        T[$        5      (       a  TOSS9n+GOTS:X  a  T [        R6                  ;   dd  T [        R8                  ;   dP  T [        R:                  ;   d<  T [        R<                  ;   d(  T [        R>                  ;   d  T [        R@                  ;   aA  [        RB                  " 5       R!                  T9U+T Tb  [#        T[$        5      (       a  TOSS9n+GO@TS:X  aA  [        RD                  " 5       R!                  T9U+T Tb  [#        T[$        5      (       a  TOSS9n+GOTS:X  d  TS:X  aG  ST ;   aA  [        RB                  " 5       R!                  T9U+T Tb  [#        T[$        5      (       a  TOSS9n+GO[        RF                  RI                  T TS
9(       aA  [        RF                  " 5       R!                  T T9U+Tb  [#        T[$        5      (       a  TOSS9n+GOBTS:X  Gac  T [        RJ                  ;   a  ST ;   aA  [        RL                  " 5       R!                  T T9U+Tb  [#        T[$        5      (       a  TOSS9n+GO[        RN                  " 5       R!                  T T9U+Tb  [#        T[$        5      (       a  TOSS9n+GOT [        RP                  ;   aA  [        RR                  " 5       R!                  T9U+T Tb  [#        T[$        5      (       a  TOSS9n+GOJU)b.  U)R!                  T9U+T Tb  [#        T[$        5      (       a  TOSS9n+GO[        RT                  " 5       R!                  T9U+T Tb  [#        T[$        5      (       a  TOSS9n+GOTS:X  aA  [        RV                  " 5       R!                  T9U+T Tb  [#        T[$        5      (       a  TOSS9n+GOTS:X  Ga  [        [        R                  [           S5      n/U/RX                  " T 5      n0U/RZ                  " T 5      n1U0S :X  d  U0S!:X  aA  [        R\                  " 5       R!                  T T9U+Tb  [#        T[$        5      (       a  TOSS9n+G
OU0S	:X  aA  [        R^                  " 5       R!                  T T9U+Tb  [#        T[$        5      (       a  TOSS9n+G
OSU1;   a  U0S":X  a  U1[        R`                  Rc                  5       ;   aA  [        R`                  " 5       R!                  T9U+T Tb  [#        T[$        5      (       a  TOSS9n+G
OB[        Rd                  " 5       R!                  T9U+T Tb  [#        T[$        5      (       a  TOSS9n+G
OU)bC  U)R!                  T9U+T Tb  [#        T[$        5      (       a  TOSS9n+U0S#:X  a  U/Rf                  " T:U+S$9n+G	OTS%:X  aA  [        Rh                  " 5       R!                  T T9U+Tb  [#        T[$        5      (       a  TOSS9n+G	OrTS&:X  aA  [        Rj                  " 5       R!                  T9U+T Tb  [#        T[$        5      (       a  TOSS9n+G	O+TS':X  aA  [        Rl                  " 5       R!                  T T9U+Tb  [#        T[$        5      (       a  TOSS9n+GOTS(:X  aA  [        Rn                  " 5       R!                  T9U+T Tb  [#        T[$        5      (       a  TOSS9n+GOTS):X  aA  [        Rp                  " 5       R!                  T9U+T Tb  [#        T[$        5      (       a  TOSS9n+GOVTS*:X  aA  [        Rr                  " 5       R!                  T9U+T Tb  [#        T[$        5      (       a  TOSS9n+GOTS+:X  a1  U)b.  U)R!                  T9U+T Tb  [#        T[$        5      (       a  TOSS9n+GOTS,:X  d  TS:X  aA  [        RN                  " 5       R!                  T9U+T Tb  [#        T[$        5      (       a  TOSS9n+GOTS-:X  aA  [        RL                  " 5       R!                  T9U+T Tb  [#        T[$        5      (       a  TOSS9n+GODTS.:X  aA  [        Rt                  " 5       R!                  T9U+T Tb  [#        T[$        5      (       a  TOSS9n+GOTS/:X  aA  [        Rv                  " 5       R!                  T9U+T Tb  [#        T[$        5      (       a  TOSS9n+GOTS0:X  aA  [        Rx                  " 5       R!                  T T9U+Tb  [#        T[$        5      (       a  TOSS9n+GOoTS1:X  aA  [        Rz                  " 5       R!                  T9U+T Tb  [#        T[$        5      (       a  TOSS9n+GO(TS2:X  a&  [        R|                  " 5       R!                  T T9U+S39n+GOTS4:X  d  TS5:X  aA  [        R~                  " 5       R!                  T9U+T Tb  [#        T[$        5      (       a  TOSS9n+GOTS6:X  aA  [        R                  " 5       R!                  T9U+T Tb  [#        T[$        5      (       a  TOSS9n+GOhTS7:X  aA  [        R                  " 5       R!                  T9U+T Tb  [#        T[$        5      (       a  TOSS9n+GO!TS8:X  aA  [        R                  " 5       R!                  T9U+T Tb  [#        T[$        5      (       a  TOSS9n+GOTS9:X  aA  [        R                  " 5       R!                  T9U+T Tb  [#        T[$        5      (       a  TOSS9n+GOTS::X  aA  [        R                  " 5       R!                  T9U+T Tb  [#        T[$        5      (       a  TOSS9n+GOLTS;:X  aA  [        R                  " 5       R!                  T9U+T Tb  [#        T[$        5      (       a  TOSS9n+GOTS<:X  aA  [        R                  " 5       R!                  T9U+T Tb  [#        T[$        5      (       a  TOSS9n+GOTS=:X  aA  [        R                  " 5       R!                  T9U+T Tb  [#        T[$        5      (       a  TOSS9n+GOwTS>:X  a  [        R                  " 5       R!                  T9U+T Tb  [#        T[$        5      (       a  TOSS9n+T:R                  5        H:  n2[        R                  " 5       R                  U25      (       d  M.  [        S?U2 35      e   GOTS@:X  aA  [        R                  " 5       R!                  T9U+T Tb  [#        T[$        5      (       a  TOSS9n+GOTS	:X  aA  [        R                  " 5       R!                  T9U+T Tb  [#        T[$        5      (       a  TOSS9n+GOTTSA:X  aA  [        R                  " 5       R!                  T9U+T Tb  [#        T[$        5      (       a  TOSS9n+GOTSB:X  Ga  U&=(       d    T n3[        R                  " 5       R                  U3SC9(       aA  [        R                  " 5       R!                  T9U+U3Tb  [#        T[$        5      (       a  TOSS9n+GO[        R                  R                  U3SC9(       aA  [        R                  " 5       R!                  T9U+U3Tb  [#        T[$        5      (       a  TOSS9n+GO0[        R                  " SDR                  U[        R                  [        SE5      5      5        U=(       d9    [        R                  =(       d"    [        SE5      =(       d    [        R                  n[        R                  " 5       R!                  T9U+U3UTb  [#        T[$        5      (       a  TOSSF9n+OoU)b-  U)R!                  T9U+T Tb  [#        T[$        5      (       a  TOSS9n+O?[        R                  " 5       R!                  T9U+T Tb  [#        T[$        5      (       a  TOSS9n+[        U+T:T[        [        R                  " 5       5      U!SG9n+[        SHU+ 35        [        U+T9USI9n+U!(       au  [        [        R                  [           SJ5      n4[        [        R                  [           SK5      n5U! V6s/ s H  n6U4" U65      (       d  M  U6PM     n7n6U7 H  n8U5" U+U85      n+M     U+$ s  sn*f s  sn6f )MNr:  rC  )r_  r   rC  )rv  r  r`  rs  r_  r  )rv  rx  r`  c                d  > [         R                  " ST ST 35        [         R                  " ST 35        [         R                  " ST 35        0 nTR                  5        H;  nX ;  d  M
  US:X  d  US:X  d  US:X  a  M  US:X  a  TS	:X  a  M,  US
:X  a  M4  TU   X'   M=     U(       a  [        R
                  SL d  Tb/  TSL a*  UR                  5        H  nTR                  US5        M     g[        ST S[        UR                  5       5       ST S[        UR                  5       5       S3S9eg)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= z; provider = z(
LiteLLM: Params passed to completion() z4
LiteLLM: Non-Default params passed to completion() r  r  r  r  r   max_retriesTNr  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   r  rF   r}  r  r   rn  )	r  r  r%  r`  r}  r_  r  rx  rv  s	      r,   r  -get_optional_params.<locals>._check_valid_arg^  s    	,UG=AT@UV	
 	7G	
 	CDVCWX	
  #((*A(;!'7"71=8Q& -?q,A&) + ""d*'K4,?+002A&**1d3 3 - #233QRVWiWnWnWpRqQrr~  @E  F  F|  }A  BT  BY  BY  B[  }\  |]  ]n  o  r.   r   )r_  r`  rC  r_  r^  r  rJ  F)r_  rx  r  r}  anthropic_textr;  rI  r  r  maritalkr  	predibasehuggingfacer4  rZ  rY  r[  r:  r  r  r   converseconverse_likeinvokeclaude_platform)rv  r  
cloudflarer  r<  rN  petals	deepinfra
perplexityr  text-completion-codestraltext-completion-inceptionr  r  r5  r6  )r_  rx  r  r7  rM  r  r8  hosted_vllmvllmr  bedrock_mantler9  rK  r0  zLiteLLM 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)rx  r  r_  r  r}  r  z Final returned optional params: )r  rx  r  r   r   )r  r  )`r  rS  r  r^   rP  r  get_provider_chat_configr$  rI  rF  rG  rH  rI  rT  rF   AnthropicConfigr  r%  r  AnthropicTextConfigCohereChatConfigTritonConfigMaritalkConfigReplicateConfigPredibaseConfigHuggingFaceChatConfigTogetherAIConfigr_  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OpenrouterConfigIBMWatsonXChatConfigr  rF  is_watsonx_text_paramr  OpenAIConfigNebiusConfigAzureOpenAIO1Configis_o_series_modelAzureOpenAIGPT5Configis_model_gpt_5_modelr   r   r?  r  r   AZURE_DEFAULT_API_VERSIONrB  OpenAILikeChatConfigr  rn  r   r   _apply_openai_param_overrides);r_  r1  r2  r  top_pr  r  r  stopr?  max_completion_tokens
modalities
predictionaudiopresence_penaltyfrequency_penalty
logit_biasr  r`  r  seedr  r  rL  logprobstop_logprobsextra_headersr  parallel_tool_callsr}  r  reasoning_effort	verbosityrs  r{  thinkingr  safety_identifierrC  r:  r  r  r   r  r  r   r  r   bedrock_routebedrock_base_modelr  _azure_detection_modelr   r   rC  nested_pathspathrx  rv  s;   `    `            `          `                           @@r,   get_optional_paramsr    sF   X HMMOM"&&x0N lD),0O&+>'3C'38|C , 0HH!"56! I 

 8#%/5' 2#-/O) )V #*H<# 3)< 6X
 (-217R12)/R k)!113EE1+ *z+t/L/L  F 	
 
 0	0!557II1+ *z+t/L/L  J 	
 "557II1+ *z+t/L/L  J 	
 
	-1D1P!224FF1+ *z+t/L/L  G 	
 
	(!..0BB1+'2'>E	 C 
 

	*!002DD1+ *z+t/L/L  E 	
 
	+!113EE1+ *z+t/L/L  F 	
 
	+!113EE1+ *z+t/L/L  F 	
 
	-!779KK1+ *z+t/L/L  L 	
 
	-!224FF1+ *z+t/L/L  G 	
 
	++++G333G...G333G222G000!446HH1+ *z+t/L/L  I 	
 
	(!<<>PP1+ *z+t/L/L  Q 	
 
 0	0{*x5/@!446HH1+ *z+t/L/L  I 	
 
	(	(	;	;)< 
< 
 "99;MM1+ *z+t/L/L  N 	
 
	+G111e#99;MM#+=(7  +6:kSW;X;X (!& N 	   #*"7"7"9"K"K'9$3 '2z+t7T7T $" #L 	# g333%88:LL#5 / #.:k43P3P   M 	O (-??#5 / #.:k43P3P   @ 	O &::<NN#5 / #.:k43P3P   O 	O 
	+!113EE1+ *z+t/L/L  F 	
 
		)"3;;x#8:LM(::5A-<<UCJ&-?*J%::<NN#5 / #.:k43P3P   O 	O h&%??ASS#5 / #.:k43P3P   T 	O ..=H3L"00QQST #*"?"?"A"S"S'9$3 '2z+t7T7T $" #T 	# 779KK+=(7#  +6:kSW;X;X (!& L 	   (-??#5 / #.:k43P3P   @ 	O  11"2"R"R"/# 
	,!668JJ1+ *z+t/L/L  K 	
 
	(!..0BB1+ *z+t/L/L  C 	
 
	-!224FF1+ *z+t/L/L  G 	
 
	+!002DD1+ *z+t/L/L  E 	
 
	(!..0BB1+ *z+t/L/L  C 	
 
	+!113EE1+ *z+t/L/L  F 	
 
	,1L);;1+ *z+t/L/L  < 	
 
		)-@K-O!//1CC1+ *z+t/L/L  D 	
 
 ;	;!??ASS1+ *z+t/L/L  T 	
 
 ;	;!??ASS1+ *z+t/L/L  T 	
 
	,!224FF1+ *z+t/L/L  G 	
 
	,!113EE1+ *z+t/L/L  F 	
 

	*!002DD1+ *z+t/L/L  E 	
 
	%!//1CC1+ D 

 
	+/Bf/L!002DD1+ *z+t/L/L  E 	
 
	.!335GG1+ *z+t/L/L  H 	
 
	,!224FF1+ *z+t/L/L  G 	
 
	-!668JJ1+ *z+t/L/L  K 	
 
	&!,,.@@1+ *z+t/L/L  A 	
 
	&!002DD1+ *z+t/L/L  E 	
 
 0	0!99;MM1+ *z+t/L/L  N 	
 

	*!446HH1+ *z+t/L/L  I 	
 
	,!224FF1+ *z+t/L/L  G 	
 
		)!668JJ1+ *z+t/L/L  K 	
 #'')E))+AA%HH  p  qv  pw  x  *
 
	.!446HH1+ *z+t/L/L  I 	
 
	(!..0BB1+ *z+t/L/L  C 	
 
	(!..0BB1+ *z+t/L/L  C 	
 
	'!+!4u&&(::( ; 
 &99;MM#5 /, #.:k43P3P   N 	O **??( @ 
 &;;=OO#5 /, #.:k43P3P   P 	O    B  I  I!4!4jAT6U  5&&5125 44	  &779KK#5 /,' #.:k43P3P   L 
O 
	$);;1+ *z+t/L/L  < 	
 "668JJ1+ *z+t/L/L  K 	
 F'#/?DDFG5O 4_4EFG3'-3O  X!68HI%ckk(&;=RS#9O#9a^A=N#9O D1/4HO ! gC^ Ps   ANMANM+ANc                   U/ SQ[         R                  -   ;   a  [        SUS9SL a  [        UR	                  SS5      =(       d    0 5      nUR                  5        H  nXc;  d  M
  X   c  M  X   XV'   M     [        U R                  S5      [        5      (       d  0 U S'   0 U S   EUEnUb,  UR                  5        VVs0 s H  u  phXd;  d  M  Xh_M     n	nnOUn	[        [        R                  [           S5      n
U
" U	S9U S'   U $ UR                  5        H'  nXc;  d  M
  X   c  M  [        XdS9(       a  M!  X   X'   M)     U $ s  snnf )z1
Add provider specific params to optional_params
)r_  r  rH  r  rr  FNr   )r  )rF   r  rt  rr   r  r  r%  r9  rL  rF  rG  rH  rI  )r  rv  r`  r  rs  r  r%  initial_extra_bodyr&  processed_extra_bodyr   s              r,   r  r  ^  s    	8

-
-.	. 7M 
 m//dCIrJJ"''))m.>.J$1$4JM * o11,?FF02-"!,/""
 &1 !3 8 8 :( :6 AD : % ($ (:$)0H%'C*& -G/-OL)  ##%A%-*:*F% %2%5" & -(s   >EEc                h    U(       a*  U H$  nX0;   a  M
  X1;  a  M  UR                  U5      X'   M&     U $ )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  rx  r  r  s       r,   r  r    s>     *E'.%7%;%;E%BO" + r.   c                    U R                  5        VVs0 s H2  u  pUS:w  d  M  US:w  d  M  U[        ;   d  M!  U[        U   :w  d  M0  X_M4     nnnU$ s  snnf )Nr_  r`  )rL  r   )rv  r%  r&  rx  s       r,   get_non_default_paramsr    s|     "'')	)DAL 	 **	 	
 99 	 9!<< 	)  	 	s   AAAAAc                ^    U b  U $ Ub  U$ Ub  [        US-  S-  5      nUS:X  a  SnU$ Ub  U$ g)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   )r  )max_parallel_requestsrpmtpmdefault_max_parallel_requestscalculated_rpms        r,   calculate_max_parallel_requestsr    sS    : ($$	
	S4Z!^,QN	&	2,,r.   c                    U R                  S0 5      R                  S5      nUc!  U R                  S0 5      R                  S5      nU$ )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  orderr  r8  )
deploymentr  s     r,   _get_deployment_orderr    sE     NN+R044W=E}|R044W=Lr.   c                H   Ub.  U  Vs/ s H  n[        U5      U:X  d  M  UPM     nnU(       a  U$ U $ U  VVs/ s H  n[        U5      nUc  M  UPM     nnnU(       a  [        U5      OS nUb%  U  Vs/ s H  n[        U5      U:X  d  M  UPM     nnU$ U $ s  snf s  snnf s  snf r#  )r  min)	healthy_deploymentstarget_orderr,  filteredr  o_valid_orders	min_orderfiltered_deploymentss	            r,   _get_order_filtered_deploymentsr    s     *
*!.CA.F,.VA* 	 
 O""
 . -J'
3A 	
-    6Cs=1I 2 
1
$Z0I= 1 	  
 $#3
  
s!   BBBB1BBc                    U(       d  U $ [        U5      nU  Vs/ s H4  nUR                  S5      =(       d    0 R                  S5      U;  d  M2  UPM6     sn$ s  snf )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.
r  rm  )r  r9  )r  excluded_deployment_idsexcluded_setr,  s       r,   "_get_excluded_filtered_deploymentsr    s`      #""./L %$AEE,%2**40D 	
$  s   1AAc                v   U S:X  am  UR                   =(       d4    [        R                   =(       d    [        S5      =(       d    [        S5      nUb  [        U[        5      (       a  U$ UR                  $ U S:X  a  UR
                  nUb  U$  UR                  $ U S:X  a  UR                  nUb  U$ UR                  $ )z5
Return the region for a model, for a given provider
rZ  VERTEXAI_LOCATIONVERTEX_LOCATIONr  r0  )vertex_locationrF   r   r%  rp  aws_region_namewatsonx_region_nameregion_name)r`  r  vertex_ai_locationr  r  s        r,   _get_model_regionr  6  s     k) ** -&&--.- +,	 	 )j9KS.Q.Q%% %%% 
		)(88&"" ' %%%	 
		),@@*&&%%%r.   c                   [         R                  " U R                  U S9u  p  n[        X S9nUc0  [        R
                  " SR                  U R                  5      5        gUS:X  aG  [         R                  " 5       R                  5       n[         R                  " 5       R                  5       nOUS:X  aG  [         R                  " 5       R                  5       n[         R                  " 5       R                  5       nOUS:X  aG  [         R                  " 5       R                  5       n[         R                  " 5       R                  5       nOQUS:X  aG  [         R                  " 5       R                  5       n[         R                  " 5       R                  5       nO/ n/ nU H  nXtR                  5       ;   d  M    g	   U H  nXtR                  5       ;   d  M    g
   g)zq
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: {}r  rZ  r  r0  euus)rF   r   r_  r  r   r   r?  rB  get_eu_regionsget_us_regionsrE  rD  rF  r]  )r  r_  r`  r  model_region
eu_regions
us_regionsregions           r,   _infer_model_regionr  Q  s    (/'?'?"">($E1 %/L 5<<^=Q=QR	
 g%..0??A
..0??A
		+++-<<>
++-<<>
			)668GGI
668GGI
			)//1@@B
//1@@B


''))  ''))  r.   c                L    U R                   S:X  a  g[        U S9nUb  US:X  a  gg)0
Return true/false if a deployment is in the EU
r  Tr  Fr  r  r  r  s     r,   _is_region_eur    4     !!T) 'nELLD$8r.   c                L    U R                   S:X  a  g[        U S9nUb  US:X  a  gg)z0
Return true/false if a deployment is in the US
r  Tr  Fr  r  s     r,   _is_region_usr    r  r.   c                &    U R                   U:X  a  gg)r  TF)r  )r  allowed_model_regions     r,   is_region_allowedr    s     !!%99r.   c           	        SU R                   ;   a  [        U R                  [        5      (       a  [        U R                  [        5      (       a  U R                   R                  SS5      n[        R                  " 5       R                  UU R                  U R                  U R                  =(       d    [        R                  SU=(       d    SS9nUR                  SS5      nU$ g)	zE
Pass the litellm params for an azure model, and get back the region
r  zazure/r  
   chat)r_  api_keyr  r  r  modezx-ms-regionN)r_  r%  r  rp  r  replacerF   AzureChatCompletionget_headersr  r  r9  )r  r  _modelr  r  s        r,   get_model_regionr     s     	>'''~--s33~..44%%--h; 446BB"**#,,&22Wg6W6W C 
 !)]D Ar.   c                f     U R                  S5      n[        U5      S S nU$ ! [         a     gf = f)Nr{  d   r  )r9  rp  r   )r:  	_messagess     r,   get_first_chars_messagesr    s=    JJz*		N4C(	 s    # 
00c                H    SR                  S U  5       5      n[        U5      $ )Nr  c              3  R   #    U  H  oR                  5       (       a  M  Uv   M     g 7fr#  )isspace)r(  chars     r,   r*  $_count_characters.<locals>.<genexpr>  s     HTTDDTs   '	')r   r  )r  filtered_texts     r,   _count_charactersr    s!    GGHTHHM}r.   c                n   [        U S5      (       a  [        U S5      (       a  [        U SS 5      nU(       a  [        US5      (       a  UR                  n/ nU H  n[        US5      (       aC  UR                   H1  n[        US5      (       d  M  UR	                  UR
                  5        M3     MW  [        US5      (       d  Mj  UR	                  UR
                  5        M     SR                  U5      $ [        U S5      (       aP  [        U S5      (       a?  [        U SS5      nSU;   d  S	U;   a&  [        U SS5      n[        U[        5      (       a  U$ S$ U R                  n/ n	U H  n
[        U
[        5      (       aI  U
R                  R                  b0  U	R	                  [        U
R                  R                  5      5        M_  Ma  [        U
[        5      (       d  Mx  U
R                  R                  c  M  U	R	                  [        U
R                  R                  5      5        M     SR                  U	5      $ )
Nr&  r  outputr  r  r  deltaz
text.deltazoutput_text.delta)ro  rF  r  r  r  r  r   r%  rp  r  rU   r  rl   r  )response_objresponses_api_responseoutput_listresponse_output_partsoutput_itemcontent_part
event_typer  _choicesresponse_partschoices              r,   get_response_stringr    s   |V$$z)J)J ")z4!H!g.Dh&O&O077K 02!*;	22(3(;(;"<881889J9JK )< [&11)001A1AB  + 77011 |V$$w)G)G\626
:%)<
)JL'26E&uc225:: >J=Q=QH !#Nfg&&~~%%1%%c&..*@*@&AB 2 011||##/%%c&,,*>*>&?@  77>""r.   c                D   U=(       d    [         R                  nU S:X  d  U S:X  a-  U=(       d"    [         R                  =(       d    [        S5      nU$ U S:X  d  U S:X  a-  U=(       d"    [         R                  =(       d    [        S5      nU$ U S:X  a-  U=(       d"    [         R
                  =(       d    [        S5      nU$ U S	:X  a-  U=(       d"    [         R                  =(       d    [        S
5      nU$ U S:X  a-  U=(       d"    [         R                  =(       d    [        S5      nU$ U S:X  d  U S:X  a-  U=(       d"    [         R                  =(       d    [        S5      nU$ U S:X  a-  U=(       d"    [         R                  =(       d    [        S5      nU$ U S:X  a-  U=(       d"    [         R                  =(       d    [        S5      nU$ U S:X  a-  U=(       d"    [         R                  =(       d    [        S5      nU$ U S:X  a?  U=(       d4    [         R                  =(       d    [        S5      =(       d    [        S5      nU$ U S:X  a-  U=(       d"    [         R                  =(       d    [        S5      nU$ U S:X  a+  U=(       d"    [         R                  =(       d    [        S5      nU$ )Nr_  rH  OPENAI_API_KEYrJ  rN  ANTHROPIC_API_KEYrM  AI211_API_KEYrO  ALEPH_ALPHA_API_KEYbasetenBASETEN_API_KEYrI  r;  COHERE_API_KEYrQ  HUGGINGFACE_API_KEYrN  NLP_CLOUD_API_KEYr  REPLICATE_API_KEYr4  TOGETHERAI_API_KEYTOGETHER_AI_TOKENr=  NEBIUS_API_KEYr>  WANDB_API_KEY)rF   r  
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_keyr  s      r,   get_api_keyr7    sW   0Gx<3K#KOW//O:>N3OV NS 
	$8H(HUW22UjAT6UP NM 
	LW--LO1LJ NG 
	&Sw..S*=R2S 	D N= 
	"QW00QJ?P4Q: N7 
	!\]%BOW//O:>N3O4 N1 
	&Sw..S*=R2S 	. N' 
	$UW22UjAT6U$ N! 
	$UW22UjAT6U N 
	& /))/.// -.	 	 N 
	!OW//O:>N3O N 
	 MW..M*_2MNr.   c                     SS K n SSK J n  [        U S5      (       a  UR                  " U R                  5      $ UR                  " 5       $ )Nr   rP  UTC)rP  ro  rQ  r:  utcnow)dtrP  s     r,   get_utc_datetimer=  0  s5    !r5||BFF##  r.   c                   S n U [         R                  ;   aZ  S[         R                  U    ;   a  [         R                  U    S   $ S[         R                  U    ;   a  [         R                  U    S   $ [        [        R                  [
           S5      nU" U S9u  p  nUS:X  a  U" U S9nU$ U [         R                  ;   a\  S[         R                  U    ;   a  [         R                  U    S   $ S[         R                  U    ;   a  [         R                  U    S   $  g[        5       e! [         a    [        S	U  S
35      ef = f)a-  
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                    SU  S3n [         R                  R                  U5      nUR                  5         UR	                  5       nUR                  S5      nUb  U$ g ! [
         a     g f = fNzhttps://huggingface.co/z/raw/main/config.jsonmax_position_embeddingsrF   module_level_clientr9  raise_for_statusr  r   
model_name
config_urlr  config_jsonrA  s        r,   _get_max_position_embeddings4get_max_tokens.<locals>._get_max_position_embeddingsL  sv    .zl:OP
	2266zBH%%' #--/K&1oo6O&P#&2.. 		   AA 
A+*A+max_output_tokensr?  r   r  rQ  rF  NzModel zr isn't mapped yet. Add it here - https://github.com/BerriAI/litellm/blob/main/model_prices_and_context_window.json)rF   r  rF  rG  rH  rI  r   )r_  rI  r   r`  r  r?  s         r,   get_max_tokensrN  :  sQ   $&
G&&&"g&8&8&??))%01DEE!3!3E!::))%0>>"3;;x#8:LM+;%+H(Aq-/5GJG&&&"g&8&8&??))%01DEE!3!3E!::))%0>> ;  + 
UG  N  O
 	

s1   A D& ,D& 38D& ,A D& -,D& D& 
D& &E c                2    [         R                  " SSU 5      $ )Nz-\d+$r  resubrM  s    r,   _strip_stable_vertex_versionrS  x  s    66(B
++r.   c                2    SSK Jn  UR                  " U 5      $ )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   ry  )rF  r   s     r,   _get_base_bedrock_modelrV  |  s     C**:66r.   c                2    [         R                  " SSU 5      $ )z
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  rP  rM  s    r,   !_strip_openai_finetune_model_namerX    s     66/2z22r.   c                    U(       a  US;   a  [        U S9nU$ U(       a  US:X  d  US:X  a  [        U S9nU$ U(       a  US:X  a  [        U S9nU$ SU ;   a  [        U S9nU$ U $ )N)r  bedrock_converserM  rZ  rY  r  zft:)rV  rS  rX  )r_  r`  stripped_bedrock_modelstrip_versionstrip_finetunes        r,   r6  r6    sy    26UU!8E!J%%	{*.AX.M4F	"5"E4F	%:eLr.   _model_cost_lowercase_map_model_cost_mutation_generationc                     [         $ r#  )r_  r  r.   r,   "get_model_cost_mutation_generationra    s    **r.   c                 j    Sq [        S-  q[        R                  5         [        R                  5         g)zInvalidate 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  r.   r,   rW  rW    s/     !%#q(# &&(!--/r.   c                 v    [         R                   V s0 s H  o R                  5       U _M     sn q[        $ s  sn f )zRebuild the case-insensitive lookup map from the current model_cost.

Returns:
    The rebuilt map (guaranteed to be not None).
)rF   r  r]  r^  )r%  s    r,   !_rebuild_model_cost_lowercase_maprg    s5     8?7I7I J7I!A7I J$$ !Ks   6c                t    [        5       q[        R                  U 5      nUb  U[        R                  ;   a  U$ g)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)rg  r^  r9  rF   r  )potential_key_lowermatched_keys     r,   _handle_stale_map_entry_rebuildrk    s;     !B C+//0CDK;'2D2D#Dr.   c                v    [         R                   H%  nUR                  5       U :X  d  M  [        5       qUs  $    g)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)rF   r  r]  rg  r^  )ri  rO  s     r,   _handle_new_key_with_scanrm    s6     !!99;--(I(K%J " r.   c                    U [         R                  ;   a  U $ [        c
  [        5       qU R	                  5       n[        R                  U5      nUb  U[         R                  ;   a  U$ Ub  [        U5      nUb  U$ g)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)rF   r  r^  rg  r]  r9  rk  )potential_keyri  rj  s      r,   r  r    s    $ *** !($E$G!'--/+//0CDK ;'2D2D#D 56IJ"r.   c                (    [         R                  U    $ r#  )rF   r  rO  s    r,   _get_model_info_from_model_costrr  "  s    c""r.   c                f   U(       a  U R                  S5      b  U S   U:w  a  US:X  a  U S   R                  S5      (       a  gUS:X  a  U S   R                  S5      (       a  gUR                  S5      (       a  U S   R                  S5      (       a  gUS:X  a  gUS:X  a
  U S   S;   a  gUS	:X  a  gg
g)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.
r3  rZ  Tr  r  litellm_proxyazure_ai)r  r_  githubF)r9  r5  r  r`  s     r,   _check_provider_matchrx  &  s     )*6)*.AA+-*3

*[
!3"  N2z8

*^
$8%  ++I66:<

*Y
<  ?2 J.:>P3Q V
 4
  H,r.   )	TypedDictc                  H    \ rS rSr% S\S'   S\S'   S\S'   S\S'   S\S'   Srg	)
'PotentialModelNamesAndCustomLLMProvideriX  rp  split_modelcombined_model_namestripped_model_namecombined_stripped_model_namer`  r  N)rI  r  r  r  __annotations__r  r  r.   r,   r{  r{  X  s     "%%r.   r{  c           
        Uc:   [        [        R                  [           S5      nU" U S9u  p1  nU n[        XS9nUnOU(       aK  U R                  US-   5      (       a2  U R                  SS5      S   nU n[        X1S9nSR                  X5      nO.U nSR                  X5      n[        XS9nSR                  UU5      n[        UUUU[        [        U5      S9$ ! [         a    U n Nf = f)Nr   r  r^  r1  r   z{}/{})r|  r}  r~  r  r`  )rF  rG  rH  rI  r   r6  r5  rd  r?  r{  r   rp  )r_  r`  r   r|  r  r}  r~  r  s           r,   _get_potential_model_namesr  `  s)    "	 &s{{8'<>PQ5EE5R2Ka $/
 (;$	!1!1c!" " kk#q)!,#/
 (/~~(
$ %nn-@H/
 (/~~(
$
 3//%A &9: ;  	 K	 s   +C C('C(c                    SU  S3n [         R                  R                  U5      nUR                  5         UR	                  5       nUR                  S5      nUb  U$ g ! [
         a     g f = fr@  rB  rE  s        r,   rI  rI    sx    *:,6KLJ..22:>!!# mmo #.//2K"L".** rK  c                    [        U UUS9$ )zS
_get_model_info_helper wrapped with lru_cache

Speed Optimization to hit high RPS
r_  r`  r  )r  r  s      r,   re  re    s     "/ r.   c                    S nU(       a'  U[         ;   a  [        R                  U [        U5      S9nS nU(       a  UR	                  U S9nU$ )Nr  r  )r_   r  get_provider_model_infor^   r  )r_  r`  r  r  s       r,   r  r    sX     37O2oE/GG,/B"C H 
 7;J$66U6C
r.   c                B    [        S U R                  5        5       5      $ )zL
Check if the potential model name is in the model cost (case-insensitive).
c              3  N   #    U  H  n[        [        U5      5      S Lv   M     g 7fr#  )r  rp  )r(  potential_model_names     r,   r*  9_is_potential_model_name_in_model_cost.<locals>.<genexpr>  s(      $B  	C 456dB$Bs   #%)r.  r  )potential_model_namess    r,   &_is_potential_model_name_in_model_costr    s'      $9$@$@$B  r.   c           	     p    0 [         R                  E[         R                  EnX;   a  X@   n Ub  US:X  a  SnUb\  US:X  aV  SU -   [         R                  ;   a  SU -   n O9U S-   [         R                  ;   a  U S-   n OU S-   [         R
                  ;   a  U S-   n [        XS9n[        R                  " SU 35        US   nUS	   nUS
   nUS   n	US   nUn
SnU(       a'  U[        ;   a  [        R                  U [        U5      S9nUb,  [        USS5      n[        U5      (       a   U" U UUS9nUb  U$  US:X  aB  [#        U S9n[%        Sw0 SU _SU_SS_SS_SS_SS_SS_SS_SS_SS_SS_S S_S!S_S"S_S#S_S$S_6$  SnSn['        U5      nUb*  Un[)        [+        [,        U5      S%9n[/        UU
S&9(       d  SnUc8  ['        U 5      nUb*  Un[)        [+        [,        U5      S%9n[/        UU
S&9(       d  SnUc8  ['        U5      nUb*  Un[)        [+        [,        U5      S%9n[/        UU
S&9(       d  SnUc8  ['        U5      nUb*  Un[)        [+        [,        U5      S%9n[/        UU
S&9(       d  SnUc8  ['        U	5      nUb*  Un[)        [+        [,        U5      S%9n[/        UU
S&9(       d  SnUb  Uc  [1        S'5      eUR3                  S5      nUc'  [        R                  " S(R5                  X5      5        SnUR3                  S5      nUc'  [        R                  " S)R5                  X5      5        Sn[%        Sw0 SU_SUR3                  SS5      _SUR3                  SS5      _SUR3                  SS5      _SU_S*UR3                  S*S5      _S+UR3                  S+S5      _S,UR3                  S,S5      _S-UR3                  S-S5      _S.UR3                  S.S5      _S/UR3                  S/S5      _S0UR3                  S0S5      _S1UR3                  S1S5      _S2UR3                  S2S5      _S3UR3                  S3S5      _S4UR3                  S4S5      _S5UR3                  S5S5      _S6UR3                  S6S5      _S7UR3                  S7S5      _S8UR3                  S8S5      _S9UR3                  S9S5      _S:UR3                  S:S5      _S;UR3                  S;S5      _S<UR3                  S<S5      _S=UR3                  S=S5      _S>UR3                  S>S5      _S?UR3                  S?S5      _S@UR3                  S@S5      _SAUR3                  SAS5      _SBUR3                  SBS5      _SCUR3                  SCS5      _SDUR3                  SDS5      _SEUR3                  SE5      _SFUR3                  SF5      _SU_SGUR3                  SGS5      _SHUR3                  SHS5      _SIUR3                  SIS5      _SJUR3                  SJS5      _SKUR3                  SKS5      _SLUR3                  SLS5      _SMUR3                  SMS5      _SNUR3                  SNS5      _SOUR3                  SOS5      _SPUR3                  SPS5      _SQUR3                  SQS5      _SRUR3                  SRS5      _SSUR3                  SSS5      _STUR3                  STS5      _SUUR3                  SUS5      _SVUR3                  SVS5      _SWUR3                  SWS5      _SXUR3                  SXS5      _SYUR3                  SYS5      _SZUR3                  SZS5      _S[UR3                  S[S5      _S\UR3                  S\S5      _SUR3                  SU5      _SUR3                  S5      _SUR3                  SS5      _SUR3                  SS5      _S]UR3                  S]S5      _SUR3                  SS5      _S UR3                  S S5      _S!UR3                  S!S5      _S"UR3                  S"S5      _S^UR3                  S^S5      _S_UR3                  S_S5      _S$UR3                  S$S5      _S`UR3                  S`S5      _SaUR3                  SaS5      _SbUR3                  SbS5      _ScUR3                  ScS5      _SdUR3                  SdS5      _SeUR3                  SeS5      _SfUR3                  SfS5      _SgUR3                  SgS5      _ShUR3                  ShS5      _SiUR3                  SiS5      _SjUR3                  SjS5      _SkUR3                  SkS5      _S#UR3                  S#S5      _SlUR3                  SlS5      _SmUR3                  SmS5      _SnUR3                  SnS5      _SoUR3                  SoS5      _SpUR3                  SpS5      _SqUR3                  SqS5      _SrUR3                  SrS5      _SsUR3                  SsS5      _StUR3                  StS5      _6$ ! [         a$  n[        R                   " SU UU5         SnAGNSnAff = f! [         a8  n[        R                  " SuU 35        [        SvR5                  X5      5      eSnAff = f)xzq
Helper for 'get_model_info'. Separated out to avoid infinite loop caused by returning 'supported_openai_param's
Nr[  rZ  zmeta/z@latestr^  z6checking potential_model_names in litellm.model_cost: r}  r~  r  r|  r`  r  rT  )r_  r  r  zcCould not get dynamic model info for model=%s, provider=%s; falling back to the static cost map: %srQ  rM  rO  r?  max_input_tokensrL  rF  r   rG  r3  r  r  r  r  r  r  supports_assistant_prefillr  r  r  rq  rw  z|This model isn't mapped yet. Add it here - https://github.com/BerriAI/litellm/blob/main/model_prices_and_context_window.jsonz`model={}, custom_llm_provider={} has no input_cost_per_token in model_cost_map. Defaulting to 0.zamodel={}, custom_llm_provider={} has no output_cost_per_token in model_cost_map. Defaulting to 0.input_cost_per_token_flexinput_cost_per_token_priorityr+  r-  r.  r/  6cache_read_input_token_cost_above_200k_tokens_priority-cache_read_input_token_cost_above_272k_tokens6cache_read_input_token_cost_above_272k_tokens_priority-cache_read_input_token_cost_above_512k_tokens cache_read_input_token_cost_flex$cache_read_input_token_cost_priorityr,  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_512k_tokensinput_cost_per_queryinput_cost_per_secondinput_cost_per_audio_tokeninput_cost_per_image_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(regional_processing_uplift_multiplier_eu(regional_processing_uplift_multiplier_usoutput_cost_per_audio_tokenoutput_cost_per_characteroutput_cost_per_reasoning_token'output_cost_per_token_above_128k_tokens+output_cost_per_character_above_128k_tokens'output_cost_per_token_above_200k_tokens0output_cost_per_token_above_200k_tokens_priority'output_cost_per_token_above_272k_tokens0output_cost_per_token_above_272k_tokens_priority'output_cost_per_token_above_512k_tokensoutput_cost_per_secondoutput_cost_per_second_1080p output_cost_per_video_per_secondoutput_cost_per_imageoutput_cost_per_image_tokenoutput_vector_sizecitation_cost_per_tokentiered_pricingr  r
  r  r  r  r  r  r  r  supports_none_reasoning_effort!supports_minimal_reasoning_effortsupports_low_reasoning_effortsupports_xhigh_reasoning_effortsupports_max_reasoning_effort$bedrock_output_config_effort_ceilingsearch_context_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: zThis model isn't mapped yet. model={}, custom_llm_provider={}. Add it here - https://github.com/BerriAI/litellm/blob/main/model_prices_and_context_window.json.r  )rF   
azure_llmsazure_embedding_modelsvertex_llama3_modelsrq  rt  r  r   r   r_   r  r  r^   rF  callabler   r  rI  rc   r  rr  r   rp  rx  r  r9  r?  )r_  r`  r  r  r  r  r}  r~  r  r|  model_cost_custom_llm_providerr  provider_get_model_infoprovider_model_infor  r?  _model_inforO  _matched_key_input_cost_per_token_output_cost_per_tokens                        r,   r  r    s   G
M**Mg.L.LM
%E*/BFV/V"-*/Bk/Q'">">>%"g&C&CC	)"g&C&CC	) :!
 	DEZD[\	
 44IJ34IJ'<*(
$ ,M:34IJ)<&6:#6/#I3KKl3F&G L O &&-o?OQU&V#/00*A#!) '+'
 +622 7 -/5GJ  % "& #'	
 &' '( "/  *. *. +/ &* ,0 )- '+  $(! & 59K!%C //BCL'"=$sC.Q,*(F #'K"259+&C"Ad3PSn"UK0#.,J '+"23OP+&C"Ad3PSn"UK0#.,J '+"23FG+&C"Ad3PSn"UK0#.,J '+"2;?+&C"Ad3PSn"UK0#.,J '+"ck  S  6A__&6! %,$$v}}
 )*%6Aoo'7" &-$$w~~
 *+&  XX&??<>X "-1CT!JX #.//2Et"L	X
 &;X +6///+X /:oo3T/X 1<5t1X CN//GCX$ -8OO14-%X* ?JooCT?+X0 HSLdH1X6 ?JooCT?7X< HSLdH=XB ?JooCT?CXH 2=62IXN 6A__:D6OXT ;F//?;UXZ *5.*[X` 8C<d8aXf 8C<d8gXl ALEtAmXr 8C<d8sXx ALEtAyX~ 8C<d8XD &1__5KT%REXF '2oo6Mt&TGXH ,7??0$,IXN ,7??0$,OXT &1__5KT%RUXV 1<5t1WX\ 1<5t1]Xb .9__2.cXh /:oo3/iXn '=oXp ,7??0$,qXv 0;4d0wX| :E>:}XB :E>:CXH -8OO14-IXN +6///+OXT 1<5t1UXZ 9D=t9[X` =HOOA4=aXf 9D=t9gXl BMFBmXr 9D=t9sXx BMFByX~ 9D=t9XD (37OQU'VEXF .9__2D.GXL 2=62MXR '2oo6Mt&TSXT -8OO14-UXZ $/??3G#N[X\ )4-t)]Xb  +/?FcXd "-&(;"eXj !__V,kXl *5.*mXr *5.*sXx !,0A4 HyXz +6///+{X@ &1__5KT%RAXB ,7??0$,CXH )4-t)IXN &1__5KT%ROXP '2oo6Mt&TQXR $/??3G#NSXT 0;4d0UXZ +6///+[X` 3>//73aXf %0OO4I4$PgXh &1__5KT%RiXj $/??3G#NkXl 0;4d0mXr 3>//73sXx /:oo3T/yX~ 1<5t1XD /:oo3T/EXJ 6A__:D6KXP '2oo6Mt&TQXR /:oo3T/SXX  OOE40YXZ  OOE40[X\ #.//2Et"L]X^ %0OO4I4$P_X` *5.*aXf )4-t)gXl $/??3G#NmXn %0OO4I4$PoX Xs ! "**B+ d
  
9!=> n  u  u
 	

sJ   D"g3 %g 2Ag3 ;ag3 
g0g+%g3 +g00g3 3
h5=3h00h5c                    [         R                  " XS9n[        U UUUS9n[        XS9nU(       a"  UR	                  5        H  u  pxUc  M
  XU'   M     [        S0 UDSU0D6$ )Nr^  r_  r`  r  r  r  r  )rF   r   r  r  rL  rb   )	r_  r`  r  r  r  r  r  rO  rP  s	            r,   _build_model_infor  j  s}     &AA )/	K &M '--/JC #(C  0 T{T<STTr.   c                    [        XUS9$ )Nr  )r  r  s      r,   rc  rc    s     x r.   c                8    Ub  [        XX#5      $ [        XU5      $ )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_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  rc  r  s       r,   rT  rT    s%    \  XOO!%hGGr.   c                    [         R                  S[        R                  S[        R                  S[        R                  S[
        R                  S[        R                  SSS0nUR                  U S5      $ )	zConverts 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arrayr  NoneTypenull)rp  rI  r  r  r  rn  rr   r9  )python_type_namepython_to_json_schema_typess     r,   json_schema_typer    s]     	hiywxF# '**+;XFFr.   c                    SSK nSSKJn  SSKJn  U R                  nUR                  " U 5      nU" U5      nSR                  US    Vs/ s H  oR                  5       PM     sn5      n	0 n
/ nUR                  " U 5      R                  nUR                  5        GHx  u  p[        US5      (       a   [        UR                  R                  5      nOSnSnSnUS    H  nUR                   U:X  d  M  [        US	5      (       aU  UR"                  nS
U;   a  UR%                  S5      S   nO#SU;   a   ['        [)        U" U5      5      5      nSn[        U5      nSR                  UR*                   Vs/ s H  oR                  5       PM     sn5      nM     UUUS.n[-        UR                  5        VVs/ s H!  u  nn[/        U[&        5      (       d  M  UU4PM#     snn5      X'   UR0                  UR2                  :X  d  GMg  UR5                  U5        GM{     UU	SU
S.S.nU(       a  UUS   S'   U$ ! [
         a  nUeSnAff = fs  snf ! [
         a     GNf = fs  snf s  snnf )a<  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
Parametersr&  optional,{r  )r&  descriptionenumr  r&  
propertiesnamer  r  r  required)inspectastr  numpydoc.docscraper  r   rI  getdocr   strip	signaturer  rL  ro  r  r  r  r&  rd  rp  rn  descrr   r%  defaultemptyr  )input_functionr  r  r  r  r  	docstringnumpydocsr  r  required_params
param_info
param_namer  
param_typeparam_description
param_enum
param_data
param_dictr%  r&  r  s                          r,   function_to_dictr    sR   $5 ""D~.Ii(H))0CD0C1WWY0CDEK JO"">2==J'--/
5,'')%*:*:*C*CDJJ 
 #<0J*,:v..!+J!Z/%/%5%5c%:1%=

*!),T,z2J-K)LJ)1J "2*!=J$(II*//.R/Qwwy/.R$S!! 1& ,

 "& * 0 0 2I 21jC6HVaV 2I"


 ==EKK'"":.O 0V "$
F +:|Z(MI   E:  ) ! ! /S JsA   H1 
I0I
0I2I I 1
I;H==I

IIc                b    [         R                  " U 5      nUR                  US9n[        U5      $ )Nr  )r	  URL	copy_withrp  )original_urlnew_pathrA  modified_urls       r,   
modify_urlr  `  s+    
))L
!C==h=/L|r.   c                   SnSnU(       a  UnU(       a  Un[        U5       Vs/ s H	  nSUS./PM     n	n[        R                  " 5       n
 [        R                  " U U	UUUS9  [        R                  " 5       nX-
  nUSSS S.$ s  snf ! [         a*  n[        R                  " 5       nX-
  nUSSUS.s S nA$ S nAff = f)	NzHey, how's it goingr  r  ri  r  )r_  r{  r`  r  force_timeoutr  )total_response_time
calls_madestatusr  failed)rangetimerF   batch_completionr   )r_  r`  r  r  	num_callsr  test_prompt
test_callsr  r{  r  r  response_timer  s                 r,   load_test_modelr$  f  s     (KJ
DI*DUVDUq&[9:DUHVJ
   3'	
 99; -#0	
 	
 W$  
99; -#0	
 	

s#   B7B	 	
B=B82B=8B=c                    U S:X  a#  [         R                  " 5       R                  5       $ U S:X  a#  [         R                  " 5       R                  5       $ U S:X  a#  [         R                  " 5       R                  5       $ / $ )z,Return the fields required for each providerr  r  ru  )rF   r  get_required_paramsr  AzureAIStudioConfigr`  s    r,   get_provider_fieldsr)    sk     l*'')==??		(##%99;;	
	***,@@BB 	r.   c            	     L   [        5       R                  5        V Vs0 s H  u  pXc  S O[        US9_M     nn n0 n0 n[        R                  " SS 5      nU(       a  UR                  S5      O/ nUR                  5        Hd  u  pUc0  [        R                  " 5       X0'   [        R                  " 5       X@'   M8  [        R                  " US9X0'   [        R                  " US9X@'   Mf     U H1  n[        R                  " 5       X1'   [        R                  " 5       XA'   M3     X44$ s  snn f )Nr@  NO_PROXYr  )proxy)	r   rL  r   osgetenvrd  r	  HTTPTransportAsyncHTTPTransport)rO  rA  proxiessync_proxy_mountsasync_proxy_mountsno_proxyno_proxy_urlsr,  s           r,   !create_proxy_transport_and_mountsr6    s    017799HC 	[Ten49  
  yyT*H+3HNN3'Mmmo
=%*%8%8%:"&+&>&>&@#%*%8%8u%E"&+&>&>U&K# & !&!4!4!6"'":":"<  001s   D c                   Sn/ nU c  UUS.$  [        [        R                  [           S5      nU" U S9u  px  nU(       G	a  US:X  a+  S[
        R                  ;   a  SnGOUR                  S5        GOUS	:X  aU  S
[
        R                  ;   a,  S[
        R                  ;   a  S[
        R                  ;   a  SnGOJUR                  / SQ5        GO5US:X  a?  S[
        R                  ;   d  S[
        R                  ;   a  SnGOUR                  S5        GOUS:X  a+  S[
        R                  ;   a  SnGOUR                  S5        GOUS:X  a+  S[
        R                  ;   a  SnGOUR                  S5        GOUS:X  a+  S[
        R                  ;   a  SnGOpUR                  S5        GO]US:X  a+  S[
        R                  ;   a  SnGO?UR                  S5        GO,US:X  a+  S[
        R                  ;   a  SnGOUR                  S5        GOUS:X  aA  S[
        R                  ;   a  S[
        R                  ;   a  SnGOUR                  SS/5        GOUS:X  a+  S[
        R                  ;   a  SnGOUR                  S5        GOUS :X  a+  S![
        R                  ;   a  SnGOeUR                  S!5        GORUS":X  a+  S#[
        R                  ;   a  SnGO4UR                  S#5        GO!US$:X  a+  S%[
        R                  ;   a  SnGOUR                  S%5        GOUS&:X  a+  S'[
        R                  ;   a  SnGOUR                  S'5        GOUS(:X  a+  S)[
        R                  ;   a  SnGOUR                  S)5        GOUS*:X  d  US+:X  a  S,[
        R                  ;   a  S-[
        R                  ;   dd  S.[
        R                  ;   dP  S/[
        R                  ;   d<  S0[
        R                  ;   d(  S1[
        R                  ;   d  S2[
        R                  ;   a  SnG
OUR                  S,5        UR                  S-5        G
OUS3;   a+  S4[
        R                  ;   a  SnG
OUR                  S45        G
OUS5:X  a+  S6[
        R                  ;   a  SnG
OUR                  S65        G
OlUS7:X  a+  S8[
        R                  ;   a  SnG
ONUR                  S85        G
O;US9:X  a+  S:[
        R                  ;   a  SnG
OUR                  S:5        G
O
US;:X  aP  S<[
        R                  ;   d  S=[
        R                  ;   a  SnG	OUR                  S<5        UR                  S=5        G	OUS>:X  a+  S?[
        R                  ;   a  SnG	OUR                  S?5        G	OUS@:X  a+  SA[
        R                  ;   a  SnG	OeUR                  SA5        G	ORUSB:X  a+  SC[
        R                  ;   a  SnG	O4UR                  SC5        G	O!US&:X  a+  S'[
        R                  ;   a  SnG	OUR                  S'5        GOUSD:X  a+  SE[
        R                  ;   a  SnGOUR                  SE5        GOUSF:X  a+  S![
        R                  ;   a  SnGOUR                  S!5        GOUSG:X  a+  SH[
        R                  ;   a  SnGOpUR                  SH5        GO]USI:X  d  USJ:X  a+  SK[
        R                  ;   a  SnGO9UR                  SK5        GO&USL:X  d  USM:X  a+  SN[
        R                  ;   a  SnGOUR                  SN5        GOUSO:X  a+  SP[
        R                  ;   a  SnGOUR                  SP5        GOUSQ:X  a+  SR[
        R                  ;   a  SnGOUR                  SR5        GOUSS:X  a+  ST[
        R                  ;   a  SnGOoUR                  ST5        GO\USU:X  a+  SV[
        R                  ;   a  SnGO>UR                  SV5        GO+USW:X  a+  SX[
        R                  ;   a  SnGOUR                  SX5        GOUSY:X  a+  SZ[
        R                  ;   a  SnGOUR                  SZ5        GOUS[:X  ag  S\[
        R                  ;   d<  S][
        R                  ;   d(  S^[
        R                  ;   d  S_[
        R                  ;   a  SnGOoUR                  S\5        GO\US`:X  ad  Sa[
        R                  ;   a,  Sb[
        R                  ;   d  Sc[
        R                  ;   a  SnGOUR                  Sa5        UR                  Sc5        GOUSd:X  a+  Se[
        R                  ;   a  SnGOUR                  Se5        GOUSf:X  a+  Sg[
        R                  ;   a  SnGOUR                  Sg5        GOUSh:X  a+  Si[
        R                  ;   a  SnGOrUR                  Si5        GO_USj:X  a+  Sk[
        R                  ;   a  SnGOAUR                  Sk5        GO.USl:X  a+  Sm[
        R                  ;   a  SnGOUR                  Sm5        GOUSn:X  a)  So[
        R                  ;   a  SnGOUR                  So5        GOU [        R                  ;   dR  U [        R                  ;   d>  U [        R                  ;   d*  U [        R                  ;   d  U R                  Sp5      (       a+  S[
        R                  ;   a  SnGONUR                  S5        GO;U [        R                  ;   a?  S[
        R                  ;   d  S[
        R                  ;   a  SnGOUR                  S5        GOU [        R                   ;   a+  S[
        R                  ;   a  SnGOUR                  S5        GOU [        R"                  ;   a+  S[
        R                  ;   a  SnGO}UR                  S5        GOjU [        R$                  ;   a+  S[
        R                  ;   a  SnGO>UR                  S5        GO+U [        R&                  ;   a+  S[
        R                  ;   a  SnGOUR                  S5        GOU [        R(                  ;   a+  S[
        R                  ;   a  SnGOUR                  S5        GOU [        R*                  ;   d+  U [        R,                  ;   d  U [        R.                  S   ;   aA  S[
        R                  ;   a  S[
        R                  ;   a  SnGOBUR                  SS/5        GO-U [        R0                  ;   a+  S[
        R                  ;   a  SnGOUR                  S5        GOU [        R2                  ;   a+  S![
        R                  ;   a  SnGOUR                  S!5        GOU [        R4                  ;   a+  S#[
        R                  ;   a  SnGOUR                  S#5        GOpU [        R6                  ;   a+  S%[
        R                  ;   a  SnGODUR                  S%5        GO1U [        R8                  ;   a*  S'[
        R                  ;   a  SnGOUR                  S'5        OU [        R:                  ;   a)  S)[
        R                  ;   a  SnOUR                  S)5        OU [        R<                  ;   a)  Se[
        R                  ;   a  SnOUR                  Se5        OyU [        R>                  ;   a)  Sg[
        R                  ;   a  SnONUR                  Sg5        O<U [        R@                  ;   a(  Si[
        R                  ;   a  SnOUR                  Si5        SvSq jn	Ub	  U	" USr5      nUb	  U	" USs5      nUb	  U	" USt5      n[C        U5      Su:X  a  SnXES.$ ! [         a    Sn GNf = f)wa  
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  r_  r  Tr  AZURE_API_BASEr`  AZURE_API_KEY)r:  r`  r;  rJ  r  ANTHROPIC_AUTH_TOKENrI  r!  r  r$  rK  OPENROUTER_API_KEYrL  VERCEL_AI_GATEWAY_API_KEY	datarobotDATAROBOT_API_TOKENrZ  VERTEXAI_PROJECTr  rQ  r"  rM  AI21_API_KEYr4  r%  rO  r  r  r   rN  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)r  r<  OLLAMA_API_BASEr3  ANYSCALE_API_KEYrX  DEEPINFRA_API_KEYfeatherless_aiFEATHERLESS_AI_API_KEYrY  GOOGLE_API_KEYGEMINI_API_KEYr  GROQ_API_KEYr  NVIDIA_NIM_API_KEYr5  CEREBRAS_API_KEYr6  XAI_API_KEYr7  r8  VOLCENGINE_API_KEYr:  rZ  CODESTRAL_API_KEY	inceptionr[  INCEPTION_API_KEYr9  DEEPSEEK_API_KEYr  MISTRAL_API_KEYpalmPALM_API_KEYrY  PERPLEXITYAI_API_KEYr  VOYAGE_API_KEYr  INFINITY_API_KEYr  FIREWORKS_AI_API_KEYFIREWORKS_API_KEYFIREWORKSAI_API_KEYFIREWORKS_AI_TOKENrV  CLOUDFLARE_API_KEYCLOUDFLARE_ACCOUNT_IDCLOUDFLARE_API_BASErP  NOVITA_API_KEYr=  r'  r>  r(  	dashscopeDASHSCOPE_API_KEY
modelscopeMODELSCOPE_API_KEYmoonshotMOONSHOT_API_KEYz	gpt-imagec                \    U  Vs/ s H  o!UR                  5       ;  d  M  UPM     sn$ s  snf )zDFilter out keys that contain the exclude_pattern (case insensitive).r\  )r  exclude_patternrO  s      r,   filter_missing_keys1validate_environment.<locals>.filter_missing_keysS  s%    #Jtciik'ItJJJs   ))r  r  r  r   )r  r  ro  rp  r  r  )"rF  rG  rH  rI  r   r-  environr  rT  rF   rX  rZ  open_ai_embedding_modelsopenai_image_generation_modelsr5  r  r  replicate_modelsr[  r\  datarobot_modelsr_  r]  models_by_providerhuggingface_modelsra  together_ai_modelsrc  baseten_modelsrb  re  nebius_modelswandb_modelsr  )
r_  r  r  r  r8  r9  r   r  r`  rp  s
             r,   validate_environmentr}    s   $   L}#6(
 	

#"3;;x#8:LM'7e'D$1 (*2::-&*###$45 G+ BJJ.'2::5#rzz1&*###L !K/#rzz1)RZZ7&*###$78 H,2::-&*###$45 K/"bjj0&*###$78 L0#rzz1&*###$89 $77*bjj8&*###$?@ K/$

2&*###$9: K/!RZZ/4G2::4U&*###%79L$MN M1$

2&*###$9: F*+&*###N3 M1#rzz1&*###$89 M1$

2&*###$9: I- BJJ.&*###$56 K/"bjj0&*###$78 I-1D1S#rzz1+rzz9 "**, BJJ.0BJJ>;::7:: '+###$78##$;< $== BJJ.&*###$56 J.!RZZ/&*###$67 K/"bjj0&*###$78 $44'2::5&*###$<= H, BJJ.4D

4R&*###$45##$45 F*+&*###N3 L0#rzz1&*###$89 J.!RZZ/&*###$67 I- BJJ.&*###$56 E)

*&*###M2 K/+&*###N3 L0#rzz1&*###$89;."&AA"bjj0&*###$78;."&AA"bjj0&*###$78 J.!RZZ/&*###$67 I- BJJ.&*###$56 F*+&*###N3 L0%3&*###$:; H,2::-&*###$45 J.!RZZ/&*###$67 N2&"**4&"**4(BJJ6'2::5&*###$:; L0#rzz1'2::5(BJJ6&*###$89##$9: H,2::-&*###$45 H,2::-&*###$45 G+"**,&*###O4 K/"bjj0&*###$78 L0#rzz1&*###$89 J.!RZZ/&*###$67 W;;;>>>888>>>,,2::-&*###$45g...#rzz1)RZZ7&*###$78g+++2::-&*###$45g..."bjj0&*###$78g///#rzz1&*###$89g666*bjj8&*###$?@g...$

2&*###$9: W///22222;??!RZZ/4G2::4U&*###%79L$MNg000$

2&*###$9:g)))+&*###N3g000#rzz1&*###$89g000$

2&*###$9:g,,, BJJ.&*###$56g..."bjj0&*###$78g+++2::-&*###$45g+++2::-&*###$45g***"**,&*###O4K *<C*<D*<G
<A"#6UUQ  #"#s   +}   }}c                 .    [         R                  " U 0 UD6$ r#  )rF   r  )r  r:  s     r,   acreater  f  s    ///r.   c                   SR                  S U 5       5      nSnSU ;   a)   SS KnSSKJnJnJn  U" 5       nUR                  U5      nU$ [        [        5       R                  U5      5      nU$ ! [         a    [        S5         N_f = f)N c              3  *   #    U  H	  oS    v   M     g7f)r  Nr  )r(  r  s     r,   r*  *prompt_token_calculator.<locals>.<genexpr>l  s     ?h7I&hs   r   claudez:Anthropic import failed please run `pip install anthropic`)	AI_PROMPTHUMAN_PROMPT	Anthropic)
r   rJ  r   r  r  r  count_tokensr  r   r  )	r_  r{  r  
num_tokensrJ  r  r  r  anthropic_objs	            r,   prompt_token_calculatorr  j  s    88?h??DJ5	T 	A@!"//5
  .077=>
  	TRS	Ts   A. .BBc                     U [         R                  ;   d  U [         R                  ;   a   [        R                  R                  U 5        g SSS./n[         R                  " XS9  g ! [         a    [        SU SS9ef = f)Nr  zHello Worldr  r_  r{  r  )r  r_  r5  )	rF   rX  rZ  r_  modelsretriever  r   r   r  s     r,   valid_modelr  |  ss    H W;;;>>>MM""5)!'MBCHU> HbBGGHs   AA% 
A% %A;c                t    SSS./n [         R                  " XUSS9  g! [         a     g[         a     gf = f)a;  
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  r  )r_  r{  r  r?  TF)rF   r  r   r   )r_  r  r{  s      r,   check_valid_keyr    sN      ,BCDHG	
   s    
7	77c                <    U S:X  a  gU S:X  a  gU S:X  a  gU S:  a  gg)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    r,   _should_retryr    s9     c c c cr.   c                \    SSK nU b  U R                  S5      n [        U5      nU$ SnU$ ! [         ac    UR                  R                  U5      nUc  Sn U$ UR                  R                  U5      n[        U[        R                  " 5       -
  5      n U$ f = f! [         a    Sn gf = f)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-afterr2  )emailr9  r  r   rE   parsedate_tz	mktime_tzr  )response_headersr  retry_headerretry_afterretry_date_tuple
retry_dates         r,   &_get_retry_after_from_exception_headerr    s     '+//>L@!,/  K  @#(;;#;#;L#I #+"$K  "'!6!67G!HJ"%j499;&>"?K @  sB   B , B B *BB <BB BB B+*B+c                    [        U5      n[        [        R                  " 5       -  nUb  SUs=:  a
  S::  a   XE-   $   X-
  n[        [	        SU5      -  n[        Xs5      n[        U[        5      nXu-   $ )Nr   <   g       @)r  r!   randomr    powmaxr  r"   )remaining_retriesrL  r  min_timeoutr  jitterr   sleep_secondss           r,   _calculate_retry_afterr    s     99IJK fmmo%F 1{#8b#8## $9 1K'#c;*??M 3M7M!!r.   c                p   U nU/n [        [        R                  [           S5      nU" U S9S   n UR	                  U 5        U(       a/  U H  nUSS.[        R                  U'   M     [        R                  $ U H  nUUUS.[        R                  U'   M     [        R                  $ ! [
         a     Nrf = f)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  r   r  )r  r  )rolesinitial_prompt_valuefinal_prompt_value)	rF  rG  rH  rI  r  r   rF   known_tokenizer_configcustom_prompt_dict)	r_  r  r  r  tokenizer_configcomplete_modelpotential_modelsr   r  s	            r,   register_prompt_templater    s    T N&'"3;;x#8:LM u-a0& !A-#1G**1- " %%% "A(<&8-G&&q) " %%%!  s   ;B( (
B54B5c                  N    \ rS rSr  S
   SS jjrS rS rSS jrS rS r	S	r
g)TextCompletionStreamWrapperi?  Nc                4    Xl         X l        X0l        X@l        g r#  )completion_streamr_  r  r`  )selfr  r_  r  r`  s        r,   __init__$TextCompletionStreamWrapper.__init__@  s     "3
,#6 r.   c                    U $ r#  r  r  s    r,   __iter__$TextCompletionStreamWrapper.__iter__L      r.   c                    U $ r#  r  r  s    r,   	__aiter__%TextCompletionStreamWrapper.__aiter__O  r  r.   c           	     b    [        5       nUR                  SS 5      US'   SUS'   UR                  SS 5      US'   UR                  SS 5      US'   [        5       n[        U[        5      (       a  [
        eUS   S   S   nUS	   US
'   UR                  S5      US'   US   S   S   US'   US   S   S   US'   U/US'   U R                  (       a4  U R                  R                  SS5      SL a  UR                  SS 5      US'   U$ ! [
         a  n[        SU S[        U5       35      eS nAff = f)Nrm  r  r  createdr_  r  r   r  r  r  reasoning_contentr  finish_reasoninclude_usageFTusagez=Error occurred converting to text completion object - chunk: z	; Error: )rn   r9  rm   r%  rU   r   r  rp  )r  rh  r  text_choicesr  r  s         r,   !convert_to_text_completion_object=TextCompletionStreamWrapper.convert_to_text_completion_objectR  sd   	-/H"YYtT2HTN!2HX"'))It"<HY %		'4 8HW&=Lw   )$Q'0E#(#3L 05		:M0NL,-$))$4Q$7$@L!,1),<Q,?,PL)#/.HY ##''++OUCtK$)IIgt$<!O 	OPUwV_`cde`f_gh 	s   DD 
D.D))D.c           	     \   [        5          U R                   H#  nUS:X  d  Uc  [        eU R                  US9nUs  $    [        e! [         a    [        e[         aM  n[        [        R                  [           S5      nU" U R                  U R                  =(       d    SU0 0 S9eS nAff = f)Nr  rh  r   r  )r_  r`  original_exceptioncompletion_kwargsextra_kwargs)rn   r  r   r  StopIterationrF  rG  rH  rI  r_  r`  )r  rh  processed_chunkr  r   s        r,   __next__$TextCompletionStreamWrapper.__next__r  s     	//F?em#O"&"H"Hu"H"U&&	 0
   	  	$S[[%:<LMN jj$($<$<$B#$"$ 	s   0A A B+AB&&B+c                   #     U R                     S h  vN nUS:X  d  Uc  [        eU R                  US9nUs  $  N&
 [        e! [         a    [        ef = f7f)Nr  r  )r  r   r  r  StopAsyncIteration)r  rh  r  s      r,   	__anext__%TextCompletionStreamWrapper.__anext__  sg     	%#55 'eF?em#O"&"H"Hu"H"U&&	'5
   	%$$	%s5   AA =;="A A=A AA)r  r`  r_  r  NN)r  Optional[dict]r`  Optional[str])rh  rd   )rI  r  r  r  r  r  r  r  r  r  r  r  r.   r,   r  r  ?  s=    
 *.-1
7 '	
7
 +
7@,	%r.   r  c              #    #    [        U[        R                  5      (       a  Ue[        U[        5      (       a  Uv   g [	        S[        U5      S5       H  n[        SXUS-    S9nUc  XPR                  S   l        Oj/ n[	        U5       HS  n[        R                  R                  U[        R                  R                  SXUS-    S9S9nUR                  U5        MU     X`l        U v   M     g 7fNr      rk  r  )r  r  r%  rF   r   re   r  r  rY   r  r  rE   rl   r  	r(  mock_responser_  r  icompletion_obj_all_choicesj_streaming_choices	            r,   mock_completion_streaming_objr    s      -!6!677-!4551c-(!,K1q59QR9.<""1%+L1X$+MM$B$B!----(-AE2J .  %C %! ##$56  &2" -s   C.C0c                 #    [        U[        R                  5      (       a  Ue[        U[        5      (       a  U7v   g [	        S[        U5      S5       H  n[        SXUS-    S9nUc  XPR                  S   l        Oj/ n[	        U5       HS  n[        R                  R                  U[        R                  R                  SXUS-    S9S9nUR                  U5        MU     X`l        U 7v   M     g 7fr  r  r  s	            r,   #async_mock_completion_streaming_objr    s      -!6!677-!4551c-(!,K1q59QR9.<""1%+L1X$+MM$B$B!----(-AE2J .  %C %! ##$56  &2" -s   C0C2c                     SS K nUR                  " 5         [        U S5       n[        R                  " U5      nS S S 5        U$ ! , (       d  f       W$ = f! [
         a  nUeS nAff = f)Nr   rt   )r-  getcwdopenr  loadr   )config_pathr-  config_filer  r  s        r,   read_config_argsr    s]    

		+s#{YY{+F $ 	 $#  s3   !A A	A 
AA A 
A' A""A'c                    SU S.n[        U/U5      nXA:  a$  [        S5        [        X1U5      n[        U/U5      nX1U-
  4$ )Nsystemr  zH`tokentrimmer`: Warning, system message exceeds token limit. Trimming...)get_token_countr   shorten_message_to_fit_limit)system_messager?  r_  system_message_eventsystem_message_tokensnew_system_messages         r,   process_system_messager    sc    $,H+-A,BEJ)V	
 : e
 !01C0De L.C!CCCr.   c           	        U S S S2   n / n[         R                  " SU  SU SU 35        U  Hu  n[         R                  " SU 35        [        X25      nX-
  n[         R                  " SU SU 35        US::  a    O*[        UUUUUS	9n[         R                  " S
U 35        Mw     [         R                  " SU 35        U$ )Nr2  z(calling process_messages with messages: , max_tokens: z	, model: zprocessing final_messages: zused_tokens: z, available_tokens: r  )final_messagesr  available_tokensr?  r_  z/final_messages after attempt_message_addition: Final messages: )r   r   r  attempt_message_addition)r{  r?  r_  r  r  used_tokensr  s          r,   process_messagesr     s    "~HN
28*N:,V_`e_fg :>:JKL%n<%3K=(<=M<NO	
 q 1)-!
 	=n=MN	
# ( +N+;<=r.   c                @   U/U -   n[        XTS9n[        R                  " SU SU 35        Xc::  a  U$ SU;  ae  [        R                  " S5        [        XU5      n[	        XpX45      (       a  [        R                  " S5        U/U -   $ [        R                  " S5        U $ )Nr{  r_  ztemp_message_tokens: r  r2  z*attempting to shorten message to fit limitz=can add message, returning [updated_message] + final_messagesz,cannot add message, returning final_messages)r  r   r   r  can_add_message)r  r  r  r?  r_  temp_messagestemp_message_tokensupdated_messages           r,   r  r    s     I.M)=N
 34N:,O ( 
	'IJ6wRWX?JNN  O $$~55  !OPr.   c                ,    [        X/-   U5      U::  a  ggrq  )r  )r  r{  r?  r_  s       r,   r  r  '  s    x)+U3zAr.   c                    [        XS9$ )Nr  )r  r  s     r,   r  r  -  s    u88r.   c                <   Ub  SU;   a  US::  a  U $ U S   nSn[         R                  " SU 35        U[        :  a  [         R                  " SU  35        [        U /U5      n[         R                  " SU S	U 35        Xa::  a  OqX-  n[	        [        U5      U-  5      S
-
  n[        SU5      nUS-  n	USU	 n
XI* S nU
S-   U-   nXS'   [         R                  " SU 35        UnUS
-  nU[        :  a  M  U[        :  a  U(       a  [        SU S[         S35      eU $ )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gptr  r  r   z	content: z!getting token count for message: ztotal_tokens: z, tokens_needed: r      z..ztrimmed_content: z%Failed to trim message to fit within z tokens after z	 attempts)r   r   r#   r  r  r  r  r   )r  tokens_neededr_  raise_error_on_max_limitr  attemptstotal_tokensratio
new_lengthhalf_length	left_half
right_halftrimmed_contents                r,   r  r  1  sb     Ue^0Ci GH9WI./
0
0@	JK&y%8\N*;M?K	
 (.W-.2
J'
 AoL[)	\]+
#d*Z7,	00ABC!A/ 0
02 ..3K3M?.QlPmmvw
 	
 Nr.   c                   U n[         R                  " U 5      n  Uc[  U[        R                  ;   aE  [        R                  U   R	                  S[        R                  U   S   5      n[        Xb-  5      nOU $ SnU  H"  nUS   S:X  d  M  Xw(       a  SOS-  nXxS   -  nM$     / n	[        U 5       H  nUS   S	:w  a    OU	R                  U5        M!     U	R                  5         [        U	5      (       a  U S[        U	5      *  n [        U=(       d    SU S
9n
[        SU
 SU 35        X:  a  X	-   $ [        SU  SU
 SU 35        SnU(       a1  [        XtUS9u  pUS:X  a  U/$ U  Vs/ s H  oS   S:w  d  M  UPM     n n[        R                  " SU 35        [        XUS9n[        R                  " SU 35        U(       a  U/U-   n[        U	5      S:  a  UR!                  U	5        [        R                  " SU SU 35        U(       a  U[#        X5      -
  nX4$ U$ s  snf ! [$         a:  n[        R&                  " SR)                  [+        U5      5      5        Us SnA$ SnAff = f)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  ri  r  r  r  rx  r  zCurrent tokens: z, max tokens: zNeed to trim input messages: z, current_tokensr  )r  r?  r_  r   zProcessed system message: )r{  r?  r_  zProcessed messages: r  z, return_response_tokens: z'Got exception while token trimming - {})rS  r   rF   r  r9  r  r  r  reverser  r  r   r  r   r   r   rT  r  r   r  r?  rp  )r{  r_  
trim_ratioreturn_response_tokensr?  original_messagesmax_tokens_for_modelr  r  tool_messagescurrent_tokensr  r  response_tokensr  s                  r,   trim_messagesr  m  s   , !}}X&HR!***'.'9'9%'@'D'D&(:(:5(A,(O($ !!5!BC

  Gv(*.$b@)"44   )Gv&(  ) * 	} 53}#5"56H&U[b8L((8zlST &++ 	+H:5EnEUUcdncop	
 04/E-E0,  Q,-- 08WxG6?h;VxHW9:N9OPQ)E
 	3N3CDE  23nDN}!!!-0~..HI_H`a	
 #(?>+QQO!22/ X0  !  5<<SVD	
 ! 	!sV   AH  8H  
B#H  .1H   H  $H4H:BH  H  H   
I$*/II$I$)InMemoryCachec                     ^  \ rS rSrS	S
U 4S jjjrSS jrSS jr      SS jr  S     SS jjr      SS jr	Sr
U =r$ )AvailableModelsCachei  c                2   > [         TU ]  X5        S U l        g r#  )superr  	_env_hash)r  ttl_secondsmax_size	__class__s      r,   r  AvailableModelsCache.__init__  s    /(,r.   c                    [         R                  R                  5        VVs0 s H  u  pUR                  S5      (       d  M  X_M!     nnn[	        [        [        UR                  5       5      5      5      $ s  snnf )z/Create a hash of relevant environment variables)OPENAI	ANTHROPICAZUREAWS)r-  rr  rL  r5  rp  hash	frozenset)r  r%  r&  env_varss       r,   _get_env_hash"AvailableModelsCache._get_env_hash  sg     

((*
*||CD AD* 	 

 4	(.."23455
s   A6A6c                f    U R                  5       nU R                  c  Xl        gXR                  :g  $ )z+Check if environment variables have changedT)r2  r%  )r  current_hashs     r,   _check_env_changed'AvailableModelsCache._check_env_changed  s/    ))+>>!)N~~--r.   c                    SnUb  UR                  5       nUb  U SU 3n[        R                  " UR                  5       5      R	                  5       $ )Nr  :)model_dump_jsonhashlibsha256r  	hexdigest)r  r`  r  	valid_strs       r,   _get_cache_key#AvailableModelsCache._get_cache_key  sU    
 	%&668I*./q<I~~i..01;;==r.   c                   Uc0  U R                  5       (       a  U R                  R                  5         gU R                  X5      n[	        [
        [        [              U R                  U5      5      nUb  [        R                  " U5      $ U$ )zGet cached model infoN)r6  
cache_dictclearr?  r   r   r|   rp  	get_cacherS  r   )r  r`  r  	cache_keyr  s        r,   get_cached_model_info*AvailableModelsCache.get_cached_model_info   st     !d&=&=&?&?OO!!#''(;L	htCy)4>>)+DE==((r.   c                r    U R                  X5      nU R                  U[        R                  " U5      5        g)zSet cached model infoN)r?  	set_cacherS  r   )r  r`  r  available_modelsrE  s        r,   set_cached_model_info*AvailableModelsCache.set_cached_model_info  s-     ''(;L	y$--0@"ABr.   )r%  )i,  r  )r&  r  r'  r  r  rp  r  r  )r`  r  r  Optional[LiteLLM_Params]r  rp  r  )r`  r  r  rO  r  r   )r`  rp  r  rO  rJ  r  )rI  r  r  r  r  r2  r6  r?  rF  rK  r  __classcell__r(  s   @r,   r"  r"    s    - -6.>*> 1> 
	> .237* 1 
	&C C 1C $	C Cr.   r"  c                >   / n[         R                  R                  5       n[        R                   Hh  nU (       a  X0:w  a  M  UR                  SS5      nUnUR                  5        S3nUR                  5        S3nXb;   d  Xr;   d  MW  UR                  U5        Mj     U$ )Nr  r  _API_KEY)r-  rr  r  rF   r  r  upperr  )r`  valid_providersenviron_keysr   env_provider_1env_provider_2expected_provider_key_1expected_provider_key_2s           r,   #_infer_valid_provider_from_env_varsr[  "  s     "$O::??$L))8#B "))#r2! &4%9%9%;$<H"E%3%9%9%;$<H"E#3&6 ""8,# *& r.   c                (    [         R                  X5      nUb  U$ U R                  Ub  UR                  OS Ub  UR                  OS S9n[         R                  XU5        U$ ! [         a%  n[        R                  " SU 35        / s S nA$ S nAff = f)N)r  r  Error getting valid models: )	_model_cacherF  
get_modelsr  r  rK  r   r   r  )r  r`  r  rV  r  r  s         r,   #_get_valid_models_from_provider_apir`  =  s    
$::
 $   ++.<.HN**d0>0J^,,PT , 

 	**+>PVW !=aSAB	s#   A" AA" "
B,BBBc                    SSK Jn  Uc  U" SS9nUb  X2l        Ub  XBl        U =(       d    [        R
                  n / n/ nU(       a  U/nO[        U5      nU H  n[        R                  S[        U5      S9n	U(       a  X:w  a  M.  US:X  a  UR                  S5        MG  U	b(  U (       a!  Ub  UR                  [        U	UU5      5        Mr  [        R                  " [        R                  R!                  U/ 5      5      n
UR                  U
5        M     U$ ! ["         a%  n[$        R&                  " S	U 35        / s SnA$ SnAff = f)
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   r  r  rF   check_provider_endpointr[  r  r  r^   r  rT  r`  rS  r   rw  r9  r   r   r  )rc  r`  r  r  r  r   rU  valid_modelsr   r  models_for_providerr  s               r,   get_valid_modelsrf  U  sT   &< 	8!+"5N%,"&.# $Fw'F'F 	 
 &("$ 23OABUVO'H3KK%h/ L O
 #x'F7"##K0++(##7' & '+mm..228R@'# ##$787 (:  !=aSAB	s   DD 
ED?9E?Ec           	        [        5       (       d  g  SU;   a  US   SL a  U R                  S:X  a  g SU;   a  US   SL a  U R                  S:X  a  g SU;   a  US   SL a  U R                  S:X  a  g SR                  [        [        U5      5      nSR                  S	 UR                  5        5       5      n[        S
5        [        S5        U(       a'  U(       a   [        SU R                   SU SU S35        OaU(       a  [        SU R                   SU S35        O=U(       a  [        SU R                   SU S35        O[        SU R                   S35        [        S
5        g ! [         a     g f = f)Nr  Tr  r  r  r<  img_generationr  c              3  F   #    U  H  u  pU S [        U5       3v   M     g7f)=N)repr)r(  rO  rP  s      r,   r*  /print_args_passed_to_litellm.<locals>.<genexpr>  s!     W*##aU}5s   !r  z[92mRequest to litellm:[0mz[92mlitellm.(z)[0mz()[0m)r   rI  r   maprk  rL  r   r   )r  r  r:  args_str
kwargs_strs        r,   rO  rO    s   . V#}%-!**l:F"|$,!**k9'()T1!**.>>99St_-YYWWW
	
 	0	
 F"#4#=#=">azJ<W_` "#4#=#=">azR "#4#=#=">a
|8T ,->-G-G,H	RSd s#   E% E% E% /C5E% %
E21E2c                z     SU R                  S5      -   S-   UR                  S5      -   nU$ ! [         a     g f = f)Nztime-z%H-%M-%S-%fr  rm  )strftimer9  r   )r  r  response_ids      r,   get_logging_idrt    sO    j))-883>AQAQRVAWW 	  s   *- 
::c                b   U c  g U R                  S0 5      nUb  UR                  SS 5      nUb  U$ UR                  S5      =(       d    0 n[        [        R                  [           S5      nU" US9nUb  U$ UR                  S0 5      n[        [        R                  [           S5      nU" US9$ g )Nr  rC  r5  r   )r5  r  )r9  rF  rG  rH  rI  )model_call_detailsr  _base_modelr5  r   base_model_from_metadatar  s          r,   _get_base_model_from_metadatary    s    !'++,<bAN!$((t<"!%%j17R5<KK!#O6
2 $N$
  $/++ *--.@"E5<KK!#O6
2 :CSTTr.   c                  :    \ rS rSrS	S
S jjrS rS rS rS rSr	g)ModelResponseIteratori  c                    USL aQ  [        5       nUR                  S   R                  R                  UR                  S   R                  l        UU l        OXl        SU l        g )NTr   F)re   r  r  r  r  r(  is_done)r  r(  convert_to_delta_stream_responses       r,   r  ModelResponseIterator.__init__  s^    t#248F8N8Nq8Q8Y8Y8a8a$$Q'--5   #1r.   c                    U $ r#  r  r  s    r,   r  ModelResponseIterator.__iter__  r  r.   c                V    U R                   (       a  [        eSU l         U R                  $ NT)r}  r  r(  r  s    r,   r  ModelResponseIterator.__next__  s"    <<"""r.   c                    U $ r#  r  r  s    r,   r  ModelResponseIterator.__aiter__  r  r.   c                ^   #    U R                   (       a  [        eSU l         U R                  $ 7fr  )r}  r  r(  r  s    r,   r  ModelResponseIterator.__anext__  s%     <<$$"""s   +-)r}  r(  NF)r(  rd   r~  r  
rI  r  r  r  r  r  r  r  r  r  r  r.   r,   r{  r{    s    	##r.   r{  c                  :    \ rS rSrS	S
S jjrS rS rS rS rSr	g)ModelResponseListIteratori"  Nc                *    Xl         SU l        X l        g Nr   )model_responsesr  delay)r  r  r  s      r,   r  "ModelResponseListIterator.__init__#  s    .

r.   c                    U $ r#  r  r  s    r,   r  "ModelResponseListIterator.__iter__)  r  r.   c                   U R                   [        U R                  5      :  a  [        eU R                  U R                      nU =R                   S-  sl         U R                  (       a   [
        R                  " U R                  5        U$ Nr   )r  r  r  r  r  r  sleepr  r(  s     r,   r  "ModelResponseListIterator.__next__,  s]    ::T1122--djj9

a
::JJtzz"r.   c                    U $ r#  r  r  s    r,   r  #ModelResponseListIterator.__aiter__6  r  r.   c                2  #    U R                   [        U R                  5      :  a  [        eU R                  U R                      nU =R                   S-  sl         U R                  (       a(  [
        R                  " U R                  5      I S h  vN   U$  N7fr  )r  r  r  r  r  rX  r  r  s     r,   r  #ModelResponseListIterator.__anext__9  sk     ::T1122$$--djj9

a
::--

+++ ,s   BBBB)r  r  r  r#  )r  Optional[float]r  r  r.   r,   r  r  "  s    r.   r  c                  ,   ^  \ rS rSrSU 4S jjrSrU =r$ )CustomModelResponseIteratoriC  c                "   > [         TU ]  5         g r#  )r$  r  )r  r(  s    r,   r  $CustomModelResponseIterator.__init__D  s    r.   r  r~  )rI  r  r  r  r  r  rP  rQ  s   @r,   r  r  C  s     r.   r  c                   [         R                  SL a  gU R                  S5      nUb+  [        U[        5      (       a  UR                  S5      S:X  a  gSU ;  a  gU S   n[        U[
        5      (       d  gU Hu  n[        U[        5      (       d  M  UR                  S5      nUR                  S5      S:X  d  MB  Uc  MG  [        U[        5      (       d  M^  UR                  S5      S:X  d  Mu    g   g)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_controlr&  	ephemeralr  r  )rF   2disable_anthropic_gemini_context_caching_transformr9  r%  rr   rn  )r  message_level_cache_controlr  content_itemr  s        r,   is_cached_messager  H  s     AATI #*++o">#/2D99'++F3{Bi G gt$$,--$((9V$.)=$//!!&)[8   r.   c                     U R                  S5      (       d  gU R                  S5      S   n [        R                  " U SS9n[        R                  " U5      R                  S5      U :H  $ ! [         a     gf = f)Nzdata:Fr  r   T)validateru   )r5  rd  base64	b64decode	b64encoder  r   )r  decoded_bytess     r,   is_base64_encodedr  y  sz    ||
 
 GGCLO ((T: .55g>!CC s   A* AA* *
A76A7c                :    SU ;   a  U R                  S5      S   $ U $ )z+
s: b64str OR data:image/png;base64,b64str
r  r   rc  )r  s    r,   get_base64_strr    s"     axwws|AHr.   c                >    U  H  nUR                  S5      c  M    g   g)za
Returns true, if messages has tool call blocks.

Used for anthropic/bedrock message validation.
rj  TFr8  )r{  r  s     r,   has_tool_call_blocksr    s%     ;;|$0  r.   c                    U  HR  nUR                  S5      S:X  d  M  UR                  S5      nUc  M0  [        US5      (       a  [        U5      S:  d  MR    g   g)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
ri  rk  thinking_blocks__len__r   TFr9  ro  r  )r{  r  r  s      r,   )any_assistant_message_has_thinking_blocksr    sV     ;;v+-%kk*;<O*OY773;ORS;S  r.   c                    SnU  H0  nUR                  S5      S:X  d  M  UR                  S5      c  M.  UnM2     Uc  gUR                  S5      nUSL =(       d!    [        US5      =(       a    [        U5      S:H  $ )	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
Nri  rk  rj  Fr  r  r   r  )r{  last_assistant_with_toolsr  r  s       r,   5last_assistant_with_tool_calls_has_no_thinking_blocksr    s    & !%;;v+-'++l2K2W(/%  !( 0334EFOd" +IO0D0Ir.   c           
     0    [        S[        SSS0 S.S9S9/$ )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
r  
dummy_toolzThis is a dummy tool callr  r  r  )r&  r  )rL   rM   r(  s    r,   add_dummy_toolr    s2     	 9!7$"$
	
 r.   )ChatCompletionAudioObjectChatCompletionImageObjectChatCompletionTextObjectChatCompletionUserMessageOpenAIMessageContentValidUserMessageContentTypesc                    [        U [        5      (       a  U R                  SS9$ [        U [        5      (       a  U $ [	        S[        U 5       S35      e)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   rl  rr   r%  r&  r  s    r,   convert_to_dictr    sU     '9%%!!t!44	GT	"	"$T']O3UV
 	
r.   c                    / nU  H6  n[        [        [        U5      5      n[        US9nUR	                  U5        M8     U$ )Nr  )r   rH   r  cleanup_none_field_in_messager  r{  new_messagesr  convert_msg_to_dictcleaned_messages        r,   convert_list_message_to_dictr     sE    L"#3_W5MN7@STO,  r.   c                   / nU  Hv  nUR                  S5      (       d  SUS'   UR                  S5      (       a  [        US   S9US'   [        [        [	        U5      5      n[        US9nUR                  U5        Mx     [        US9$ )zo
Ensures all messages are valid OpenAI chat completion messages.

Handles missing role for assistant messages.
ri  rk  rj  )r  r  r1  )r9  jsonify_toolsr   rH   r  r  r  &validate_chat_completion_user_messagesr  s        r,    validate_and_fix_openai_messagesr     s     L{{6"")GFO;;|$$$18M$NGL!"#3_W5MN7@STO,  2<HHr.   c                    / nU c  U $ U  Ha  n[        U[        5      (       a!  UR                  UR                  5       5        M9  [        U[        5      (       d  MP  UR                  U5        Mc     U$ )z4
Ensure tools is List[dict] and not List[BaseModel]
)r%  r   r  rl  rr   r  	new_toolsrx  s      r,   validate_and_fix_openai_toolsr  )   sb     I}dI&&T__./d##T"	 
 r.   c                    U b  [        U [        5      (       d  U $ [        U 5      nSU;   a  SU;  a  UR                  S5      US'   OSU;   a  SU;   a  UR                  S5        [        SU5      $ )z
Normalizes camelCase keys in the thinking param to snake_case.
Handles clients that send budgetTokens instead of budget_tokens.
budgetTokensbudget_tokensr   )r%  rr   r  r   )r  
normalizeds     r,   validate_and_fix_thinking_paramr  8   so     z(D99hJ#z(I&0nn^&D
?#	:	%/Z*G~&(*55r.   c                    U R                  5       nUR                  5        VVs0 s H  u  p#Uc  M
  X#_M     snn$ s  snnf )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
)rS  rL  )r  new_messager%  r&  s       r,   r  r  I   s:     ,,.K(..0B0TQADAD0BBBs   	;;c                &   [        U 5       H  u  p US   S:X  a  UR                  S5      nUb  [        U[        5      (       a  M:  [        U[        5      (       aX  U HP  n[        U[
        5      (       d  M  UR                  S5      [        ;  d  M5  [        SUR                  S5       35      e   M  M  M  M     U $ ! [         aI  n[        U[        5      (       a  [        SU S35      eS	[        U5      ;   a  [        S
U S35      eUeSnAff = f)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
ri  r  r  Nr&  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  r9  r%  rp  rn  rr   r  r   KeyError)r{  rg  r  user_contentr  r  s         r,   r  r  S   s%    H%	yF" uuY/+!,44 #L$77$0D)$55#'88F#3;W#W*3*?@P?Q(R+& %& %1 8 , # &4 O  
	!X&&/u4{|  &Q/4SE  :F  G  
	s*   2B=-B=7B=B==
DADDc                N   SSK JnJn  U c  U $ [        U [        5      (       a  U $ [        U [
        5      (       aR  U R                  S5      S;   a  SU ;  a  U $ U R                  S5      b  U R                  S5      c  [        SU  S35      eU $ [        SU  S[        U 5       S	35      e)
z
Confirm the tool choice is passed in the OpenAI format.

Prevents user errors like: https://github.com/BerriAI/litellm/issues/7483
r   )#ChatCompletionToolChoiceObjectParam$ChatCompletionToolChoiceStringValuesr&  )autononer  r  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)	litellm.types.llms.openair  r  r%  rp  rr   r9  r   r&  )r  r  r  s      r,   $validate_chat_completion_tool_choicer  ~   s    
 	K	%	%	K	&	& OOF#'CC+- ??6"*kooj.I.Q3K=@st  

+K=tK?P>Q  Ri  	j r.   c                    U b>  [        U [        5      (       a)  [        R                  (       d  [	        U 5      S:  a  U SS n U $ )z
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%  rn  rF   disable_stop_sequence_limitr  )r  r:  s     r,   validate_openai_optional_paramsr     s=     	tT""33 t9q=8DKr.   c                      [         R                  " S5      R                  S5      n [        R                  " U R                  5       5      $ ! [         a    0 s $ f = f)NrF   z+model_prices_and_context_window_backup.json)r   filesjoinpathr  loads	read_textr   )model_cost_paths    r,   _get_bundled_model_cost_mapr     sQ    #//)4==9
 zz/33566 	s   AA AAc                    XR                    SU  34nU H)  n[        R                  R                  U5      nUc  M'  Us  $    [	        5       nU H  nUR                  U5      nUc  M  Us  $    0 $ )Nr1  )rP  rF   r  r9  r  )r_  r   candidate_keysr  r  bundled_model_costs         r,   )_get_model_cost_entry_for_provider_configr     s     /q89N#	''++I6
! $
 56#	'++I6
! $ Ir.   c                     \ rS rSr% SrS\S'   \S-S j5       r\S.S/S jj5       r\S0S j5       r	\S0S j5       r
\S0S	 j5       r\S0S
 j5       r\S1S j5       r\S1S j5       r\ S.       S2S jj5       r\      S3S j5       r\          S4S j5       r\      S5S j5       r\\" \S9      S5S j5       5       r\      S6S j5       r\ S.     S7S jj5       r\ S.     S8S jj5       r\    S9S j5       r\    S:S j5       r\      S;S j5       r\      S<S j5       r\      S=S j5       r\      S>S j5       r\      S?S j5       r\      S@S j5       r \    SAS j5       r!\ S.     SBS jj5       r"\    SCS  j5       r#\      SDS! j5       r$\      SES" j5       r%\    SFS# j5       r&\      SGS$ j5       r'\      SHS% j5       r(\      SIS& j5       r)\      SJS' j5       r*\    SKS( j5       r+\    SLS) j5       r,\      SMS* j5       r-\      SNS+ j5       r.S,r/g)Or  i   Nz3Optional[dict[LlmProviders, tuple[Callable, bool]]]_PROVIDER_CONFIG_MAPc                 v   0 [         R                  S S4_[         R                  S S4_[         R                  S S4_[         R                  S S4_[         R
                  S S4_[         R                  S S4_[         R                  S	 S4_[         R                  S
 S4_[         R                  S S4_[         R                  S S4_[         R                  S S4_[         R                  S S4_[         R                  S S4_[         R                  S S4_[         R                  S S4_[         R                   S S4_[         R"                  S S4_0 [         R$                  S S4_[         R&                  S S4_[         R(                  S S4_[         R*                  S S4_[         R,                  S S4_[         R.                  S S4_[         R0                  S S4_[         R2                  S S4_[         R4                  S S4_[         R6                  S S4_[         R8                  S S4_[         R:                  S S4_[         R<                  S  S4_[         R>                  S! S4_[         R@                  S" S4_[         RB                  S# S4_[         RD                  S$ S4_E0 [         RF                  S% S4_[         RH                  S& S4_[         RJ                  S' S4_[         RL                  S( S4_[         RN                  S) S4_[         RP                  S* S4_[         RR                  S+ S4_[         RT                  S, S4_[         RV                  S- S4_[         RX                  S. S4_[         RZ                  S/ S4_[         R\                  S0 S4_[         R^                  S1 S4_[         R`                  S2 S4_[         Rb                  S3 S4_[         Rd                  S4 S4_[         Rf                  S5 S4_E0 [         Rh                  S6 S4_[         Rj                  S7 S4_[         Rl                  S8 S4_[         Rn                  S9 S4_[         Rp                  S: S4_[         Rr                  S; S4_[         Rt                  S< S4_[         Rv                  S= S4_[         Rx                  S> S4_[         Rz                  S? S4_[         R|                  S@ S4_[         R~                  SA S4_[         R                  SB S4_[         R                  SC S4_[         R                  SD S4_[         R                  SE S4_[         R                  SF S4_E0 [         R                  SG S4_[         R                  SH S4_[         R                  SI S4_[         R                  SJ S4_[         R                  SK S4_[         R                  SL S4_[         R                  SM S4_[         R                  SN S4_[         R                  SO S4_[         R                  SP S4_[         R                  SQ S4_[         R                  SR S4_[         R                  SS S4_[         R                  ST S4_[         R                  SU S4_[         R                  SV S4_[         R                  SW S4_E[         R                  SX S4[         R                  SY S4[         R                  SZ S4[         R                  S[ S4[         R                  S\ S4[         R                  S] S4[         R                  S^ S4[         R                  S_ S4[         R                  S` S4[         R                  Sa S4[         R                  Sb S4[         R                  Sc S4[         R                  Sd S4[         R                  Se S40E$ )fzBuild 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                 ,    [         R                  " 5       $ r#  )rF   OpenAIGPTConfigr  r.   r,   <lambda>BProviderConfigManager._build_provider_config_map.<locals>.<lambda>   s    '*A*A*Cr.   Fc                 ,    [         R                  " 5       $ r#  )rF   rb  r  r.   r,   r  r          W-D-D-Fr.   c                ,    [         R                  U 5      $ r#  )r  _get_azure_ai_configr  s    r,   r  r      s    3HHOr.   Tc                ,    [         R                  U 5      $ r#  )r  _get_vertex_ai_configr  s    r,   r  r      s    3II%Pr.   c                ,    [         R                  U 5      $ r#  )r  _get_bedrock_configr  s    r,   r  r      s    3GGNr.   c                ,    [         R                  U 5      $ r#  r  _get_cohere_configr  s    r,   r  r          3FFuMr.   c                ,    [         R                  U 5      $ r#  r
  r  s    r,   r  r      r  r.   c                 ,    [         R                  " 5       $ r#  )rF   r  r  r.   r,   r  r   !      G,F,F,Hr.   c                 ,    [         R                  " 5       $ r#  )rF   r  r  r.   r,   r  r   !      (>(>(@r.   c                 ,    [         R                  " 5       $ r#  )rF   r  r  r.   r,   r  r   !      779r.   c                 ,    [         R                  " 5       $ r#  )rF   	A2AConfigr  r.   r,   r  r   !  s    w'8'8':r.   c                 ,    [         R                  " 5       $ r#  )rF   BytezChatConfigr  r.   r,   r  r   !      )@)@)Br.   c                 ,    [         R                  " 5       $ r#  )rF   r  r  r.   r,   r  r   	!      g.F.F.Hr.   c                 ,    [         R                  " 5       $ r#  )rF   r  r  r.   r,   r  r   
!      w'<'<'>r.   c                 ,    [         R                  " 5       $ r#  )rF   ZAIChatConfigr  r.   r,   r  r   !  r  r.   c                 ,    [         R                  " 5       $ r#  )rF   LambdaAIChatConfigr  r.   r,   r  r   !      W-G-G-Ir.   c                 ,    [         R                  " 5       $ r#  )rF   InceptionChatConfigr  r.   r,   r  r   !      W-H-H-Jr.   c                 ,    [         R                  " 5       $ r#  )rF   LlamaAPIConfigr  r.   r,   r  r   !  s    )?)?)Ar.   c                 ,    [         R                  " 5       $ r#  )rF   OpenAITextCompletionConfigr  r.   r,   r  r   !  s    ::<r.   c                 ,    [         R                  " 5       $ r#  )rF   SnowflakeConfigr  r.   r,   r  r   !  r  r.   c                 ,    [         R                  " 5       $ r#  )rF   ClarifaiConfigr  r.   r,   r  r   !      G,B,B,Dr.   c                 ,    [         R                  " 5       $ r#  )rF   rc  r  r.   r,   r  r   !      '2M2M2Or.   c                 ,    [         R                  " 5       $ r#  )rF   rm  r  r.   r,   r  r   !  s    '2L2L2Nr.   c                 ,    [         R                  " 5       $ r#  )rF   r  r  r.   r,   r  r   !      g.J.J.Lr.   c                 ,    [         R                  " 5       $ r#  )rF   SagemakerChatConfigr  r.   r,   r  r   !  r/  r.   c                 ,    [         R                  " 5       $ r#  )rF   SagemakerNovaConfigr  r.   r,   r  r   !  r/  r.   c                 ,    [         R                  " 5       $ r#  )rF   rw  r  r.   r,   r  r   !  r  r.   c                 ,    [         R                  " 5       $ r#  )rF   r  r  r.   r,   r  r   !  s    0I0I0Kr.   c                 ,    [         R                  " 5       $ r#  )rF   FriendliaiChatConfigr  r.   r,   r  r   !  r2  r.   c                 ,    [         R                  " 5       $ r#  )rF   r  r  r.   r,   r  r   !  s    7+G+G+Ir.   c                 ,    [         R                  " 5       $ r#  )rF   rF  r  r.   r,   r  r   !  s    0J0J0Lr.   c                 ,    [         R                  " 5       $ r#  )rF   EmpowerChatConfigr  r.   r,   r  r   !      7+D+D+Fr.   c                 ,    [         R                  " 5       $ r#  )rF   MinimaxChatConfigr  r.   r,   r  r    !  r?  r.   c                 ,    [         R                  " 5       $ r#  )rF   GithubChatConfigr  r.   r,   r  r   !!      '*B*B*Dr.   c                 ,    [         R                  " 5       $ r#  )rF   CompactifAIChatConfigr  r.   r,   r  r   "!      w/L/L/Nr.   c                 ,    [         R                  " 5       $ r#  )rF   GithubCopilotConfigr  r.   r,   r  r   #!  r/  r.   c                 ,    [         R                  " 5       $ r#  )rF   ChatGPTConfigr  r.   r,   r  r   $!      7+@+@+Br.   c                 ,    [         R                  " 5       $ r#  )rF   GigaChatConfigr  r.   r,   r  r   %!  r-  r.   c                 ,    [         R                  " 5       $ r#  )rF   RAGFlowConfigr  r.   r,   r  r   &!  rL  r.   c                 ,    [         R                  " 5       $ r#  rF   r  r  r.   r,   r  r   '!  s    '*F*F*Hr.   c                 ,    [         R                  " 5       $ r#  rR  r  r.   r,   r  r   (!  s    1M1M1Or.   c                 ,    [         R                  " 5       $ r#  rR  r  r.   r,   r  r   )!      w/K/K/Mr.   c                 ,    [         R                  " 5       $ r#  )rF   AiohttpOpenAIChatConfigr  r.   r,   r  r   +!  r  r.   c                 ,    [         R                  " 5       $ r#  )rF   r  r  r.   r,   r  r   .!  rU  r.   c                 ,    [         R                  " 5       $ r#  )rF   LlamafileChatConfigr  r.   r,   r  r   /!  r$  r.   c                 ,    [         R                  " 5       $ r#  )rF   LMStudioChatConfigr  r.   r,   r  r   0!  r!  r.   c                 ,    [         R                  " 5       $ r#  )rF   GaladrielChatConfigr  r.   r,   r  r   1!  r$  r.   c                 ,    [         R                  " 5       $ r#  )rF   rg  r  r.   r,   r  r   2!  r  r.   c                 ,    [         R                  " 5       $ r#  )rF   ri  r  r.   r,   r  r   3!  rG  r.   c                 ,    [         R                  " 5       $ r#  )rF   rj  r  r.   r,   r  r   4!      w/G/G/Ir.   c                 ,    [         R                  " 5       $ r#  )rF   r  r  r.   r,   r  r   5!  r  r.   c                 ,    [         R                  " 5       $ r#  )rF   VercelAIGatewayConfigr  r.   r,   r  r   7!  s    557r.   c                 ,    [         R                  " 5       $ r#  )rF   CometAPIConfigr  r.   r,   r  r   :!  r-  r.   c                 ,    [         R                  " 5       $ r#  )rF   DataRobotConfigr  r.   r,   r  r   ;!  r  r.   c                 ,    [         R                  " 5       $ r#  )rF   rn  r  r.   r,   r  r   <!  s    '*L*L*Nr.   c                 ,    [         R                  " 5       $ r#  rF   r  r  r.   r,   r  r   =!  r  r.   c                 ,    [         R                  " 5       $ r#  rl  r  r.   r,   r  r   >!      W-C-C-Er.   c                 ,    [         R                  " 5       $ r#  )rF   AzureOpenAITextConfigr  r.   r,   r  r   ?!  s    g.K.K.Mr.   c                 ,    [         R                  " 5       $ r#  )rF   r  r  r.   r,   r  r   @!  rn  r.   c                 ,    [         R                  " 5       $ r#  )rF   OobaboogaConfigr  r.   r,   r  r   A!  r  r.   c                 ,    [         R                  " 5       $ r#  )rF   r  r  r.   r,   r  r   B!  rb  r.   c                 ,    [         R                  " 5       $ r#  )rF   r  r  r.   r,   r  r   C!  r  r.   c                 ,    [         R                  " 5       $ r#  )rF   PerplexityChatConfigr  r.   r,   r  r   D!  r2  r.   c                 ,    [         R                  " 5       $ r#  rF   rs  r  r.   r,   r  r   E!  rL  r.   c                 ,    [         R                  " 5       $ r#  ry  r  r.   r,   r  r   F!  s    W-B-B-Dr.   c                 ,    [         R                  " 5       $ r#  )rF   r  r  r.   r,   r  r   G!  s    g.E.E.Gr.   c                 ,    [         R                  " 5       $ r#  )rF   r  r  r.   r,   r  r   H!  r-  r.   c                 ,    [         R                  " 5       $ r#  )rF   BasetenConfigr  r.   r,   r  r   I!  rL  r.   c                 ,    [         R                  " 5       $ r#  )rF   r  r  r.   r,   r  r   J!  r  r.   c                 ,    [         R                  " 5       $ r#  )rF   rr  r  r.   r,   r  r   L!      ==?r.   c                 ,    [         R                  " 5       $ r#  )rF   r  r  r.   r,   r  r   P!  r  r.   c                 ,    [         R                  " 5       $ r#  )rF   SambanovaConfigr  r.   r,   r  r   S!  r  r.   c                 ,    [         R                  " 5       $ r#  )rF   rf  r  r.   r,   r  r   T!  r-  r.   c                 ,    [         R                  " 5       $ r#  )rF   r  r  r.   r,   r  r   U!  s    (:(:(<r.   c                 ,    [         R                  " 5       $ r#  )rF   r  r  r.   r,   r  r   V!      '*>*>*@r.   c                 ,    [         R                  " 5       $ r#  )rF   rh  r  r.   r,   r  r   W!  r  r.   c                 ,    [         R                  " 5       $ r#  )rF   re  r  r.   r,   r  r   X!  r  r.   c                 ,    [         R                  " 5       $ r#  )rF   r  r  r.   r,   r  r   Y!  r  r.   c                 ,    [         R                  " 5       $ r#  )rF   GenAIHubOrchestrationConfigr  r.   r,   r  r   [!      ;;=r.   c                 ,    [         R                  " 5       $ r#  )rF   FeatherlessAIConfigr  r.   r,   r  r   ^!  r/  r.   c                 ,    [         R                  " 5       $ r#  )rF   NovitaConfigr  r.   r,   r  r   _!  r  r.   c                 ,    [         R                  " 5       $ r#  )rF   r  r  r.   r,   r  r   `!  r  r.   c                 ,    [         R                  " 5       $ r#  )rF   WandbConfigr  r.   r,   r  r   a!  s    )<)<)>r.   c                 ,    [         R                  " 5       $ r#  )rF   DashScopeChatConfigr  r.   r,   r  r   b!  r$  r.   c                 ,    [         R                  " 5       $ r#  )rF   ModelScopeChatConfigr  r.   r,   r  r   c!  r2  r.   c                 ,    [         R                  " 5       $ r#  )rF   MoonshotChatConfigr  r.   r,   r  r   d!  r  r.   c                 ,    [         R                  " 5       $ r#  )rF   DockerModelRunnerChatConfigr  r.   r,   r  r   f!  r  r.   c                 ,    [         R                  " 5       $ r#  )rF   V0ChatConfigr  r.   r,   r  r   i!  s    g&:&:&<r.   c                 ,    [         R                  " 5       $ r#  )rF   MorphChatConfigr  r.   r,   r  r   j!  r  r.   c                 ,    [         R                  " 5       $ r#  )rF   LiteLLMProxyChatConfigr  r.   r,   r  r   l!  s    668r.   c                 ,    [         R                  " 5       $ r#  )rF   GradientAIConfigr  r.   r,   r  r   o!  rb  r.   c                 ,    [         R                  " 5       $ r#  )rF   NscaleConfigr  r.   r,   r  r   p!  r  r.   c                 ,    [         R                  " 5       $ r#  )rF   HerokuChatConfigr  r.   r,   r  r   q!  rD  r.   c                 ,    [         R                  " 5       $ r#  )rF   OCIChatConfigr  r.   r,   r  r   r!  r  r.   c                 ,    [         R                  " 5       $ r#  )rF   HyperbolicChatConfigr  r.   r,   r  r   s!  r2  r.   c                 ,    [         R                  " 5       $ r#  )rF   OVHCloudChatConfigr  r.   r,   r  r   t!  r  r.   c                 ,    [         R                  " 5       $ r#  )rF   AmazonNovaChatConfigr  r.   r,   r  r   u!  rU  r.   c                 *    [         R                  5       $ r#  )r  _get_langgraph_configr  r.   r,   r  r   w!  s    -CCEr.   c                 *    [         R                  5       $ r#  )r  _get_langflow_configr  r.   r,   r  r   {!  s    -BBDr.   )dr^   r+  r,  AZURE_AI	VERTEX_AIBEDROCKCOHERECOHERE_CHATDEEPSEEK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COMPACTIFAIrR  rS  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LANGFLOWr  r.   r,   _build_provider_config_map0ProviderConfigManager._build_provider_config_map   s'
   Y
 "CU!KY
 ""%F$N	Y
 !!O$Y
 ""P%Y
   N#Y
& M"'Y
. $$M'/Y
8 !!$H%#P9Y
:  @%H;Y
< ''9*=Y
D :EBEY
F !BE JGY
H ##&H%%PIY
J >FKY
L >FMY
N ""%I5$QOY
P ""%JE$RQY
R !A5 ISY
T //<2UY
\ ""%F$N]Y
^ !!$De#L_Y
` ''*OQV)WaY
b ''*NPU)VcY
d ##&Le%TeY
f ''*OQV)WgY
h ''*OQV)WiY
j ""%F$NkY
l %%(KU'SmY
n ##&Le%ToY
p   #I5"QqY
r %%(Le'TsY
t   #F"NuY
v   #F"NwY
x "De!LyY
z $$'NPU&V{Y
| ''*OQV)W}Y
~   #BE"JY
@ !!$De#LAY
B   #BE"JCY
D "H%!PEY
F &&)OQV(WGY
H $$'Mu&UIY
J ''9*KY
R $$'Mu&USY
T ""%JE$RUY
V ""%I5$QWY
X ""%JE$RYY
Z ""%F$N[Y
\ $$'NPU&V]Y
^ $$'I5&Q_Y
` ##&H%%PaY
b **7-cY
j !!$De#LkY
l ""%F$NmY
n "NPU!VoY
p  @%HqY
r ""%Eu$MsY
t ##&Mu%UuY
v ""%Eu$MwY
x ""%F$NyY
z $$'I5&Q{Y
| ""%F$N}Y
~ ##&Le%TY
@   #BE"JAY
B ""%De$LCY
D ##&G%OEY
F !!$De#LGY
H   #BE"JIY
J ##&H%%PKY
L 22?5MY
T 22?5UY
\ ""%F$N]Y
^ !!$De#L_Y
`  <eDaY
b "@%!HcY
d ""%F$NeY
f "@%!HgY
h "@%!HiY
j ..=1kY
r ''*OQV)WsY
t "@%!HuY
v "@%!HwY
x !> FyY
z ""%JE$R{Y
| ##&Le%T}Y
~ !!$H%#P,,=/ OO<eD!BE J&&8) $$'I5&Q"@%!H"De!L>F##&Le%T!!$H%#P$$'Mu&U""E% !!D$kY
 Y	
r.   c                (   U=(       d    U n[         R                  " 5       R                  US9(       a  [         R                  " 5       $ [         R                  R	                  US9(       a  [         R                  " 5       $ [         R
                  " 5       $ )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  )rF   r  r  r  r  rB  )r_  rC  detection_models      r,   _get_azure_config'ProviderConfigManager._get_azure_config!  sl     %-&&(:::Q..00((==O=T0022((**r.   c                0    SSK Jn  UR                  U 5      $ )z(Get Azure AI config based on model type.r   AzureFoundryModelInfo)"litellm.llms.azure_ai.common_utilsr	  get_azure_ai_config_for_model)r_  r	  s     r,   r  *ProviderConfigManager._get_azure_ai_config!  s     	M$BB5IIr.   c                   SU ;   a  [         R                  " 5       $ SU ;   a  [         R                  " 5       $ SU ;   a  SSKJn  U" 5       $ U [         R
                  ;   a0  SU ;   a  [         R                  " 5       $ [         R                  " 5       $ U [         R                  ;   a  [         R                  " 5       $ [         R                  " 5       $ )z)Get Vertex AI config based on model type.rY  r  zgpt-ossr   )VertexAIGPTOSSTransformationr:  )rF   rm  ro  Flitellm.llms.vertex_ai.vertex_ai_partner_models.gpt_oss.transformationr	  rq  rr  rs  rt  ru  rv  )r_  r	  s     r,   r  +ProviderConfigManager._get_vertex_ai_config!  s     u--//2244% 011g333e#<<>>((**g333--////11r.   c                    SSK Jn  U" U S9$ )z"Get Bedrock config based on model.r   )get_bedrock_chat_configr  )rU  r!	  )r_  r!	  s     r,   r  )ProviderConfigManager._get_bedrock_config!  s     	N&U33r.   c                    [        [        R                  [           S5      nUR                  " U 5      nUS:X  a  [
        R                  " 5       $ [
        R                  " 5       $ )z!Get Cohere config based on route.r   v2)rF  rG  rH  rI  get_cohere_routerF   CohereV2ChatConfigrd  )r_  r   routes      r,   r  (ProviderConfigManager._get_cohere_config!  sO     "#++h"79JK007D=--//''))r.   c                     SSK Jn   U " 5       $ )zGet LangGraph config.r   LangGraphConfig)*litellm.llms.langgraph.chat.transformationr+	  r*	  s    r,   r  +ProviderConfigManager._get_langgraph_config!  s     	O  r.   c                     SSK Jn   U " 5       $ )zGet LangFlow config.r   LangFlowConfig))litellm.llms.langflow.chat.transformationr0	  r/	  s    r,   r  *ProviderConfigManager._get_langflow_config!  s     	Mr.   c                    U[         R                  :X  ai  [        R                  R	                  U S9(       a  [        R                  $ [        R
                  R                  U S9(       a  [        R
                  " 5       $ U[         R                  :X  a  [        R                  XS9$ [        R                  c  [        R                  5       [        l
        [        R                  R                  U5      nUb  Uu  pEU(       a  U" U 5      $ U" 5       $ SSKJn  SSKJn  UR#                  UR$                  5      (       aD  UR                  UR$                  5      nUc  ['        SUR$                   S35      eU" U5      " 5       $ g)	a<  
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_  rC  Nr   )create_config_classJSONProviderRegistryz	Provider z
 not found)r^   r+  rF   openaiOSeriesConfigis_model_o_series_modelOpenAIGPT5Configr  r-  r  r	  r  r	  r9  'litellm.llms.openai_like.dynamic_configr4	  $litellm.llms.openai_like.json_loaderr6	  existsrP  r  )	r_  r   rC  config_entryconfig_factoryneeds_modelr4	  r6	  r  s	            r,   ra  .ProviderConfigManager.get_provider_chat_config!  sG     |*****BBBO222''<<5<I//11 |)))(:: ;  
 !55=%@@B "6
 -AAEEhO#*6'N%e,,%'' 	PM&&x~~66266x~~FO& 9X^^,<J!GHH&799r.   c                	   [         R                  R                  U:X  a9  [         R                  R	                  U 5      (       a  [         R                  " 5       $ [         R                  R                  U:X  a9  [         R
                  R                  U 5      (       a  [         R
                  " 5       $ [         R                  R                  U:X  a  [         R                  " 5       $ [         R                  R                  U:X  a  [         R                  " 5       $ [         R                  R                  U:X  a  [         R                  " 5       $ [         R                  R                  U:X  a  [         R                  " 5       $ [         R                  R                  U:X  a  [         R                  " 5       $ [         R                  R                   U:X  a  [         R"                  " 5       $ [         R                  R$                  U:X  a  SSKJn  U" 5       $ [         R                  R*                  U:X  d  [         R                  R,                  U:X  a  SSKJn  U" 5       $ [         R                  R2                  U:X  a  SSKJn  U" 5       $ [         R                  R8                  U:X  a  SSKJn  U" 5       $ [         R                  R>                  U:X  a  SSK J!n  U" 5       $ [         R                  RD                  U:X  a  [         RF                  " 5       $ [         R                  RH                  U:X  a  [         RJ                  " 5       $ [         R                  RL                  U:X  a  [         RN                  " 5       $ [         R                  RP                  U:X  a  [         RR                  " 5       $ [         R                  RT                  U:X  a  SSK+J,n  U" 5       $ [         R                  RZ                  U:X  a  SSK.J/n  U" 5       $ [         R                  R`                  U:X  a  [         Rb                  " 5       $ [         R                  Rd                  U:X  a  [         Rf                  " 5       $ [         R                  Rh                  U:X  a  SS	K5J6n	  U	Ro                  U 5      $ [         R                  Rp                  U:X  a  [         Rr                  " 5       $ g )
Nr   )OCIEmbedConfig)CohereEmbeddingConfig)r  )VolcEngineEmbeddingConfig)DashScopeEmbeddingConfig)OpenrouterEmbeddingConfig)VercelAIGatewayEmbeddingConfig)SagemakerEmbeddingConfig):rF   r^   VOYAGEr  r  r  r  r  r  r  r  IBMWatsonXEmbeddingConfigr  r  INFINITYr  r  r  r
	  %litellm.llms.oci.embed.transformationrB	  r  r  (litellm.llms.cohere.embed.transformationrC	  JINA_AI-litellm.llms.jina_ai.embedding.transformationr  r  0litellm.llms.volcengine.embedding.transformationrD	  r 	  +litellm.llms.dashscope.embed.transformationrE	  r	  r  r  SnowflakeEmbeddingConfigr  CometAPIEmbeddingConfigrR  GithubCopilotEmbeddingConfigr  0litellm.llms.openrouter.embedding.transformationrF	  r  7litellm.llms.vercel_ai_gateway.embedding.transformationrG	  r  GigaChatEmbeddingConfigr  HostedVLLMEmbeddingConfigr  /litellm.llms.sagemaker.embedding.transformationrH	  get_model_configr  PerplexityEmbeddingConfig)
r_  r   rB	  rC	  r  rD	  rE	  rF	  rG	  rH	  s
             r,   r  3ProviderConfigManager.get_provider_embedding_config"  s~      ''8377TT  ::<<  ''8377PPQVWW::<<!!((H40022!!((H40022!!))X54466!!778C2244!!**h62244!!++x73355!!%%1L!##  ''83##//8;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0H<7799!!,,8 -..!!33x? 233!!**h62244!!--94466!!++x7 ,<<UCC!!,,84466r.   c                   [         R                  R                  U:X  d  [         R                  R                  U:X  a:  [	        X#5      (       a  [         R
                  " 5       $ [         R                  " 5       $ [         R                  R                  U:X  a  [         R                  " 5       $ [         R                  R                  U:X  a  [         R                  " 5       $ [         R                  R                  U:X  a  [         R                  " 5       $ [         R                  R                  U:X  a  [         R                  " 5       $ [         R                  R                  U:X  a  [         R                   " 5       $ [         R                  R"                  U:X  a  [         R$                  " 5       $ [         R                  R&                  U:X  a  SSKJn  U" U 5      $ [         R                  R,                  U:X  a  [         R.                  " 5       $ [         R                  R0                  U:X  a  [         R2                  " 5       $ [         R                  R4                  U:X  a  [         R6                  " 5       $ [         R                  R8                  U:X  a  [         R:                  " 5       $ [         R                  R<                  U:X  a  SSKJ n  U" 5       $ [         R
                  " 5       $ )Nr   )get_nvidia_nim_rerank_config)DashScopeRerankConfig)!rF   r^   r  r  should_use_cohere_v1_clientCohereRerankConfigCohereRerankV2Configr  AzureAIRerankConfigrK	  InfinityRerankConfigrN	  JinaAIRerankConfigr  HostedVLLMRerankConfigr  HuggingFaceRerankConfigr  DeepinfraRerankConfigr  +litellm.llms.nvidia_nim.rerank.common_utilsr^	  r  VertexAIRerankConfigr  FireworksAIRerankConfigrI	  VoyageRerankConfigr  IBMWatsonXRerankConfigr 	  ,litellm.llms.dashscope.rerank.transformationr_	  )r_  r   r  present_version_paramsr^	  r_	  s         r,   get_provider_rerank_config0ProviderConfigManager.get_provider_rerank_config_"  s      ''83##//8;*8L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 )**))++r.   c                (    [         R                  XS9$ )Nr  )r  ._get_provider_anthropic_messages_config_cachedr  s     r,   &get_provider_anthropic_messages_config<ProviderConfigManager.get_provider_anthropic_messages_config"  s     
 %SS T 
 	
r.   r  c                n   U R                  5       n[        R                  R                  U:X  a  [        R                  " 5       $ [        R                  R
                  U:X  a  SSKJn  UR                  " U 5      $ [        R                  R                  U:X  a  SU;   a  SSK
Jn  U" 5       $  g [        R                  R                  U:X  a  SU;   a  SSKJn  U" 5       $  g [        R                  R                  U:X  a  SSKJn  U" 5       $ [        R                  R$                  U:X  a  SSKJn  U" 5       $ g )Nr   r   r  ),VertexAIPartnerModelsAnthropicMessagesConfig)AzureAnthropicMessagesConfig)MinimaxMessagesConfig)DeepSeekAnthropicMessagesConfig)r]  rF   r^   r,  AnthropicMessagesConfigr  rU  r   ,get_bedrock_provider_config_for_messages_apir  blitellm.llms.vertex_ai.vertex_ai_partner_models.anthropic.experimental_pass_through.transformationrw	  r  7litellm.llms.azure_ai.anthropic.messages_transformationrx	  r  ,litellm.llms.minimax.messages.transformationry	  r  -litellm.llms.deepseek.messages.transformationrz	  )r_  r   model_lowerr   rw	  rx	  ry	  rz	  s           r,   rs	  DProviderConfigManager._get_provider_anthropic_messages_config_cached"  s    kkm))X52244 !!))X5J#PPQVWW!!++x7;& DEE '2 ' !!**h6;& 455 '$  !!))X5 )**!!**h6 344r.   c                   [        U US9n[        R                  R                  U:X  a"  UR	                  S5      S:X  a  SSKJn  U" 5       $ [        R                  R                  U:X  a  [        R                  " 5       $ [        R                  R                  U:X  a  [        R                  " 5       $ [        R                  R                  U:X  a  SSKJn  U" 5       $ [        R                  R                  U:X  a0  SU ;   a  [        R                  " 5       $ [        R                   " 5       $ [        R                  R"                  U:X  a  SSKJn  U" 5       $ [        R                  R(                  U:X  a  SS	KJn  U" 5       $ [        R                  R.                  U:X  a  SS
KJn  U" 5       $ [        R                  R4                  U:X  a  SSKJn  U" 5       $ [        R                  R:                  U:X  a  SSKJn	  U	" 5       $ [        R                  R@                  U:X  a  SSK!J"n
  U
" 5       $ [        R                  RF                  U:X  a  SSK$J%n  U" 5       $ g )Nr  audio_transcription_configazure_speechr   )#AzureSpeechAudioTranscriptionConfig)"ElevenLabsAudioTranscriptionConfigzgpt-4o)"HostedVLLMAudioTranscriptionConfig)"IBMWatsonXAudioTranscriptionConfig) OVHCloudAudioTranscriptionConfig) ScalewayAudioTranscriptionConfig)MistralAudioTranscriptionConfig)"NvidiaRivaAudioTranscriptionConfig)SonioxAudioTranscriptionConfig)&r  rF   r^   r-  r9  5litellm.llms.azure.audio_transcription.transformationr	  r  #FireworksAIAudioTranscriptionConfig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	  r	  8litellm.llms.ovhcloud.audio_transcription.transformationr	  SCALEWAY8litellm.llms.scaleway.audio_transcription.transformationr	  r  7litellm.llms.mistral.audio_transcription.transformationr	  NVIDIA_RIVA;litellm.llms.nvidia_riva.audio_transcription.transformationr	  SONIOX6litellm.llms.soniox.audio_transcription.transformationr	  )r_  r   model_cost_entryr	  r	  r	  r	  r	  r	  r	  r	  r	  s               r,   r  =ProviderConfigManager.get_provider_audio_transcription_config"  s   
 E

   &&(2 $$%ABnT 78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r.   c                   SSK Jn  SSKJn  [	        U [
        5      (       a  U R                  O
[        U 5      nS n[	        U [
        5      (       a  U nO [        U 5      n[        R                  XQ5      nUb  U$ UR                  U5      (       a7  UR                  U5      (       a!  UR                  U5      nUb  U" U5      " 5       $ g ! [         a     Ntf = f)Nr   )create_responses_config_classr5	  )r:	  r	  r;	  r6	  r%  r^   rP  rp  r  r   _get_python_responses_api_configr<	  supports_responses_apir9  )r   r_  r	  r6	  provider_strprovider_enumr  r  s           r,   !get_provider_responses_api_config7ProviderConfigManager.get_provider_responses_api_config#  s    
	
 	N )<@@HNNc(m 	 15h--$M ,X 6
 'GG
 M  &&
 
"99,GG266|DO*4_EGG%  s   C 
CCc                
   U c  g[         R                  R                  U :X  a  [         R                  " 5       $ [         R                  R                  U :X  a  U=(       a    SUR                  5       ;   nU=(       a3    SUR                  5       ;   =(       d    [        U5      =(       a    U(       + nU(       a  [         R                  " 5       $ [         R                  " 5       $ [         R                  R                  U :X  a  [         R                  " 5       $ [         R                  R                  U :X  a*  SSKJn  Ub  U" US9(       a  [         R                  " 5       $ g[         R                  R                  U :X  a  [         R                   " 5       $ [         R                  R"                  U :X  a  [         R$                  " 5       $ [         R                  R&                  U :X  a  [         R(                  " 5       $ [         R                  R*                  U :X  a  [         R,                  " 5       $ [         R                  R.                  U :X  a  [         R0                  " 5       $ [         R                  R2                  U :X  a1  U(       a)  SUR                  5       ;   a  [         R4                  " 5       $ g[         R                  R6                  U :X  a  [         R8                  " 5       $ [         R                  R:                  U :X  a  [         R<                  " 5       $ [         R                  R>                  U :X  aX  SSK J!nJ"n  U(       a  U" U[         RF                  5      (       d  g[         RH                  " U" U[         RF                  5      S:H  S	9$ g)
zFCheck for Python-class-based responses API configs (custom overrides).Nr
  o_seriesr   )%github_copilot_supports_responses_apir  )mantle_base_segmentmantle_supports_responsesz	openai/v1)use_openai_path)%rF   r^   r+  OpenAIResponsesAPIConfigr-  r]  r  $AzureOpenAIOSeriesResponsesAPIConfigAzureOpenAIResponsesAPIConfigr  XAIResponsesAPIConfigrR  4litellm.llms.github_copilot.responses.transformationr	  GithubCopilotResponsesAPIConfigrS  ChatGPTResponsesAPIConfigr	  LiteLLMProxyResponsesAPIConfigr  VolcEngineResponsesAPIConfigMANUSManusResponsesAPIConfigr  PerplexityResponsesConfigr  DatabricksResponsesAPIConfigr  OpenRouterResponsesAPIConfigr  HostedVLLMResponsesAPIConfigr  (litellm.llms.bedrock_mantle.common_utilsr	  r	  r  BedrockMantleResponsesAPIConfig)r   r_  is_gpt_modelis_o_seriesr	  r	  r	  s          r,   r	  6ProviderConfigManager._get_python_responses_api_config<#  s    &&(23355!!''83 !;Uekkm%;L ekkm+ D&u-Bl2B 
 CCEE<<>>!!%%10022!!00H< } EE 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0H<
  9%ASAS T T:: 3E7;M;M N!  r.   c                j    [         R                  R                  U :X  a  [         R                  " 5       $ g)z
Get provider-specific Skills API configuration

Args:
    provider: The LLM provider

Returns:
    Provider-specific Skills API config or None
N)rF   r^   r,  AnthropicSkillsConfig)r   s    r,   get_provider_skills_api_config4ProviderConfigManager.get_provider_skills_api_config#  s*     ))X50022r.   c                Z    [         R                  R                  U :X  a  SSKJn  U" 5       $ g)z
Get provider-specific Evals API configuration

Args:
    provider: The LLM provider

Returns:
    Provider-specific Evals API config or None
r   )OpenAIEvalsConfigN)rF   r^   r+  (litellm.llms.openai.evals.transformationr	  )r   r	  s     r,   get_provider_evals_api_config3ProviderConfigManager.get_provider_evals_api_config#  s'     &&(2R$&&r.   c                "   [         R                  U:X  a  [        R                  " 5       $ [         R                  U:X  a  [        R
                  " 5       $ [         R                  U:X  a  [        R                  " 5       $ [        R                  " 5       $ r#  )	r^   r  rF   FireworksAITextCompletionConfigr  TogetherAITextCompletionConfigr  r  r(  r  s     r,   #get_provider_text_completion_config9ProviderConfigManager.get_provider_text_completion_config#  sj    
 $$0::<<%%199;;33x?88::1133r.   c                ~   [         R                  U:X  a  [        R                  " 5       $ [         R                  U:X  a  [        R
                  " 5       $ [         R                  U:X  a  [        R                  " 5       $ [         R                  U:X  a  SSK	J
n  U" 5       $ [         R                  U:X  a  [        R                  " 5       $ [         R                  U:X  a  [        R                  " 5       $ [         R                  U:X  a  [        R                   " 5       $ [         R"                  U:X  a  [        R$                  " 5       $ [         R&                  U:X  d  [         R(                  U:X  a  SSKJn  U" 5       $ [         R.                  U:X  d  [         R0                  U:X  a  SSKJn  U" 5       $ [         R6                  U:X  a  [        R8                  " 5       $ [         R:                  U:X  a  [        R<                  " 5       $ [         R>                  U:X  a  SSK J!n  U" 5       $ [         RD                  U:X  a  SSK#J$n  U" U S9$ g )Nr   )VertexAIModelInfo)OllamaModelInfo)VLLMModelInfor   r	  r  )%r^   r  rF   r  r+  r  r  GeminiModelInfor  #litellm.llms.vertex_ai.common_utilsr	  r	  r  TOPAZTopazModelInfor,  AnthropicModelInfor  XAIModelInfor  r   litellm.llms.ollama.common_utilsr	  r  r  litellm.llms.vllm.common_utilsr	  LEMONADELemonadeChatConfigr  r,  r  rU  r   r  r	  r	  )r_  r   r	  r	  r	  r   r	  s          r,   r  -ProviderConfigManager.get_provider_model_info#  s   
 $$0,,..  H,**,,  H,**,,##x/M$&&''8311338+))++##x/--//)''))  H,0H0HH0TH"$$(*l.F.F(.R !?"""h.--//""h.))++!!X-J#%%""h.P(u55r.   c                4   [         R                  U:X  a  SSKJn  U" 5       $ [         R                  U:X  d  [         R
                  U:X  a  SSKJn  U" 5       $ [         R                  U:X  a  SSK	J
n  U" 5       $ [         R                  U:X  a  SSKJn  U" 5       $ g )Nr   )BedrockPassthroughConfig)VLLMPassthroughConfig)AzurePassthroughConfig)WatsonxPassthroughConfig)r^   r  /litellm.llms.bedrock.passthrough.transformationr	  r  r  ,litellm.llms.vllm.passthrough.transformationr	  r-  -litellm.llms.azure.passthrough.transformationr	  r  /litellm.llms.watsonx.passthrough.transformationr	  )r_  r   r	  r	  r	  r	  s         r,   get_provider_passthrough_config5ProviderConfigManager.get_provider_passthrough_config#  s    
 8+ ,--(*l.F.F(.R )**8+ *++!!X- ,--r.   c                    [         R                  U:X  a  [        R                  " 5       $ [         R                  U:X  a  [        R
                  " 5       $ g r#  )r^   r+  rF   OpenAIImageVariationConfigr	  TopazImageVariationConfigr  s     r,   #get_provider_image_variation_config9ProviderConfigManager.get_provider_image_variation_config	$  sA    
 (*55778+4466r.   c                N   [         R                  U:X  a  SSKJn  U" 5       $ [         R                  U:X  a  SSKJn  U" 5       $ [         R                  U:X  a  SSKJ	n  U" 5       $ [         R                  U:X  a  SSKJn  U" 5       $ [         R                  U:X  a  SSKJn  U" 5       $ g )Nr   )GoogleAIStudioFilesHandler)VertexAIFilesConfig)BedrockFilesConfig)ManusFilesConfig)AnthropicFilesConfig)r^   r  (litellm.llms.gemini.files.transformationr	  r  +litellm.llms.vertex_ai.files.transformationr	  r  )litellm.llms.bedrock.files.transformationr	  r	  'litellm.llms.manus.files.transformationr	  r,  +litellm.llms.anthropic.files.transformationr	  )r_  r   r	  r	  r	  r	  r	  s          r,   get_provider_files_config/ProviderConfigManager.get_provider_files_config$  s    
 (* .//##x/W&((!!X-T%''8+P#%%##x/X'))r.   c                F    [         R                  U:X  a  SSKJn  U" 5       $ g )Nr   )BedrockBatchesConfig)r^   r  +litellm.llms.bedrock.batches.transformationr 
  )r_  r   r 
  s      r,   get_provider_batches_config1ProviderConfigManager.get_provider_batches_config1$  s!    
 8+X'))r.   c                X    SSK Jn  [        R                  U :X  a  UR	                  5       $ g )Nr   )BedrockVectorStore)Clitellm.integrations.vector_store_integrations.bedrock_vector_storer
  r^   r  get_initialized_custom_logger)r   r
  s     r,    get_provider_vector_store_config6ProviderConfigManager.get_provider_vector_store_config<$  s)    	
 8+%CCEEr.   c                   [         R                  R                  U :X  a  SSKJn  U" 5       $ [         R                  R
                  U :X  a  SSKJn  U" 5       $ [         R                  R                  U :X  a+  US:X  d  Uc  SSK	J
n  U" 5       $ US:X  a  SSKJn  U" 5       $  g[         R                  R                  U :X  a  SS	KJn  U" 5       $ [         R                  R                   U :X  a  SS
KJn  U" 5       $ [         R                  R&                  U :X  a  SSKJn  U" 5       $ [         R                  R,                  U :X  a  SSKJn	  U	" 5       $ [         R                  R2                  U :X  a  SSKJn
  U
" 5       $ [         R                  R8                  U :X  a  SSKJn  U" 5       $ [         R                  R>                  U :X  a  SSK J!n  U" 5       $ g)zD
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)"rF   r^   r+  0litellm.llms.openai.vector_stores.transformationr
  r-  /litellm.llms.azure.vector_stores.transformationr
  r  ;litellm.llms.vertex_ai.vector_stores.rag_api.transformationr
  >litellm.llms.vertex_ai.vector_stores.search_api.transformationr
  r  1litellm.llms.bedrock.vector_stores.transformationr
  	PG_VECTOR3litellm.llms.pg_vector.vector_stores.transformationr
  r  2litellm.llms.azure_ai.vector_stores.transformationr
  MILVUS0litellm.llms.milvus.vector_stores.transformationr
  r  0litellm.llms.gemini.vector_stores.transformationr
  r  1litellm.llms.ragflow.vector_stores.transformationr
  
S3_VECTORS4litellm.llms.s3_vectors.vector_stores.transformationr
  )r   api_typer
  r
  r
  r
  r
  r
  r
  r
  r
  r
  r
  s                r,   !get_provider_vector_stores_config7ProviderConfigManager.get_provider_vector_stores_configH$  s    &&(2 +,,!!''83 011!!++x79$(8 /00\) 899 *` U !!))X5 ,--!!++x7 '((!!**h6 ,--!!((H4 +,,!!((H4 +,,!!))X5 ,--!!,,8 .//r.   c                Z    [         R                  R                  U :X  a  SSKJn  U" 5       $ g )Nr   )OpenAIVectorStoreFilesConfig)rF   r^   r+  5litellm.llms.openai.vector_store_files.transformationr*
  )r   r*
  s     r,   &get_provider_vector_store_files_config<ProviderConfigManager.get_provider_vector_store_files_config$  s+     &&(2 011r.   c                   [         R                  U:X  a  SSKJn  U" U 5      $ [         R                  U:X  a  SSKJn  U" U 5      $ [         R                  U:X  a  SSKJ	n  U" U 5      $ [         R                  U:X  a  SSKJn  U" U 5      $ [         R                  U:X  a  SSKJn  U" U 5      $ [         R                   U:X  a  SSKJn  U" U 5      $ [         R&                  U:X  a  SSKJn  U" U 5      $ [         R,                  U:X  a  SS	KJn	  U	" U 5      $ [         R2                  U:X  a  SS
KJn
  U
" 5       $ [         R8                  U:X  a  SSKJn  U" U 5      $ [         R>                  U:X  a  SSK J!n  U" U 5      $ [         RD                  U:X  a  SSK#J$n  U" U 5      $ [         RJ                  U:X  a  SSK&J'n  U" U 5      $ [         RP                  U:X  a  SSK)J*n  U" U 5      $ [         RV                  U:X  a  SSK,J-n  U" U 5      $ [         R\                  U:X  a  SSK/J0n  U" U 5      $ [         Rb                  U:X  a  SSK2J3n  U" U 5      $ g )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_generationr0
  r  &litellm.llms.azure_ai.image_generationr1
  
XINFERENCE(litellm.llms.xinference.image_generationr2
  RECRAFT%litellm.llms.recraft.image_generationr3
  AIML"litellm.llms.aiml.image_generationr4
  r  &litellm.llms.cometapi.image_generationr5
  r  $litellm.llms.gemini.image_generationr6
  r	  :litellm.llms.litellm_proxy.image_generation.transformationr7
  FAL_AI$litellm.llms.fal_ai.image_generationr8
  	STABILITY'litellm.llms.stability.image_generationr9
  RUNWAYML&litellm.llms.runwayml.image_generationr:
  BLACK_FOREST_LABS/litellm.llms.black_forest_labs.image_generationr;
  r  'litellm.llms.vertex_ai.image_generationr<
  r  (litellm.llms.openrouter.image_generationr=
  r 	  'litellm.llms.dashscope.image_generationr>
  r	  (litellm.llms.modelscope.image_generationr?
  )r_  r   r/
  r0
  r1
  r2
  r3
  r4
  r5
  r6
  r7
  r8
  r9
  r:
  r;
  r<
  r=
  r>
  r?
  s                      r,   $get_provider_image_generation_config:ProviderConfigManager.get_provider_image_generation_config$  s&   
 (* 6e<<8+ 5U;;""h. 8>>$$0 :%@@!!X- 7u==(* 4E::""h. 8>>  H, 6e<<''83 566  H, 6e<<##x/ 9??""h. 8>>++x7 AGG##x/ 9??$$0 :%@@##x/ 9??$$0 :%@@r.   c                N   [         R                  U:X  a  SSKJn  U" 5       $ [         R                  U:X  a  SSKJn  U" 5       $ [         R                  U:X  a  SSKJ	n  U" 5       $ [         R                  U:X  a  SSKJn  U" 5       $ [         R                  U:X  a  SSKJn  U" 5       $ g )Nr   )OpenAIVideoConfig)AzureVideoConfig)GeminiVideoConfig)VertexAIVideoConfig)RunwayMLVideoConfig)r^   r+  )litellm.llms.openai.videos.transformationr[
  r-  (litellm.llms.azure.videos.transformationr\
  r  )litellm.llms.gemini.videos.transformationr]
  r  ,litellm.llms.vertex_ai.videos.transformationr^
  rP
  +litellm.llms.runwayml.videos.transformationr_
  )r_  r   r[
  r\
  r]
  r^
  r_
  s          r,   get_provider_video_config/ProviderConfigManager.get_provider_video_config%  s    
 (*S$&&8+Q#%%  H,S$&&##x/X&((""h.W&((r.   c                    [         R                  U :X  a  SSKJn  U" 5       $ U [         R                  [         R
                  4;   a  SSKJn  U" 5       $ g )Nr   )OpenAIContainerConfig)AzureContainerConfig)r^   r+  -litellm.llms.openai.containers.transformationrh
  r-  r  ,litellm.llms.azure.containers.transformationri
  )r   rh
  ri
  s      r,   get_provider_container_config3ProviderConfigManager.get_provider_container_config)%  sN     (* )****L,C,CDD ())r.   c                F    [         R                  U:X  a  SSKJn  U" 5       $ g )Nr   )GeminiRealtimeConfig)r^   r  +litellm.llms.gemini.realtime.transformationro
  )r_  r   ro
  s      r,   get_provider_realtime_config2ProviderConfigManager.get_provider_realtime_config;%  s!    
 (*X'))r.   c                    [         R                  U:X  a  SSKJn  U" 5       $ [         R                  U:X  a  SSKJn  U" 5       $ g)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_transformationrt
  r-  /litellm.llms.azure.realtime.http_transformationru
  )r_  r   rt
  ru
  s       r,   !get_provider_realtime_http_config7ProviderConfigManager.get_provider_realtime_http_configF%  sC     (* ,--) +,,r.   c                   [         R                  U:X  a  SSKJn  U" U S9$ [         R                  U:X  a  SSKJn  U" 5       $ [         R                  U:X  a  SSKJ	n  U" 5       $ [         R                  U:X  a  SSKJn  U" 5       $ [         R                  U:X  a  SSKJn  U" U 5      $ [         R                   U:X  a  SSKJn  U" U 5      $ [         R&                  U:X  a  SS	KJn  U" 5       $ [         R,                  U:X  a  SS
KJn	  U	" U 5      $ [         R2                  U:X  a  SSKJn
  U
" U 5      $ [         R8                  U:X  a  SSKJn  U" U 5      $ [         R>                  U:X  a  SSK J!n  U" U 5      $ g )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|
  rE
  .litellm.llms.recraft.image_edit.transformationr}
  rR
  8litellm.llms.black_forest_labs.image_edit.transformationr~
  r   litellm.llms.azure_ai.image_editr
  r  litellm.llms.gemini.image_editr
  r	  4litellm.llms.litellm_proxy.image_edit.transformationr
  r  !litellm.llms.vertex_ai.image_editr
  rN
  !litellm.llms.stability.image_editr
  r  Llitellm.llms.bedrock.image_edit.amazon_nova_canvas_image_edit_transformationr
  r  "litellm.llms.openrouter.image_editr
  )r_  r   r{
  r|
  r}
  r~
  r
  r
  r
  r
  r
  r
  r
  s                r,   get_provider_image_edit_config4ProviderConfigManager.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/ 3599##x/ 3599!!X- ;5AA$$0 4E::r.   c                   SSK Jn  U[        R                  R                  :X  a  SSKJn  U" U S9$ U[        R                  R                  :X  a  SSKJ	n  U" U S9$ U[        R                  R                  :X  a#  SSKJnJn  U S:X  a  U" 5       $ U S:X  a  U" 5       $ g	[        [        R                   ["           S
5      n[        R                  R$                  U0nUR'                  US	5      n	U	c  g	U	" 5       $ )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-legacyNr   ))litellm.llms.vertex_ai.ocr.transformationr
  rF   r^   r  &litellm.llms.azure_ai.ocr.common_utilsr
  r  'litellm.llms.vertex_ai.ocr.common_utilsr
  REDUCTO'litellm.llms.reducto.ocr.transformationr
  r
  rF  rG  rH  rI  r  r9  )
r_  r   r
  r
  r
  r
  r
  r   PROVIDER_TO_CONFIG_MAPr  s
             r,   get_provider_ocr_config-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"3;;x#8:LM  ((*:"
 .11(DA~r.   c                N   SSK Jn  SSKJn  SSKJn  SSKJn  SSKJ	n  SSK
Jn  SSKJn  SS	KJn  SS
KJn	  SSKJn
  SSKJn  SSKJn  SSKJn  SSKJn  SSKJn  SSKJn  SSK J!n  0 [D        RF                  U_[D        RH                  U_[D        RJ                  U
_[D        RL                  U_[D        RN                  U_[D        RP                  U_[D        RR                  U_[D        RT                  U_[D        RV                  U_[D        RX                  U_[D        RZ                  U	_[D        R\                  U_[D        R^                  U_[D        R`                  U_[D        Rb                  U_[D        Rd                  U_[D        Rf                  U_nURi                  U S5      nUc  gU" 5       $ )z0
Get Search configuration for a given provider.
r   )APISerpentSearchConfig)BraveSearchConfig)DataForSEOSearchConfig)DuckDuckGoSearchConfig)ExaAISearchConfig)FastCRWSearchConfig)FirecrawlSearchConfig)GooglePSESearchConfig)LinkupSearchConfig)ParallelAISearchConfig)PerplexitySearchConfig)SearchAPIConfig)SearXNGSearchConfig)SerperSearchConfig)TavilySearchConfig)TinyfishSearchConfig)YouComSearchConfigN)5-litellm.llms.apiserpent.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.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
  rj   r  TAVILYPARALLEL_AIEXA_AIBRAVE
GOOGLE_PSE
DATAFORSEO	FIRECRAWLFASTCRWSEARXNGLINKUP
DUCKDUCKGO	SEARCHAPISERPERYOU_COM
APISERPENTTINYFISHr9  )r   r
  r
  r
  r
  r
  r
  r
  r
  r
  r
  r
  r
  r
  r
  r
  r
  r
  r
  r  s                       r,   get_provider_search_config0ProviderConfigManager.get_provider_search_config%  s   	
 	OXXORVWP	
 	YPRPPTQ"
&&(>"
""$6"
 '')?"
 ""$5	"

 !!#4"
 &&(="
 &&(>"
 %%'<"
 ##%8"
 ##%8"
 ""$6"
 &&(>"
 %%"
 ""$6"
 ##%7"
  &&(>!"
" $$&:#"
& .11(DA~r.   c                F    SSK Jn  U [        R                  :X  a  U" 5       $ g)zB
Get sandbox (code execution) configuration for a given provider.
r   )E2BSandboxConfigN)'litellm.llms.e2b.sandbox.transformationr
  ri   E2B)r   r
  s     r,   get_provider_sandbox_config1ProviderConfigManager.get_provider_sandbox_config &  s#     	M'+++#%%r.   c                D   SSK Jn  [        R                  R                  U:X  a%  U R                  S5      (       a  SSKJn  U" 5       $  g
[        R                  R                  U:X  a  SSK	J
n  U" 5       $ [        R                  R                  U:X  a  SSKJn  U" 5       $ [        R                  R                  U:X  a  SSKJn  U" 5       $ [        R                  R"                  U:X  a  SSKJn  U" 5       $ [        R                  R(                  U:X  a  SS	KJn  U" 5       $ g
)z8
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   rF   r^   r-  r5  0litellm.llms.azure.text_to_speech.transformationr
  r	  5litellm.llms.elevenlabs.text_to_speech.transformationr
  rP
  3litellm.llms.runwayml.text_to_speech.transformationr
  r  4litellm.llms.vertex_ai.text_to_speech.transformationr
  r  2litellm.llms.minimax.text_to_speech.transformationr
  	AWS_POLLY4litellm.llms.aws_polly.text_to_speech.transformationr
  )	r_  r   r   r
  r
  r
  r
  r
  r
  s	            r,   "get_provider_text_to_speech_config8ProviderConfigManager.get_provider_text_to_speech_config&  s   	
 %%1 	** 233 +H = !!,,8 011!!**h6 .//!!++x7 .//!!))X5 -..!!++x7 .//r.   c                    [         R                  R                  U:X  a  SSKJn  U" 5       $ [         R                  R
                  U:X  a*  SSKJn  SSKJ	n  UR                  U 5      (       a  g U" 5       $ g )Nr   )GoogleGenAIConfig)VertexAIGoogleGenAIConfig)VertexAIPartnerModels)rF   r^   r  /litellm.llms.gemini.google_genai.transformationr
  r  2litellm.llms.vertex_ai.google_genai.transformationr
  4litellm.llms.vertex_ai.vertex_ai_partner_models.mainr
  is_vertex_partner_model)r_  r   r
  r
  r
  s        r,   1get_provider_google_genai_generate_content_configGProviderConfigManager.get_provider_google_genai_generate_content_configB&  sj    
 &&(2 %&&!!++x7 %<<UCC -..r.   r  )r  z)dict[LlmProviders, tuple[Callable, bool]]r#  )r_  rp  rC  r  r  r   )r_  rp  r  r   )r  r   )r_  rp  r   r^   rC  r  r  Optional[BaseConfig])r_  rp  r   r^   r  zOptional[BaseEmbeddingConfig])
r_  rp  r   r^   r  r  ro	  r  r  r   )r_  rp  r   r^   r  z%Optional[BaseAnthropicMessagesConfig])r_  rp  r   r^   r  z&Optional[BaseAudioTranscriptionConfig])r   zUnion[LlmProviders, str]r_  r  r   Optional[BaseResponsesAPIConfig])r   zOptional[LlmProviders]r_  r  r  r
  )r   r^   r  zOptional['BaseSkillsAPIConfig'])r   r^   r  zOptional['BaseEvalsAPIConfig'])r_  rp  r   r^   r  r   )r_  r  r   r^   r  zOptional[BaseLLMModelInfo])r_  rp  r   r^   r  zOptional[BasePassthroughConfig])r_  rp  r   r^   r  z"Optional[BaseImageVariationConfig])r_  rp  r   r^   r  zOptional[BaseFilesConfig])r_  rp  r   r^   r  zOptional[BaseBatchesConfig])r   r^   r  zOptional[CustomLogger])r   r^   r&
  r  r  zOptional[BaseVectorStoreConfig])r   r^   r  z$Optional[BaseVectorStoreFilesConfig])r_  rp  r   r^   r  #Optional[BaseImageGenerationConfig])r_  r  r   r^   r  zOptional[BaseVideoConfig])r   r^   r  zOptional[BaseContainerConfig])r_  rp  r   r^   r  zOptional[BaseRealtimeConfig])r_  rp  r   r^   r  z"Optional['BaseRealtimeHTTPConfig'])r_  rp  r   r^   r  zOptional[BaseImageEditConfig])r_  rp  r   r^   r  zOptional['BaseOCRConfig'])r   z'SearchProviders'r  zOptional['BaseSearchConfig'])r   ri   r  zBaseSandboxConfig | None)r_  rp  r   r^   r  z"Optional['BaseTextToSpeechConfig'])r_  rp  r   r^   r  z.Optional[BaseGoogleGenAIGenerateContentConfig])0rI  r  r  r  r  r  r  r	  r	  r  r  r  r  r  r  ra  r  rp	  rt	  r   r   rs	  r  r	  r	  r	  r	  r	  r  r	  r	  r	  r
  r
  r'
  r,
  rX
  re
  rl
  rq
  rx
  r
  r
  r
  r
  r
  r
  r  r  r.   r,   r  r     s?    QUMT_
 _
B + +  J J 2 2* 4 4 * * ! !      %)444 "4 
	4 4l YYY 
'Y Yv .,.,.,  ., !*	.,
 
., .,` 


 
/
 
 12''' 
/' 3 'R JJJ 
0J JX   $(*(( 
*( (T   $J(JJ 
*J JX 	(   	' $ 
4
4
4 
"
4 
4 --- 
$- -^  
) <  
,   
# 8  
%  				 	  #'JJJ 
)J JX 			-	 	 jjj 
-j jX  
# 4 	& "  
&   
, . @@@ 
'@ @D ''' 
#' 'R 2#2	%2 2h 
"
	!
 
 222 
,2 2h  
8 r.   r  c           	     ^   [        [        R                  [           S5      n[	        [
        U" [        U S95      5      n[	        [        [           U R                  S5      =(       d    UR                  S5      5      n[        R                  (       a  gUS:X  a  [        R                  SLa  gU$ )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   r  user_api_key_end_user_idN
prometheusT)rF  rG  rH  rI  r   rr   r   rp  r9  rF   disable_end_user_cost_tracking-enable_end_user_cost_tracking_prometheus_only)r  service_typer   	_metadataend_user_ids        r,   !get_end_user_id_for_cost_trackingr  e&  s     (/HA($ .t>/RSI 56 	5==34K
 -- |#@@Lr.   c                    U (       d  gSU;   =(       a    SU;  nU R                  S5      =(       d    U=(       a    U R                  S5      (       + $ )NFmax_chunks_per_docmax_tokens_per_docz
/v1/rerankz
/v2/rerank)endswith)r  ro	  uses_v1_paramss      r,   r`	  r`	  &  sV     *.DD $::  \* >x00>>r.   c                     Uc  Uc  gUb  U R                  U5      (       d  US-   U -   n [        UUU SS9nU[        :  $ ! [         a#  n[        R
                  " SU 35         SnAgSnAff = f)z
Returns true if the prompt is valid for prompt caching.

OpenAI + Anthropic providers have a minimum token count of 1024 for prompt caching.
NFr1  T)r{  r  r_  r  z)Error in is_prompt_caching_valid_prompt: )r5  r  r$   r   r   r   )r_  r{  r  r`  token_countr  s         r,   is_prompt_caching_valid_promptr
  &  s    *53C3C4
 4
 (#-5E#*.	
 >>> HLMs   ? 5? 
A,	A''A,c                    Sn[         R                  " X5      nU(       d  g/ nU H;  n[        [        U5      u  pVpxUS-  US-  -   U-   US-  -   n	UR	                  U	5        M=     U(       a  [        U5      $ S$ )z
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     @@)rQ  findallrn  r  r  r  )
srt_or_vtt_contenttimestamp_pattern
timestamps	durationsmatchhoursminutessecondsmillisecondstotal_secondss
             r,    extract_duration_from_srt_or_vttr  &  s     >-BJ I03C-w|3g=v@UU' 
 '3y>0D0r.   c                j   [         R                  " U 5      nUR                  0 S9nUR                  R	                  S5      nUR                  S5      nUR                  S5       Vs/ s H  of(       d  M  UPM     nnUR                  S5       Vs/ s H  of(       d  M  UPM     nn/ n	[        [        U5      5       H$  n
XzS US[        U5      U
-
   :X  d  M  USU
 U-   n	  O   Xx-   n	SSR                  U	5      -   nUR                  US9n[        UR                  UR                  S95      $ s  snf s  snf )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
)paramsr1  Nr  )r	  r  r  r  rstriplstriprd  r  r  r   rp  r  )r  ending_pathr  base_url	base_pathend_pathr  base_segmentsend_segmentsfinal_segmentsr  modified_pathr  s                r,   _add_path_to_api_baser$  &  s8    99X&L%%R%0H!!((-I!!#&H !* 4: 41Q 4M:'~~c282!aA2L8 N3}%&-Es=/AA/E FF*2A.=N ' '5 #((>22M%%=%9L |%%\-@-@%ABB% ;8s   %
D+3D+
D0D0c                    U R                  5        VVs0 s H"  u  pU[        R                  ;   d  M  Uc  M   X_M$     snn$ s  snnf r#  )rL  rF   OPENAI_CHAT_COMPLETION_PARAMS)r  r%  r&  s      r,   get_standard_openai_paramsr'  &  sK     LLN"DA555 	:; 	"  s   AAAc                    [         R                  nU[        -   nU R                  5        VVs0 s H  u  p4X2;  d  M  X4_M     nnnU$ s  snnf r#  )rF   r&  rq   rL  )r:  r  rw  r%  r&  rx  s         r,   !get_non_default_completion_paramsr)  &  sR    99M"%77N'1+B   	s
   AAc                    SU ;   a  U S   $ SU ;   a  U S   $ U R                  S5      n[        U[        5      (       a  SU;   a  US   $ SU;   a  US   $ g)zRead 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_summaryr  N)r9  r%  rr   )r  r  s     r,   peek_reasoning_summary_aliasesr-  '  st    
 _,122o-233 $$\2J*d##+011*,122r.   c                n   [        U 5      nUR                  SS5      nUR                  SS5      nUc  UnUR                  S5      n[        U[         5      (       aY  [        U5      nUR                  SS5      nUR                  SS5      nUc  UnUc  UnU(       a  XAS'   X4$ UR                  SS5        X4$ )zTCopy optional_params; remove reasoningSummary aliases from top-level and extra_body.r+  Nr,  r  )rr   r  r9  r%  )r  oprs_valsnake_rs_valeb	eb_rs_valeb_snake_rs_vals          r,   4strip_reasoning_summary_aliases_from_optional_paramsr5  '  s     
o	BVV&-F66-t4L~		B"d"XFF-t4	&&!4d;>F~(!| : FF<&:r.   c                    SSK Jn  U[        -   nU R                  5        VVs0 s H  u  p4X2;  d  M  X4_M     nnnU$ s  snnf )Nr   r{  )r  r|  rq   rL  )r:  r|  rw  r%  r&  rx  s         r,   $get_non_default_transcription_paramsr7  1'  sB    =03EEN+1<<>U>41Q=T$!$>U Vs   ==c                J   U c  gU R                  5        VVs0 s H0  u  pUS:w  d  M  [        U[        5      (       d  M$  [        U5      U_M2     nnn[        U5      S:  a.  0 nSnUR                  5        H  u  pUS:  a  X$U'   US-  nM     UnUR	                  5       $ s  snnf )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   )rL  r%  rp  r  rS  )r5  r%  r&  visible_metadatafiltered_metadatarg  s         r,   add_openai_metadatar=  9'  s      NN$($DA 	$.q#$6 	A	$  ( r!$**,DARx'(!$1HC - -  ""!(s   BBBc                    U (       d  g U R                  S5      n[        U[        5      (       a  [        U5      nU(       a  U$ [        U 5      nU(       a  U$ g )Nr6  )r9  r%  rr   r=  )r5  r6  cleaned_metadatas      r,   get_requester_metadatar@  ^'  sR    !&:;$d++./AB##*84r.   c                h   SSK J n  SSKJn  U" SSSS./SS	S
UR                  " 5       S
SS9n[	        [
        U R                  5      nSn U" S0 UDUSS.D6  UR                  R                  S5      nU(       a  [        [        U5      $ [        US9$ ! [         a  n[        U5      n SnANUSnAff = f)z
Return the json str of the request

This is currently in BETA, and tested for `/chat/completions` -> `litellm.completion` calls.
r   r9  )Loggingzgpt-3.5-turbor  hir  Fr  1234T)r_  r{  r  r  r  r  r  log_raw_request_responser  zmy-fake-api-key)r2  r  Nraw_request_typed_dict)r   r  )rP  r  rB  rQ  rF  rF   rP  r   rp  rv  r9  r   rh   )	endpointr:  rP  rB  r2  llm_api_endpointreceived_exceptionr  rF  s	            r,   return_raw_requestrJ  o'  s     "B!!d34<<>!%	 w7$ 	
	
 3%	
 1CCGG  ')?@@"$
 	
  $ V$s   
B 
B1B,,B1c                    / nU  Hu  n[        U[        5      (       a  UR                  SS9nO%[        U[        5      (       a  UR	                  5       n[        U[        5      (       d  Md  UR                  U5        Mw     U$ )zb
Fixes https://github.com/BerriAI/litellm/issues/9321

Where user passes in a pydantic base model
Tr  )r%  r   rl  rr   rS  r  r  s      r,   r  r  '  sk     IdI&&???5Dd##99;DdD!!T"  r.   c                     [        SSSS9$ )Nr   )prompt_tokenscompletion_tokensr  )rp   r  r.   r,   get_empty_usagerO  '  s     r.   c                0    U (       d  U(       d  U(       a  ggrq  r  )r  mock_tool_callsmock_timeouts      r,   should_run_mock_completionrS  '  s    
 <r.   c                l    SSK Jn  U" 5       nX;   a  X    nU" U 5      $ [        S[        < SU < 35      e)zSLazy import handler for utils module with cached registry for improved performance.r   )_get_lazy_import_registryzmodule z has no attribute )litellm._lazy_importsrU  AttributeErrorrI  )r  rU  registryhandler_funcs       r,   __getattr__rZ  '  sC     @(*H ~D!!
78,.@I
JJr.   )Fr   )r   r  r   z!Literal['DEBUG', 'INFO', 'ERROR'])r  rp  r  zLiteral['success', 'failure']r  r  )r  z'CustomLogger'r  r  )r:  Dict[str, Any]r  r  )r:  rr   )rU  z4Optional[List[Union[str, Callable, 'CustomLogger']]]r  r|   )r_  r  r`  r  r  r  )re  rp  rf  rp  r  rp  )rq  rr   rr  rp  r  rr   )r{  r|   rr  rp  r  r|   )r  rp  )r  r   r  r  )r:  r[  r  r   r  z$Tuple[Optional[int], Dict[str, Any]])r:  r[  r  r   r  z*Optional[Union[float, int, httpx.Timeout]]rN  )r:  r[  r  rp  )r  rr   r  rx   r  zOptional[CallTypes]r  Optional[Any])r  r  r  )r:  r  r  r  r  r  )r:  r[  r  zUnion[CallTypes, str]r  r  r#  )r_  rp  r  z$Optional[CustomHuggingfaceTokenizer])r_  rp  r  rk   )r_  rp  r  z!Optional[SelectTokenizerResponse])r  r  N)r  r  )r  	List[int]r  r  r  r  )r  r   r  r]  r  r]  )mainN)r  rp  r  r  )r  rp  )	r  NNNFNNFN)r  z.Optional[Union[dict, SelectTokenizerResponse]]r  Optional[Union[str, List[str]]]r{  Optional[List]r  Optional[bool]r  'Optional[List[ChatCompletionToolParam]]r  z,Optional[ChatCompletionNamedToolChoiceParam]r  ra  r  Optional[int]r  r  )r`  rp  r  r  )r_  rp  r`  r  r  r  )r_  rp  r`  r  rO  rp  r  zOptional[Literal[True]])r_  rp  r`  r  rO  rp  r  r  )r_  rp  r`  r  r  r   )r#  rz   r$  rr   r  rr   )rO  rp  r   rp  r  zOptional[Dict[str, Any]])r  zUnion[str, dict])rv  rr   rw  rr   rs  r  r  rr   )NNNNNN)r_  rp  r`  rp  r~  r  r  r  r  r  r  rc  r  z*Optional[List[Literal['word', 'segment']]]r}  ra  )r  r  r  rp  )NNNNNNNNNNNN)r_  r  r  rc  r  r  r  r  r  r  r  r  r  r  r  r  r`  r  rs  r  r  r
  r}  ra  )NNNr  NNN)r_  rp  r  r  r  r  r  rc  r}  ra  rs  r   r  r   )r  )rx  rr   r  r   r  rr   )r:  rr   r  rr   )FFN)rv  rr   r  rr   r`  rp  rs  r   r_  rp  r  r  r  r  r  r
  r  rr   )r,  rr   r  rr   )rv  rr   rx  rr   r`  rp  r  rr   )&NNNNNFNNNNNNNNNNNr  NNNNNNNNNNNNNNNNNNNN)r_  rp  r  r   r{   Optional[List[AllMessageValues]]r  z Optional[AnthropicThinkingParam]r  z Optional[OpenAIWebSearchOptions]r  r  rC  r  )r  rr   rv  rr   r`  rp  r  r  rs  r  r  rr   )r  rr   rx  rr   r  rn  )rv  rr   r  rr   )
r  rc  r  rc  r  rc  r  rc  r  rc  )r  zUnion[Dict, Any]r  rc  )r  
List[Dict]r  rc  r  r|   )r  re  r  zOptional[Iterable[str]]r  r|   )r`  rp  r  r   r  r  )r  r   r  zOptional[AllowedModelRegion])r  r   r  r  )r  r   r  rp  r  r  )r  r   r  r  r  r  )r:  rr   r  rp  )r  rp  r  r  )r  z)Union[ModelResponse, ModelResponseStream]r  rp  )r5  rp  r6  r  )r_  rp  r  rc  rM  )rF  rp  r  rp  )r_  rp  r`  r  r  rp  )r  r  r~  )r  zDict[str, str])ri  rp  r  r  )ro  rp  r  r  )rO  rp  r  rr   )r  rr   r`  r  r  r  )r_  rp  r`  r  r  r{  )rF  rp  r  rc  )r_  rp  r`  r  r  r  r  rc   )r_  rp  r`  r  r  z#Optional[ProviderSpecificModelInfo])r  r{  r  r  )NNN)
r_  rp  r`  r  r  r  r  r  r  rc   )
r_  rp  r`  r  r  r  r  r  r  rb   r  )r_  rp  r`  r  r  r  r  rb   )r  rp  )r  rr   )r  r  r  r   r   )r_  rp  r`  rp  r  rp  r  rp  r   r  r  r  )r`  rp  r  zList[ProviderField])NNNN)
r_  r  r  r  r  r  r  r  r  rr   )r_  rp  r  rp  )r  r  )r  Optional[httpx.Headers]r  )
r  r  rL  r  r  rf  r  r  r  zUnion[float, int])
r_  rp  r  rr   r  rp  r  rp  r  rr   )r  rc  )r  z0Union[str, 'MockException', ModelResponseStream]r  rc  )r_  r  r  r  )r_  r  r  r  r  r  )r`  r  r  r  )r  r   r`  rp  r  rO  r  r  )NNNNN)rc  ra  r`  r  r  rO  r  r  r  r  r  r  )r  rH   r  r  )r  rp  r  r  )r  rp  r  rp  )r{  List[AllMessageValues]r  r  )r`  rp  r  zList[ChatCompletionToolParam])r  zUnion[BaseModel, dict]r  rr   )r{  r|   )r  r`  r  zOptional[List[dict]])r  "Optional['AnthropicThinkingParam']r  rh  )r  rH   )r{  rg  )r  Optional[Union[dict, str]]r  ri  )r  r_  r  r_  )r  r[  )r_  rp  r   r^   r  r[  )r  )r  rr   r
  z(Literal['litellm_logging', 'prometheus']r  r  )r  r  ro	  r  )
r_  rp  r{  rd  r  rb  r`  r  r  r  )r  rp  r  r  )r  rp  r  rp  r  rp  )r  rr   r  rr   )r  rr   r  r\  )r  rr   r  zTuple[dict, Optional[Any]])r5  zOptional[Mapping[str, Any]]r  r   )r5  rr   )rG  rR   r:  rr   r  rh   )r  z	List[Any]r  re  )r  rp   )r  r\  rQ  r\  rR  r\  r  r  )r  rp  r  rx   (9  __doc__
__future__r   r  rX  r  binasciirZ  rS  rP  r;  r  io	itertoolsr  loggingr-  r  rQ  struct
subprocessrG  textwrap	threadingr  rc  dataclassesr   r   	functoolsr   r   	importlibr   r	   r
   os.pathr   r   r   dotenvr	  r_  tiktokenr   httpx._utilsr   
openai.libr   r   *openai.types.chat.completion_create_paramsr   pydanticr   r   
tokenizersr   rF   litellm.litellm_core_utils/litellm.litellm_core_utils.json_validation_rulelitellm._internal_contextr   rV  r   r   r   litellm._uuidr   r  r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r8   r>   r2   r*   r-   r4   r:   r?   rA   rG   r  rH   rI   rJ   rK   rL   rM   rN   rO   litellm.types.utilsrP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   rP  rs   r  r  r  r  fr  	json_dataImportErrorrW  r%  	open_textdumpsr  importlib.metadatatypingrw   rx   ry   rz   r{   r|   r}   r~   r   r   r   r   r   r    litellm.llms.base_llm.base_utilsr   r   r9   r7   r=   r+   r)   *litellm.llms.base_llm.files.transformationr   2litellm.llms.base_llm.realtime.http_transformationr   litellm.proxy._typesr   2litellm.litellm_core_utils.exception_mapping_utilsr   r  r   r   6litellm.litellm_core_utils.get_supported_openai_paramsr   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   ?litellm.litellm_core_utils.llm_response_utils.response_metadatar   r  r   *litellm.litellm_core_utils.redact_messagesr   r   ,litellm.litellm_core_utils.streaming_handlerr   1litellm.llms.base_llm.google_genai.transformationr   (litellm.llms.base_llm.ocr.transformationr   ,litellm.llms.base_llm.sandbox.transformationr   +litellm.llms.base_llm.search.transformationr   r
  r   rU  r    litellm.llms.cohere.common_utilsr   'litellm.llms.mistral.ocr.transformationr   )litellm.litellm_core_utils.cached_importsr   r   r   r  r   r   r   0litellm.litellm_core_utils.dot_notation_indexingr   r   -litellm.litellm_core_utils.get_litellm_paramsr   r   ,litellm.litellm_core_utils.llm_request_utilsr   Blitellm.litellm_core_utils.llm_response_utils.get_formatted_promptr   9litellm.litellm_core_utils.llm_response_utils.get_headersr   r    litellm.litellm_core_utils.rulesr   /litellm.litellm_core_utils.thread_pool_executorr   7litellm.llms.base_llm.anthropic_messages.transformationr   8litellm.llms.base_llm.audio_transcription.transformationr   &litellm.llms.custom_httpx.http_handlerr   r   *litellm.router_utils.get_retry_from_policyr   r   ,litellm.llms.base_llm.batches.transformationr   /litellm.llms.base_llm.containers.transformationr   .litellm.llms.base_llm.embedding.transformationr   /litellm.llms.base_llm.image_edit.transformationr   5litellm.llms.base_llm.image_generation.transformationr   5litellm.llms.base_llm.image_variations.transformationr   0litellm.llms.base_llm.passthrough.transformationr   -litellm.llms.base_llm.realtime.transformationr   +litellm.llms.base_llm.rerank.transformationr   1litellm.llms.base_llm.vector_store.transformationr   7litellm.llms.base_llm.vector_store_files.transformationr   +litellm.llms.base_llm.videos.transformationr   litellm.types.llms.anthropicr   r   litellm.types.rerankr   r   r   r   rb  r   litellm.secret_managers.mainr   )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   _loggingr   r   caching.cachingr   r   r   r   r   r   ra  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   sentry_sdk_instancecapture_exceptionr  posthog	slack_appalerts_channelheliconeLoggerathinaLoggerpromptLayerLoggerlangsmithLoggerlogfireLoggerweightsBiasesLoggercustomLoggerlangFuseLoggeropenMeterLogger
lagoLoggerdataDogLoggerprometheusLoggerdynamoLoggers3LoggergreenscaleLoggerlunaryLoggeraispendLoggersupabaseClientr   r  r   r   last_fetched_atlast_fetched_at_keysr   r  r   r  r  r<  rB  rQ  rW  ra  rg  rv  ry  r  r  r  r  r
  r  r  r  r,  r  rL  r0  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!  r4  rU  r>  ro  rt  ry  r  r  r  r  r  r  r   r  r  r  r$  r!  rI  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r7  r=  rN  rS  rV  rX  r6  r^  r_  ra  rW  rg  rk  rm  r  rr  rx  typing_extensionsry  r{  r  rI  re  r  r  r  r  rc  rT  rd  
cache_infor  r  r  r$  r)  r6  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  litellm.caching.in_memory_cacher   r"  r^  r[  r`  rf  rO  rt  ry  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-  r5  r7  r=  r@  rJ  r  rO  rS  rZ  )cts   0r,   <module>r     sk   M # 
         	    	  	        ( &    * *      0 * E      ! 7 6 
        #   	 	 	 *" " " " " " " " "H 5>>IbXXr\I> T >! 	?@	,	-	cG	$	%()IIaL			% **Y'    $
  @J 8 R  X Q GNL C@H 
 
 X 7H U OSSRRSS   WVPPLLWW  LK  43 
 43 3 3 @ @ T T I I Q Q K K 6 6           $ %   
	  
  %'" '/1 , 1(*% * 2 3: 1(	E=="?=	=@"	 "	 ($K	;  14 	 F
14	@]]@
%

 #'
D'0)6'0/<
2"%2E.r $rjl
b " 
@ "))**))//**00	 ..$. 
.  JN
1
1"F
1 -.+ /+N. 2 '+ $	 % 	8II"+II& CGEE2?E6E  GK,0#,159@D49)-$D$ *$ 	$
 *$ 3$ >$ $2$ '$ 	$N	* * *D 6:**%2*	*\ 6:

%2
	
 6:%2	. %29< 6r&&%2&9<&	&R   6:%2	 6:%2	0 6:%2	. $  6:

%2
	
 6:))%2))Z 6:

%2
	
& 	   	   FQh)-GU	& # %)!%JN"&ZZZ Z 	Z
 #Z Z HZ  Zz(  !%)"&)--1;?"&EEE E #	E
 E E E  E 'E +E 9E  EV %) $"&2615nn n #	n
 n  n 0n /nb.*B7J	"0J" J"f #().,0CCC C 0	C
 C  C #'C *C 
CL``-1`HK`	`N 

	
		
151515;?'+ $SF FB /CFJ /KFL /MFN 9OFP %QFR SF\ .2999 9 	9
 +9 
9x/3LP2 (((	( 
( $1	(
 (V
 DH#3@	D 8<#4 
6&&.<&&6,^":=	"*74+#\/d!;
|,	73 ( 7; 3 : ()  (+0%&&&R#,^ ( 'i ++%2+,+\. -. #&  	 /"%2((	B			 *."!	P
P
&P
 P
 	P

 P
j *."!	UU&U U 	U
 U> -. *."&  	 / *."!	PHPH&PH PH 	PH
 PHf 4?? 2== G4Xv  "(
(
(
 (
 	(

 (
 (
V 1:  !"!%	fVfVfV fV 	fV
 
fVR0$H.< 15-J 15	""" ." 	"
 ":  " @&@&@& @& 	@&
 @&FR% R%l >B-:< 	C 	<"D">49
 TY6#06LP6 6|  *#(j!j! j! !	j! j!Z : 9>C= >CD $% *.& < 04% - 	 2 /3)-/3!"O+O&O -O 	O
 O O Od1h8# #B B( 
.b&	$	.$	D*   
(I&606'6"C(V!+!!J -1
)$ 2 1  $J J^, >O:  D

5>
  6:)-	. 3 '	
 
 <18#CL$2"#)"#"#J"*
Z" "   
	K Kcw ?	% 	%
 	^Y/ !			/1K
	
IIaL	
 
 
 
!sN   	y#)2y: y(/y: (
y72y: 7y: :{z7+{7
{	{{