
    MiS                    "   % 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)r)S SK'J*r*  S S	K+J,r,  S S
K-J.r.J/r/  S SK0J1r1  S SK2J3r3  S SK)J4r4  S SK5J6r6  S SK7r7S SK8r7S SK9r7S SK:r7S SK;r7S SK<r7S SK=r7S SK>J?r?  S SK@JArA  S SKBJCrC  S SKDJErEJFrF  S SKGJHrHJIrIJJrJJKrKJLrLJMrMJNrNJOrOJPrPJQrQJRrRJSrS  S SKTJUrU  S SKVJWrW  S SKXJYrY  S SKZJ[r[J\r\J]r]  S SK^J_r_J`r`Jara  S SKbJcrc  S SKdJere  S SKfJgrgJhrhJiri  S SKjJkrkJlrl  S SKmJnrnJoro  S SKpJqrq  S SKrJsrs  S S KtJuruJvrvJwrwJxrxJyry  S S!KzJ{r{  S S"K|J}r}  S S#K~Jr  S S$KJr  S S%KJr  S S&KJrJr  S S'KJr  S S(KJr  S S)KJr  S S*KJr  S S+KJr  S S,KJr  S S-KJr  S S.KJr  S S/KJr  S S0KJrJr  S S1KJr  S S2KJrJr  S S3KJr  S S4KJrJr  S S5KJrJrJrJrJrJrJrJr  S S6KJr  S S7KJr  S S8KJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJr   \GR                  " S95      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>K(Jr  S S?KJr  S S@KJr  S SAKJr  S SBKJr  S SCKJr  S SDKJrJr  S SEKJr  S SFKGJ Gr   S SGGKGJGr  S SHGKGJGr  S SIGKGJGr  S SJGKG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  SUSVGKGJGrGJGr  SUSWG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&  SUSXG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J.Gr.GJ/Gr/JrGJ0Gr0GJ1Gr1GJ2Gr2GJ3Gr3GJ4Gr4GJ5Gr5  SUSYGK6GJ7Gr7GJ8Gr8  SUSZGK9GJ:Gr:GJ;Gr;GJ<Gr<  SUS[GK=GJ>Gr>  \(       a  S S\K7GJ?Gr?  SGr@SGrASGqBSGrCSGrDSGrESGrFSGrGSGrHSGrISGrJS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rW/ GqX\\G\Y      G\ZS]'   SGq[0 Gr\\\G\YG\Y4      G\ZS^'   0 Gr]\\G\YG\Y4      G\ZS_'   SGr^SGr_  GSSaG\`Sb\Sc   4Sd jjGraSe GrbSfG\YSg\Sh   SiS4Sj jGrcSk\WSiG\`4Sl jGrdSk\WSiG\`4Sm jGreSn\G\Y\4   Si\G\Y   4So jGrfSn\G\Y\4   Si\G\Y   4Sp jGrgSnG\h4Sq jGriSr\\\G\Y\\W4         Si\4Ss jGrjStG\Y4Su jGrkSv\SwG\`4Sx jGrlSn\G\Y\4   SyG\mSi\\G\n   \G\Y\4   4   4Sz jGroSn\G\Y\4   SyG\mSi\\G\pG\n\'GRf                  4      4S{ jGrqSiG\`4S| jGrrSn\G\Y\4   S}G\Y4S~ jGrsSG\hS\S}\\   Si\\   4S jGrtS\G\h   4S jGruS Grv GSSn\G\h   SG\`SiG\`4S jjGrwSn\G\Y\4   S}\\G\Y4   SiG\`4S jGrx GSSG\YS\\   4S jjGry\" \JS9SG\YSi\4S j5       GrzSG\YSi\4S jGr{SG\YSi\\   4S jGr|GSS\G\h   4S jjGr}S/ S4S\G\n   S\G\h   4S jjGr~ GSSG\YS\G\Y   4S jjGrSG\Y4S jGr         GSS\\G\h\4      S\\G\Y\G\Y   4      S\\   S\G\`   S\\\      S\\   S\G\`   S\G\n   SiG\n4S jjrSG\YSiG\`4S jGrSG\YS\G\Y   SiG\`4S jGrGSSG\YS\G\Y   SiG\`4S jjGrGSSG\YS\G\Y   SiG\`4S jjGrSG\YS\G\Y   SiG\`4S jGr GSSG\YS\G\Y   SiG\`4S jjGr GSSG\YS\G\Y   SiG\`4S jjGr GSSG\YS\G\Y   SiG\`4S jjGrGSSG\YS\G\Y   SiG\`4S jjGrSG\YS\G\Y   SG\YSi\\S      4S jGrSG\YS\G\Y   SG\YSiG\`4S jGrGSSG\YS\G\Y   SiG\`4S jjGrGSSG\YS\G\Y   SiG\`4S jjGr GSSG\YS\G\Y   SiG\`4S jjGr GSSG\YS\G\Y   SiG\`4S jjGr GSSG\YS\G\Y   SiG\`4S jjGrGSSG\YS\G\Y   SiG\`4S jjGrGSSG\YS\G\Y   SiG\`4S jjGr GSSG\YS\G\Y   Si\\G\Y      4S jjGr GSSG\YS\G\Y   SiG\`4S jjGrS\SG\hSiG\h4S jGrS GrS\G\YG\h4   4S jGrSiG\`4S jGrSG\hSG\hS\G\   SiG\h4S jGr      GSSG\YSG\YS\G\Y   S\G\Y   S\G\Y   S\G\n   S\\\S         S\G\`   4S jjGrS\G\Y   SiG\Y4S jGr           GSS\G\Y   S\G\n   S\G\Y   S\G\Y   S\G\Y   S\G\Y   S\G\Y   S\G\Y   S\G\   S\G\   S\G\`   4S jjGr      GSSG\YS\G\Y   S\G\Y   S\G\n   S\G\`   S\\G\Y      4S jjGrS GrS GrGSS jGrSG\hS\\G\Y      SiG\h4S jGrSnG\hSiG\h4S jGr " S S5      Gr   GSSG\hSG\hSG\YS\\G\Y      SG\YSG\`SG\`S\G\    SiG\h4S jjGrSG\hSiG\h4S jGrSG\hSG\hSG\YSiG\h4S jGr                                     GSSG\YS\\G\Y      S\\\      S\\   S\\   S\G\Y   4S jjGr GSSG\hSG\hSG\YS\G\Y   S\G\   SiG\h4S jjGrSG\hSG\hSG\4S jGrSG\hSiG\h4S jGrS\G\n   S\G\n   S\G\n   S\G\n   Si\G\n   4
S jGrS\\   Si\4S jGrSG\YSG\>Si\G\Y   4S jGrSG\>Si\G\7   4S jGrSG\>SiG\`4S jGrSG\>SiG\`4S jGrSG\>SG\YSiG\`4S jGrSG\>S\G\Y   Si\G\Y   4S jGrSnG\hSiG\Y4S jGrSG\YSiG\n4S jGrGS \\\4   SiG\Y4GS jGrGSG\YGS\G\Y   4GS jGrGS GrSG\YSi\G\n   4GS jGrSiG\Y4GS jGrSiG\Y4GS jGrGS	G\YSiG\Y4GS
 jGrSG\YS\G\Y   SiG\Y4GS jGrSG\YSiG\h4GS jGrGSG\hS\G\Y   SiG\`4GS jGrS GSGKGJGr   " GS GSG\5      GrSG\YS\G\Y   SiG\4GS jGrGS	G\YSi\G\n   4GS jGrSG\YS\G\Y   Si\4GS jGrSG\YS\G\Y   Si\\   4GS jGrGSG\SiG\`4GS jGr GSSG\YS\G\Y   Si\4GS jjGrGSSG\YS\G\Y   Si\4GS jjGrGSG\Y4GS jGrSiG\h4GS jGrGS Gr     GSSG\YSG\YGSG\YSG\YGSG\nGS G\n4GS! jjGrSG\YSi\\   4GS" jGrGS# Gr    GSS\G\Y   GS$\G\Y   GS\G\Y   GS%\G\Y   SiG\h4
GS& jjGrGS' GrGS( GrGS) GrSG\YGS$G\Y4GS* jGrGS+G\n4GS, jGr GSGS-\\'GR                     4GS. jjGr  GSGS/G\nGS0G\nGS-\\'GR                     GS1G\nSi\G\pG\n4   4
GS2 jjGr0 SS0 4SG\YGS3G\hGS4G\YGS5G\YGS6G\h4
GS7 jjGr " GS8 GS95      Gr GSS\G\n   4GS: jjGr GSGS;\G\YGS<\4   S\G\n   4GS= jjGrSiG\h4GS> jGrGS? GrGS@ GrGSA GrGSB GrGSC Gr GSS\G\Y   GSDG\`4GSE jjGrS\KS`S4S\G\Y   GSFG\pGSGG\`4GSH jjGrS GSIGKGJGr   " GSJ GSKG\5      GrG\" 5       Gr GSS\G\Y   Si\G\Y   4GSL jjGr GSS\SG\YS\G\>   Si\G\Y   4GSM jjGr     GSGSN\G\`   S\G\Y   S\G\>   GS$\G\Y   GS\G\Y   Si\G\Y   4GSO jjGrGSP GrGSQ GrGSGSR jGr " GSS GST5      Gr " GSU GSV5      Gr " GSW GSX\5      GrGSY\SiG\`4GSZ jGrGS[G\YSiG\`4GS\ jGrGS[G\YSiG\Y4GS] jGrS\\   SiG\`4GS^ jGrSG\YSi\\   4GS_ jGrS GS`KGJGrGJGrGJGrGJGrGJGrGJGr  GSY\\3G\h4   SiG\h4GSa jGrS\4GSb jGrS\4GSc jGrS\\   Si\\G\h      4GSd jGr GSY\4GSe jGrS\\   4GSf jGrS\\G\hG\Y4      Si\\G\hG\Y4      4GSg jGr " GSh GSi5      Gr GSSG\hGSj\GSk   Si\G\Y   4GSl jjGrGS\G\Y   GSm\G\Y   4GSn jGr  GSSG\YS\\\      S\\\      S\G\Y   SiG\`4
GSo jjGrGSpG\YSi\G\p   4GSq jGrS SK'r'GSG\YGSrG\YSiG\Y4GSs jGr	GStG\hSiG\h4GSu jGr
SnG\hSiG\h4GSv jGrSnG\hSiG\h4GSw jGrGSx\\G\Y\4      Si\\G\YG\Y4      4GSy jGrGSz\SnG\hSi\4GS{ jGrS\\   Si\\   4GS| jGrSi\4GS} jGrGS;\\   GS~\\   GS\\   SiG\`4GS jGrg! , (       d  f       GNB= f! \\\4 aH    \GR                  " S9S:5       r\GR                  " \5      rSSS5         GM  ! , (       d  f        GN= ff = f(      N)	dataclassfield)	lru_cachewraps)	resources)iscoroutine)StringIO)abspathdirnamejoin)Proxy)get_environment_proxies)_parsing	_pydantic)ResponseFormat)	BaseModel)Encoding)	Tokenizer)uuid)lru_cache_wrapper)	DualCache)CachingHandlerResponseLLMCachingHandler)$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_COUNT)CustomGuardrail)CustomLogger)BaseVectorStore)get_coroutine_checkerget_litellm_logging_classget_set_callbacks) get_litellm_metadata_from_kwargsmap_finish_reasonprocess_response_headers)CredentialAccessorencoding)_get_response_headersexception_typeget_error_message)*_get_base_model_from_litellm_call_metadataget_litellm_params)_is_non_openai_azure_modelget_llm_provider)get_supported_openai_params)_ensure_extra_body_is_safe)LiteLLMResponseObjectHandler#_handle_invalid_parallel_tool_calls convert_to_model_response_objectconvert_to_streaming_response#convert_to_streaming_response_async)get_api_base)get_formatted_prompt)get_response_headers)ResponseMetadata)_parse_content_for_reasoning)LiteLLMLoggingObject(redact_message_input_output_from_logging)Rules)CustomStreamWrapper)get_modified_max_tokens)$BaseGoogleGenAIGenerateContentConfig)BaseOCRConfig)BaseSearchConfigBaseTextToSpeechConfigBedrockModelInfo)CohereModelInfo)AsyncHTTPHandlerHTTPHandler)MistralOCRConfig)!get_num_retries_from_retry_policyreset_retry_policy)
get_secret)ANTHROPIC_API_ONLY_HEADERSAnthropicThinkingParam)AllMessageValuesAllPromptValuesChatCompletionAssistantToolCall"ChatCompletionNamedToolChoiceParamChatCompletionToolParam$ChatCompletionToolParamFunctionChunkOpenAITextCompletionUserMessageOpenAIWebSearchOptions)RerankResponse)	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SearchProvidersSelectTokenizerResponseStreamingChoicesTextChoicesTextCompletionResponseTranscriptionResponseUsageall_litellm_paramsz%litellm.litellm_core_utils.tokenizerszanthropic_tokenizer.jsonrutf-8)TYPE_CHECKINGAnyCallableDictIterableListLiteralMappingOptionalTupleTypeUnioncastget_args)OpenAIError)update_response_metadata)executortoken_counter)BaseAnthropicMessagesConfig)BaseAudioTranscriptionConfig)BaseLLMModelInfotype_to_response_format_param)BaseBatchesConfig)
BaseConfig)BaseTextCompletionConfig)BaseContainerConfig)BaseEmbeddingConfig)BaseFilesConfig)BaseImageEditConfig)BaseImageGenerationConfig)BaseImageVariationConfig)BasePassthroughConfig)BaseRealtimeConfig)BaseRerankConfig)BaseResponsesAPIConfig)BaseVectorStoreConfig)BaseVectorStoreFilesConfig)BaseVideoConfig   )_is_debugging_onverbose_logger)AzureBlobCacheCacheQdrantSemanticCache
RedisCacheRedisSemanticCacheS3Cache)APIConnectionErrorAPIErrorAuthenticationErrorBadRequestErrorBudgetExceededErrorContentPolicyViolationErrorContextWindowExceededErrorNotFoundErrorr   PermissionDeniedErrorRateLimitErrorServiceUnavailableErrorTimeoutUnprocessableEntityErrorUnsupportedParamsError)AllowedModelRegionKeyManagementSystem) ChatCompletionDeltaToolCallChunkChatCompletionToolCallChunk#ChatCompletionToolCallFunctionChunk)LiteLLM_Params)MockExceptioncallback_listadditional_detailslocal_cacheFlogger_only	log_level)DEBUGINFOERRORc                     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)Nr   r   r   TF)r   debuginfoerrorlitellmset_verboseprint	Exception)print_statementr   r   s      g/var/www/eduai.edurigo.com/storigo/production/storigo_env/lib/python3.13/site-packages/litellm/utils.pyprint_verboser   u  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)r   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 2    callbacklogging_event)successfailurereturnc                    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_routerr   Fr   )r   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)r   r   r   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   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>  '      LB 	2tN+,,L   "%)anyr   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>  r  r  )r  r   r   r   r  s   `r   r   r     r  r   kwargsc                     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)r  r  r  applied_guardrailss       r   get_request_guardrailsr    sH     zz*%+H!&:;Ar+//=Cr   c                 V   [        U 5      n/ n[        R                   H  nUc  M  [        U[        5      (       d  M  UR
                  c  M.  UR                  SL a  UR                  UR
                  5        MZ  UR
                  U;   d  Ml  UR                  UR
                  5        M     U$ )zP
- Add 'default_on' guardrails to the list
- Add request guardrails to the list
T)r  r   	callbacksr  r&   guardrail_name
default_onr   )r  request_guardrailsr  r   s       r   get_applied_guardrailsr#    s     07%%Jx$I$I&&2&&$.&--h.E.EF,,0BB&--h.E.EF & r   c                     U R                  S5      nU(       aQ  [        R                  (       a;  [        R                  " U5      nUR                  5        H  u  p4X0;  d  M  X@U'   M     ggg)zA
Updates kwargs with the credentials if credential_name in kwarg
litellm_credential_nameN)r  r   credential_listr/   get_credential_valuesitems)r  credential_namecredential_accessorkeyvalues        r   load_credentials_from_listr-    sX     jj!:;O7220FFW-335JC #s 6 3r   dynamic_callbacksc                 r    [         R                  R                  5       nU (       a  UR                  U 5        U$ r  )r   r  copyextend)r.  returned_callbackss     r   get_dynamic_callbacksr3    s1     !**//1!!"34r   original_functionc                 h  ^ [         R                  SL a  [        R                  " S5         [	        5         [        U5      nSU;   a  US   OS nUR                  SS 5      n[        US9n[        U5      S:  Ga  U GHq  m[        T[        5      (       aV  [         R                  R                  R                  TS S S9mTb(  [        U4S j[         R                   5       5      (       a  Mo  T[         R                   ;  a  [         R                   R#                  T5        T[         R$                  ;  a  [         R&                  R)                  T5        T[         R*                  ;  a  [         R&                  R-                  T5        T[         R                  ;  a  [         R&                  R/                  T5        T[         R0                  ;  d  GMR  [         R&                  R3                  T5        GMt     [5        S	[         R                   35        [        [         R                   5      S:  d:  [        [         R$                  5      S:  d  [        [         R*                  5      S:  aj  [        [6        5      S:X  aW  [9        [;        [         R                   [         R$                  -   [         R*                  -   5      5      q[=        5       " [6        US
9  [        [         R                   5      S:  a  / n	[?        [         R                   5       HV  u  n
m[A        5       RC                  T5      (       d  M&  [         RD                  R#                  T5        U	R#                  U
5        MX     [G        U	5       H"  n
[         R                   R                  U
5        M$     [        [         R$                  5      S:  Ga  / n	[?        [         R$                  5       H  u  n
m[A        5       RC                  T5      (       a2  [         R&                  R/                  T5        U	R#                  U
5        MV  TS:X  d  TS:X  a2  [         R&                  R/                  T5        U	R#                  U
5        M  T[         RH                  ;   d  M  [        T[        5      (       d  M  [K        TS5        M     [G        U	5       H"  n
[         R$                  R                  U
5        M$     [        [         R*                  5      S:  a  / n	[?        [         R*                  5       H  u  n
m[A        5       RC                  T5      (       a2  [         R&                  R3                  T5        U	R#                  U
5        MV  T[         RH                  ;   d  Ml  [        T[        5      (       d  M  [K        TS5        M     [G        U	5       H"  n
[         R*                  R                  U
5        M$     S nS nS nS nURM                  SS 5      b  [        US   [8        5      (       a  / n	[?        US   5       Hp  u  n
m[A        5       RC                  T5      (       d  TS:X  d  TS:X  d  M2  Ub'  [        U[8        5      (       a  UR#                  T5        OT/nU	R#                  U
5        Mr     [G        U	5       H  n
US   R                  U
5        M     UR                  S5      nURM                  SS 5      b)  [        US   [8        5      (       a  UR                  S5      n[N        (       ah   SSK(J)n  U" U5      n[         RV                  (       a6  UR                  SS 5        UR                  SS 5        UR                  SS 5        [O        SSU 3SS9  SU;   a  US   q,[        U5      S:  a  US   OURM                  SS 5      nU nU[Z        R\                  R^                  :X  d=  U[Z        R`                  R^                  :X  d  U[Z        Rb                  R^                  :X  Ga  S n[        U5      S:  a  US   nOURM                  SS 5      (       a  US   n[d        Rf                  " 5       (       a  [        U[8        5      (       a  [        U5      S:  a  [        US   [h        5      (       ay  SUS   ;   ap  [k        5       nU HB  nURM                  SS5      nUc  M  [        U[        5      (       d  M1  URm                  U5        MD     URo                  URq                  5       US9  GOU[Z        Rr                  R^                  :X  d  U[Z        Rt                  R^                  :X  a(  [        U5      S:  a  US   OURM                  SS 5      nGOU[Z        Rv                  R^                  :X  d  U[Z        Rx                  R^                  :X  a  [        U5      S:  a  US   OUS   nGOCU[Z        Rz                  R^                  :X  d  U[Z        R|                  R^                  :X  a  [        U5      S:  a  US   OUS   nGOU[Z        R~                  R^                  :X  d  U[Z        R                  R^                  :X  a  [        U5      S:  a  US   OUS   nGOU[Z        R                  R^                  :X  d  U[Z        R                  R^                  :X  a  URM                  S 5      nGOFU[Z        R                  R^                  :X  d  U[Z        R                  R^                  :X  ac  [        U5      S:  a  US   OUS!   n[         R                  R                  R                  R                  US"9nS#U;   a	  UUS#   S$'   OS$U0US#'   UnOU[Z        R                  R^                  :X  d  U[Z        R                  R^                  :X  a  URM                  SS%5      nOXU[Z        R                  R^                  :X  d  U[Z        R                  R^                  :X  a  [        U5      S:  a  US   OUS   nOS&nS'n[        UUS(9(       a  Sn[        5       " UUUUS)   URM                  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#'   UR                  US0 UURM                  S-S 5      S.9  UU4$ ! [T         a    Un GNzf = f! [T         a  n[        R                  " S/5        UeS nAff = f)0NTze`litellm.set_verbose` is deprecated. Please set `os.environ['LITELLM_LOG'] = 'DEBUG'` for debug logs.idr  )r.  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>H  s&      /"AB #2tH~66"Ar  z8Initialized litellm callbacks, Async Success Callbacks: )r   function_iddynamodb	openmeterr   r   r   s3r   )safe_deep_copymessagesinputpromptzlitellm.llm_callzKeyword Args: r   )categorymessagelevel	logger_fnmodelr   content r?  rE  queryfile)file_objr  file_checksumspeechzdefault-message-valueFr  	call_typelitellm_call_idlitellm_trace_id)rE  r>  streamrP  rQ  r9  rO  
start_timedynamic_success_callbacksdynamic_failure_callbacksdynamic_async_success_callbacksdynamic_async_failure_callbacksr  r  api_basestream_options)rE  useroptional_paramslitellm_paramsrY  zKlitellm.utils.py::function_setup() - [Non-Blocking] Error in function_setup)Pr   r   r   warningr   r#  popr3  lenr  strlitellm_core_utilslitellm_loggingr   r  r   input_callbackr   r   r   r   r   r   r   r   r   r   r   listsetr+   	enumerater)   is_async_callable_async_input_callbackreversedr   r  r  add_breadcrumb'litellm.litellm_core_utils.core_helpersr=  r   turn_off_message_logginguser_logger_fnre   
completionr,  acompletionanthropic_messagesrG   has_pre_call_rulesdictr	   writepre_call_rulesgetvalue	embedding
aembeddingimage_generationaimage_generation
moderationamoderationatext_completiontext_completionrerankarerankatranscriptiontranscriptionaudio_utilsutilsget_audio_file_nameaspeechrM  
aresponses	responses_is_streaming_requestr*   update_environment_variables	exception)r4  	rules_objrS  argsr  r  r9  r.  all_callbacksremoved_async_itemsindexrT  rV  rU  rW  r=  details_to_logrE  rO  r>  buffermrF  	_file_objrL  rR  logging_objr\  er   s                                @r   function_setupr  '  s
    d"s	
e 	 4F; 6:V^VD\ 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 mUw%%&*"$#,W-C-C#Dx(*<<XFF1188B'..u5 $E ""56&&**51 7w''(1,"$#,W-E-E#Fx(*<<XFF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(*<<XFF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)+==hGG:-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--!*- ((**x..MA%x{D11!, "!AeeIr2G*z'3/G/GW- "
 (( //+ ) 
 ,,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**66<<PP& Q  
 V#6Cz"?3&5}%Ez"$H**000IAQAQAWAW4Wzz'84H--333I//555"%d)a-tAwVG_H.H 
 F/1"#45#ZZ(:;#)r!&?&?,K,K1
$ +5b)9)/
);N:&00)!::&6= 	1 	
 F""I  (!'(J    Y	
 	sy   Fr
 Er
 ,Er
 4r
 C!r
 0r
 B2r
 =C r
 >q7 Fr
 +r
 N4r
 7rr
 rr
 

r1r,,r1r  is_completion_with_fallbacksc                    #    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resultrS  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  rS  r  r  r  s         r   _client_async_logging_helperr  W  s}      	%-L[MnMnLop	
 	T<<'==x >  	= 	
 	AA! 	B 	
' 	.s   AAr  c                     U R                  SS5      nUc  [        R                  nU R                  SS5      (       a+  [        UU R                  S5      S9n[	        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_policyr  r  )r  r   r  rU   rV   )r  r  r  retry_policy_num_retriess       r   _get_wrapper_num_retriesr  y  ss     **]D1K))zz.$''#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   r  )r  r  r  s      r   _get_wrapper_timeoutr    s:     uc5==012FJJy$4OG Nr   c                 4    [        5       R                  U 5      $ r  )r)   rg  r,  s    r   check_coroutiner    s     "44U;;r   rO  c                 
  #     [        U5      nU R                  5       n[        R                   H:  n[        U[        5      (       d  M  UR                  X25      I Sh  vN nUc  M8  UnM<     U$ ! [         a    Sn Nnf = 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)re   
ValueErrorr0  r   r  r  r'   async_pre_call_deployment_hook)r  rO  typed_call_typemodified_kwargsr   r  s         r   r  r    s     #I. kkmO%%h--#BB F !"( &   s?   BA/ 6B	BBB'B/A>;B=A>>Brequest_dataresponsec                 
  #     [        U5      n[        R                   HJ  n[	        U[
        5      (       d  M  UR                  U [        [        U5      U5      I Sh  vN nUc  MH  Us  $    U$ ! [         a    Sn Nnf = f N#7f)zX
Allow modifying / reviewing the response just after it's received from the deployment.
N)	re   r  r   r  r  r'   'async_post_call_success_deployment_hookr   rs   )r  r  rO  r  r   r  s         r   r  r    s     #I. %%h--#KKd#3X> F ! & O  
s>   BA/ &B$BBB'B/A>;B=A>>Br[  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bs  UR                  XqS9  [        R                  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   rH  response_formatjson_schemar  schema)r  r  r  json_objectresponse_schemaenforce_validation)__name__re   rn  r,  ro  r  r  rw   r_  choicesrB  rF  post_call_rulesr   enable_json_schema_validationrr  r  r   _completionsis_basemodel_typer   ra  json_validation_rulevalidate_schema	TypeErrorr   )
original_responserE  r[  r4  r  rO  is_coroutinemodel_responsejson_response_formatr  s
             r   post_call_processingr    s   `$)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&DDL'!)(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 !<] 6 ? E <p (1 !)$(!)@  sJ   H> AH>  A9H> B*H. BH> .
H;8H> :H;;H> >
II

Ic                    ^ ^ [        5       m[        T 5      U U4S j5       n[        T 5      U U4S j5       n[        5       R                  T 5      nU(       a  U$ U$ )Nc                    > TR                   n[        U5      (       a  [        R                  bM  UR	                  S0 5      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  p[%        U5        XS	'   ['        TUUS9nXl        UR+                  5        HQ  u  pUc  M
  [-        U[        5      (       d  M!  UR/                  S5      (       d  M9  [        R0                  " U5      X'   MS     [        R2                  (       aH  [        R4                  [        R2                  :  a&  [7        [        R4                  [        R2                  S9e[        R                  bM  UR	                  S0 5      R	                  SS 5      nUb(  [        R                  [        U5      ::  a  [        S5      e[9        SUR	                  SS5       S[        R:                   SUR	                  S0 5      R	                  SS5       35        UR	                  SS 5      c  [        R:                  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  [<        R>                  " S5        URA                  U
=(       d    STU	UUUU S 9nURB                  b"  [<        R>                  " S!5        URB                  $ UR	                  S"S 5      b  U
b  [        RD                  SL a  U[F        RH                  RJ                  :X  d<  U[F        RL                  RJ                  :X  d  U[F        RN                  RJ                  :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[Q        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(       ai  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$ [S        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$ [T        RV                  " U5      (       a  U$ [Y        UU
=(       d    S UTTS*9  UR[                  UU US+9  [<        R\                  " S,5        [^        R`                  " 5       n[b        Rd                  " URf                  U	Rh                  UUU5        [S        UU	U
UUUS(9  U$ ! [         a"  n[9        S'[        U5       35         S nAGNS nAff = f! [         Ga  nTR                   nU[F        RL                  RJ                  :X  Ga  UR	                  S-S 5      =(       d    [        Rj                  =(       d    S nUR	                  S.S 5      (       a&  [m        UUR	                  S.5      S/9n[o        5       US.'   S [        l5        UR	                  S00 5      nS1UR	                  S0 5      ;   nU(       a  U(       d~  [-        U[p        Rr                  5      (       d>  [-        U[p        Rt                  5      (       d  [-        U[p        Rv                  5      (       a   UUS-'   [        Rx                  " U 0 UD6s S nA$ Oj[-        U[        Rz                  R|                  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$ [~        R                  " 5       n[        R                  R                  5       nU	(       a  U	R                  UUUU5        UeS nAff = f)2Nr  previous_modelszMax retries per request hit!rN  complete_responseTr>  r>  litellm_logging_objrP  r   rE  r4  request_kwargsrS  zos.environ/current_cost
max_budgetzSYNC kwargs[caching]: cachingF; litellm.cache: z#; kwargs.get('cache')['no-cache']: cachezno-cacherw  r|  ro  aimg_generationr  r  
_arealtimezINSIDE CHECKING SYNC CACHErG  rE  r4  r  rS  rO  r  r  z
Cache hit!
max_tokenshf_model_namehuggingface/r   rE  
base_modelr>  user_max_tokens
buffer_numbuffer_perc&Error while checking max token limit: r  r  rE  r  rS  r  r  r  rE  r[  r4  r  )r  r  r  z0Wrapper: Completed Call, calling success_handlerr  r  r  context_window_fallback_dictmodel_group)Br  _is_async_requestr   num_retries_per_requestr  r_  r   r  rf  r   stream_chunk_builderprint_args_passed_to_litellmdatetimenowr`  r   uuid4r  r-  r   _llm_caching_handlerr(  r  
startswithrW   r  _current_costr   r   r  r   r   _sync_get_cachecached_resultmodify_paramsre   ro  r,  rn  rp  rI   r   asyncior   r  sync_set_cacher   contextvarscopy_contextr   submitrunsuccess_handlerr  rU   rV   openair   r   r   completion_with_retries
exceptionsr   	traceback
format_excfailure_handler)r  r  rO  r  r  chunksidxchunkrS  r  rE  r  kvcaching_handler_responser  r>  r  modified_max_tokensr  r  ctxr  r  _is_litellm_router_calltraceback_exceptionr4  r  s                             r   wrapperclient.<locals>.wrapper>  sv	    &..	V$$..:"(**Z"<"@"@%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t	"&4%..	:'HL'PV'# 'v.,7()6G"3%%7 
 0D, =Z3%7%7ALL<W<W ' 2 21 5FI ' !!((7+=+==-%,%:%:#*#5#5  ..:"(**Z"<"@"@%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*A##-!)(7#'$(+' ,?F<( '77F((,,.H$#
 (6123t;F&/&7
e, '8"77J)E 
 -%$/#%#-!) "M&(VM-Bd-J'F<,@D,H"f,8I1Jd1R!V+7G0HD0Pf$	):d)B$$V,, !"(mt &"3# !// 0   RS **,COO++ %'%! Ma ! U!$J3q6("STTUb  5	)22II00666JJ}d3Rw7J7JRd  ::nd33"C"#%+ZZ%?#K
 +, >*  # 06zz2B0, +86::< +'  (? #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=="+"6"6"8((,,.H ++*J Gk5	s   <A] ] -] I=] B] B \" B] ] %] 5] ] ] %] 5] B] "
],]	] 	]] e3Ee.-e33A%e.e3Ae..e3c                  v  >#    [        TX5        [        R                  R                  5       nS nUR                  SS 5      n[	        TUU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n Uc  [        TR
                  TU/U Q70 UD6u  pA[        X5      I S h  vN n	U	b  U	nXAS'   [        U5        XTl        [        R                  (       aH  [        R                   [        R                  :  a&  [#        [        R                   [        R                  S9e[%        SUR                  S	S
5       S[        R&                   SUR                  SS 5       35        UR)                  U=(       d    STUUUUU S9I S h  vN n
U
bB  U
R*                  b  U
R,                   c  U
R*                  $ U
R.                  SL a  U
R,                  $ UR                  SS 5      b  Ub  [        R0                  SL a  U[2        R4                  R6                  :X  d<  U[2        R8                  R6                  :X  d  U[2        R:                  R6                  :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[=        UUUUS S S9nXS'   T" U 0 UD6I S h  vN n[        R                  R                  5       n[A        UUS9(       ak  SU;   aU  US   SL aM  / n[C        U5       H  u  nnURE                  U5        M     [        RF                  " UUR                  SS 5      S9$ [I        UUUUUUS9  U$ U[2        RJ                  R6                  :X  a  U$ [M        UUUTTS9  U[2         Vs/ s H  nUR6                  PM     sn;   a  [O        UU[3        U5      S9I S h  vN nURQ                  UTUU S9I S h  vN   [R        RT                  " [W        UUUUUS95        URY                  UUUS 9  [[        U[\        5      (       a#  U
b   U
R,                   b  UR_                  U
UUUS!9$ [I        UUUUUUS9  U$  GN GN! [>         a"  n[%        S[        U5       35         S nAGNS nAff = f GNs  snf  N N! [>         Ga,  n[`        Rb                  " 5       n[        R                  R                  5       nU(       a]   URe                  UUUU5        O! [>         a  nUeS nAff = f URg                  UUUU5      I S h  vN    O! [>         a  nUeS nAff = fTR
                  n[i        XS"9u  nnU[2        R4                  R6                  :X  Ga4  UR                  S#0 5      nS$UR                  S%0 5      ;   nU(       a  U(       d   S [        l5        UUS&'   TUS''   [[        U[l        Rn                  5      (       a  S(US)'   O$[[        U[l        Rp                  5      (       a  S*US)'   [        Rr                  " U 0 UD6I S h  vN  s S nA$ ! [>         a     Opf = f[[        U[        Rt                  Rv                  5      (       aC  U(       a<  UU;   a6  [        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$ [y        US&U5        [{        XS"9n[y        US+U5        UeS nAff = f7f),Nr  r  rP  r   rE  	fallbacksr  zASYNC kwargs[caching]: r  Fr  z; kwargs.get('cache'): r  rG  r  Tr  r  r  r   r>  r  r  rN  r  r  r  r  )r  r  rO  )r  r4  r  r  )r  r  rS  r  r  r  )_caching_handler_responseembedding_responserS  r  )r  r  r  r  r  r  r4  exponential_backoff_retryretry_strategyconstant_retryr  )>r  r  r  r  r   r  r`  r   r  r_  r  r  r-  r  r   r  r  r   r   r  _async_get_cacher  final_embedding_cached_response embedding_all_elements_cache_hitr  re   ro  r,  rn  rp  rI   r   r  rf  r   r  r   	arealtimer  r  async_set_cacher  create_taskr  r  r  rn   2_combine_cached_embedding_response_with_api_resultr  r  r  async_failure_handlerr  r  r  r   r   acompletion_with_retriesr  r   setattrr  )r  r  rS  r  r  r  rO  rE  r  r  r  r  r>  r  r  r  r  r	  r
  r  ctr  r  r  r  r  r4  r  s                             r   wrapper_asyncclient.<locals>.wrapper_asyncg  s    $%6E&&**,
6<jj!47
 3D/!!3
 &..	F*(+DJJL(9F$%*-d)a-tAwVZZQU=V'-zz+'>d'J$n	"&4%..	:'HL'PV'# %C6$UUO*(,7()&v./C,!!((7+=+==-%,%:%:#*#5#5  )&**Y*F)GGXY`YfYfXgg~  @F  @J  @J  KR  TX  @Y  Z  [ +;;+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*A##-!)(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# 	:	"RXX	::F!'#'	2   '66"3	 7    , +!)%1M EE%! F  6#455-9-MM ,^^.G'-)%	 _   %'%! MQ V*j ! U!$J3q6("STTU >J ;\  ?	"+"6"6"8((,,.H//.
H ! G%;;.
H   ! G *22I":&"VKI11777/5zz2B0, +86::< +'
  (?   + 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!==4y1}">u"EQ*Fu*Mw!2D!CF!CCCC=+ +&FGAy'*G?	s  B6\9:.S? (R>)CS? S-S? 5\96S? \9BS? A?S S? S3 BS? +\9,S? ;\9<S? \9S? 2S6S? %S;&S? ?S= A-S? -\9.S? =\9>S? S? 
S0S+%S? +S00S? 6S? =S? ?\6
:\1U\1
U+$U&&U++\1/VV	V\1
VVVA/\1A7ZZZ
\6\9
Z\1ZA$\1\\1\6\9%\11\66\9)rG   r   r)   rg  )r4  r  r'  r  r  s   `   @r   clientr)  ;  sh    I
f fP	 B BH )*<<=NOL r   is_pass_throughc                    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.
Fro  Trw  r  r{  r|  r  r  r  acreate_batchacreate_fine_tuning_jobr  )r  r*  s     r   r  r  u  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                     SU ;   a	  U S   SL a  g[        U[        5      (       a   [        U5      nU[        R                  :X  d  U[        R
                  :X  a  gg! [         a     gf = f)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)
rR  TF)r  r`  re   r  generate_content_streamagenerate_content_streamrN  s     r   r  r    sq     6fX.$6 )S!!	!),I
 	Y666	:::  		s   A 
A('A(rE  custom_tokenizerc                 F    Ub  [        US   US   US   S9nU$ [        U S9$ )N
identifierrevision
auth_token)r3  r4  r5  rE  )create_pretrained_tokenizer_select_tokenizer_helper)rE  r1  
_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: )r   disable_hf_tokenizer_download_return_openai_tokenizer_return_huggingface_tokenizerr   r   r   )rE  r  r  s      r   r8  r8    su    ,,4'..@.u5M  $E**	  @:1#>??@s   < 
A)A$$A)c                     S[         S.$ )Nopenai_tokenizerr  	tokenizerr0   r6  s    r   r>  r>    s    &X>>r   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_tokenizerrB  zclaude-3zllama-2	replicatez#hf-internal-testing/llama-tokenizerzllama-3zXenova/llama-3-tokenizer)r   cohere_modelsr   from_pretrainedanthropic_modelsfrom_strclaude_json_strlower)rE  cohere_tokenizerclaude_tokenizerrC  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   rG  c                     U=(       d	    [        U S9n[        US   [        5      (       a  US   R                  USS9nU$ US   R                  U5      n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.
r6  rC   )disallowed_special)r:  r  r   encode)rE  textr1  tokenizer_jsonencs        r   rR  rR    sc     &G):)GN.-x88[)00"0M J [)006Jr   tokensc                 R    U=(       d	    [        U S9nUS   R                  U5      nU$ )Nr6  rC  )r:  decode)rE  rV  r1  rT  decs        r   rX  rX     s,    %G):)GN

%
,
,V
4CJr   r3  r5  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.
)r4  r5  z%Error creating pretrained tokenizer: z-. Defaulting to version without 'auth_token'.)r4  NrE  rB  )r   rH  r   r   r   )r3  r4  r5  rC  r  s        r   r7  r7    sk    M--j
	 ,)DD  M3A36cd	
 --jL		Ms    
A.AAjsonc                 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.
rE  rB  )r   rJ  )r[  rC  s     r   create_tokenizerr]  !  s     ""4(I+)DDr   rS  r>  count_response_tokenstoolstool_choiceuse_default_image_token_countdefault_token_countc	                 P    [         R                  SL a  g[        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   )r   disable_token_countertoken_counter_new)	rE  r1  rS  r>  r^  r_  r`  ra  rb  s	            r   r   r   0  s=    . $$,%
 
r   custom_llm_providerc                     / SQnX;   a  gg)zM
Helper function to know if a provider implementation supports httpx timeout
)r  azurebedrockTFrP  )rf  supported_providerss     r   supports_httpx_timeoutrk  W  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rE  rf  r+  _supports_factoryrE  rf  s     r   rm  rm  c  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_searchrn  ro  rq  s     r   rs  rs  x  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_contextrn  ro  rq  s     r   ru  ru    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.
rq  supports_native_streamingTNzYModel not found or error in checking supports_native_streaming support. You passed model=, custom_llm_provider=	. Error: F)r   r8   _get_model_info_helperr  r   r   r   r`  )rE  rf  _
model_inforw  r  s         r   rw  rw    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                     [        XS9u  p  n[
        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.
rq  zOModel not found or error in checking response schema support. You passed model=rx  ry  NFTsupports_response_schemarn  )r8   r   r   r   r`  r   rq   	PREDIBASEFIREWORKS_AI	LM_STUDIONEBIUSrp  )rE  rf  r{  r  *PROVIDERS_GLOBALLY_SUPPORT_RESPONSE_SCHEMAs        r   r~  r~    s     +;,
(Aq 	&&))&&##	2. H/& !  ]^c]ddz  |O  {P  PY  Z]  ^_  Z`  Ya  b	
 	s   B 
C(B==Cc                     [        U USS9$ )zS
Check if the given model supports parallel tool calls and return a boolean value.
"supports_parallel_function_callingrn  ro  rq  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_callingrn  ro  rq  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_choicern  ro  rq  s     r   r  r         BX r   r+  Tc                 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.
rq  NFT)get_provider_infor  )rE  rf  r+  provider_infos       r   _supports_provider_info_factoryr    s3     &M  ]%6%6sE%Bd%Jr   c                 j    [         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  [	        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  rq  FTNz%Model not found or error in checking z support. You passed model=rx  ry  )	r   r8   rz  r  r  r   r   r   r`  )rE  rf  r+  r{  r|  supported_by_providerr  s          r   rp  rp  +  s   +2+C+C,
(Aq ,

 >>#u%-^^C ($CC%! %0,, 3C58STYSZZp  rE  qF  FO  PS  TU  PV  OW  X	
 !@!
 !,((s"   6A "A 
B2';B-"B2-B2c                     [        XSS9$ )zECheck if a given model supports audio input in a chat completion callsupports_audio_inputrn  ro  rq  s     r   r  r  Z  s    BX r   c                     [        XSS9$ )zCCheck if a given model supports pdf input in a chat completion callsupports_pdf_inputrn  ro  rq  s     r   r  r  a  s    BV r   c                     [        XSS9$ )zFCheck if a given model supports audio output in a chat completion callr  rn  ro  rq  s     r   supports_audio_outputr  h  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_cachingrn  ro  rq  s     r   r  r  q  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_usern  ro  rq  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_visionrn  ro  rq  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_reasoningrn  ro  rq  s     r   r  r    s     BV r   c                      [         R                  " XS9u  p  n[        XS9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.
rq  supported_regionsNzQModel not found or error in checking supported_regions support. You passed model=rx  ry  )
r   r8   rz  r  r  rd  r   r   r   r`  )rE  rf  r{  r|  r  r  s         r   get_supported_regionsr    s    +2+C+C,
(Aq ,

 'NN+>E$
 '..$$ _`e_ff|  ~Q  }R  R[  \_  `a  \b  [c  d	
 	s   6A A 
B(BBc                     [        U USS9$ )zU
Check if the given model supports embedding image input and return a boolean value.
supports_embedding_image_inputrn  ro  rq  s     r   r  r    s     /, r   existing_dictnew_dictc                 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  )r(  r  r`  _convert_stringified_numbersrr  r  update)r  r  r  r  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  r`  rL  r  r  r  r  r  s    r   r  r   	  s`    %		ekkm#se|U|# 5z! L I& 	L	s   $A	 
A	 	AA
model_costc                    0 n[        U [        5      (       a  U nO)[        U [        5      (       a  [        R                  " U S9nUR                  5        GH  u  p# [        [        [        US95      nUS   n[        XC5      n[        R                  R                  U0 5      R                  U5        [        R                  " SU SU 35        UR                  S5      S:X  a7  U[        R                   ;  a!  [        R                   R#                  U5        M  M  UR                  S5      S:X  a9  U[        R$                  ;  a"  [        R$                  R#                  U5        GM  GM  UR                  S5      S	:X  a9  U[        R&                  ;  a"  [        R&                  R#                  U5        GM^  GMa  UR                  S5      S
:X  a9  U[        R(                  ;  a"  [        R(                  R#                  U5        GM  GM  UR                  S5      S:X  aN  UR+                  SS5      nU[        R,                  ;  a%  [        R,                  R#                  US   5        GM  GM  UR                  S5      S:X  a9  U[        R.                  ;  a"  [        R.                  R#                  U5        GM]  GM`  UR                  S5      S:X  a9  U[        R0                  ;  a"  [        R0                  R#                  U5        GM  GM  UR                  S5      S:X  a9  U[        R2                  ;  a"  [        R2                  R#                  U5        GM  GM  UR                  S5      S:X  a9  U[        R4                  ;  a"  [        R4                  R#                  U5        GMG  GMJ  UR                  S5      S:X  a9  U[        R6                  ;  a"  [        R6                  R#                  U5        GM  GM  UR                  S5      S:X  a9  U[        R8                  ;  a"  [        R8                  R#                  U5        GM  GM  UR                  S5      S:X  a9  U[        R:                  ;  a"  [        R:                  R#                  U5        GM1  GM4  UR                  S5      S:X  a9  U[        R<                  ;  a"  [        R<                  R#                  U5        GM  GM  UR                  S5      S:X  a9  U[        R>                  ;  a"  [        R>                  R#                  U5        GM  GM  UR                  S5      S:X  d  GM  U[        R@                  ;  d  GM  [        R@                  R#                  U5        GM!     U $ ! [         a    0 nUn 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"
    },
}
urlr6  r+  zadded/updated model=z in litellm.model_cost: litellm_providerr  text-completion-openaicohere	anthropic
openrouter/r   vercel_ai_gatewayzvertex_ai-text-modelszvertex_ai-code-text-modelszvertex_ai-chat-modelszvertex_ai-code-chat-modelsai21	nlp_cloudaleph_alphari  novita)!r  rr  r`  r   get_model_cost_mapr(  r   get_model_infor   r  r  
setdefaultr  r   r   r  open_ai_chat_completion_modelsaddopen_ai_text_completion_modelsrG  rI  split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_costr+  r,  existing_modelmodel_cost_keyupdated_dictionarysplit_strings           r   register_modelr  	  sV     *d##&	J	$	$#66:F'--/
	!#'n3.G#HN+E2N
 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'333))--l1o> 4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'///%%))#.y 0z q  	!N N	!s   U99V
Vc                 @    Ub  [        U[        5      (       a  X;   a  ggNTF)r  rd  r  additional_drop_paramss     r   _should_drop_paramr  g	  s"    *-t44'r   passed_paramsdefault_paramsr  c                     0 nU R                  5        H(  u  pEXA;   d  M  XQU   :w  d  M  [        XBS9SL d  M$  XSU'   M*     U$ )Nr  F)r(  r  )r  r  r  non_default_paramsr  r  s         r   _get_non_default_paramsr  r	  sR     ##%A&&"QV %&q! & r   languager@  r  temperaturetimestamp_granularities)wordsegmentdrop_paramsc           
      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  rf  r  r  )r  r@  r  r  r  c                   > [        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_coderB  r_  keysrd  r   r  r^  r   )supported_paramsr  r  rf  r  r  s      r   _check_valid_arg;get_optional_params_transcription.<locals>._check_valid_arg	  s    !&&()A-*//12D4'7+>+>$+F/&**1d3.0$'"STgSh  if  !g   &% .r   rE  r   r  rh  groqr  Fr  r[  rE  r  r6  r  r[  r  rf  openai_paramsr  )litellm.constantsr  localsr^  r(  ProviderConfigManager'get_provider_audio_transcription_configrq   r   GroqSTTConfigget_supported_openai_params_sttmap_openai_params_sttr9   map_openai_params/add_provider_specific_params_to_optional_paramsr  )rE  rf  r  r@  r  r  r  r  r  r  r  special_paramsr  r  r  r[  r  provider_configr  r  s    `     `           @r   !get_optional_params_transcriptionr  	  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sizec                 >    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	1024x1792r  )r  size_to_aspect_ratios     r   *_map_openai_size_to_vertex_ai_aspect_ratior  	  s=    |
   ##e r   nqualitystylerZ  r  c           	        ^ ^^
^ [        5       nUR                  SS 5      m UR                  S5      mUR                  SS 5      n	UR                  SS 5      m
UR                  SS 5      nU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[  XU'   Ma     S S S S S S S.n[	        UUUS9m0 n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OTS:X  a  [        R                  R                  T S9(       a  [        R                  OA[        R                  R                  T S9(       a  [        R                  O[        R                  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U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 )NrE  rf  r  r  r  r  aws_ri  	sagemakerr  vertex_	vertex_aivertex_ai_beta)r  r  r  r  r  rZ  )r  r  r  c                   > [        TR                  5       5      S:  an  [        TR                  5       5      nU HM  n[        R                  SL d  TSL a  X ;  a  TR                  US 5        M4  X ;  d  M;  [        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  rf  r  rE  r  s      r   r  7get_optional_params_image_gen.<locals>._check_valid_arg(
  s    !&&()A-*//12D''4/;$3F/&**1d3.0$'"+A3.DEXDYY[\a[b  c`  !a   &% .r   rG  r6  r  Fr  r  rh  r  r[  r  r  sampleCountaspectRatior  r   )r  r^  r(  r  r  r9   r  r   openai_compatible_providersAmazonStability3Config_is_stability_3_modelAmazonNovaCanvasConfig_is_nova_modelAmazonStabilityConfigr  r  rd  r  r   r  rr  r_  )rE  r  r  r  r  r  rZ  rf  r  r  r  r  r  r  r  r  r  r[  r  r  config_classr  r  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,			) --CC%CP ** 11@@u@M ..22 	 (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   +	K/8(K/$K/encoding_format
dimensionsc           
        ^ ^^^ [        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S[        [           4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b.  UR                  T S	9nU
" US
9  UR                  T0 T Tb  TOSS9nGOTS:X  a+  T b$  ST ;  a  STR                  5       ;   a
  [        SSS9eTnGOTS:X  a=  [        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?  [        T =(       d    SSSS9nU
" US
9  [        R"                  " 5       R                  T0 S9nGO_TS:X  a;  [        T =(       d    SSSS9nU
" US
9  [        R$                  R                  T0 US9nGOTS:X  d  TS:X  a:  [        T SSS9nU
" US
9  [        R&                  " 5       R                  T0 US9u  nnGOTS:X  aN  [        R(                  " 5       R                  5       nU
" US
9  [        R(                  " 5       R                  T0 S9nGOTS:X  a  ST ;   a  [        R*                  " 5       nOS T ;   a  [        R,                  " 5       nOhS!T ;   a  [        R.                  " 5       nOLS"T ;   a  [        R0                  " 5       nO0S#T ;   d  S$T ;   a  [        R2                  " 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  a6  [        T S%SS9nU
" US
9  [        R4                  " 5       R                  T0 S9nGOzTS&:X  a=  [        T S&SS9nU
" US
9  [        R6                  " 5       R                  T0 T Tb  TOSS9nGO7TS':X  a  [        T S'SS9nU
" US
9  [        R8                  R;                  T 5      (       a,  [        R8                  " 5       R                  T0 T Tb  TOSS9nGO[        R<                  " 5       R                  T0 T Tb  TOSS9nGOTS(:X  a=  [        T S(SS9nU
" US
9  [        R>                  " 5       R                  T0 T Tb  TOSS9nGOaTS):X  a7  [        T S)SS9nU
" US
9  [        R@                  " 5       R                  T0 T S*9nGO$TS+:X  a<  [        T S+SS9nU
" US
9  [        RB                  " 5       R                  T0 T Tb  TOSS9nOTS,:X  a<  [        T S,SS9nU
" US
9  [        RD                  " 5       R                  T0 T Tb  TOSS9nOTS:w  a  TS-:w  a  T[        RF                  ;  a~  [I        TR                  5       5      S.:  a^  [        RJ                  S/L d  TS/L a5  [        TR                  5       5      nU H  nTR                  US 5        M     O[        SS0T S1T S23S9eTnOTn[M        UUT[        [N        R                  " 5       5      URQ                  SS 5      S39nS4U;   a$  [I        US4   5      S.:X  a  UR                  S4S 5        U$ )5Nrf  r  r  r  r  c           	         > 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  r   r  r   )r  unsupported_paramsr  rf  r  rE  r  s      r   r  8get_optional_params_embeddings.<locals>._check_valid_arg
  s    ##((*A((:1(="% + ""d*'K4,?, #233QRdQeeqrwqx  yc  d  r   r  r  rf  r  rE  r  r6  r  Fr  r  ztext-embedding-3r%  r  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)rE  rf  request_type
databricksrG  r  
nvidia_nim)r  r[  r  r  gemini	lm_studiori  zamazon.titan-embed-text-v1zamazon.titan-embed-image-v1zamazon.titan-embed-text-v2:0zcohere.embed-multilingual-v3
twelvelabsmarengomistraljina_aivoyageinfinityfireworks_ai)r  r[  rE  	sambanovaovhcloudrh  r   TzSetting z is not supported by r  r  
extra_body))r  r^  r   rd  PreProcessNonDefaultParams(embedding_pre_process_non_default_paramsrq   _member_map_valuesr  get_provider_embedding_configr9   r  r  r   r   TritonEmbeddingConfigDatabricksEmbeddingConfignvidiaNimEmbeddingConfigVertexAITextEmbeddingConfigLmStudioEmbeddingConfigAmazonTitanG1Config&AmazonTitanMultimodalEmbeddingG1ConfigAmazonTitanV2ConfigBedrockCohereEmbeddingConfig TwelveLabsMarengoEmbeddingConfigMistralEmbeddingConfigJinaAIEmbeddingConfigVoyageContextualEmbeddingConfigis_contextualized_embeddingsVoyageEmbeddingConfigInfinityEmbeddingConfigFireworksAIEmbeddingConfigSambaNovaEmbeddingConfigOVHCloudEmbeddingConfigr  r_  r  r   r   r  )rE  rZ  r$  r%  rf  r  r  r  r  r  r  r  r[  r  objectfinal_paramsr  r  r  s   `   ``            @r   get_optional_params_embeddingsrX  ~
  s    HM'++,A4H"&&x0N##M48K*../GN8D>  & 	#KK') 3#9 	L 	
  6:OO'<#<#<#C#C#EE/MM!"56 N 

 "+:+V+V ,W ,
 	*:;);;1'2'>E	 < 
 
	( "%/ 2 7 7 99( j 
 1O		(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499;FU"i5&8==?F!.>?%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   &;;=OO#5 "+6+BK	 P O 

	*6 *%

 	*:;!99;MM1'2'>E	 N 
 
	.6 .%

 	*:;!<<>PP12U Q 
 
	+6 +%

 	*:;!::<NN1'2'>E	 O 
 

	*6 *%

 	*:;!99;MM1'2'>E	 N 
 	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  r(  _remove_additional_propertiesrd  r  r+  r,  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  r(  _remove_strict_from_schemard  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^  r(  _remove_json_schema_refsrd  )r  	max_depthr+  r,  r]  s        r   rb  rb    s     A~&$

5$

9d# !,,.JC$UM: ) M 
FD	!	!D$Tq=9  Mr   r  supported_openai_paramsc                     / 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^  )r  rd  remove_keysparamr+  s        r   _remove_unsupported_paramsrh    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"}
)r(  r   )r  r+  r,  s      r   filter_out_litellm_paramsrj    s9    ( &,\\^%3zssBT7T

^  s   22c                       \ rS rSr\S\S\S\S\\\      S\S\\   S\4S	 j5       r	\  SS\S\S\S\\\      S
\S\
S\
S\4S jj5       rSrg)r>  i  r  r  rf  r  default_param_values#additional_endpoint_specific_paramsr   c           	         UR                  5        Ho  u  pgUR                  S5      (       a  US:w  a  UR                  S5      (       d  M9  US:X  a  US:w  a  MG  UR                  S5      (       a  US:w  a  US:w  a  Mk  XpU'   Mq     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 )Nr  ri  r  r  r  r  r  rE  rf  api_versionr  allowed_openai_paramsr  r  F)r(  r  r  )	r  r  rf  r  rl  rm  r  r  r  s	            r   #base_pre_process_non_default_params>PreProcessNonDefaultParams.base_pre_process_non_default_params  s]    #((*DA||F###y0+66{CCo%*=*LY''';6'+;; ! +& &++-
-W  ..	 
 &  &  00  11  @  -  a00  '  AD- 	 
( "!)
sB   D 'D /D 7D ?D D D D D '
D 5D rE  remove_sensitive_keysadd_provider_specific_paramsc                 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?  r  r  rf  r  rl  rm  )r>  rq  r$   )	r  r  rf  r  rE  rs  rt  r  r  s	            r   r?  CPreProcessNonDefaultParams.embedding_pre_process_non_default_paramsL  sR     'JJ+-$7'=7N%O7N!g7N%O5<I K  	 "! &Ps   1rP  N)FF)r  
__module____qualname____firstlineno__staticmethodrr  r`  r   r   rq  boolr?  __static_attributes__rP  r   r   r>  r>    s    -"-"-" !-" !)c 3	-"
 #-" .2#Y-" 
-" -"^  ',-2""" !" !)c 3	"
 "  $" '+" 
" "r   r>  r  rs  rt  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>  rv  r  Nr  r_  function
parametersrZ  Fr  )r>  rq  r   $get_json_schema_from_pydantic_objectr   r  rd  r  r0  deepcopyr^  r   r  remove_sensitive_keys_from_dict)r  r  rf  r  rE  rs  rt  r  r  r_  tooltool_functionr  new_parameterss                 r   pre_process_non_default_paramsr  d  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   dc                    ^ / 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
)r+  secretaccess
credentialc              3   H   >#    U  H  oTR                  5       ;   v   M     g 7fr  rL  )r	  phraser+  s     r   r  2remove_sensitive_keys_from_dict.<locals>.<genexpr>  s     I3H$3Hs   ")r  r  r   r^  )r  sensitive_key_phrasesrf  r+  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	providersrh  r  ri  r  r  watsonx	functionsfunction_callr_  ollamar  anyscaletogether_air  r1  cerebrasxai	ai21_chat
volcenginedeepseek	codestralr6  r  cohere_chatr  ollama_chatr  r  nebiuswandbr[  formatTfunctions_unsupported_modelr`  Nr  z%Function calling is not supported by r  r  )r   !common_cloud_provider_auth_paramsAzureOpenAIConfigmap_special_auth_paramsAmazonBedrockGlobalConfigVertexAIConfigIBMWatsonXAIConfigr  add_function_to_promptr^  r   )r  r  rf  r[  common_auth_dicts        r   pre_process_optional_paramsr    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   rp  thinkingweb_search_optionssafety_identifierc&           
      #  ^ ^^^^0^1 [        5       R                  5       m1T1R                  S5      n'[        T1U'TU!T S9m0[	        T1T0TS9n(S n)TbB  T[
         V*s/ s H  n*U*R                  PM     sn*;   a  [        R                  T [        T5      S9n)S[        [           4UUU UU0U14S jjn+[        T TS9n,U,c
  [        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 T0U(Tb  [!        T["        5      (       a  TOSS9n(GOKTS:X  a  [        R$                  " 5       R                  T T0U(Tb  [!        T["        5      (       a  TOSS9n([        R$                  " 5       R                  T T0U(Tb  [!        T["        5      (       a  TOSS9n(GOTS:X  d  TS:X  aA  [        R&                  " 5       R                  T0U(T Tb  [!        T["        5      (       a  TOSS9n(GOxTS:X  a,  [        R(                  " 5       R                  T0U(T Tb  TOSS9n(GOFTS:X  aA  [        R*                  " 5       R                  T0U(T Tb  [!        T["        5      (       a  TOSS9n(GOTS:X  aA  [        R,                  " 5       R                  T0U(T Tb  [!        T["        5      (       a  TOSS9n(GOTS:X  aA  [        R.                  " 5       R                  T0U(T Tb  [!        T["        5      (       a  TOSS9n(GOqTS:X  aA  [        R0                  " 5       R                  T0U(T Tb  [!        T["        5      (       a  TOSS9n(GO*TS:X  aA  [        R2                  " 5       R                  T0U(T Tb  [!        T["        5      (       a  TOSS9n(GOTS:X  a  T [        R4                  ;   dd  T [        R6                  ;   dP  T [        R8                  ;   d<  T [        R:                  ;   d(  T [        R<                  ;   d  T [        R>                  ;   aA  [        R@                  " 5       R                  T0U(T Tb  [!        T["        5      (       a  TOSS9n(GO$TS:X  aA  [        RB                  " 5       R                  T0U(T Tb  [!        T["        5      (       a  TOSS9n(GOTS:X  d  TS:X  aG  ST ;   aA  [        R@                  " 5       R                  T0U(T Tb  [!        T["        5      (       a  TOSS9n(GO[        RD                  RG                  T TS9(       aA  [        RD                  " 5       R                  T T0U(Tb  [!        T["        5      (       a  TOSS9n(GO&TS:X  Gac  T [        RH                  ;   a  ST ;   aA  [        RJ                  " 5       R                  T T0U(Tb  [!        T["        5      (       a  TOSS9n(GO[        RL                  " 5       R                  T T0U(Tb  [!        T["        5      (       a  TOSS9n(GOT [        RN                  ;   aA  [        RP                  " 5       R                  T0U(T Tb  [!        T["        5      (       a  TOSS9n(GO.U)b.  U)R                  T0U(T Tb  [!        T["        5      (       a  TOSS9n(G
O[        RR                  " 5       R                  T0U(T Tb  [!        T["        5      (       a  TOSS9n(G
OTS:X  aA  [        RT                  " 5       R                  T0U(T Tb  [!        T["        5      (       a  TOSS9n(G
OuTS:X  GaN  [V        RX                  " T 5      n-[V        RZ                  " T 5      n.U-S:X  d  U-S:X  aA  [        R\                  " 5       R                  T T0U(Tb  [!        T["        5      (       a  TOSS9n(G	OS
U.;   a  U-S:X  a  U.R_                  S 5      (       aA  [        R`                  " 5       R                  T0U(T Tb  [!        T["        5      (       a  TOSS9n(G	O[        Rb                  " 5       R                  T0U(T Tb  [!        T["        5      (       a  TOSS9n(G	OQU)b,  U)R                  T0U(T Tb  [!        T["        5      (       a  TOSS9n(G	O TS!:X  aA  [        Rd                  " 5       R                  T T0U(Tb  [!        T["        5      (       a  TOSS9n(GOTS":X  aA  [        Rf                  " 5       R                  T0U(T Tb  [!        T["        5      (       a  TOSS9n(GOTS#:X  aA  [        Rh                  " 5       R                  T T0U(Tb  [!        T["        5      (       a  TOSS9n(GOKTS$:X  aA  [        Rj                  " 5       R                  T0U(T Tb  [!        T["        5      (       a  TOSS9n(GOTS%:X  aA  [        Rl                  " 5       R                  T0U(T Tb  [!        T["        5      (       a  TOSS9n(GOTS&:X  aA  [        Rn                  " 5       R                  T0U(T Tb  [!        T["        5      (       a  TOSS9n(GOvTS':X  a1  U)b.  U)R                  T0U(T Tb  [!        T["        5      (       a  TOSS9n(GO?TS(:X  d  TS:X  aA  [        RL                  " 5       R                  T0U(T Tb  [!        T["        5      (       a  TOSS9n(GOTS):X  aA  [        RJ                  " 5       R                  T0U(T Tb  [!        T["        5      (       a  TOSS9n(GOTS*:X  aA  [        Rp                  " 5       R                  T0U(T Tb  [!        T["        5      (       a  TOSS9n(GOdTS+:X  aA  [        Rr                  " 5       R                  T T0U(Tb  [!        T["        5      (       a  TOSS9n(GOTS,:X  aA  [        Rt                  " 5       R                  T0U(T Tb  [!        T["        5      (       a  TOSS9n(GOTS-:X  a&  [        Rv                  " 5       R                  T T0U(S.9n(GOTS/:X  d  TS0:X  aA  [        Rx                  " 5       R                  T0U(T Tb  [!        T["        5      (       a  TOSS9n(GO]TS1:X  aA  [        Rz                  " 5       R                  T0U(T Tb  [!        T["        5      (       a  TOSS9n(GOTS2:X  aA  [        R|                  " 5       R                  T0U(T Tb  [!        T["        5      (       a  TOSS9n(GOTS3:X  aA  [        R~                  " 5       R                  T0U(T Tb  [!        T["        5      (       a  TOSS9n(GOTS4:X  aA  [        R                  " 5       R                  T0U(T Tb  [!        T["        5      (       a  TOSS9n(GOATS5:X  aA  [        R                  " 5       R                  T0U(T Tb  [!        T["        5      (       a  TOSS9n(GOTS6:X  aA  [        R                  " 5       R                  T0U(T Tb  [!        T["        5      (       a  TOSS9n(GOTS7:X  aA  [        R                  " 5       R                  T0U(T Tb  [!        T["        5      (       a  TOSS9n(GOlTS8:X  a  [        R                  " 5       R                  T0U(T Tb  [!        T["        5      (       a  TOSS9n(T1R                  5        H:  n/[        R                  " 5       R                  U/5      (       d  M.  [        S9U/ 35      e   GOTS::X  aA  [        R                  " 5       R                  T0U(T Tb  [!        T["        5      (       a  TOSS9n(GOTS:X  aA  [        R                  " 5       R                  T0U(T Tb  [!        T["        5      (       a  TOSS9n(GOITS;:X  aA  [        R                  " 5       R                  T0U(T Tb  [!        T["        5      (       a  TOSS9n(GOTS<:X  Ga  [        R                  " 5       R                  T S=9(       aA  [        R                  " 5       R                  T0U(T Tb  [!        T["        5      (       a  TOSS9n(GO[        R                  R                  T S=9(       aA  [        R                  " 5       R                  T0U(T Tb  [!        T["        5      (       a  TOSS9n(GO0[        R                  " S>R                  U[        R                  [        S?5      5      5        U=(       d9    [        R                  =(       d"    [        S?5      =(       d    [        R                  n[        R                  " 5       R                  T0U(T UTb  [!        T["        5      (       a  TOSS@9n(OoU)b-  U)R                  T0U(T Tb  [!        T["        5      (       a  TOSS9n(O?[        R                  " 5       R                  T0U(T Tb  [!        T["        5      (       a  TOSS9n([        U(T1T[        [        R                  " 5       5      U!SA9n([        SBU( 35        [        U(T0USC9n(U($ s  sn*f )DNr  r,  )r  r  rf  r  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() rZ  rY  rR  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  r   r  r^  r   rd  )	r  r*  r  rf  r  rE  r  r  r  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   rq  r  r  r  F)rE  r  r[  r  anthropic_textr  r  r  r-  maritalkrF  	predibasehuggingfacer  r  r2  r  r  r  ri  converseconverse_likeinvokezanthropic.claude-3
cloudflarer  r  r  petals	deepinfra
perplexityr6  text-completion-codestralr0  r1  r  r  )rE  r  r[  r  r  r:  r  hosted_vllmvllmr  r  r  r  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  rh  r6  zoAzure optional params - api_version: api_version={}, litellm.api_version={}, os.environ['AZURE_API_VERSION']={}AZURE_API_VERSION)r  r[  rE  ro  r  r  z Final returned optional params: )r[  r  rp  )[r  r0  r^  r  r  rq   r,  r  get_provider_chat_configr   r`  r9   r1  r   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SagemakerConfigrP   get_bedrock_routeget_base_modelAmazonConverseConfigr  AmazonAnthropicClaudeConfigAmazonAnthropicConfigCloudflareChatConfigOllamaConfigOllamaChatConfigNLPCloudConfigPetalsConfigDeepInfraConfigDatabricksConfigNvidiaNimConfigCerebrasConfigXAIChatConfigAI21ChatConfigFireworksAIConfigVolcEngineConfigHostedVLLMChatConfig
VLLMConfigGroqChatConfigOpenAIConfigOpenrouterConfigIBMWatsonXChatConfigr  r  is_watsonx_text_paramr  NebiusConfigAzureOpenAIO1Configis_o_series_modelAzureOpenAIGPT5Configis_model_gpt_5_modelr   r   r  ro  rW   AZURE_DEFAULT_API_VERSIONr  OpenAILikeChatConfigr   rd  r   r   _apply_openai_param_overrides)2rE  r  r  r  top_pr  rR  rY  stopr  max_completion_tokens
modalities
predictionaudiopresence_penaltyfrequency_penalty
logit_biasrZ  rf  r  seedr_  r`  r  logprobstop_logprobsextra_headersro  parallel_tool_callsr  rp  reasoning_effort	verbosityr  r>  r  r  r  r  r  r[  r  r   r  r  bedrock_routebedrock_base_modelrg  r  r  s2   `    `            `          `                  @@r   get_optional_paramsr    sf   V HMMOM"&&x0N7#%/5 2#-/O
 -1O&+>'3C'38|C , 0HH,/B"C I 
)49 ) )V 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 	
 
		)(::5A-<<UCJ&-?*J%::<NN#5 / #.:k43P3P   O 	O ..=H3L!,,-ABB779KK+=(7#  +6:kSW;X;X (!& L 	   #*"?"?"A"S"S'9$3 '2z+t7T7T $" #T 	# (-??#5 / #.:k43P3P   @ 	O 
	,!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 	
 
	,!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BB1+ *z+t/L/L  C 	
 
	,!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 	
 
	'&&(:::G%99;MM#5 / #.:k43P3P   N 	O **??e?L%;;=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
 WCs   AGr  c                    U/ SQ[         R                  -   ;   a  [        SUS9SL a  UR                  S0 5      nUR	                  5        H  nXc;  d  M
  X   c  M  X   XV'   M     U R                  S0 5        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	[        U	S9U S'   U $ UR	                  5        H  nXc;  d  M
  X   c  M  X   X'   M     U $ s  snnf )z1
Add provider specific params to optional_params
)r  rh  r  r=  r  F)r=  )r   r  r  r^  r  r  r(  r:   )
r[  r  rf  r  r  r=  r  initial_extra_bodyr  processed_extra_bodys
             r   r   r   #  sD    	8

-
-.	. 7M 
 '**<<J"''))m.>.J$1$4JM * &&|R8"!,/""
 &1 !3 8 8 :( :6 AD : % ($ (:$,F/-OL)  ##%A%-*:*F%2%5" & (s   C+$C+c                 \    U(       a$  U H  nX0;  d  M
  UR                  US5      X'   M      U $ )z
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
N)r^  )r[  r  rp  rg  s       r   r  r  W  s4     *E+);)?)?t)L& + 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 )NrE  rf  )r(  r   )r  r  r  r  s       r   get_non_default_paramsr  f  s|     "'')	)DAL 	 **	 	
 99 	 9!<< 	)  	 	s   AAAAAmax_parallel_requestsrpmtpmdefault_max_parallel_requestsc                 ^    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  )r  r  r  r  calculated_rpms        r   calculate_max_parallel_requestsr  v  sS    : ($$	
	S4Z!^,QN	&	2,,r   healthy_deploymentsc                     [        S U  5       S S9nUb.  U  Vs/ s H  nUS   R                  S5      U:X  d  M  UPM!     nnU$ U $ s  snf )Nc              3   H   #    U  H  nS US   ;   d  M  US   S    v   M     g7f)orderr\  NrP  )r	  
deployments     r   r  2_get_order_filtered_deployments.<locals>.<genexpr>  s2      	
1
*%566 2J'(11s   "")defaultr\  r#  )minr  )r   	min_orderr$  filtered_deploymentss       r   _get_order_filtered_deploymentsr*    st    	
1	

 I  2 
1
*+//8IE 1 	  
 $# 
s
   AAr\  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
r  VERTEXAI_LOCATIONVERTEX_LOCATIONri  r  )vertex_locationr   rW   r  r`  aws_region_namewatsonx_region_nameregion_name)rf  r\  vertex_ai_locationr/  r0  s        r   _get_model_regionr3    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)
)rE  r\  )rf  r\  Nz'Cannot infer model region for model: {}rh  r  ri  r  euus)r   r8   rE  r3  r   r   r  r  get_eu_regionsget_us_regionsr  r  r  rL  )r\  rE  rf  r{  model_region
eu_regions
us_regionsregions           r   _infer_model_regionr=    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
r5  Tr\  Fr1  r=  r\  r9  s     r   _is_region_eurC     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
r6  Tr@  FrA  rB  s     r   _is_region_usrF    rD  r   allowed_model_regionc                 &    U R                   U:X  a  gg)r?  TF)r1  )r\  rG  s     r   is_region_allowedrI    s     !!%99r   modec           	         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
rh  zazure/rG  
   chat)rE  api_keyrX  ro  r  rJ  zx-ms-regionN)rE  r  rN  r`  rX  replacer   AzureChatCompletionget_headersro  r  r  )r\  rJ  _modelr  r<  s        r   get_model_regionrS  '  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   rG  )r  r`  r   )r  	_messagess     r   get_first_chars_messagesrW  A  s=    JJz*		N4C(	 s    # 
00c                 H    SR                  S U  5       5      n[        U5      $ )NrG  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>L  s     HTTDDTs   '	')r   r_  )rS  filtered_texts     r   _count_charactersr^  J  s!    GGHTHHM}r   response_objc                    [        U S5      (       a  [        U S5      (       a  [        U SS 5      nU(       a  [        US5      (       a  UR                  nSnU Hk  n[        US5      (       a6  UR                   H$  n[        US5      (       d  M  X5R                  -  nM&     MJ  [        US5      (       d  M]  X4R                  -  nMm     U$ [        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SnU H  n	[        U	[        5      (       a3  U	R                  R                  b  X9R                  R                  -  nMI  MK  [        U	[        5      (       d  Mb  U	R                  R                  c  M{  X9R                  R                  -  nM     U$ )
Nr  r  outputrG  rF  rS  deltaz
text.deltazoutput_text.delta)hasattrgetattrra  rF  rS  r  r`  r  rh   rB  r~   rb  )
r_  responses_api_responseoutput_listresponse_stroutput_itemcontent_part
event_typerb  _choiceschoices
             r   get_response_stringrm  P  s   |V$$z)J)J ")z4!H!g.Dh&O&O077KL*;	22(3(;(;"<88(,=,==L )< [&11 $4$44L  +   |V$$w)G)G\626
:%)<
)JL'26E&uc225:: 	  Lfg&&~~%%1 6 66 2 011||##/ 4 44  r   llm_providerdynamic_api_keyc                 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  r  OPENAI_API_KEYr  r  ANTHROPIC_API_KEYr  AI211_API_KEYr  ALEPH_ALPHA_API_KEYbasetenBASETEN_API_KEYr  r  COHERE_API_KEYr  HUGGINGFACE_API_KEYr  NLP_CLOUD_API_KEYrF  REPLICATE_API_KEYr  TOGETHERAI_API_KEYTOGETHER_AI_TOKENr  NEBIUS_API_KEYr  WANDB_API_KEY)r   rN  
openai_keyrW   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)rn  ro  rN  s      r   get_api_keyr  |  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   r  UTC)r  rc  r  r  utcnow)dtr  s     r   get_utc_datetimer    s5    !r5||BFF##  r   c                 J   S n U [         R                  ;   aZ  S[         R                  U    ;   a  [         R                  U    S   $ S[         R                  U    ;   a  [         R                  U    S   $ [        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r   module_level_clientr  raise_for_statusr[  r   
model_name
config_urlr  config_jsonr  s        r   _get_max_position_embeddings4get_max_tokens.<locals>._get_max_position_embeddings  sv    .zl:OP
	2266zBH%%' #--/K&1oo6O&P#&2.. 		   AA 
A+*A+max_output_tokensr  r6  r  r  NzModel zr isn't mapped yet. Add it here - https://github.com/BerriAI/litellm/blob/main/model_prices_and_context_window.json)r   r  r8   r   )rE  r  rf  r{  r  s        r   get_max_tokensr    s:   $&
G&&&"g&8&8&??))%01DEE!3!3E!::))%0>>+;%+H(Aq-/5GJG&&&"g&8&8&??))%01DEE!3!3E!::))%0>> ;  + 
UG  N  O
 	

s1   A D ,D 3D A D ,D <D >
D D"c                 2    [         R                  " SSU 5      $ )Nz-\d+$rG  resubr  s    r   _strip_stable_vertex_versionr    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   rO   )!litellm.llms.bedrock.common_utilsrP   r  )r  rP   s     r   _get_base_bedrock_modelr    s     C**:66r   r  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}$rG  r  r  s    r   !_strip_openai_finetune_model_namer    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)ri  bedrock_converser  r  r2  r0  zft:)r  r  r  )rE  rf  stripped_bedrock_modelstrip_versionstrip_finetunes        r   _strip_model_namer    sy    26UU!8E!J%%	{*.AX.M4F	"5"E4F	%:eLr   c                 (    [         R                  U    $ r  r   r  r+  s    r   _get_model_info_from_model_costr  (  s    c""r   r|  c                     U(       a  SU ;   a  U S   U:w  ax  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gg)z?
Check if the model info provider matches the custom provider.
r  r  Tr:  ri  litellm_proxyF)r  r|  rf  s     r   _check_provider_matchr  ,  s     j()*.AA+-*3

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

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

*Y
<  ?2r   )	TypedDictc                   H    \ rS rSr% \\S'   \\S'   \\S'   \\S'   \\S'   Srg)	'PotentialModelNamesAndCustomLLMProvideriM  split_modelcombined_model_namestripped_model_namecombined_stripped_model_namerf  rP  N)r  rx  ry  rz  r`  __annotations__r}  rP  r   r   r  r  M  s     "%%r   r  c           
         Uc   [        U S9u  p!  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[        X!S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)Nr6  rq  r  r   z{}/{})r  r  r  r  rf  )	r8   r   r  r  r  r  r  r   r`  )rE  rf  r  r{  r  r  r  s          r   _get_potential_model_namesr  U  s    "	 5EE5R2Ka $/
 (;$	!1!1c!" " kk#q)!,#/
 (/~~(
$ %nn-@H/
 (/~~(
$
 3//%A &9: ;  	 K	 s   B; ;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  r  r  s        r   r  r    sx    *:,6KLJ..22:>!!# mmo #.//2K"L".** r  c                     [        XS9$ )zS
_get_model_info_helper wrapped with lru_cache

Speed Optimization to hit high RPS
rq  )rz  rq  s     r   _cached_get_model_info_helperr    s     "WWr   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  r6  )rr   r  get_provider_model_inforq   r  )rE  rf  r  r|  s       r   r  r    sX     37O2oE/GG,/B"C H 
 7;J$66U6C
r   potential_model_namesc                 B    [        S U R                  5        5       5      $ )z9
Check if the potential model name is in the model cost.
c              3   H   #    U  H  nU[         R                  ;   v   M     g 7fr  r  )r	  potential_model_names     r   r  9_is_potential_model_name_in_model_cost.<locals>.<genexpr>  s#      $B  	 2 22$Bs    ")r  rA  )r  s    r   &_is_potential_model_name_in_model_costr    s'      $9$@$@$B  r   c           	          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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$ US!:X  d  US":X  a4  [        U5      (       d$  [         R                  " 5       R                  U 5      $  Sn	Sn
U[         R                  ;   a)  Un
[        [!        ["        U
5      S#9n	[%        XS$9(       d  Sn	U	c=  U [         R                  ;   a)  U n
[        [!        ["        U
5      S#9n	[%        XS$9(       d  Sn	U	c=  U[         R                  ;   a)  Un
[        [!        ["        U
5      S#9n	[%        XS$9(       d  Sn	U	c=  U[         R                  ;   a)  Un
[        [!        ["        U
5      S#9n	[%        XS$9(       d  Sn	U	c=  U[         R                  ;   a)  Un
[        [!        ["        U
5      S#9n	[%        XS$9(       d  Sn	U	b  U
c  ['        S%5      eU	R)                  S5      nUc'  [        R                  " S&R+                  X5      5        SnU	R)                  S5      nUc'  [        R                  " S'R+                  X5      5        Sn[        SW0 SU
_SU	R)                  SS5      _SU	R)                  SS5      _SU	R)                  SS5      _SU_S(U	R)                  S(S5      _S)U	R)                  S)S5      _S*U	R)                  S*S5      _S+U	R)                  S+S5      _S,U	R)                  S,S5      _S-U	R)                  S-S5      _S.U	R)                  S.S5      _S/U	R)                  S/S5      _S0U	R)                  S0S5      _S1U	R)                  S1S5      _S2U	R)                  S2S5      _S3U	R)                  S3S5      _S4U	R)                  S4S5      _S5U	R)                  S5S5      _S6U	R)                  S6S5      _S7U	R)                  S75      _S8U	R)                  S85      _SU_S9U	R)                  S9S5      _S:U	R)                  S:S5      _S;U	R)                  S;S5      _S<U	R)                  S<S5      _S=U	R)                  S=S5      _S>U	R)                  S>S5      _S?U	R)                  S?S5      _S@U	R)                  S@S5      _SAU	R)                  SAS5      _SBU	R)                  SBS5      _SCU	R)                  SCS5      _SDU	R)                  SDS5      _SEU	R)                  SES5      _SFU	R)                  SFS5      _SU	R)                  SU5      _SU	R)                  S5      _SU	R)                  SS5      _SU	R)                  SS5      _SGU	R)                  SGS5      _SU	R)                  SS5      _SU	R)                  SS5      _SU	R)                  SS5      _SU	R)                  SS5      _SHU	R)                  SHS5      _SIU	R)                  SIS5      _S U	R)                  S S5      _SJU	R)                  SJS5      _SKU	R)                  SKS5      _SLU	R)                  SLS5      _SMU	R)                  SMS5      _SNU	R)                  SNS5      _SU	R)                  SS5      _SOU	R)                  SOS5      _SPU	R)                  SPS5      _SQU	R)                  SQS5      _SRU	R)                  SRS5      _SSU	R)                  SSS5      _6$ ! [,         aI  n[        R                  " STU 35        SU[#        U5      ;   a  Ue[-        SVR+                  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  r  zmeta/z@latestrq  z6checking potential_model_names in litellm.model_cost: r  r  r  r  rf  r  r  r+  r  max_input_tokensr  input_cost_per_tokenr   output_cost_per_tokenr  rJ  rM  rm  r~  r  r  supports_assistant_prefillr  r  r  r  r  r  r  z|This model isn't mapped yet. Add it here - https://github.com/BerriAI/litellm/blob/main/model_prices_and_context_window.jsonz`model={}, 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_prioritycache_creation_input_token_cost1cache_creation_input_token_cost_above_200k_tokenscache_read_input_token_cost-cache_read_input_token_cost_above_200k_tokens cache_read_input_token_cost_flex$cache_read_input_token_cost_priority)cache_creation_input_token_cost_above_1hrinput_cost_per_character&input_cost_per_token_above_128k_tokens&input_cost_per_token_above_200k_tokensinput_cost_per_queryinput_cost_per_secondinput_cost_per_audio_tokeninput_cost_per_token_batchesoutput_cost_per_token_batchesoutput_cost_per_token_flexoutput_cost_per_token_priority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_tokensoutput_cost_per_second output_cost_per_video_per_secondoutput_cost_per_imageoutput_vector_sizecitation_cost_per_tokentiered_pricingr  r  r  r  rw  rs  ru  r  search_context_cost_per_queryr  r  ocr_cost_per_pageannotation_cost_per_pagezError getting model info: OllamaErrorzThis 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.rP  )r   
azure_llmsazure_embedding_modelsvertex_llama3_modelsr  r  r  r   r   r  rv   r  r  r  r  r  r   r`  r  r  r  r  r   )rE  rf  r  r  r  r  r  r  r  _model_infor+  _input_cost_per_token_output_cost_per_tokenr  s                 r   rz  rz    s)
   S
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-/5GJ  % "& #'	
 &' '( "/  *. *. +/ &* ,0 )- '+  $(! &  8+/Bm/S89NOO'')88?? 59K!%C"g&8&88)=$sC.Q,* #'K"u0B0B'B=$sC.Q,* #'K#0G4F4FF2=$sC.Q,* #'K"':g>P>P'P)=$sC.Q,* #'K"{g6H6H'H!=$sC.Q,* #'K"ck  S  6A__&6! %,$$v}}
 )*%6Aoo'7" &-$$w~~
 *+&  CC&??<>C "-1CT!JC #.//2Et"L	C
 &;C +6///+C /:oo3T/C 1<5t1C CN//GCC$ -8OO14-%C* ?JooCT?+C0 2=621C6 6A__:D67C< ;F//?;=CB *5.*CCH 8C<d8ICN 8C<d8OCT &1__5KT%RUCV '2oo6Mt&TWCX ,7??0$,YC^ .9__2._Cd /:oo3/eCj '=kCl ,7??0$,mCr 0;4d0sCx -8OO14-yC~ +6///+CD 1<5t1ECJ 9D=t9KCP =HOOA4=QCV 9D=t9WC\ (37OQU'V]C^ 2=62_Cd '2oo6Mt&TeCf $/??3G#NgCh )4-t)iCn  +/?FoCp "-&(;"qCv !__V,wCx *5.*yC~ *5.*CD !,0A4 HECF +6///+GCL &1__5KT%RMCN ,7??0$,OCT )4-t)UCZ &1__5KT%R[C\ '2oo6Mt&T]C^ $/??3G#N_C` 0;4d0aCf +6///+gCl %0OO4I4$PmCn &1__5KT%RoCp $/??3G#NqCr '2oo6Mt&TsCt /:oo3T/uCz  OOE40{C|  OOE40}C~ #.//2Et"LC@ *5.*AC CH  
9!=>CF"G n  u  u
 	
	
s&   D]- ?]- X]- -
_ 7A^;;_ c                     [         R                  " XS9n[        U US9n[        R                  " SU 35        [        S0 UDSU0D6nU$ )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"]
    }
rq  zmodel_info: rd  rP  )r   r9   rz  r   r   ru   )rE  rf  rd  r  returned_model_infos        r   r  r    se    N &AA )/K
 <}56# 
/F r   python_type_namec                     [         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arrayrV  NoneTypenull)r`  r  r  r  r|  rd  rr  r  )r   python_to_json_schema_typess     r   json_schema_typer
  9  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enumrV  r  
propertiesnamer  r  r  required)inspectastr  numpydoc.docscraper  r   r  getdocr   strip	signaturer  r(  rc  r
  r  r  r  r  r`  rd  descrr  r  r&  emptyr   )input_functionr  r  r  r  r  	docstringnumpydocsr  r  required_params
param_info
param_namerg  
param_typeparam_description
param_enum
param_data
param_dictr  r  r  s                          r   function_to_dictr0  S  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path)r  URL	copy_withr`  )original_urlnew_pathr  modified_urls       r   
modify_urlr9    s+    
))L
!C==h=/L|r   rX  	num_callsforce_timeoutc                    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 goingrU  rZ  rolerF  )rE  r>  rf  rX  r;  r   )total_response_time
calls_madestatusr  failed)rangetimer   batch_completionr   )rE  rf  rX  r@  r:  r;  test_prompt
test_callsr{  r>  rS  r  response_timer  s                 r   load_test_modelrI    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 providerr0  r  azure_ai)r   r  get_required_paramsr  AzureAIStudioConfigrf  s    r   get_provider_fieldsrO    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   r(  r   osgetenvr  r  HTTPTransportAsyncHTTPTransport)r+  r  proxiessync_proxy_mountsasync_proxy_mountsno_proxyno_proxy_urlsrR  s           r   !create_proxy_transport_and_mountsr\    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 rN  ro  c                    Sn/ nU c  UUS.$  [        U S9u  pg  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O@UR                  / SQ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  a+  S[        R                  ;   a  SnGOzUR	                  S5        GOgUS:X  a+  S[        R                  ;   a  SnGOIUR	                  S5        GO6US:X  a+  S[        R                  ;   a  SnGOUR	                  S5        GOU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OoU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  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  aP  S*[        R                  ;   a  S+[        R                  ;   a  SnG
O`UR	                  S*5        UR	                  S+5        G
O<US,;   a+  S-[        R                  ;   a  SnG
OUR	                  S-5        G
OUS.:X  a+  S/[        R                  ;   a  SnG	OUR	                  S/5        G	OUS0:X  a+  S1[        R                  ;   a  SnG	OUR	                  S15        G	OUS2:X  a+  S3[        R                  ;   a  SnG	OUR	                  S35        G	OxUS4:X  aP  S5[        R                  ;   d  S6[        R                  ;   a  SnG	OFUR	                  S55        UR	                  S65        G	O"US7:X  a+  S8[        R                  ;   a  SnG	OUR	                  S85        GOUS9: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OqU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  a+  SA[        R                  ;   a  SnGOUR	                  SA5        GOUSB:X  d  USC:X  a+  SD[        R                  ;   a  SnGOUR	                  SD5        GOUSE:X  a+  SF[        R                  ;   a  SnGOvUR	                  SF5        GOcUSG:X  a+  SH[        R                  ;   a  SnGOEUR	                  SH5        GO2USI:X  a+  SJ[        R                  ;   a  SnGOUR	                  SJ5        GOUSK:X  a+  SL[        R                  ;   a  SnGOUR	                  SL5        GOUSM:X  a+  SN[        R                  ;   a  SnGOUR	                  SN5        GOUSO:X  a+  SP[        R                  ;   a  SnGOUR	                  SP5        GOnUSQ:X  ag  SR[        R                  ;   d<  SS[        R                  ;   d(  ST[        R                  ;   d  SU[        R                  ;   a  SnGOUR	                  SR5        GOUSV:X  ad  SW[        R                  ;   a,  SX[        R                  ;   d  SY[        R                  ;   a  SnGOUR	                  SW5        UR	                  SY5        GOUSZ:X  a+  S[[        R                  ;   a  SnGOyUR	                  S[5        GOfUS\:X  a+  S][        R                  ;   a  SnGOHUR	                  S]5        GO5US^:X  a+  S_[        R                  ;   a  SnGOUR	                  S_5        GOUS`:X  a+  Sa[        R                  ;   a  SnGOUR	                  Sa5        GOUSb:X  a)  Sc[        R                  ;   a  SnGOUR	                  Sc5        GOU [        R                  ;   d<  U [        R                  ;   d(  U [        R                  ;   d  U [        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                  ;   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 [        R(                  ;   a+  S[        R                  ;   a  SnGOU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OUR	                  S!5        GOpU [        R.                  ;   a+  S#[        R                  ;   a  SnGODUR	                  S#5        GO1U [        R0                  ;   a*  S%[        R                  ;   a  SnGOUR	                  S%5        OU [        R2                  ;   a)  S'[        R                  ;   a  SnOUR	                  S'5        OU [        R4                  ;   a)  S[[        R                  ;   a  SnOUR	                  S[5        OyU [        R6                  ;   a)  S][        R                  ;   a  SnONUR	                  S]5        O<U [        R8                  ;   a(  S_[        R                  ;   a  SnOUR	                  S_5        Sd[:        [<           Se[<        Sf[:        [<           4Sg jnUb	  U" USh5      nUb	  U" USi5      nUb	  U" USj5      n[?        U5      Sk:X  a  SnXES.$ ! [         a    Sn GN,f = f)la  
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_keysr6  r  rq  Trh  AZURE_API_BASEr  AZURE_API_KEY)r`  r  ra  r  rr  r  rw  rF  rz  r  OPENROUTER_API_KEYr  VERCEL_AI_GATEWAY_API_KEY	datarobotDATAROBOT_API_TOKENr  VERTEXAI_PROJECTr,  r  rx  r  AI21_API_KEYr  r{  r  rt  ru  rv  r  ry  ri  r  AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY)r  r  OLLAMA_API_BASEr  ANYSCALE_API_KEYr  DEEPINFRA_API_KEYfeatherless_aiFEATHERLESS_AI_API_KEYr2  GOOGLE_API_KEYGEMINI_API_KEYr  GROQ_API_KEYr1  NVIDIA_NIM_API_KEYr  CEREBRAS_API_KEYr  XAI_API_KEYr  r  VOLCENGINE_API_KEYr  r  CODESTRAL_API_KEYr  DEEPSEEK_API_KEYr6  MISTRAL_API_KEYpalmPALM_API_KEYr  PERPLEXITYAI_API_KEYr8  VOYAGE_API_KEYr9  INFINITY_API_KEYr:  FIREWORKS_AI_API_KEYFIREWORKS_API_KEYFIREWORKSAI_API_KEYFIREWORKS_AI_TOKENr  CLOUDFLARE_API_KEYCLOUDFLARE_ACCOUNT_IDCLOUDFLARE_API_BASEr  NOVITA_API_KEYr  r}  r  r~  	dashscopeDASHSCOPE_API_KEYmoonshotMOONSHOT_API_KEYr  exclude_patternr   c                 \    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  r  r+  s      r   filter_missing_keys1validate_environment.<locals>.filter_missing_keys  s%    #Jtciik'ItJJJs   ))rN  rX  ro  r   ) r8   r   rS  environr   r1  r   r  r  open_ai_embedding_modelsopenai_image_generation_modelsrI  rG  replicate_modelsr  r  datarobot_modelsr  r  models_by_providerhuggingface_modelsr  together_ai_modelsr  baseten_modelsr  r  nebius_modelswandb_modelsr   r`  r_  )	rE  rN  rX  ro  r^  r_  r{  rf  r  s	            r   validate_environmentr    s   $   L}#6(
 	

#'7e'D$1 (*2::-&*###$45 G+ BJJ.'2::5#rzz1&*###L !K/"bjj0&*###$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&*###$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 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 J.!RZZ/&*###$67 W;;;>>>888>>>2::-&*###$45g..."bjj0&*###$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$s) Kc Kd3i K *<C*<D*<G
<A"#6UUW  #"#s   x8 8yyc                  .    [         R                  " U 0 UD6$ r  )r   ro  )r  r  s     r   acreater    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$ [        [        R                  " U5      5      nU$ ! [         a    [        S5         N\f = f)N c              3   *   #    U  H	  oS    v   M     g7f)rF  NrP  )r	  rB  s     r   r  *prompt_token_calculator.<locals>.<genexpr>  s     ?h7I&hs   r   claudez:Anthropic import failed please run `pip install anthropic`)	AI_PROMPTHUMAN_PROMPT	Anthropic)
r   r  r   r  r  r  count_tokensr_  r1   rR  )	rE  r>  rS  
num_tokensr  r  r  r  anthropic_objs	            r   prompt_token_calculatorr    s    88?h??DJ5	T 	A@!"//5
  ./
  	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)NrZ  zHello Worldr=  rE  r>  rG  )rB  rE  rn  )	r   r  r  r  modelsretrievern  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.
rZ  zHey, how's it going?r=  rL  )rE  r>  rN  r  TF)r   rn  r   r   )rE  rN  r>  s      r   check_valid_keyr    sN      ,BCDHG	
   s    
7	77r  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  FrP  )r  s    r   _should_retryr    s9     c c c cr   response_headersc                 \    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-after)emailr  r  r   r  parsedate_tz	mktime_tzrD  )r  r  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+remaining_retriesr  min_timeoutc                     [        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!   )r  r  r  r  r  jitterr  sleep_secondss           r   _calculate_retry_afterr    s     99IJK fmmo%F 1{#8b#8## $9 1K'#c;*??M 3M7M!!r   rolesinitial_prompt_valuefinal_prompt_valuetokenizer_configc                 4   U nU/n [        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]
    )
    ```
    r6  r   r   )rC  rA  )r  r  r  )r8   r   r   r   known_tokenizer_configcustom_prompt_dict)rE  r  r  r  r  complete_modelpotential_modelsr  s           r   register_prompt_templater  ,  s    T N&' u-a0& !A-#1G**1- " %%% "A(<&8-G&&q) " %%%!  s   B
 

BBc                   `    \ rS rSr  SS\\   S\\   4S jjrS rS r	S\
4S	 jrS
 rS rSrg)TextCompletionStreamWrapperin  NrY  rf  c                 4    Xl         X l        X0l        X@l        g r  )completion_streamrE  rY  rf  )selfr  rE  rY  rf  s        r   __init__$TextCompletionStreamWrapper.__init__o  s     "3
,#6 r   c                     U $ r  rP  r  s    r   __iter__$TextCompletionStreamWrapper.__iter__{      r   c                     U $ r  rP  r  s    r   	__aiter__%TextCompletionStreamWrapper.__aiter__~  r  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)Nr6  r}  rV  createdrE  r  r   rb  rF  rS  reasoning_contentr  finish_reasoninclude_usageFTusagez=Error occurred converting to text completion object - chunk: z	; Error: )r   r  r   r  rh   r   rY  r`  )r  r  r  text_choicesrb  r  s         r   !convert_to_text_completion_object=TextCompletionStreamWrapper.convert_to_text_completion_object  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[         a/  n[        U R                  U R                  =(       d    SU0 0 S9eS nAff = f)NNoner  rG  )rE  rf  original_exceptioncompletion_kwargsextra_kwargs)r   r  r   r  StopIterationr3   rE  rf  )r  r  processed_chunkr  s       r   __next__$TextCompletionStreamWrapper.__next__  s     	//F?em#O"&"H"Hu"H"U&&	 0
   	  	 jj$($<$<$B#$"$ 	s   0A A B*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  r  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  rf  rE  rY  NN)r  rx  ry  rz  r   rr  r`  r  r  r  rw   r  r  r  r}  rP  r   r   r  r  n  sL    
 *.-1
7 !	
7
 &c]
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      	assistantr=  )r  rb  r  r   r   rx   rC  r_  rl   r  rb  r  r~   r   	r  mock_responserE  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r  r   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   r   )rS  getcwdopenr[  loadr   )config_pathrS  config_fileconfigr  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  rE  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$ )Nr  z(calling process_messages with messages: , max_tokens: z	, model: zprocessing final_messages: zused_tokens: z, available_tokens: r  )final_messagesrB  available_tokensr  rE  z/final_messages after attempt_message_addition: Final messages: )r   r   r  attempt_message_addition)r>  r  rE  r  rB  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>  rE  ztemp_message_tokens: r  r  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  rB  r  r  rE  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r  )r  )rB  r>  r  rE  s       r   r!  r!  U  s    x)+U3zAr   c                     [        XS9$ )Nr  r   r   s     r   r  r  [  s    u88r   raise_error_on_max_limitc                 <   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gptrL  rF  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   )rB  tokens_neededrE  r'  rF  attemptstotal_tokensratio
new_lengthhalf_length	left_half
right_halftrimmed_contents                r   r  r  _  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   
trim_ratioreturn_response_tokensc                    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  rG  r>  r  r  rF  r  r  zCurrent tokens: z, max tokens: zNeed to trim input messages: z, current_tokensr  )r  r  rE  r   zProcessed system message: )r>  r  rE  zProcessed messages: r  z, return_response_tokens: z'Got exception while token trimming - {})r0  r  r   r  r  r  ri  r   reverser_  r   r   r  r   r   r  r1  r  r   r  r  r`  )r>  rE  r4  r5  r  original_messagesmax_tokens_for_modelr  rB  tool_messagescurrent_tokensr  r  response_tokensr  s                  r   trim_messagesr=    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\S\4U 4S jjjrS\4S jrS\4S jr	S\
\   S	\
\   S\4S
 jr  SS\
\   S	\
\   S\
\\      4S jjrS\S	\
\   S\\   4S jrSrU =r$ )AvailableModelsCachei  ttl_secondsmax_sizec                 2   > [         TU ]  X5        S U l        g r  )superr  	_env_hash)r  rA  rB  	__class__s      r   r  AvailableModelsCache.__init__  s    /(,r   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)rS  r  r(  r  r`  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)rP  rE  )r  current_hashs     r   _check_env_changed'AvailableModelsCache._check_env_changed  s/    ))+>>!)N~~--r   rf  r\  c                     SnUb  UR                  5       nUb  U SU 3n[        R                  " UR                  5       5      R	                  5       $ )NrG  :)model_dump_jsonhashlibsha256rR  	hexdigest)r  rf  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)rT  
cache_dictclearr]  r   r   r   r`  	get_cacher0  r  )r  rf  r\  	cache_keyr  s        r   get_cached_model_info*AvailableModelsCache.get_cached_model_info.  st     !d&=&=&?&?OO!!#''(;L	htCy)4>>)+DE==((r   available_modelsc                 r    U R                  X5      nU R                  U[        R                  " U5      5        g)zSet cached model infoN)r]  	set_cacher0  r  )r  rf  r\  rf  rc  s        r   set_cached_model_info*AvailableModelsCache.set_cached_model_infoA  s-     ''(;L	y$--0@"ABr   )rE  )i,  r  r  )r  rx  ry  rz  r  r  r`  rP  r|  rT  r   r   r]  r   rd  ri  r}  __classcell__rF  s   @r   r@  r@    s    -C - - -6s 6.D .>%c]> !0> 
	> .237%c] !0 
$s)		&C C !0C s)	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{  rG  _API_KEY)rS  r  r  r   r   rO  upperr   )rf  valid_providersenviron_keysr   env_provider_1env_provider_2expected_provider_key_1expected_provider_key_2s           r   #_infer_valid_provider_from_env_varsrv  P  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)rN  rX  Error getting valid models: )	_model_cacherd  
get_modelsrN  rX  ri  r   r   r]  )r  rf  r\  r  r  r  s         r   #_get_valid_models_from_provider_apir{  k  s    
$::
 $   ++.<.HN**d0>0J^,,PT , 

 	**+>PVW !=aSAB	s#   A" AA" "
B,BBBcheck_provider_endpointc                     Uc	  [        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  Xq: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
NrG  r6  r  rh  z	Azure-LLMrx  )r   rN  rX  r   r|  rv  r  r  rq   r   r1  r{  r0  r  r  r  r   r   r]  )r|  rf  r\  rN  rX  rp  valid_modelsr   r  models_for_providerr  s              r   get_valid_modelsr    sQ   &: !+"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<6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)Nro  Trn  rw  rv  r  img_generationr  c              3   F   #    U  H  u  pU S [        U5       3v   M     g7f)=N)repr)r	  r+  r,  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   r  r   mapr  r(  r   r   )r4  r  r  args_str
kwargs_strs        r   r  r    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{  r6  )strftimer  r   )rS  r_  response_ids      r   get_logging_idr    sO    j))-883>AQAQRVAWW 	  s   *- 
::c                     U c  g U R                  S0 5      nUb2  UR                  SS 5      nUb  U$ UR                  S0 5      n[        US9$ g )Nr\  r  r  )r  )r  r5   )model_call_detailsr\  _base_modelr  s       r   _get_base_model_from_metadatar    sb    !'++,<bAN!$((t<"!%%j"598LLr   c                   B    \ rS rSrSS\S\4S jjrS rS rS r	S r
S	rg
)ModelResponseIteratori  r  convert_to_deltac                     USL aZ  [        SS9U l        U R                  R                  S   R                  nUR                  S   R                  R
                  Ul        OXl        SU l        g )NT)rR  r   F)rw   r  r  rb  rB  rF  is_done)r  r  r  _deltas       r   r  ModelResponseIterator.__init__   s^    t#"/t"<D((00399F+33A6>>FFFN"0r   c                     U $ r  rP  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  rP  r  s    r   r  ModelResponseIterator.__aiter__4  r  r   c                 ^   #    U R                   (       a  [        eSU l         U R                  $ 7fr  )r  r  r  r  s    r   r  ModelResponseIterator.__anext__7  s%     <<$$"""s   +-)r  r  NF)r  rx  ry  rz  rw   r|  r  r  r  r  r  r}  rP  r   r   r  r    s)    }  ##r   r  c                   D    \ rS rSrS
S\\   4S jjrS rS rS r	S r
S	rg)ModelResponseListIteratori>  Ndelayc                 *    Xl         SU l        X l        g Nr   )model_responsesr  r  )r  r  r  s      r   r  "ModelResponseListIterator.__init__?  s    .

r   c                     U $ r  rP  r  s    r   r  "ModelResponseListIterator.__iter__E  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  rD  sleepr  r  s     r   r  "ModelResponseListIterator.__next__H  s]    ::T1122--djj9

a
::JJtzz"r   c                     U $ r  rP  r  s    r   r  #ModelResponseListIterator.__aiter__R  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  r  r  r  s     r   r  #ModelResponseListIterator.__anext__U  sk     ::T1122$$--djj9

a
::--

+++ ,s   BBBB)r  r  r  r  )r  rx  ry  rz  r   r  r  r  r  r  r  r}  rP  r   r   r  r  >  s&    x r   r  c                   ,   ^  \ rS rSrSU 4S jjrSrU =r$ )CustomModelResponseIteratori_  c                 "   > [         TU ]  5         g r  )rD  r  )r  rF  s    r   r  $CustomModelResponseIterator.__init__`  s    r   rP  )r   N)r  rx  ry  rz  r  r}  rk  rl  s   @r   r  r  _  s     r   r  rB  c                     SU ;  a  gU S   b  [        U S   [        5      (       a  gU S    H0  nUS   S:X  d  M  UR                  S5      c  M"  US   S   S:X  d  M0    g   g)z
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"}}
rF  Fr  rS  cache_control	ephemeralT)r  r`  r  )rB  rF  s     r   is_cached_messager  d  sr     y!Z	0BC%H%H9%FOv%O,8(0K? & r   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)validater   )r  r  base64	b64decode	b64encoderX  r   )r'  decoded_bytess     r   is_base64_encodedr  |  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   )r  )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.

tool_callsTFr  )r>  rB  s     r   has_tool_call_blocksr    s%     ;;|$0  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 callrV  r  r  )r  r  )r^   r_   rN  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   
model_dumprr  r  r  rB  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   rZ   r  cleanup_none_field_in_messager   r>  new_messagesrB  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.
r>  r  r  )r_  r  r  )r  jsonify_toolsr   rZ   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   r  rr  r_  	new_toolsr  s      r   validate_and_fix_openai_toolsr    sb     I}dI&&T__./d##T"	 
 r   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
)r0  r(  )rB  new_messager  r  s       r   r  r    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bt  [        U[        5      (       a  M:  [        U[        5      (       aF  U H>  n[        U[
        5      (       d  M  UR                  S5      [        ;  d  M5  [        S5      e   M  M  M  M     U $ ! [         aO  n[        U[        5      (       a  [        SU SU S	35      eS[        U5      ;   a  [        S
U 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
r>  rZ  rF  Nr  zinvalid content typezInvalid message=z
 at index zG. Please ensure all messages are valid OpenAI chat completion messages.zInvalid user message=zL. Please ensure all user messages are valid OpenAI chat completion messages.)	rf  r  r  r`  rd  rr  r  r   KeyError)r>  r
  r  user_contentr]  r  s         r   r  r    s    H%	yF" uuY/+!,44 #L$77$0D)$55#'88F#3;W#W*34J*K$K %1 8 , # &0 O  
	!X&&&qcC58  A  &Q/+A3j  >J  K  
	s*   2B+-B+7B+B++
D5A
C??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  r`  rr  r  r   r  )r`  r  r  s      r   $validate_chat_completion_tool_choicer  5  s    
 	K	%	%	K	&	& OOF#'CC+- ??6"*kooj.I.Q3K=@st  

+K=tK?P>Q  Ri  	j r   c                      \ rS rSr\S\S\S\\   4S j5       r	\S\S\S\\
   4S j5       r\S\S\S\\   S\\   S\4
S	 j5       r\S\S\S\\   4S
 j5       r\S\S\S\\   4S j5       r\ S&S\S\\   S\\   4S jj5       r\S\S\S\4S j5       r\S\\   S\S\\   4S j5       r\S\S\S\\   4S j5       r\S\S\S\\   4S j5       r\S\S\S\\   4S j5       r\S\S\S\\   4S j5       r \S\S\\!   4S j5       r"\ S&S\S\\   S\\#   4S jj5       r$\S\S\\%   4S j5       r&\S\S\S\\'   4S j5       r(\S\\   S\S\\)   4S j5       r*\S\S\\+   4S j5       r,\S\S\S\\-   4S j5       r.\S\S\S\\/   4S j5       r0\S\S\S\S   4S j5       r1\SSS\S    4S! j5       r2\S\S\S\S"   4S# j5       r3\S\S\S\\4   4S$ j5       r5S%r6g)'r  iY  rE  r   r   c                 &   U[         R                  :X  a2  [        R                  R	                  U S9(       a  [        R                  $ U[         R                  :X  a7  [        R
                  R                  U S9(       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  [        R(                  " 5       $ [        R                   R*                  U:X  a  [        R,                  " 5       $ [        R                   R.                  U:X  d  [        R                   R0                  U:X  aF  [2        R4                  " U 5      nUS:X  a  [        R6                  " 5       $ [        R8                  " 5       $ [        R                   R:                  U:X  a  [        R<                  " 5       $ [        R                   R>                  U:X  a  [        R@                  " 5       $ [        R                   RB                  U:X  a  [        RD                  " 5       $ [        R                   RF                  U:X  a  [        RH                  " 5       $ [        R                   RJ                  U:X  a  [        RL                  " 5       $ [        R                   RN                  U:X  a  SU ;   a  [        RL                  " 5       $ SU ;   a  [        RP                  " 5       $ SU ;   a  SSK)J*n  U" 5       $ U [        RV                  ;   a0  SU ;   a  [        RX                  " 5       $ [        RZ                  " 5       $ U [        R\                  ;   a  [        R^                  " 5       $ [        R`                  " 5       $ [        R                   Rb                  U:X  a  [        Rd                  " 5       $ [        R                   Rf                  U:X  a  [        Rh                  " 5       $ [        R                   Rj                  U:X  a  [        Rl                  " 5       $ [        R                   Rn                  U:X  a  [        Rp                  " 5       $ [        R                   Rr                  U:X  a  [        Rt                  " 5       $ [        R                   Rv                  U:X  a  [        Rx                  " 5       $ [        R                   Rz                  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  d<  [        R                   R                  U:X  d  [        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  [        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  [        R                  " 5       $ [        R                   R                  U:X  d  [        R                   R                  U:X  a  [        R                  " 5       $ [        R                   R                  U:X  a  [        R                  " 5       R                  U S9(       a  [        R                  " 5       $ [        R                  R                  U S9(       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  [        R                  " 5       $ [        R                   R                  U:X  a  [        R                  " 5       $ [        R                   R                  U:X  d  [        R                   R                  U:X  a  [        RZ                  " 5       $ [        R                   R                  U:X  a  [        R                  " 5       $ [        R                   R                  U:X  a  [        GR                   " 5       $ [        R                   GR                  U:X  a  [        GR                  " 5       $ [        R                   GR                  U:X  a  [        GR                  " 5       $ [        R                   GR
                  U:X  a  [        RX                  " 5       $ [        R                   GR                  U:X  a  [        GR                  " 5       $ [        R                   GR                  U:X  a  [        GR                  " 5       $ [        R                   Rb                  U:X  a  [        Rd                  " 5       $ [        R                   RF                  U:X  a  [        RH                  " 5       $ [        R                   GR                  U:X  a  [        GR                  " 5       $ [        R                   GR                  U:X  a  [        GR                  " 5       $ [        R                   GR                  U:X  a  [        GR                  " 5       $ [        R                   GR                   U:X  a  [        GR"                  " 5       $ [        R                   GR$                  U:X  a  [        GR&                  " 5       $ [        R                   GR(                  U:X  a  [        GR*                  " 5       $ [        R                   GR,                  U:X  a  [        GR.                  " 5       $ [        R                   GR0                  U:X  a  [        GR2                  " 5       $ [        R                   GR4                  U:X  a  [        GR6                  " 5       $ [        R                   GR8                  U:X  a  [        GR:                  " 5       $ [        R                   GR<                  U:X  a  [        GR>                  " 5       $ [        R                   GR@                  U:X  a  [        GRB                  " 5       $ [        R                   GRD                  U:X  a  [        GRF                  " 5       $ [        R                   GRH                  U:X  a  SS	KJn  U" U S9$ [        R                   GRN                  U:X  a  [        GRP                  " 5       $ [        R                   R                  U:X  a  [        GRR                  " 5       $ [        R                   GRT                  U:X  a  [        GRV                  " 5       $ [        R                   GRX                  U:X  a  [        GRZ                  " 5       $ [        R                   GR\                  U:X  a  [        GR^                  " 5       $ [        R                   GR`                  U:X  a  [        GRb                  " 5       $ [        R                   GRd                  U:X  a  [        GRf                  " 5       $ [        R                   GRh                  U:X  a  [        GRj                  " 5       $ g
)z3
Returns the provider config for a given provider.
r6  v2r2  r  zgpt-ossr   )VertexAIGPTOSSTransformationr  )get_bedrock_chat_configN)rq   rI  r   openaiOSeriesConfigis_model_o_series_modelOpenAIGPT5Configr  DEEPSEEKDeepSeekChatConfigGROQr  BYTEZBytezChatConfig
DATABRICKSr  XAIr  	LAMBDA_AILambdaAIChatConfigLLAMALlamaAPIConfigTEXT_COMPLETION_OPENAIOpenAITextCompletionConfigCOHERE_CHATCOHERErQ   get_cohere_routeCohereV2ChatConfigr  	SNOWFLAKESnowflakeConfigCLARIFAIClarifaiConfigrJ  r  ANTHROPIC_TEXTr  VERTEX_AI_BETAr  	VERTEX_AIr  Flitellm.llms.vertex_ai.vertex_ai_partner_models.gpt_oss.transformationr  r  r  r  r  r  r  
CLOUDFLAREr  SAGEMAKER_CHATSagemakerChatConfig	SAGEMAKERr  r  r  
FRIENDLIAIFriendliaiChatConfigWATSONXr  WATSONX_TEXTr  EMPOWEREmpowerChatConfigGITHUBGithubChatConfigCOMPACTIFAICompactifAIChatConfigGITHUB_COPILOTGithubCopilotConfigCUSTOMCUSTOM_OPENAIOPENAI_LIKEr  AIOHTTP_OPENAIAiohttpOpenAIChatConfigHOSTED_VLLMr  	LLAMAFILELlamafileChatConfigr  LMStudioChatConfig	GALADRIELGaladrielChatConfig	REPLICATEr  HUGGINGFACEr  TOGETHER_AIr  
OPENROUTERr  VERCEL_AI_GATEWAYVercelAIGatewayConfigCOMETAPICometAPIConfig	DATAROBOTDataRobotConfigGEMINIr  AI21	AI21_CHATr  rK  r  r  r  r  AZURE_AIrM  
AZURE_TEXTAzureOpenAITextConfig	NLP_CLOUDr  	OOBABOOGAOobaboogaConfigOLLAMA_CHATr  	DEEPINFRAr  
PERPLEXITYPerplexityChatConfigMISTRAL	CODESTRAL
NVIDIA_NIMr  CEREBRASr  BASETENBasetenConfig
VOLCENGINEr  TEXT_COMPLETION_CODESTRAL	SAMBANOVASambanovaConfigMARITALKr  VLLMr  OLLAMAr  r  r  TRITONr  PETALSr  FEATHERLESS_AIFeatherlessAIConfigNOVITANovitaConfigr  r  WANDBWandbConfig	DASHSCOPEDashScopeChatConfigMOONSHOTMoonshotChatConfigV0V0ChatConfigMORPHMorphChatConfigBEDROCKr  r  LITELLM_PROXYLiteLLMProxyChatConfigOpenAIGPTConfigGRADIENT_AIGradientAIConfigNSCALENscaleConfigHEROKUHerokuChatConfigOCIOCIChatConfig
HYPERBOLICHyperbolicChatConfigOVHCLOUDOVHCloudChatConfig)rE  r   router  r  s        r   r  .ProviderConfigManager.get_provider_chat_configZ  s    +++++CC%CP...+++((==E=J++--!!**h6--//!!&&(2))++!!''83**,,!!,,8++--!!%%1((**!!++x7--//!!''83))++!!88HD5577  ,,8##**h6#44U;E}1133 //11!!++x7**,,!!**h6))++!!++x7**,,!!00H<..00!!00H<--//!!++x75 1133U"6688e# 455'777%'"@@BB"0022'77711333355!!,,8//11!!00H<..00!!++x7**,,!!..(:,,..!!,,8//11!!))X5//11!!..(:--//!!))X5,,..!!((H4++--!!--90022!!00H<..00  ''83##11X=##//8;//11!!00H<2244!!--9//11!!++x7..00!!++x7--//!!++x7..00!!++x7**,,!!--90022!!--9++--!!,,8++--!!33x?0022!!**h6))++!!++x7**,,!!((H45577  %%1##--9))++!!''83**,>>U>K2244,,AAAN4466,,..!!**h6..00!!,,80022!!--9//11!!++x7))++!!++x7**,,!!--9++--!!++x7**,,!!,,8//11  ((H4##--9((**!!,,8**,,!!**h6))++!!))X5((**!!,,8++--!!;;xG88::!!++x7**,,!!**h6))++!!,,8//11!!00H<..00!!&&(2%%''!!((H4''))!!++x7**,,!!((H4''))!!((H4''))!!00H<..00!!((H4''))!!((H4''))!!''83&&((!!++x7..00!!**h6--//!!$$0''))!!''83**,,!!))X5Q*77!!//8;1133!!((H4**,,!!--9++--!!((H4''))!!((H4++--!!%%1((**!!,,8//11!!**h6--//r   c                 $   [         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  d  [         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                  R0                  U:X  a  [         R2                  " 5       $ [         R                  R4                  U:X  a  [         R6                  " 5       $ [         R                  R8                  U:X  a  SSKJn  UR?                  U 5      $ g )Nr   )CohereEmbeddingConfig)rN  )VolcEngineEmbeddingConfig)SagemakerEmbeddingConfig) r   rq   VOYAGErO  rP  rQ  rT  rC  r  IBMWatsonXEmbeddingConfigINFINITYrR  rO  rT  r
  r	  (litellm.llms.cohere.embed.transformationrw  JINA_AI-litellm.llms.jina_ai.embedding.transformationrN  rM  0litellm.llms.volcengine.embedding.transformationrx  rr  rU  r6  CometAPIEmbeddingConfigr  /litellm.llms.sagemaker.embedding.transformationry  get_model_config)rE  r   rw  rN  rx  ry  s         r   rB  3ProviderConfigManager.get_provider_embedding_config<  s      ''8377TT  ::<<!!((H40022!!((H40022!!))X54466!!**h62244!!++x73355  ''83##//8;V(**!!))X5 )**!!,,8 -..!!**h62244!!**h62244!!++x7 ,<<UCCr   rX  present_version_paramsc                 H   [         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  [         R(                  " 5       $ [         R                  R*                  U:X  a  [         R,                  " 5       $ [         R
                  " 5       $ r  )r   rq   r
  r	  should_use_cohere_v1_clientCohereRerankConfigCohereRerankV2Configr=  AzureAIRerankConfigr|  InfinityRerankConfigr~  JinaAIRerankConfigr*  HostedVLLMRerankConfigr1  HuggingFaceRerankConfigrD  DeepinfraRerankConfigrI  NvidiaNimRerankConfigr  VertexAIRerankConfig)rE  r   rX  r  s       r   get_provider_rerank_config0ProviderConfigManager.get_provider_rerank_configq  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022!!++x7//11))++r   c                 8   [         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 )Nr   rO   r  ),VertexAIPartnerModelsAnthropicMessagesConfig)r   rq   rJ  AnthropicMessagesConfigrd  r  rP   ,get_bedrock_provider_config_for_messages_apir  blitellm.llms.vertex_ai.vertex_ai_partner_models.anthropic.experimental_pass_through.transformationr  )rE  r   rP   r  s       r   &get_provider_anthropic_messages_config<ProviderConfigManager.get_provider_anthropic_messages_config  s    
 ))X52244 !!))X5J#PPQVWW!!++x75  DEEr   c                    [         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       $ g )Nr   )"ElevenLabsAudioTranscriptionConfigzgpt-4o)"HostedVLLMAudioTranscriptionConfig)r   rq   r  #FireworksAIAudioTranscriptionConfigDEEPGRAM DeepgramAudioTranscriptionConfig
ELEVENLABS:litellm.llms.elevenlabs.audio_transcription.transformationr  rI  !OpenAIGPTAudioTranscriptionConfig%OpenAIWhisperAudioTranscriptionConfigr*  6litellm.llms.hosted_vllm.transcriptions.transformationr  )rE  r   r  r  s       r   r  =ProviderConfigManager.get_provider_audio_transcription_config  s    
 ,,8>>@@!!**h6;;==!!,,8 677!!((H45 @@BBDDFF!!--9 677r   Nc                    [         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  [         R                  " 5       $ g )Nr)  o_series)r   rq   rI  OpenAIResponsesAPIConfigrK  rL  r  $AzureOpenAIOSeriesResponsesAPIConfigAzureOpenAIResponsesAPIConfigr  XAIResponsesAPIConfigre  LiteLLMProxyResponsesAPIConfig)r   rE  is_gpt_modelis_o_seriess       r   !get_provider_responses_api_config7ProviderConfigManager.get_provider_responses_api_config  s    
 &&(23355!!''83 !;Uekkm%;LuZ5;;=%@%tEWX]E^EsgscsKCCEE<<>>!!%%10022!!//8;99;;r   c                     [         R                  U:X  a  [        R                  " 5       $ [         R                  U:X  a  [        R
                  " 5       $ [        R                  " 5       $ r  )rq   r  r   FireworksAITextCompletionConfigr2  TogetherAITextCompletionConfigr  r  s     r   #get_provider_text_completion_config9ProviderConfigManager.get_provider_text_completion_config  sM    
 $$0::<<%%199;;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       $ g )Nr   )VertexAIModelInfo)OllamaModelInfo)VLLMModelInfo)rq   r  r   r  rI  rg  r:  GeminiModelInfor  #litellm.llms.vertex_ai.common_utilsr  re  rf  TOPAZTopazModelInforJ  AnthropicModelInfor  XAIModelInforS  rC   litellm.llms.ollama.common_utilsr  rR  r*  litellm.llms.vllm.common_utilsr  LEMONADELemonadeChatConfigr  r  )rE  r   r  r  r  s        r   r  -ProviderConfigManager.get_provider_model_info  sw   
 $$0,,..  H,**,,  H,**,,##x/M$&&''8311338+))++##x/--//)''))  H,0H0HH0TH"$$(*l.F.F(.R !?"""h.--//""h.))++r   c                     [         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       $ g )Nr   )BedrockPassthroughConfig)VLLMPassthroughConfig)AzurePassthroughConfig)rq   rd  /litellm.llms.bedrock.passthrough.transformationr  rR  r*  ,litellm.llms.vllm.passthrough.transformationr  rK  -litellm.llms.azure.passthrough.transformationr  )rE  r   r  r  r  s        r   get_provider_passthrough_config5ProviderConfigManager.get_provider_passthrough_config  sn    
 8+ ,--(*l.F.F(.R )**8+ *++r   c                     [         R                  U:X  a  [        R                  " 5       $ [         R                  U:X  a  [        R
                  " 5       $ g r  )rq   rI  r   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                     [         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)
rq   r:  (litellm.llms.gemini.files.transformationr  r  +litellm.llms.vertex_ai.files.transformationr  rd  )litellm.llms.bedrock.files.transformationr  )rE  r   r  r  r  s        r   get_provider_files_config/ProviderConfigManager.get_provider_files_config3  sY    
 (* .//##x/W&((!!X-T%''r   c                 F    [         R                  U:X  a  SSKJn  U" 5       $ g )Nr   )BedrockBatchesConfig)rq   rd  +litellm.llms.bedrock.batches.transformationr  )rE  r   r  s      r   get_provider_batches_config1ProviderConfigManager.get_provider_batches_configH  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  rq   rd  get_initialized_custom_logger)r   r  s     r    get_provider_vector_store_config6ProviderConfigManager.get_provider_vector_store_configS  s)    	
 8+%CCEEr   api_typec                    [         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       $ 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)r   rq   rI  0litellm.llms.openai.vector_stores.transformationr  rK  /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  rd  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   r  r  r  r  r  r  r  r  r  s
             r   !get_provider_vector_stores_config7ProviderConfigManager.get_provider_vector_stores_config_  s4    &&(2 +,,!!''83 011!!++x79$(8 /00\) 899 *< 1 !!))X5 ,--!!++x7 '((!!**h6 ,--!!((H4 +,,r   c                 Z    [         R                  R                  U :X  a  SSKJn  U" 5       $ g )Nr   )OpenAIVectorStoreFilesConfig)r   rq   rI  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      $ 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_runwayml_image_generation_config)"rq   rI  $litellm.llms.openai.image_generationr  rK  #litellm.llms.azure.image_generationr  r=  &litellm.llms.azure_ai.image_generationr  
XINFERENCE(litellm.llms.xinference.image_generationr	  RECRAFT%litellm.llms.recraft.image_generationr
  AIML"litellm.llms.aiml.image_generationr  r6  &litellm.llms.cometapi.image_generationr  r:  $litellm.llms.gemini.image_generationr  re  :litellm.llms.litellm_proxy.image_generation.transformationr  FAL_AI$litellm.llms.fal_ai.image_generationr  RUNWAYML&litellm.llms.runwayml.image_generationr  )rE  r   r  r  r  r	  r
  r  r  r  r  r  r  s                r   $get_provider_image_generation_config:ProviderConfigManager.get_provider_image_generation_config  se   
 (* 6e<<8+ 5U;;""h. 8>>$$0 :%@@!!X- 7u==(* 4E::""h. 8>>  H, 6e<<''83 566  H, 6e<<""h. 8>>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)rq   rI  )litellm.llms.openai.videos.transformationr$  rK  (litellm.llms.azure.videos.transformationr%  r:  )litellm.llms.gemini.videos.transformationr&  r  ,litellm.llms.vertex_ai.videos.transformationr'  r  +litellm.llms.runwayml.videos.transformationr(  )rE  r   r$  r%  r&  r'  r(  s          r   get_provider_video_config/ProviderConfigManager.get_provider_video_config  s    
 (*S$&&8+Q#%%  H,S$&&##x/ '((""h.W&((r   c                 F    [         R                  U :X  a  SSKJn  U" 5       $ g )Nr   )OpenAIContainerConfig)rq   rI  -litellm.llms.openai.containers.transformationr1  )r   r1  s     r   get_provider_container_config3ProviderConfigManager.get_provider_container_config  s%     (* )**r   c                 F    [         R                  U:X  a  SSKJn  U" 5       $ g )Nr   )GeminiRealtimeConfig)rq   r:  +litellm.llms.gemini.realtime.transformationr6  )rE  r   r6  s      r   get_provider_realtime_config2ProviderConfigManager.get_provider_realtime_config  s!    
 (*X'))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" 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       $ g )	Nr   )get_openai_image_edit_configr6  )AzureImageEditConfig)RecraftImageEditConfig)get_azure_ai_image_edit_config)get_gemini_image_edit_config)LiteLLMProxyImageEditConfig)rq   rI  litellm.llms.openai.image_editr;  rK  ,litellm.llms.azure.image_edit.transformationr<  r  .litellm.llms.recraft.image_edit.transformationr=  r=   litellm.llms.azure_ai.image_editr>  r:  litellm.llms.gemini.image_editr?  re  4litellm.llms.litellm_proxy.image_edit.transformationr@  )rE  r   r;  r<  r=  r>  r?  r@  s           r   get_provider_image_edit_config4ProviderConfigManager.get_provider_image_edit_config#  s    
 (*S/e<<8+ ())!!X- *++""h.W1%88  H,S/66''83 /00r   rK   c                    SSK Jn  U[        R                  R                  :X  a  SSKJn  U" U S9$ [        R                  R                  [        [        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_configr6  N))litellm.llms.vertex_ai.ocr.transformationrJ  r   rq   r=  &litellm.llms.azure_ai.ocr.common_utilsrK  rG  rT   r  r  )rE  r   rJ  rK  PROVIDER_TO_CONFIG_MAPr"  s         r   get_provider_ocr_config-ProviderConfigManager.get_provider_ocr_configH  s     	P w++444V*77   ((*:  **,="
 .11(DA~r   r|   rL   c                    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  [         R"                  U[         R$                  U[         R&                  U[         R(                  U[         R*                  U[         R,                  U[         R.                  U[         R0                  U0n	U	R3                  U S
5      n
U
c  g
U
" 5       $ )z0
Get Search configuration for a given provider.
r   )DataForSEOSearchConfig)ExaAISearchConfig)FirecrawlSearchConfig)GooglePSESearchConfig)ParallelAISearchConfig)PerplexitySearchConfig)SearXNGSearchConfig)TavilySearchConfigN)-litellm.llms.dataforseo.search.transformationrR  )litellm.llms.exa_ai.search.transformationrS  ,litellm.llms.firecrawl.search.transformationrT  -litellm.llms.google_pse.search.transformationrU  .litellm.llms.parallel_ai.search.transformationrV  -litellm.llms.perplexity.search.transformationrW  *litellm.llms.searxng.search.transformationrX  )litellm.llms.tavily.search.transformationrY  r|   rE  TAVILYPARALLEL_AIEXA_AI
GOOGLE_PSE
DATAFORSEO	FIRECRAWLSEARXNGr  )r   rR  rS  rT  rU  rV  rW  rX  rY  rN  r"  s              r   get_provider_search_config0ProviderConfigManager.get_provider_search_configa  s     	YOVW	
 	YRP &&(>""$6'')?""$5&&(=&&(>%%'<##%8	"
 .11(DA~r   rN   c                     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       $ g)z8
Get text-to-speech configuration for a given provider.
r   rM   zspeech/)AzureAVATextToSpeechConfig)RunwayMLTextToSpeechConfigN)3litellm.llms.base_llm.text_to_speech.transformationrN   r   rq   rK  r  0litellm.llms.azure.text_to_speech.transformationrl  r  3litellm.llms.runwayml.text_to_speech.transformationrm  )rE  r   rN   rl  rm  s        r   "get_provider_text_to_speech_config8ProviderConfigManager.get_provider_text_to_speech_config  ss    	
 %%1 	** 233 +  !!**h6 .//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)r   rq   r:  /litellm.llms.gemini.google_genai.transformationrt  r  2litellm.llms.vertex_ai.google_genai.transformationru  4litellm.llms.vertex_ai.vertex_ai_partner_models.mainrv  is_vertex_partner_model)rE  r   rt  ru  rv  s        r   1get_provider_google_genai_generate_content_configGProviderConfigManager.get_provider_google_genai_generate_content_config  sj    
 &&(2 %&&!!++x7 %<<UCC -..r   rP  r  )7r  rx  ry  rz  r{  r`  rq   r   r   r  r   rB  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   r3  r   r8  r   rG  rO  ri  rq  rJ   r{  r}  rP  r   r   r  r  Y  s   __*_	*	_ _B 222 
%	&2 2h ,,, 3-, !%S		,
 
, ,@  
-	. *  
.	/ 6   $} 
(	) . 444 
"4 4 %}%% 
"	#% %N  
'	( 0  
*	+   
/	" (  
#	$  			,		 	  #'883-8 
'	(8 8t 			,	-	 	 FFF 
+	,F FP } 
/	" 8 			%	&	 	  
$	%  """ 
%	&" "H  
/	" 0 #	$	% @  
*	+ 8  
6	7 r   r  service_type)rb  
prometheusc           	      "   [        [        [        [        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@  user_api_key_end_user_idNr~  T)	r   rr  r,   r   r`  r  r   disable_end_user_cost_tracking-enable_end_user_cost_tracking_prometheus_only)r\  r}  	_metadataend_user_ids       r   !get_end_user_id_for_cost_trackingr    s     .t>/RSI 56 	5==34K
 -- |#@@Lr   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)rX  r  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.
NFr  T)r>  r_  rE  ra  z)Error in is_prompt_caching_valid_prompt: )r  r   r#   r   r   r   )rE  r>  r_  rf  token_countr  s         r   is_prompt_caching_valid_promptr    s    *53C3C4
 4
 (#-5E#*.	
 >>> HLMs   ? 5? 
A,	A''A,srt_or_vtt_contentc                     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     @@)r  findallr  r  r   r  )
r  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   ending_pathc                 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
)paramsr  Nr2  )r  r4  r5  r3  rstriplstripr  rC  r_  r   r`  r  )rX  r  r6  base_url	base_pathend_pathr'  base_segmentsend_segmentsfinal_segmentsr  modified_pathr8  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r  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  )r(  r   OPENAI_CHAT_COMPLETION_PARAMS)r  r  r  s      r   get_standard_openai_paramsr  Q  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  )r   r  r   r(  )r  r  r  r  r  r  s         r   !get_non_default_completion_paramsr  Y  sR    99M"%77N'1+B   	s
   AA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  r   r(  )r  r  r  r  r  r  s         r   $get_non_default_transcription_paramsr  c  sB    =03EEN+1<<>U>41Q=T$!$>U Vs   ==r  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   )r(  r  r`  r_  r0  )r  r  r  visible_metadatafiltered_metadatar
  s         r   add_openai_metadatar  k  s      NN$($DA 	$.q#$6 	A	$  ( r!$**,DARx'(!$1HC - -  ""!(s   BBBendpointc                 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   r  )Loggingzgpt-3.5-turborZ  hir=  Fro  1234T)rE  r>  rR  rO  rP  rS  r9  log_raw_request_responserG  zmy-fake-api-key)r  rN  Nraw_request_typed_dict)r   rP  )r  r   r  r  rd  r   r,  r   r`  r  r  r   r{   )	r  r  r  r  r  llm_api_endpointreceived_exceptionr  r  s	            r   return_raw_requestr    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   r  rr  r0  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-  )r   rP  r   r   get_empty_usager    s     r   mock_tool_callsmock_timeoutc                 0    U (       d  U(       d  U(       a  ggr  rP  )r  r  r  s      r   should_run_mock_completionr    s    
 <r   )Fr   r  r  )rG  rG  N)mainN)	rG  NNNFNNFN)NNNNNN)NNNNNNNNNNN)NNNrG  NN)rL  )FFN)%NNNNNFNNNNNNNNNNNrG  NNNNNNNNNNNNNNNNNNN)rG  rG  rG  r   r   )NNNNr  )NNNNN)rb  r  (  r  r  r  binasciir  r0  r  rY  r  io	itertoolsr[  loggingrS  r  r  struct
subprocesssystextwrap	threadingrD  r  dataclassesr   r   	functoolsr   r   	importlibr   r   r	   os.pathr
   r   r   aiohttpdotenvr  r  tiktokenr   httpx._utilsr   
openai.libr   r   *openai.types.chat.completion_create_paramsr   pydanticr   r   
tokenizersr   r   litellm._service_loggerlitellm.litellm_core_utils,litellm.litellm_core_utils.audio_utils.utils/litellm.litellm_core_utils.json_validation_rulelitellm.llmslitellm.llms.geminilitellm._uuidr   #litellm.caching._internal_lru_cacher   litellm.caching.cachingr   litellm.caching.caching_handlerr   r   r  r   r   r   r   r   r   r    r!   r"   r#   r$   r%   %litellm.integrations.custom_guardrailr&   "litellm.integrations.custom_loggerr'   @litellm.integrations.vector_store_integrations.base_vector_storer(   )litellm.litellm_core_utils.cached_importsr)   r*   r+   rk  r,   r-   r.   .litellm.litellm_core_utils.credential_accessorr/   +litellm.litellm_core_utils.default_encodingr1   2litellm.litellm_core_utils.exception_mapping_utilsr2   r3   r4   -litellm.litellm_core_utils.get_litellm_paramsr5   r6   1litellm.litellm_core_utils.get_llm_provider_logicr7   r8   6litellm.litellm_core_utils.get_supported_openai_paramsr9   ,litellm.litellm_core_utils.llm_request_utilsr:   Flitellm.litellm_core_utils.llm_response_utils.convert_dict_to_responser;   r<   r=   r>   r?   :litellm.litellm_core_utils.llm_response_utils.get_api_baser@   Blitellm.litellm_core_utils.llm_response_utils.get_formatted_promptrA   9litellm.litellm_core_utils.llm_response_utils.get_headersrB   ?litellm.litellm_core_utils.llm_response_utils.response_metadatarC   8litellm.litellm_core_utils.prompt_templates.common_utilsrD   *litellm.litellm_core_utils.redact_messagesrE   rF    litellm.litellm_core_utils.rulesrG   ,litellm.litellm_core_utils.streaming_handlerrH   (litellm.litellm_core_utils.token_counterrI   1litellm.llms.base_llm.google_genai.transformationrJ   (litellm.llms.base_llm.ocr.transformationrK   +litellm.llms.base_llm.search.transformationrL   rn  rN   r  rP    litellm.llms.cohere.common_utilsrQ   &litellm.llms.custom_httpx.http_handlerrR   rS   'litellm.llms.mistral.ocr.transformationrT   *litellm.router_utils.get_retry_from_policyrU   rV   litellm.secret_managers.mainrW   litellm.types.llms.anthropicrX   rY   r  rZ   r[   r\   r]   r^   r_   r`   ra   litellm.types.rerankrb   litellm.types.utilsrc   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   rv   rw   rx   ry   rz   r{   r|   r}   r~   r   r   r   r   r   filesjoinpathr  fr	  	json_dataImportErrorAttributeErrorr  	open_textdumpsrK  importlib.metadatatypingr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   OriginalErrorr   /litellm.litellm_core_utils.thread_pool_executorr   r   re  7litellm.llms.base_llm.anthropic_messages.transformationr   8litellm.llms.base_llm.audio_transcription.transformationr    litellm.llms.base_llm.base_utilsr   r   ,litellm.llms.base_llm.batches.transformationr   )litellm.llms.base_llm.chat.transformationr   /litellm.llms.base_llm.completion.transformationr   /litellm.llms.base_llm.containers.transformationr   .litellm.llms.base_llm.embedding.transformationr   *litellm.llms.base_llm.files.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   .litellm.llms.base_llm.responses.transformationr   1litellm.llms.base_llm.vector_store.transformationr   7litellm.llms.base_llm.vector_store_files.transformationr   +litellm.llms.base_llm.videos.transformationr   _loggingr   r   caching.cachingr   r   r   r   r   r   r  r   r   r   r   r   r   r   r   r   r   r   r   r   r   proxy._typesr   r   types.llms.openair   r   r   types.routerr   r   sentry_sdk_instancecapture_exceptionrj  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  rm  r   r   last_fetched_atlast_fetched_at_keysr|  r   r   r  r   r   r  r#  rr  r-  r3  r  r  r   r  r  r  r  r  r  r  r  r)  r  r  r:  r8  r>  r?  rR  rX  r7  r]  rk  rm  rs  ru  rw  r~  r  r  r  r  rp  r  r  r  r  r  r  r  r  r  r  r  r  r  rd  r  r  r  r#  rX  r[  r`  rb  rh  rj  r>  r  r  r  r  r   r  r  r  r*  r3  r=  rC  rF  rI  rS  rW  r^  rm  r  r  r  r  r  r  r  r  r  typing_extensionsr  r  r  r  r  r  r  rz  r  r
  r0  r9  rI  rO  r\  r  r  r  r  r  r  Headersr  r  r  r  r  r  r  r  r  r  r!  r  r  r=  litellm.caching.in_memory_cacher>  r@  ry  rv  r{  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rP  r   r   <module>rH	     s\            	    	  	        ( &    * *       0 * E       ! 3 6    A - U    B ;
 
 
 N @ 
 T  T 3 L L C H V > < P D 4	 	 	 0 )! ! ! ! ! ! ! ! !F
!	@	A	J	J"

d3d!
"%&IIaL	
" **Y'    " 0 E W K @ T T O O N N F F O O   S R L L H H Q Q S S  H G 6 6          " B A  
 ) (%   
	  
  %'xS	" '/1 HT#s(^, 1(*Xd38n% * 2 3: /0(	E==")*>"?=	=@ 	  	 4S> d3i 4S> d3i &	$t 	$U3,+F%G HI	mm`	
%

 #'
DcN'0
8C=$sCx.().cN'0eE3-./<d <c3h C 0"%2:92Ec],g d^gTwx "TN 
@cNY^$ 
@ JN
1
1"*+E"F
1 -.+C +,C + /+?C ?,C ? :Q1R . ( PT T#Y x~  CGEE2:3-E6E3 E  GK,0#,159@D49)-$uT+B%BCD$ 5d3i(
)$ tn	$
 $D>$ D012$ <=$ $,D>$ "#$ 	$N	 	 	C hsm PT *s # RV * (3- SW *S x} QU D 6:((%-c](	(X 6:

%-c]
	
 6:%-c]	. (3- SW %-c]9<gdm ,S ,x} ,3 ,SW ,^ (3- SW c  QU  6:%-c]	 6:%-c]	0 6:%-c]	.3 Xc] d $c  QU  6:""%-c]"d3i"L 6:

%-c]
	
d d t & TuS$Y/ TnT )-GOPT~	& # %)!%JN"&ZZZ smZ SM	Z
 c]Z #Z &d73D+E&FGZ $ZzXc] s (  !%))--1;?"&IC=I}I c]I c]	I
 3-I C=I 3-I "#I %TNI 78I $I^ %) $"&26dd 3-d c]	d
 d $d %T#Y/dN	.*B7?S	7J	"d t 0F" F"^ #().,0CCC C %T#Y/	C
 C  C #'C j)C 
CLt  ``-1`HK`	`N 

	
		
151515;?'+QE EB $DI.CEJ t,-.KEL -.MEN !!78OEP  }QEZ .2111 1 9	1
 %TN1 
1h/3LP$ 4  (#C=(	#( 
#( $,C=	(
 c](Vd  *&&.<&c]&6, ,8DV;W ,^. T . T ":=	"*23-c]4T c C C )eM;N,N&O )TW )X/c /HSM /d!:
# :
(3- :
z, ,	73 	73# 3# 3 S x}  &# # #d # SW < ( 'i **%-c]*,*ZS Xc] .XX%-c]XX%-c]'((	B			 6:Y
Y
%-c]Y
Y
xV# VHSM VY VrGs G4X Xv  "(
(
(
 (
 	(

 (
 (
VS T-5H  1:  !"!%	HVC=HVc]HV smHV #	HV
 
HVV0$H3  .s < 15u}}-J 15	""" u}}-" 	"
 5#:":  " ?&?&?& ?& 	?&
 ?&DQ% Q%j >B-5c]< 	o/BBC }	<T "D">49
 TY6#+C=6LP6|  *#(j!C=j! j! !	j!Z : 9>C= >CD $% *.!#	#Y< 04% ^, 
#Y	2 /3)-/3!"M%d^M!#M ^,M c]	M
 smM 
#YM`1h# #> B( 
/ D 0  &c c 	4(8#9 	d 	 5L0M *   
U9d?3 
 
(4 It I&$ HT$Z<P C+; C&T:J5K &R!%c	*+!eD#I!Hf fV >O9: c]>
sm
59#Y
  6:)-	t,-. D012 "#	
 
<1 1% 18 #CC #Cc #Cc #CLt  d t  $  #(738+<"=  #(4PSUXPX>BZ  #F*
 *
D *
=P *
Zc tDz " C=c] 3- 
	Ax
" 
" 	^Y/ !			/1K
	
IIaL	
 
 
 
!s]   '2AC: AC(-AC: C(
AC7C2AC: C7AC: C:AEDAD7D+AED7
AE	EAEEAE