
    mh                    V$   U d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlmZmZ d dlmZmZ d dlmZ d dlmZ d dlmZ d dl m!Z!m"Z"m#Z# d dl$Z$d dl%Z%d dl&Z&d dl'Z'd dl(Z(d dl&m)Z) d d	l*m+Z+ d d
l,m-Z-m.Z. d dl/m0Z0 d dl1m2Z2 d dl(m3Z3 d dl4m5Z5 d dl6Z6d dl7Z6d dl8Z6d dl9Z6d dl:Z6d dl;Z6d dl<Z6d dl=m>Z> d dl?m@Z@ d dlAmBZB d dlCmDZDmEZE d dlFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZR d dlSmTZT d dlUmVZV d dlWmXZX d dlYmZZZm[Z[m\Z\ d dl]m^Z^m_Z_m`Z` d dlambZb d dlcmdZd d dlemfZfmgZgmhZh d dlimjZjmkZk d dllmmZmmnZn d dlompZp d dlqmrZr d d lsmtZtmuZumvZvmwZwmxZx d d!lymzZz d d"l{m|Z| d d#l}m~Z~ d d$lmZ d d%lmZ d d&lmZmZ d d'lmZ d d(lmZ d d)lmZ d d*lmZ d d+lmZ d d,lmZmZ d d-lmZmZ d d.lmZ d d/lmZmZ d d0lmZmZmZmZmZmZmZmZ d d1lmZ d d2lmZ d d3lmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ 	  ej        d4                              d5                              d6d7          5 Z e
j        eʦ          Zddd           n# 1 swxY w Y   nG# eeef$ r<  ej        d4d5          5 Z e
j        eʦ          Zddd           n# 1 swxY w Y   Y nw xY w e
j        e̦          Zd dlZd d8lmZmZmZmZmZmZmZmZmZmZmZmZmZ d d9l'mZ d d:lmZ d d;lmZ d d<lmZ d d=lmZ d d>lmZ d d?lmZmZ d d@lmZ d dAlmZ d dBlmZ d dClmZ d dDlmZ d dElmZ d dFlmZ d dGlmZ d dHl mZ d dIlmZ d dJlmZ d dKlmZ d dLlm	Z	 dMdNl
mZmZ dMdOlmZmZmZmZmZmZ dMdPlmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z" dMdQl#m$Z$m%Z% dMdRl&m'Z'm(Z(m)Z) dMdSl*m+Z+ dZ,dZ-da.dZ/dZ0dZ1dZ2dZ3dZ4dZ5dZ6dZ7dZ8dZ9dZ:dZ;dZ<dZ=dZ>dZ?dZ@dZAdZBdZCg aDeeڐeE                  eFdT<   daGi ZHeeؐeEeEf                  eFdU<   i ZIeeؐeEeEf                  eFdV<   dZJdZK	 	 dzdYeLdZed[         fd\ZMd] ZNd^eEd_ed`         dadfdbZOdceVdaeLfddZPdceVdaeLfdeZQdfeؐeEef         daeڐeE         fdgZRdfeؐeEef         daeڐeE         fdhZSdfeTfdiZUdjeeeߐeEeeVf                           daefdkZVdleEfdmZWdnedoeLfdpZXdfeؐeEef         dqeYdaeeܐeZ         eؐeEef         f         fdrZ[dfeؐeEef         dqeYdaeeߐe\eZe&j         f                  fdsZ]daeLfdtZ^dfeؐeEef         dueEfdvZ_dweTdxeduee         daee         fdyZ`dzeܐeT         fd{Zad| Zb	 d{dfeܐeT         d}eLdaeLfd~ZcdfeؐeEef         dueeeEf         daeLfdZd	 d|deEdee         fdZe eeI          deEdaefd            ZfdeEdaefdZgdeEdaee         fdZhd}deܐeT         fdZidg dfdeڐeZ         deܐeT         fdZj	 d~deEdeܐeE         fdZkdeEfdZl	 	 	 	 	 	 	 	 	 ddeeߐeTef                  deeߐeEeڐeE         f                  dee         deܐeL         deee                  dee         deܐeL         deܐeZ         daeZfdZdeEdaeLfdZmdeEdeܐeE         daeLfdZnd|deEdeܐeE         daeLfdZod|deEdeܐeE         daeLfdZpdeEdeܐeE         daeLfdZq	 d|deEdeܐeE         daeLfdZr	 d|deEdeܐeE         daeLfdZs	 d|deEdeܐeE         daeLfdZtd|deEdeܐeE         daeLfdZudeEdeܐeE         deEdaeed                  fdZvdeEdeܐeE         deEdaeLfdZwd|deEdeܐeE         daeLfdZxd|deEdeܐeE         daeLfdZy	 d|deEdeܐeE         daeLfdZz	 d|deEdeܐeE         daeLfdZ{	 d|deEdeܐeE         daeLfdZ|d|deEdeܐeE         daeLfdZ}d|deEdeܐeE         daeLfdZ~	 d|deEdeܐeE         daeeڐeE                  fdZ	 d|deEdeܐeE         daeLfdZdedeTdaeTfdZd ZdeߐeEeTf         fdZdaeLfdZdeTdeTdeܐe         daeTfdZ	 	 	 	 	 	 ddeEdeEdeܐeE         deܐeE         deܐeE         deܐeZ         deeed                           deܐeL         fdZdeܐeE         daeEfdĄZ	 	 	 	 	 	 	 	 	 	 	 ddeܐeE         deܐeZ         deܐeE         deܐeE         deܐeE         deܐeE         deܐeE         deܐeE         deܐe         dee         deܐeL         fdʄZ	 	 	 	 	 	 ddeEdeܐeE         deܐeE         deܐeZ         deܐeL         deeڐeE                  fd̈́Zd΄ Zdτ ZddфZdҐeTdeeڐeE                  daeTfdԄZ G dՄ d֦          Z	 	 	 ddeTdאeTdeEdeeڐeE                  deEdؐeLdِeLdee         daeTfdڄZdېeTdaeTfd܄ZdeTdҐeTdeEdaeTfd݄Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddeEdeeڐeE                  deee                  dee         dee         deܐeE         fdZ	 d|dzeTdeTdeEdeڐeE         deܐe         daeTfdZdzeTdҐeTdސefdZdeTdaeTfdZdeܐeZ         deܐeZ         deܐeZ         deܐeZ         daeܐeZ         f
dZdee         daefdZdeEde+daeܐeE         fdZde+daeܐe$         fdZde+daeLfdZde+daeLfdZde+deEdaeLfdZde+deܐeE         daeܐeE         fdZdfeTdaeEfdZdeEdaeZfdZdeeef         daeEfdZdeEdeܐeE         fdZd ZdeEdaeܐeZ         fdZdaeEfd ZdaeEfdZdeEdaeEfdZdeEdeܐeE         daeEfdZdeEdaeTfdZdeTdeܐeE         daeLfdZd dlmZ  G d	 d
e          ZdeEdeܐeE         daefdZdeEdaeܐeZ         fdZdeEdeܐeE         daefdZdeEdeܐeE         daee         fdZdedaeLfdZ	 d|deEdeܐeE         daefdZd|deEdeܐeE         daefdZdeEfdZd Zd Z	 	 	 	 	 ddeEdeEdeEdeEdeZdeZfdZdeEdaee         fdZd Z	 	 	 	 ddeܐeE         deܐeE         deܐeE         deܐeE         daeTf
dZd  Zd! Zd" ZdeEdeEfd#Zd$eZfd%Z	 d|d&ee&j                 fd'Z	 	 dd(eZd)eZd&ee&j                 d*eZdaeߐe\eZf         f
d+Zi ddi fdeEd,eTd-eEd.eEd/eTf
d0Z G d1 d2          Z	 d|deܐeZ         fd3Z	 d|deܐeZ         fd4ZdaeTfd5ZȐd6 Zɐd7 Zʐd8 Zːd9 Z̐d: Z	 d{deܐeE         d;eLfd<ZdeJdWdfdeܐeE         d=e\d>eLfd?Zd d@lАmѐZ  G dA dBeѦ          Z eҦ            Z	 d|deܐeE         daeڐeE         fdCZ	 d|dedeEdeܐe+         daeڐeE         fdDZ	 	 	 	 	 ddEeܐeL         deܐeE         deܐe+         deܐeE         deܐeE         daeڐeE         fdFZ֐dG ZאdH Zؐd|dIZ G dJ dK          Z G dL dM          Z G dN dOe٦          ZܐdPedaeLfdQZݐdReEdaeLfdSZސdReEdaeEfdTZdee         daeLfdUZdeEdaee         fdVZd dWlmZmZmZmZmZmZ dPee2eTf         daeTfdXZdefdYZdefdZZdee         daeeڐeT                  fd[ZdPefd\Zdee         fd]ZdeeߐeTeEf                  daeeߐeTeEf                  fd^Z G d_ d`          Z	 ddeTdbeېdc         daeܐeE         fddZdeܐeE         deeڐeE         fdfZ	 	 ddeEdeee                  deee                  deܐeE         daeLf
dgZdheEdaeܐe\         fdiZd dl&Z&deEdjeEdaeEfdkZdleTdaeTfdmZdfeTdaeTfdnZdfeTdaeTfdoZdpeTdaeTfdqZdredfeTdaefdsZdee         daee         fdtZdaefduZdvee         dwee         dxee         daeLfdyZdS (      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BedrockModelInfo)AsyncHTTPHandlerHTTPHandler)!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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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)BaseEmbeddingConfig)BaseFilesConfig)BaseImageEditConfig)BaseImageGenerationConfig)BaseImageVariationConfig)BasePassthroughConfig)BaseRealtimeConfig)BaseRerankConfig)BaseResponsesAPIConfig)BaseVectorStoreConfig   )_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callback_listadditional_detailslocal_cacheFDEBUGlogger_only	log_level)r   INFOERRORc                    	 |dk    rt          j        |            n5|dk    rt          j        |            n|dk    rt          j        |            t          j        du r|du rt          |            d S d S d S # t          $ r Y d S w xY w)Nr   r   r   TF)r   debuginfoerrorlitellmset_verboseprint	Exception)print_statementr   r   s      8/usr/local/lib/python3.11/site-packages/litellm/utils.pyprint_verboser   e  s    

 1111&  0000'!! 111$&&;%+?+?/""""" '&+?+?   s   A1A9 9
BBc                     t           j        D ]t} | d         t           j        vr%t           j                            | d                    | d         t           j        vr%t           j                            | d                    udS )z2
    Add custom_llm provider to provider list
    providerN)r   custom_provider_mapprovider_listappend_custom_providers)
custom_llms    r   custom_llm_setupr   y  s     1 E E
j!)>>>!((J)?@@@j!)BBB%,,Z
-CDDDE E    callbacklogging_event)successfailurereturnc                    ddl m} ddlm} | t           j        vr&t          j        d|  dt           j                    dS  |t          ||           dd          }|rd|dk    rt          |          d	u rt           j	        
                    |           t           j	                            |           | t           j        v rt           j                            |            | t           j        v r!t           j                            |            dS dS |d
k    rt          |          d	u rt           j	                            |           t           j	                            |           | t           j        v rt           j                            |            | t           j        v r't           j                            |            dS dS dS dS dS )z<
    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CCCCC      wHHH V  V  Vbi  cT  V  V	
 	
 	
 	998(CC!  N  &Y&&@PP  ,II   ,OO   7333(//   7:::/66     ;:
 Y&&@PP  ,II   ,OO   7333(//   7:::/66    I& &* '&  ;:r   r   c                 h     t           fdt          j        t          j        z   D                       S )a  
    Returns True if an instance of the custom logger exists in litellm.success_callback or litellm._async_success_callback

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

    Prevents double adding a custom logger callback to the litellm callbacks
    c              3   R   K   | ]!}t          |t                              V  "d S N
isinstancetype.0cbr   s     r   	<genexpr>zC_custom_logger_class_exists_in_success_callbacks.<locals>.<genexpr>  I         	2tN++,,     r   )anyr   r   r   r   s   `r   r   r     H         *W-LL     r   c                 h     t           fdt          j        t          j        z   D                       S )a  
    Returns True if an instance of the custom logger exists in litellm.failure_callback or litellm._async_failure_callback

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

    Prevents double adding a custom logger callback to the litellm callbacks
    c              3   R   K   | ]!}t          |t                              V  "d S r   r   r   s     r   r   zC_custom_logger_class_exists_in_failure_callbacks.<locals>.<genexpr>  r  r   )r  r   r   r   r  s   `r   r   r     r  r   kwargsc                     |                      d          pi }|                     d          pi }|                     d          pg }|S )z4
    Get the request guardrails from the kwargs
    metadatarequester_metadata
guardrailsget)r  r	  r
  applied_guardrailss       r   get_request_guardrailsr    sQ     zz*%%+H!&:;;Ar+//==Cr   c                    t          |           }g }t          j        D ]g}|ct          |t                    rN|j        G|j        du r|                    |j                   D|j        |v r|                    |j                   h|S )z\
    - Add 'default_on' guardrails to the list
    - Add request guardrails to the list
    NT)r  r   	callbacksr   r'   guardrail_name
default_onr   )r  request_guardrailsr  r   s       r   get_applied_guardrailsr    s     077% G GJx$I$I&2&$..&--h.EFFFF,0BBB&--h.EFFFr   c                     |                      d          }|rCt          j        r9t          j        |          }|                                D ]\  }}|| vr|| |<   dS dS dS )zI
    Updates kwargs with the credentials if credential_name in kwarg
    litellm_credential_nameN)r  r   credential_listr0   get_credential_valuesitems)r  credential_namecredential_accessorkeyvalues        r   load_credentials_from_listr    s     jj!:;;O $72 $0FWW-3355 	$ 	$JC&  #s	$ $ $ $	$ 	$r   dynamic_callbacksc                 p    t           j                                        }| r|                    |            |S r   )r   r  copyextend)r   returned_callbackss     r   get_dynamic_callbacksr%    s<     !*//11 5!!"3444r   original_functionc                 <   t           j        du rt          j        d           	 t	                       t          |          }d|v r|d         nd }|                    dd           }t          |          }t          |          dk    rh|D ]Ht          t                    rOt           j        j                            d d           %t          fdt           j        D                       rgt           j        vrt           j                                       t           j        vrt           j                                       t           j        vrt           j                                       t           j        vrt           j                                       t           j        vrt           j                                       Jt5          d	t           j                    t          t           j                  dk    s:t          t           j                  dk    st          t           j                  dk    rvt          t6                    dk    r^t9          t;          t           j        t           j        z   t           j        z                       a t=                      t6          |
           t          t           j                  dk    rg }	t?          t           j                  D ]Z\  }
tA                      !                              r4t           j"                                       |	                    |
           [tG          |	          D ]!}
t           j                            |
           "t          t           j                  dk    rg }	t?          t           j                  D ]\  }
tA                      !                              r5t           j                                       |	                    |
           [dk    sdk    r5t           j                                       |	                    |
           t           j$        v r%t          t                    rtK          d           tG          |	          D ]!}
t           j                            |
           "t          t           j                  dk    rg }	t?          t           j                  D ]\  }
tA                      !                              r5t           j                                       |	                    |
           [t           j$        v r%t          t                    rtK          d           tG          |	          D ]!}
t           j                            |
           "d }d }d }d }|&                    dd           t          |d         t8                    rg }	t?          |d                   D ]w\  }
tA                      !                              sdk    sdk    rE|+t          |t8                    r|                               ng}|	                    |
           xtG          |	          D ]}
|d                             |
           |                    d          }|&                    dd           0t          |d         t8                    r|                    d          }tN          r	 ddl(m)}  ||          }n# tT          $ r |}Y nw xY wt           j+        rB|                    dd            |                    dd            |                    dd            tO          dd| d           d|v r|d         a,t          |          dk    r|d         n|&                    dd           }| }|tZ          j.        j/        k    s+|tZ          j0        j/        k    s|tZ          j1        j/        k    rd }t          |          dk    r	|d         }n|&                    dd           r|d         }te          j3                    rt          |t8                    rt          |          dk    rt          |d         th                    rd|d         v r~tk                      }|D ]D}|&                    dd          }|*t          |t                    r|6                    |           E|7                    |8                                |           n|tZ          j9        j/        k    s|tZ          j:        j/        k    r3t          |          dk    r|d         n|&                    dd           }nP|tZ          j;        j/        k    s|tZ          j<        j/        k    r%t          |          dk    r|d         n|d         }n|tZ          j=        j/        k    s|tZ          j>        j/        k    r%t          |          dk    r|d         n|d         }n|tZ          j?        j/        k    s|tZ          j@        j/        k    r%t          |          dk    r|d         n|d         }nc|tZ          jA        j/        k    s|tZ          jB        j/        k    r|&                    d           }n"|tZ          jC        j/        k    s|tZ          jD        j/        k    rgt          |          dk    r|d         n|d!         }t           j        jE        jF        G                    |"          }d#|v r||d#         d$<   nd$|i|d#<   |}n|tZ          jH        j/        k    s|tZ          jI        j/        k    r|&                    dd%          }nP|tZ          jJ        j/        k    s|tZ          jK        j/        k    r$t          |          dk    r|d         n|d         }nd&}d'}t          ||(          rd} t                      ||||d)         |&                    d*          |pd||||||||+          }d,di}d#|v r|d#         |d#<   |N                    |di ||&                    d-d           .           ||fS # tT          $ r}t          jO        d/           |d }~ww xY w)0NTze`litellm.set_verbose` is deprecated. Please set `os.environ['LITELLM_LOG'] = 'DEBUG'` for debug logs.idr  )r   r   r   c              3   R   K   | ]!}t          |t                              V  "d S r   r   )r   r   r   s     r   r   z!function_setup.<locals>.<genexpr>8  sG       / / #2tH~~66/ / / / / /r   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 r0  r6  queryfile)file_objr	  file_checksumspeechzdefault-message-valueFr  	call_typelitellm_call_idlitellm_trace_id)r6  r/  streamrA  rB  r*  r@  
start_timedynamic_success_callbacksdynamic_failure_callbacksdynamic_async_success_callbacksdynamic_async_failure_callbacksr  r  api_basestream_options)r6  useroptional_paramslitellm_paramsrJ  zKlitellm.utils.py::function_setup() - [Non-Blocking] Error in function_setup)Pr   r   r   warningr   r  popr%  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_fnr`   
completionr  acompletionanthropic_messagesrH   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aspeechr>  
aresponses	responses_is_streaming_requestr+   update_environment_variables	exception)r&  	rules_objrD  argsr  r  r*  r   all_callbacksremoved_async_itemsindexrE  rG  rF  rH  r.  details_to_logr6  r@  r/  buffermr7  	_file_objr=  rC  logging_objrM  er   s                                @r   function_setupr    sY    d""s	
 	
 	
e 	 4F;; 6:V^^VD\\ JJ{D)) 	 .@QRRR}!!) b bh,, !&9Inn t  o    H  '3 / / / /")"A/ / / , ,' !7#999*11(;;;7#;;;4QQRZ[[[7#;;;4QQRZ[[[7#BBB4WWX`aaa7#BBB4WWX`aaal7Kjll  
 &''!++7+,,q007+,,q00
 
  !*././  M  mUUUUw%&&**"$#,W-C#D#D 6 6x(**<<XFF 6188BBB'..u555 ""566 2 2&**51111w'((1,,"$#,W-E#F#F W Wx(**<<XFF W4WW    (..u5555++x;/F/F 4WW    (..u5555 QQQ"8S11 R B(IVVV ""566 4 4(,,U3333w'((1,,"$#,W-E#F#F 
W 
Wx(**<<XFF 	W4WW    (..u5555 QQQ"8S11 R B(IVVV ""566 4 4(,,U3333  	"
  	(
  	"
  	( ::($//;
%&A
 A
; #%#,V4F-G#H#H 6 6x)++==hGG6:--4''6Bz7H HB 8>>xHHHH;C*7'..u555!"566 6 6)*..u5555(.

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

3E(F(F% 	(RRRRRR!/!7!7 ( ( (!'( / 3"":t444""7D111""8T222+999   
 &  #K0Nt99q==Qfjj$.G.G%	-333I1777I8>>>H4yy1}}7J-- .!*- (**x.. MMA%%x{D11 &!,, "! . .AeeIr22G*z'3/G/G*W---(( //++ )   
 ,222I0666"%d))a--tAwwVZZ5N5NHH3999I7==="%d))a--tAwwVH5EHH-333I1777"%d))a--tAwwVG_HH3999I5;;;"%d))a--tAwwVH5EHH)///9	@Q@W3W3Wzz'**HH1777I3999.1$ii!mm477I*6<PP& Q   
 V##6Cz"?33&5}%Ez"$HH*000IAQAW4W4Wzz'844HH-333I/555"%d))a--tAwwVG_HH.H 
 
 
 	 F1/11"#45#ZZ(:;;#)r!&?&?,K,K1
 
 
$ +5b)9)/
);N:&00)!::&6== 	1 	
 	
 	
 F""    Y	
 	
 	
 	s=   ['q6 \ q6 \.+q6 -\..Uq6 6
r rrr  is_completion_with_fallbacksc                    K   |du rct          d| j                    ddlm} |                    |                     |||                     |                     |||           d S d S )NFz>Async Wrapper: Completed Call, calling async_success_handler: r   )GLOBAL_LOGGING_WORKERresultrD  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  rD  r  r  r  s         r   _client_async_logging_helperr  G  s       	%--p[Mnpp	
 	
 	
 	TSSSSS<<'==*x >   	= 	
 	
 	
 	AA! 	B 	
 	
 	
 	
 	
' 	.-r   r{  c                     |                      dd          }|t          j        }|                      dd          r9t          ||                      d                    }t	                      | d<   ||}|| fS )zm
    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  rP   rQ   )r  r{  r  retry_policy_num_retriess       r   _get_wrapper_num_retriesr  i  s     **]D11K)zz.$'' 3#DN33$
 $
 $
  "4!5!5~#/2Kr   c                     t          t          t          t          t          t
          j        f                  |                     dd                    }|S )zM
    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$4O4O G Nr   c                 D    t                                          |           S r   )r*   rX  r  s    r   check_coroutiner    s     ""44U;;;r   r@  c                    K   	 t          |          }n# t          $ r d}Y nw xY w|                                 }t          j        D ]7}t          |t                    r |                    ||           d{V }||}8|S )z
    Allow modifying the request just before it's sent to the deployment.

    Use this instead of 'async_pre_call_hook' when you need to modify the request AFTER a deployment is selected, but BEFORE the request is sent.
    N)r`   
ValueErrorr"  r   r  r   r(   async_pre_call_deployment_hook)r  r@  typed_call_typemodified_kwargsr   r  s         r   r  r    s      #I..    kkmmO% ) )h-- 	)#BB       F !"(    ##request_dataresponsec                   K   	 t          |          }n# t          $ r d}Y nw xY wt          j        D ]M}t	          |t
                    r6|                    | t          t          |          |           d{V }||c S N|S )z`
    Allow modifying / reviewing the response just after it's received from the deployment.
    N)	r`   r  r   r  r   r(   'async_post_call_success_deployment_hookr   rn   )r  r  r@  r  r   r  s         r   r  r    s      #I..    %  h-- 	#KKd#3X>>       F !Or  rL  c                    	 | d S |j         }|t          j        j        k    s|t          j        j        k    rt          |           }|du rd S t          | t                    rt          | j	                  dk    r| j	        d         j
        j        }||                    ||           t          j        du r	 |d|v r|d         	 d }t          |d         t                    r%|d                             d          	 	|d         }n;t"          j                            |d                   rt)          |d                   }|2t          j        j                            |d         d         |           n# t0          $ r Y nw xY w|d|v rt          |d         t                    rd	|d         v r|d         d	         d
k    rd|d         v rt          |d         d         t                    rbd|d         v rZ|d         d         du rLt          j        j                            |d         d         |           d S d S d S d S d S d S d S d S d S d S d S d S d S d S # t2          $ r}	|	d }	~	ww xY w)NTr   r9  response_formatjson_schemar  schema)r  r  r   json_objectresponse_schemaenforce_validation)__name__r`   r_  r  r`  r  r   rr   rP  choicesr3  r7  post_call_rulesr   enable_json_schema_validationrc  r  r   _completionsis_basemodel_typer   rR  json_validation_rulevalidate_schema	TypeErrorr   )
original_responser6  rL  r&  r|  r@  is_coroutinemodel_responsejson_response_formatr  s
             r   post_call_processingr    s   d$D)2IY1777	 5 ;;;./@AA4''D ##4mDDT" 1 9::Q>>8I8Q9!' ' *5%55&4E 6     'DLL'!)(7(C,=,P,P,;<M,N/3-4 PT(<,60?@Q0R04-. -.).
 1@0A1..1c-.@.@3718
 DS0AD.,@,@ .6-B-T-T,;<M,N.* .* 	). 1NDS8IE612 12 12 -A ,@+K,3,F,[,k,k7K4A822:8< :H	 -l -. -. -. (1 !) !) !)$(D!) !0 ;$5$H$H$.$34E$F%" %" %I %+o>O.P$P$P$34E$Fv$N#0%1 %1$5#23D#E%F %F$.$34E$F(9%& %)	%" %"%F %9#23D#E%F %F$34E$F$8%" $(%( %( !( : O _ _+:;L+M(9,& .<	 !` !" !" !" !" !"k <;T" T">>
 65` !< ;$H$H$H$H %Q$P%1 %1%F %F %F %F%F %F%( %(    sJ   I AI A.I <C E= <I =
F
I 	F

B7I 
I.'I))I.c                      t                      t                      fd            }t                      fd            }t                                                     }|r|S |S )Nc                     j         }t          |          rt          j        X|                    di                               dd           }|,t          j        t          |          k    rt          d           | i |}t          ||          rfd|v r`|d         du rVg }t          |          D ]\  }}|	                    |           t          j
        ||                    dd                     S |S |S t          | |           t          j                                        }d }|                    d	d           }	d
|vr#t          t          j                              |d
<   t          |           dk    r| d         n|                    dd           }
	 |	t#          j         |g| R i |\  }	}t%          |           |	|d	<   t'          ||          }||	_        |                                D ]H\  }}|At-          |t                    r,|                    d          rt          j        |          ||<   It          j        r?t          j        t          j        k    r%t7          t          j        t          j                  t          j        X|                    di                               dd           }|,t          j        t          |          k    rt          d          t9          d|                    dd           dt          j         d|                    di                               dd                      |                    dd           t          j        |                    dd          du r(|                    di                               dd          dur|                    dd          dur|                    dd          dur|                    dd          dur|                    dd          dur|                    dd          dur|                    dd          durl|                    dd          durTt=          j        d           |                     |
pd|	||||            }|j!        t=          j        d!           |j!        S |                    d"d           $|
!t          j"        du r|tF          j$        j%        k    s*|tF          j&        j%        k    s|tF          j'        j%        k    r	 |
}|                    d#d           d$|                    d#           }d }t          |           d%k    r	| d%         }n|                    dd           r|d         }|                    d"          }tQ          |
|||d d &          }||d"<   n6# t          $ r)}t9          d't          |                      Y d }~nd }~ww xY w | i |}t          j                                        }t          ||          r{d|v r`|d         du rVg }t          |          D ]\  }}|	                    |           t          j
        ||                    dd                     S tS          ||	|
|||(           |S d|v r|d         du r|S d|v r|d         du r|S d|v r|d         du r|S d|v r|d         du r|S d)|v r|d)         du r|S tU          j+        |          r|S tY          ||
pd |*           |-                    || |+           t=          j.        d,           t_          j0        |	j1        |||           tS          ||	|
|||(           |S # t          $ r}j         }|tF          j&        j%        k    ru|                    d-d           pt          j2        pd }|                    d.d           r5tg          ||                    d.          /          }ti                      |d.<   d t          _2        |                    d0i           }d1|                    di           v }|rl|sjt-          |tj          j6                  s4t-          |tj          j7                  st-          |tj          j8                  r||d-<   t          j9        | i |cY d }~S n^t-          |t          j:        j;                  r?|r=|
|v r9|s7t          |           dk    r||
         | d<   n||
         |d<    | i |cY d }~S ty          j=                    }t          j                                        }|	r|	>                    ||||           |d }~ww xY w)2Nr	  previous_modelszMax retries per request hit!r?  complete_responseTr/  r/  litellm_logging_objrA  r   r6  r&  request_kwargsrD  zos.environ/current_cost
max_budgetzSYNC kwargs[caching]: cachingF; litellm.cache: z#; kwargs.get('cache')['no-cache']: cachezno-cacherh  rm  r`  aimg_generationrq  rp  
_arealtimezINSIDE CHECKING SYNC CACHEr8  r6  r&  r  rD  r@  r  r}  z
Cache hit!
max_tokenshf_model_namehuggingface/r   r6  
base_modelr/  user_max_tokens
buffer_numbuffer_perc&Error while checking max token limit: r  r  r6  r  rD  r  rv  r  r6  rL  r&  r|  )r  r}  r  z0Wrapper: Completed Call, calling success_handlerr  r  r  context_window_fallback_dictmodel_group)?r  _is_async_requestr   num_retries_per_requestr  rP  r   ry  rW  r   stream_chunk_builderprint_args_passed_to_litellmdatetimenowrQ  r   uuid4r  r  r   _llm_caching_handlerr  r   
startswithrR   r  _current_costr   r   r  r   r   _sync_get_cachecached_resultmodify_paramsr`   r`  r  r_  ra  rJ   r   asyncior   r  sync_set_cacher   r   submitsuccess_handlerr  rP   rQ   openair   r   r   completion_with_retries
exceptionsr   	traceback
format_excfailure_handler)r}  r  r@  r  r  chunksidxchunkrD  r  r6  r  kvcaching_handler_responser  r/  r  modified_max_tokensr  r  r  r  _is_litellm_router_calltraceback_exceptionr&  r|  s                            r   wrapperzclient.<locals>.wrapper2  s    &.	V$$ 	.:"(**Z"<"<"@"@%t# # #.6#o:N:NNN'(FGGG '&777F$#   "
 (61123t;;F&/&7&7 - -
Ue,,,,"7J)E)E    "MM 	%%6fEEE&**,,
6<jj!47
 7

 F**(+DJLL(9(9F$%*-d))a--tAwwVZZQU=V=Vp	"&4%.	:'HL' ' 'PV' '#V 'v...,7F()6G"3%%7 7 7 
 0DK,  6 61=Z3%7%7=ALL<W<W= ' 21 5 5F1I! (7+===-%,%:#*#5    .:"(**Z"<"<"@"@%t# # #.6#o:N:NNN'(FGGG  {Iu)E)E  {  {X_Xe  {  {  KQ  KU  KU  V]  _a  Kb  Kb  Kf  Kf  gq  sx  Ky  Ky  {  {   #JJy$77? ' 9!::i774??

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

<..:%)  !6!<<< I$8$>>> I$@$FFFU!&Jzz/488D%QFJJ4O4O%Q%Q
#H4yy1}}#'7J55 6#)*#5&,jj&>&>O*A##-!)(7#'$(+ + +' ,?F<((  U U U!"S3q66"S"STTTTTTTTU '&777F(,,..H$#   $
 (61123t;;F&/&7&7 - -
Ue,,,,"7J)E)E   
 -%$/#%#-!)    "M&((VM-Bd-J-J''F<,@D,H,H"f,,8I1Jd1R1R!V++7G0HD0P0Pf$$	):d)B)B$V,,  !"(mt &"3#    !// 0     RSSSO+	   %'%!    M 5	 5	 5	)2II0666JJ}d33Rw7JRd  ::nd33 "C"#%+ZZ%?%?# # #K
 +,, >*  # 06zz2B0 0, +86::< < +'  >(?> #1fo66P%a88P &a)BCCP
 1<}-&>OOOOOOOOOP q'"4"OPP
>4
> !===3 > 4yy1}}">u"EQ*Fu*Mw,,d=f========"+"6"8"8(,,..H  ++*J   Gk5	s   L]; 3A(]; BV8 7]; 8
W+W&!]; &W++B]; 	];  ]; 0];  ]; ];  ]; 0]; A4]; ;e*D-e%3e*9Ae%e*Ae%%e*c                  X  K   t          | |           t          j                                        }d }|                    dd           }t	          ||          }j        }d|vr#t          t          j                              |d<   t          |           dk    r| d         n|                    dd           }|                    d          d u}	 |t          j        |g| R i |\  }}t          ||           d {V }	|	|	}||d<   t          |           ||_        t          j        r?t          j        t          j        k    r%t#          t          j        t          j                  t%          d|                    d	d
           dt          j         d|                    dd                       |                    |pd|||||            d {V }
|
&|
j        |
j        	 |
j        S |
j        du r|
j        S |                    dd           $|!t          j        du r|t2          j        j        k    s*|t2          j        j        k    s|t2          j        j        k    r	 |}|                    dd           d|                    d           }d }t          |           dk    r	| d         }n|                    dd           r|d         }|                    d          }t=          ||||d d           }||d<   n6# t>          $ r)}t%          dt          |                      Y d }~nd }~ww xY w | i | d {V }t          j                                        }tA          ||          r{d|v r`|d         du rVg }tC          |          D ]\  }}|"                    |           t          j#        ||                    dd                     S tI          ||||||           |S |t2          j%        j        k    r|S tM          |||           |d t2          D             v r%tO          ||t3          |                     d {V  |(                    |||            d {V  tS          j*        tW          |||||                      |,                    |||!           t[          |t\                    r#|
!|
j        	 |/                    |
|||"          S tI          ||||||           |S # t>          $ r}ta          j1                    }t          j                                        }|rb	 |2                    ||||           n# t>          $ r}|d }~ww xY w	 |3                    ||||           d {V  n# t>          $ r}|d }~ww xY wj        }ti          ||#          \  }}|t2          j        j        k    r|                    d$i           }d%|                    d&i           v }|r|s	 d t          _5        ||d'<   |d(<   t[          |tl          j7                  rd)|d*<   nt[          |tl          j8                  rd+|d*<   t          j9        | i | d {V cY d }~S # t>          $ r Y nfw xY wt[          |t          j:        j;                  rC|rA||v r=t          |           dk    r||         | d<   n||         |d<    | i | d {V cY d }~S ty          |d'|           t{          ||#          }ty          |d,|           |d }~ww xY w)-Nr  r  rA  r   r6  	fallbacksr  zASYNC kwargs[caching]: r  Fr  z; kwargs.get('cache'): r  r8  r  Tr  r  r  r   r/  r  r  r?  r  r  r  r  c                     g | ]	}|j         
S  r  )r   cts     r   
<listcomp>z1client.<locals>.wrapper_async.<locals>.<listcomp>  s    :::"RX:::r   )r  r  r@  )r  r&  r  r}  )r  r  rD  r  r  r  )_caching_handler_responseembedding_responserD  r  )r  r{  r  r  r	  r  r&  exponential_backoff_retryretry_strategyconstant_retryr  )>r  r  r  r  r   r  rQ  r   r  rP  r  r  r  r  r   r  r  r   r   r  _async_get_cacher  final_embedding_cached_response embedding_all_elements_cache_hitr  r`   r`  r  r_  ra  rJ   r   ry  rW  r   r  r   	arealtimer  r  async_set_cacher  create_taskr  r  r   ri   2_combine_cached_embedding_response_with_api_resultr  r  r  async_failure_handlerr  r  r  r   r   acompletion_with_retriesr  r   setattrr  )r}  r  rD  r  r  r  r@  r6  r  r  r  r  r/  r  r  r  r  r  r  r  r   r  r  r  r  r&  r|  s                            r   wrapper_asynczclient.<locals>.wrapper_asyncW  sJ
     $%6fEEE&**,,
6<jj!47
 7
 3D/!!3
 3
 3
 &.	F**(+DJLL(9(9F$%*-d))a--tAwwVZZQU=V=V'-zz+'>'>d'J$n	"&4%.	:'HL' ' 'PV' '#V %C69$U$UUUUUUUO*(,7F()&v.../CK,! (7+===-%,%:#*#5     [&**Y*F*F  [  [Y`Yf  [  [  @F  @J  @J  KR  TX  @Y  @Y  [  [   +;;+2&7 +)'! <         & )4-;G1Q 5BB.OSWWW4TT 

<..:%)  !6!<<< I$8$>>> I$@$FFFU!&Jzz/488D%QFJJ4O4O%Q%Q
#H4yy1}}#'7J55 6#)*#5&,jj&>&>O*A##-!)(7#'$(+ + +' ,?F<((  U U U!"S3q66"S"STTTTTTTTU -,d=f========F(,,..H$#   
 (61123t;;F&/&7&7 - -
Ue,,,,"7J)E)E    -%$/#%#-!)    "Mi1777 "( &"3#    ::	:::::=!'#'	22          '66"3	 7          , +!)%1M     EE%! F    6#455-9-M ,^^.G'-)%	 _    %'%!    M ?	 ?	 ?	"+"6"8"8(,,..H //.
H    !   G%;;.
H          !   G *2I":&TU"V"V"VKI1777/5zz2B0 0, +86::< < +'
  D(?D   + 1<}-6G23%v4  H 8SF#344'6?;; H7GF#34%,%Et%Vv%V%VVVVVVVVVVVVV$    q'"4"OPP	D4	D !===4yy1}}">u"EQ*Fu*Mw!2!2D!CF!C!CCCCCCCCCCCCC=+   +&AFFFGAy'***G?	s   D!T 6T A(T /BL 
T 
L>L94T 9L>>B#T "T 9T C T 1T \)3\$U \$ 
U1*U,,U11\$5V\$
V%V  V%%A&\$A+Y=7\)=
Z
\$	Z

A\$)\)/5\$$\))rH   r   r*   rX  )r&  r  r  r  r|  s   `   @r   clientr  .  s    I b b b b b bH	 B B B B B BH )**<<=NOOL  r   is_pass_throughc                    | dS |                      dd          du s|                      dd          du s|                      dd          du s|                      dd          du s|                      dd          du s||                      d	d          du sd|                      d
d          du sL|                      dd          du s4|                      dd          du s|                      dd          du s|du rdS dS )aj  
    Returns True if the call type is an internal async request.

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

    Args:
        kwargs (dict): The kwargs passed to the litellm function
        is_pass_through (bool): Whether the call is a pass-through call. By default all pass through calls are async.
    NFr`  Trh  r  rl  rm  rq  rp  r  acreate_batchacreate_fine_tuning_jobr  )r  r  s     r   r  r  e  s!    ~u

=%((D00::lE**d22::'//477::mU++t33::(%00D88::&..$66::i''4//::lE**d22::ou--55::/774??d""t5r   c                     d| v r| d         du rdS t          |t                    r"	 t          |          }n# t          $ r Y dS w xY w|t          j        k    s|t          j        k    rdS dS )a$  
    Returns True if the call type is a streaming request.
    Returns True if:
        - if "stream=True" in kwargs  (litellm chat completion, litellm text completion, litellm messages)
        - if call_type is generate_content_stream or agenerate_content_stream (litellm google genai)
    rC  TF)r   rQ  r`   r  generate_content_streamagenerate_content_streamr?  s     r   ry  ry    s     6fX.$66t )S!! 	!),,II 	 	 	55	 	Y666	:::t5s   7 
AAr6  custom_tokenizerc                 r    |&t          |d         |d         |d                   }|S t          |           S )N
identifierrevision
auth_token)r"  r#  r$  r6  )create_pretrained_tokenizer_select_tokenizer_helper)r6  r   
_tokenizers      r   _select_tokenizerr)    sO     #0'5%j1'5
 
 


 #%0000r   )maxsizec                     t           j        du rt          |           S 	 t          |           }||S n.# t          $ r!}t          j        d|            Y d }~nd }~ww xY wt          |           S )NTzError selecting tokenizer: )r   disable_hf_tokenizer_download_return_openai_tokenizer_return_huggingface_tokenizerr   r   r   )r6  r  r  s      r   r'  r'    s    ,44'...@.u55M  @ @ @>1>>????????@ $E***s   3 
AAAc                     dt           dS )Nopenai_tokenizerr   	tokenizerr1   r%  s    r   r-  r-    s    &X>>>r   c                    | t           j        v rd| v rt          j        d          }d|dS | t           j        v r"d| vrt          j        t                    }d|dS d|                                 v sd|                                 v rt          j        d          }d|dS d	|                                 v rt          j        d
          }d|dS d S )Nz	command-rz#Xenova/c4ai-command-r-v01-tokenizerhuggingface_tokenizerr1  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)r6  cohere_tokenizerclaude_tokenizerr2  s       r   r.  r.    s    %%%+*>*>$41
 
 0>NOOO	'*	*	*z/F/F$-o>>/>NOOO	ekkmm	#	#{ekkmm'C'C-.STT	/iHHH	ekkmm	#	#-.HII	/iHHHtr   r8  c                     |pt          |           }t          |d         t                    r|d                             |d          }n|d                             |          }|S )a  
    Encodes the given text using the specified model.

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

    Returns:
        enc: The encoded text.
    r%  r2  r  )disallowed_special)r)  r   r   encode)r6  textr   tokenizer_jsonencs        r   r@  r@    sm     &G):)G)G)GN.-x88 7[)00"0MM[)0066Jr   tokensc                 `    |pt          |           }|d                             |          }|S )Nr%  r2  )r)  decode)r6  rD  r   rB  decs        r   rF  rF    s5    %G):)G)G)GN

%
,
,V
4
4CJr   mainr"  r$  c                     	 t          j        | ||          }nE# t          $ r8}t          j        d| d           t          j        | |          }Y d}~nd}~ww xY wd|dS )a  
    Creates a tokenizer from an existing file on a HuggingFace repository to be used with `token_counter`.

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

    Returns:
    dict: A dictionary with the tokenizer and its type.
    )r#  r$  z%Error creating pretrained tokenizer: z-. Defaulting to version without 'auth_token'.)r#  Nr4  r1  )r   r7  r   r   r   )r"  r#  r$  r2  r  s        r   r&  r&    s    M-j
 
 
		  M M MdAddd	
 	
 	
 -j8LLL							M
 ,)DDDs    
A.AAjsonc                 4    t          j        |           }d|dS )z
    Creates a tokenizer from a valid JSON string for use with `token_counter`.

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

    Returns:
    dict: A dictionary with the tokenizer and its type.
    r4  r1  )r   r9  )rJ  r2  s     r   create_tokenizerrL    s"     "4((I+)DDDr   rA  r/  count_response_tokenstoolstool_choiceuse_default_image_token_countdefault_token_countc	                 P    t           j        du rdS t          | ||||||||	  	        S )zh
    The same as `litellm.litellm_core_utils.token_counter`.

    Kept for backwards compatibility.
    Tr   )r   disable_token_countertoken_counter_new)	r6  r   rA  r/  rM  rN  rO  rP  rQ  s	            r   r   r      sD    . $,,q%
 
 
r   custom_llm_providerc                     g d}| |v rdS dS )zU
    Helper function to know if a provider implementation supports httpx timeout
    )r  azurebedrockTFr  )rU  supported_providerss     r   supports_httpx_timeoutrZ  G  s&     988111t5r   c                 &    t          | |d          S )a  
    Check if the given model supports system messages and return a boolean value.

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

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

    Raises:
    Exception: If the given model is not found in model_prices_and_context_window.json.
    supports_system_messagesr6  rU  r  _supports_factoryr6  rU  s     r   r\  r\  S  s$     /&   r   c                 &    t          | |d          S )a  
    Check if the given model supports web search and return a boolean value.

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

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

    Raises:
    Exception: If the given model is not found in model_prices_and_context_window.json.
    supports_web_searchr]  r^  r`  s     r   rb  rb  h  s$     /!   r   c                 &    t          | |d          S )a  
    Check if the given model supports URL context and return a boolean value.

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

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

    Raises:
    Exception: If the given model is not found in model_prices_and_context_window.json.
    supports_url_contextr]  r^  r`  s     r   rd  rd  }  s$     /"   r   c                    	 t          j        | |          \  } }}}t          | |          }|                    dd          }|d}|S # t          $ r5}t          j        d|  d| dt          |                      Y d}~dS d}~ww xY w)	a  
    Check if the given model supports native streaming and return a boolean value.

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

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

    Raises:
    Exception: If the given model is not found in model_prices_and_context_window.json.
    r`  supports_native_streamingTNzYModel not found or error in checking supports_native_streaming support. You passed model=, custom_llm_provider=	. Error: F)r   r9   _get_model_info_helperr  r   r   r   rQ  )r6  rU  _
model_inforf  r  s         r   rf  rf    s   +2+C-@,
 ,
 ,
("Aq ,-@
 
 

 %/NN3NPT$U$U!$,(,%((    lhm  l  l  FY  l  l  dg  hi  dj  dj  l  l	
 	
 	
 uuuuu	s   AA
 

B	*BB	c                 j   	 t          | |          \  } }}}nB# t          $ r5}t          j        d|  d| dt	          |                      Y d}~dS d}~ww xY wt
          j        j        t
          j        j        t
          j        j	        t
          j        j
        g}||v rdS t          | |d	          S )
ak  
    Check if the given model + provider supports 'response_schema' as a param.

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

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

    Does not raise error. Defaults to 'False'. Outputs logging.error.
    r`  zOModel not found or error in checking response schema support. You passed model=rg  rh  NFTsupports_response_schemar]  )r9   r   r   r   rQ  r   rl   	PREDIBASEFIREWORKS_AI	LM_STUDIONEBIUSr_  )r6  rU  rj  r  *PROVIDERS_GLOBALLY_SUPPORT_RESPONSE_SCHEMAs        r   rm  rm    s#    +;-@,
 ,
 ,
("Aqq     b^c  b  b  |O  b  b  Z]  ^_  Z`  Z`  b  b	
 	
 	
 uuuuu	 	&)&#	2. HHHt/&   s    
A*AAc                 &    t          | |d          S )z[
    Check if the given model supports parallel tool calls and return a boolean value.
    "supports_parallel_function_callingr]  r^  r`  s     r   rt  rt    s$     /0   r   c                 &    t          | |d          S )  
    Check if the given model supports function calling and return a boolean value.

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

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

    Raises:
    Exception: If the given model is not found or there's an error in retrieval.
    supports_function_callingr]  r^  r`  s     r   rw  rw    s$      /'   r   c                 &    t          | |d          S )zU
    Check if the given model supports `tool_choice` and return a boolean value.
    supports_tool_choicer]  r^  r`  s     r   ry  ry    $     )<BX   r   r  Tc                 `    t          | |          }||                    |d          du rdS dS )zf
    Check if the given model supports a provider specific model info and return a boolean value.
    r`  NFT)get_provider_infor  )r6  rU  r  provider_infos       r   _supports_provider_info_factoryr~    sJ     &)<  M  ]%6%6sE%B%Bd%J%Jt4r   c                    	 t          j        | |          \  } }}}t          | |          }|                    |d          du rdS |                    |          t	          | ||          }||S dS # t
          $ rR}t          j        d| d|  d| dt          |                      t	          | ||          }||cY d}~S Y d}~dS d}~ww xY w)	rv  r`  FTNz%Model not found or error in checking z support. You passed model=rg  rh  )	r   r9   ri  r  r~  r   r   r   rQ  )r6  rU  r  rj  rk  supported_by_providerr  s          r   r_  r_    s~   +2+C-@,
 ,
 ,
("Aq ,-@
 
 

 >>#u%%--4^^C  ($C*C% %! %0,,u    XC  X  XTY  X  X  rE  X  X  PS  TU  PV  PV  X  X	
 	
 	
 !@&!
 !
 !,(((((((uuuuus%   AA4 )A4 4
C>AC?CCc                 &    t          | |d          S )zECheck if a given model supports audio input in a chat completion callsupports_audio_inputr]  r^  r`  s     r   r  r  J  s"    )<BX   r   c                 &    t          | |d          S )zCCheck if a given model supports pdf input in a chat completion callsupports_pdf_inputr]  r^  r`  s     r   r  r  Q  s"    )<BV   r   c                 &    t          | |d          S )zFCheck if a given model supports audio output in a chat completion callr  r]  r^  r`  s     r   supports_audio_outputr  X  rz  r   c                 &    t          | |d          S )a  
    Check if the given model supports prompt caching and return a boolean value.

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

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

    Raises:
    Exception: If the given model is not found or there's an error in retrieval.
    supports_prompt_cachingr]  r^  r`  s     r   r  r  a  s$      /%   r   c                 &    t          | |d          S )a  
    Check if the given model supports computer use and return a boolean value.

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

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

    Raises:
    Exception: If the given model is not found or there's an error in retrieval.
    supports_computer_user]  r^  r`  s     r   r  r  x  s$      /#   r   c                 &    t          | |d          S )a  
    Check if the given model supports vision and return a boolean value.

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

    Returns:
    bool: True if the model supports vision, False otherwise.
    supports_visionr]  r^  r`  s     r   r  r    s$     /   r   c                 &    t          | |d          S )zQ
    Check if the given model supports reasoning and return a boolean value.
    supports_reasoningr]  r^  r`  s     r   r  r    s$     )<BV   r   c                 F   	 t          j        | |          \  } }}}t          | |          }|                    dd          }|dS t	          |t
                    r|S dS # t          $ r5}t          j        d|  d| dt          |                      Y d}~dS d}~ww xY w)z
    Get a list of supported regions for a given model and provider.

    Parameters:
    model (str): The model name to be checked.
    custom_llm_provider (Optional[str]): The provider to be checked.
    r`  supported_regionsNzQModel not found or error in checking supported_regions support. You passed model=rg  rh  )
r   r9   ri  r  r   rU  r   r   r   rQ  )r6  rU  rj  rk  r  r  s         r   get_supported_regionsr    s   +2+C-@,
 ,
 ,
("Aq ,-@
 
 

 'NN+>EE$4
 '.. 	$$4    d`e  d  d  ~Q  d  d  \_  `a  \b  \b  d  d	
 	
 	
 ttttt	s   AA! A! !
B +*BB c                 &    t          | |d          S )z]
    Check if the given model supports embedding image input and return a boolean value.
    supports_embedding_image_inputr]  r^  r`  s     r   r  r    s$     /,   r   existing_dictnew_dictc                 X   |                                 D ]\  }}|t          |t                    rt          |          | |<   /t          |t                    rK|                     |          }t          |t                    r|                    |           || |<   || |<   || |<   | S r   )r  r   rQ  _convert_stringified_numbersrc  r  update)r  r  r  r  existing_nested_dicts        r   _update_dictionaryr    s       % %1=!S!! 
%#?#B#Ba  At$$ %'4'8'8';';$2D99 )(//222';M!$$'(M!$$#$a r   c                     t          | t                    rR	 d|                                 v sd| v rt          |           S t	          |           S # t
          t          f$ r | cY S w xY w| S )zYConvert stringified numbers (including scientific notation) to appropriate numeric types.r  .)r   rQ  r;  r  r  r  r  r  s    r   r  r    s~    % 
		ekkmm##se||U||# 5zz!I& 	 	 	LLL	 Ls   (A  A A%$A%
model_costc                 
   i }t          | t                    r| }n*t          | t                    rt          j        |           }|                                D ]\  }}	 t          t          t          |                    }|d         }n# t          $ r i }|}Y nw xY wt          ||          }t          j
                            |i                               |           t          j        d| d|            |                    d          dk    r.|t          j        vrt          j                            |           |                    d          dk    r/|t          j        vrt          j                            |           3|                    d          d	k    r/|t          j        vrt          j                            |           {|                    d          d
k    r/|t          j        vrt          j                            |           |                    d          dk    rK|                    dd          }|t          j        vr%t          j                            |d                    '|                    d          dk    r/|t          j        vrt          j                            |           o|                    d          dk    r/|t          j        vrt          j                            |           |                    d          dk    r/|t          j        vrt          j                            |           |                    d          dk    r/|t          j        vrt          j                            |           G|                    d          dk    r/|t          j        vrt          j                            |           |                    d          dk    r/|t          j        vrt          j                            |           |                    d          dk    r/|t          j        vrt          j                            |           |                    d          dk    r/|t          j        vrt          j                            |           g|                    d          dk    r/|t          j        vrt          j                            |           |                    d          dk    r-|t          j         vrt          j                             |           | S )a  
    Register new / Override existing models (and their pricing) to specific providers.
    Provide EITHER a model cost dictionary or a url to a hosted json blob
    Example usage:
    model_cost_dict = {
        "gpt-4": {
            "max_tokens": 8192,
            "input_cost_per_token": 0.00003,
            "output_cost_per_token": 0.00006,
            "litellm_provider": "openai",
            "mode": "chat"
        },
    }
    urlr%  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_alpharX  novita)!r   rc  rQ  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_modelsr6  r8  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   	  s     *d## G&	J	$	$ G#6:FFF'--// </ </
U	!#'n3.G.G.G#H#HN+E2NN 	! 	! 	!N NNN	! 0FF%%nb99@@ASTTT[>[[>[[	
 	
 	
 99'((H44'@@@6::3???YY)**.FFF'@@@6::3???YY)**h66'///%))#...YY)**k99'222(,,S111YY)**l::99S!,,L'333)--l1o>>>YY)**.AAA':::044S999YY)**.EEE'444*..s333YY)**.JJJ'999/33C888YY)**.EEE'444*..s333YY)**.JJJ'999/33C888YY)**f44'---#'',,,YY)**k99'222(,,S111YY)**m;;'444*..s333YY)**i77'000&**3///YY)**h66'///%))#...s    +BBBc                 @    |t          |t                    r| |v rdS dS NTF)r   rU  r  additional_drop_paramss     r   _should_drop_paramr  W	  s1    *-t44 	+'''t5r   passed_paramsdefault_paramsr  c                     i }|                                  D ]-\  }}||v r$|||         k    rt          ||          du r|||<   .|S )Nr  F)r  r  )r  r  r  non_default_paramsr  r  s         r   _get_non_default_paramsr  b	  sv     ##%% & &1^A&&&"Q?UVVV  %&q!r   languager1  r  temperaturetimestamp_granularities)wordsegmentdrop_paramsc           
         ddl m}	 t                      }
|
                    d           |
                    d          |
                    d          |
                    d          }|                                D ]
\  }}||
|<   d d d d d dfd|
                                D             i }fd	}d })t
                              | t                    
          }dk    sdk    r}ndk    r`t          j	                    
                                } ||           t          j	                                        || nd          }nA|?|                    |           } ||           |                    || nd          }t          ||
|	|                    dd                     }|S )Nr   OPENAI_TRANSCRIPTION_PARAMSr  rU  r  r  )r  r1  r  r  r  c                 <    i | ]\  }}|v 	||         k    ||S r  r  r   r  r  r  s      r   
<dictcomp>z5get_optional_params_transcription.<locals>.<dictcomp>	  sC       AqA):$:$: 	
1$:$:$:r   c                 .   t                                                    dk    rnt                                                    }|D ]H}du st          j        du r|| vr                    |d            /|| vrt          dd d          IS d S )Nr   T  z1Setting user/encoding format is not supported by =. To drop it from the call, set `litellm.drop_params = True`.status_coder3  rP  keysrU  r   r  rO  r   )supported_paramsr  r  rU  r  r  s      r   _check_valid_argz;get_optional_params_transcription.<locals>._check_valid_arg	  s    !&&(())A--*//1122D 	 	4''7+>$+F+F///&**1d3333...0$' !gTg  !g  !g  !g    /
 &% .-r   r6  r   r  rW  groqr  Fr  rL  r6  r  r%  r  rL  r  rU  openai_paramsr  )litellm.constantsr  localsrO  r  ProviderConfigManager'get_provider_audio_transcription_configrl   r   GroqSTTConfigget_supported_openai_params_sttmap_openai_params_sttr:   map_openai_params/add_provider_specific_params_to_optional_paramsr  )r6  rU  r  r1  r  r  r  r  r  r  r  special_paramsr  r  rL  r  provider_configr  r  r  s    `     `          @@r   !get_optional_params_transcriptionr  r	  s    >===== HHM3444'++,ABB##M22K"&&x00N$$&&  1a #' N   !''))  
 O& & & & & & & ?CO&/WW!"566 X 
 

 h&&*=*H*H,		&	&"022RRTT*:;;;;!/11GG1+'2'>E	 H 
 
 
	$*FFUFSS*:;;;;);;1+'2'>E	 < 
 
 F'#/1%zz*BDII  O r   sizec                 F    | dS dddddd}|                     | d          S )z3Map OpenAI size parameter to Vertex AI aspectRatio.Nz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  	  sI    |u
    ##e  r   nqualitystylerK  r  c                    
 t                      }|                    dd            |                    d          |                    dd           }	|                    dd           
|                    dd           }|                    d          }|                                D ][\  }}|                    d          rdk    rd	k    r'|d
k    rd	k    r4|                    d          rdk    rdk    rV|||<   \d d d d d d d}t	          |||          i }
 fd}|	E|	                     pd          } ||           |	                    | pd

nd          }n dk    sdk    st          j        v r}ndk    rt          j	        
                               rt          j	        n7t          j                                       rt          j        nt          j        }|                               } ||           |                    i           }n?dk    r9ddg}	  ||           |t          |          |d<   |t          |          |d<   t!          |                                          }|	'|	                     pd          }t!          |          }t%          ||pd||          }d |                                D             }|S )Nr6  rU  r  r  r  r  aws_rX  	sagemakerr  vertex_	vertex_aivertex_ai_beta)r  r  r  r  r   rK  )r  r  r  c                 :   t                                                    dk    rtt                                                    }|D ]N}t          j        du sdu r|| vr                    |d            /|| vrt          dd| d d d          OS d S )	Nr   Tr  z	Setting `z` is not supported by , r  r  r  )r  r  r  rU  r  r6  r  s      r   r  z7get_optional_params_image_gen.<locals>._check_valid_arg
  s    !&&(())A--*//1122D 	 	'4//;$3F3F///&**1d3333...0$' !aA  !a  !aEX  !a  !a\a  !a  !a  !a    /
 &% .-r   r8  r%  r  Fr  r  rW  r  rL  r  r  sampleCountaspectRatior  c                 |    i | ]9\  }}|t          |t          t          f          rt          |          dk    6||:S Nr   )r   rc  rU  rP  r   r  r  s      r   r  z1get_optional_params_image_gen.<locals>.<dictcomp>f
  sK       Aq=*Qt"="==Q! 	
1AKr   )r  rO  r  r  r  r:   r  r   openai_compatible_providersAmazonStability3Config_is_stability_3_modelAmazonNovaCanvasConfig_is_nova_modelAmazonStabilityConfigr  r  rU  r  r  )r6  r  r  r  r  r   rK  rU  r  r  r  r  r  r  r  r  r  rL  r  r  config_classr  r  s   `      `  `           @r   get_optional_params_image_genr  	  s	    HHMgt,,E'++,ABB#''(94@@O##M488K*../GNN"&&x00N$$&&  1<< 	9,,1D1S1S/!!&9[&H&HLL##	#{22#'777a  N 1#%5  
 ')O& & & & & & & & "*FF+2 G 
 
 	*:;;;;);;1++2'2'>E	 < 
 
 	x'''))'"EEE,			)	) -CC%CPPG** 1@@u@MM3..2 	 (CC%CPP*:;;;;&8812 9 
 
 
	+	+=	 	*:;;;;=-0VVOM* -W. .OM*  $N$7$7$9$9::M"*FF+2 G 
 
 -..E'#/52#5  O #))++  O
 r   encoding_format
dimensionsc           
      .    t                      }|                    dd           |                    d          }	|                    dd           |                    dd           }dt          t                   f fd}
t                              ||	|           d }i }It          j                                        v r)t          
                     t                              }|A|                     	          } |
|
           |                    i  nd          }ndk    r1 +d vr'd                                v rt          dd          }ndk    rNt           d          } |
|
           t          j                                        i  nd          }n[dk    rJt           pddd          } |
|
           t          j                                        i           }ndk    rDt           pddd          } |
|
           t          j                            i |          }ndk    sdk    rLt           dd          } |
|
           t          j                                        i |          \  }}nidk    r[t          j                                                    } |
|
           t          j                                        i           }ndk    rd v rt          j                    }nxd  v rt          j                    }n`d! v rt          j                    }nHd" v rt          j                    }n0d# v sd$ v rt          j                    }ng } |
|
           i |}|S |                                } |
|
           |                    i           }n9d%k    rHt           d%d          } |
|
           t          j                                        i           }nd&k    rNt           d&d          } |
|
           t          j                                        i  nd          }nd'k    rt           d'd          } |
|
           t          j                                       r0t          j                                        i  nd          }n$t          j                                        i  nd          }nd(k    rNt           d(d          } |
|
           t          j                                        i  nd          }nd)k    rIt           d)d          } |
|
           t          j                                         i  *          }nQd+k    rMt           d+d          } |
|
           t          j!                                        i  nd          }nd,k    rMt           d,d          } |
|
           t          j"                                        i  nd          }ndk    rd-k    rt          j#        vrtI                                                    d.k    rgt          j%        d/u sd/u r=t                                                    }|D ]}                    |d            nt          dd0 d1 d2          }n}tM          ||t          tO          j                              |(                    dd           3          }d4|v r/tI          |d4                   d.k    r|                    d4d            |S )5NrU  r  r  r  r  c           	          | d S i }                                 D ]}|| vr|         ||<   |r0t          j        du sdu rd S t          d d| d d          d S )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  rU  r  r6  r  s      r   r  z8get_optional_params_embeddings.<locals>._check_valid_arg
  s    #F#((** 	> 	>A((((:1(="1% 		"d**'K4,?,?, #2  d  dRd  d  drw  d  d  d   		 		r   r  r  rU  r  r6  r  r%  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)r6  rU  request_type
databricksr8  r	  
nvidia_nim)r  rL  r  r  gemini	lm_studiorX  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  rL  r6  	sambanovaovhcloudrW  r   TzSetting z is not supported by r  r  
extra_body))r  rO  r   rU  PreProcessNonDefaultParams(embedding_pre_process_non_default_paramsrl   _member_map_valuesr  get_provider_embedding_configr:   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  rP  r  r  r   r  )r6  rK  r  r  rU  r  r  r  r  r  r  r  rL  r  objectfinal_paramsr  r  r  s   `   ``            @r   get_optional_params_embeddingsrJ  n
  sr
    HHM'++,A4HH"&&x00N##M488K*../GNN8D>         & 	#KK') 3#9 	L 	
 	
  6:OO'<#<#C#C#E#EEE/MM!"566 N 
 

 "+:+V+V ,W ,
 ,
 	*:;;;;);;1'2'>E	 < 
 
 
	(	( "%// 2 7 7 9 999( j   
 1OO		(	(6 3%
 
 

 	*:;;;;!799KK1'2'>E	 L 
 
 
	,	,6+2 ,%
 
 

 	*:;;;;!;==OO12 P 
 
 
	,	,6+2 ,%
 
 

 	*:;;;;!:LL12f M 
 
 
	+	+/Bh/N/N6 +%
 
 

 	*:;;;; /11CC12f D 
 
	
F 
	+	++--IIKK 	 	*:;;;;!9;;MM12 N 
 
 
		)	)'500!577FF*e33CEEFF+u44022FF+u449;;FFU""i5&8&8=??FF!.>????%f:L!==??*:;;;; 2212 3 
 
 
		)	)6 )%
 
 

 	*:;;;;!8::LL12 M 
 
 
		)	)6 )%
 
 

 	*:;;;;!799KK1'2'>E	 L 
 
 
	(	(6 (%
 
 

 	*:;;;;2OOPUVV 	799KK'9$&/:/FE	 L   O &;==OO#5 "+6+BKK	 P  OO 

	*	*6 *%
 
 

 	*:;;;;!9;;MM1'2'>E	 N 
 
 
	.	.6 .%
 
 

 	*:;;;;!<>>PP12U Q 
 
 
	+	+6 +%
 
 

 	*:;;;;!:<<NN1'2'>E	 O 
 
 

	*	*6 *%
 
 

 	*:;;;;!9;;MM1'2'>E	 N 
 
 	x''7**w'JJJ!&&(())A--#t++{d/B/B.335566 4 4A&**1d33334 - # c'9  c  cPc  c  c  c   
 1OO,B'#/9>@@AA%zz*BDII  L |##L,F(G(G1(L(Lt,,,r   c                     t          | t                    r;d| v r| d         du r| d= |                                 D ]\  }}t          |           n)t          | t                    r| D ]}t          |           | S )a  
    clean out 'additionalProperties = False'. Causes vertexai/gemini OpenAI API Schema errors - https://github.com/langchain-ai/langchainjs/issues/5240

    Relevant Issues: https://github.com/BerriAI/litellm/issues/6136, https://github.com/BerriAI/litellm/issues/6088
    additionalPropertiesF)r   rc  r  _remove_additional_propertiesrU  r  r  r  items       r   rM  rM    s     &$ 0!V++7M0NRW0W0W-. !,,.. 	1 	1JC)%0000	1 
FD	!	! 0 	0 	0D)$////Mr   c                     t          | t                    r1d| v r| d= |                                 D ]\  }}t          |           n)t          | t                    r| D ]}t          |           | S )zy
    Relevant Issues: https://github.com/BerriAI/litellm/issues/6136, https://github.com/BerriAI/litellm/issues/6088
    strict)r   rc  r  _remove_strict_from_schemarU  rN  s       r   rR  rR    s     &$ -vx  !,,.. 	. 	.JC&u----	. 
FD	!	! - 	- 	-D&t,,,,Mr   
   c                 N   |dk    r| S t          | t                    rZ|                     dd           |                     dd           |                                 D ]\  }}t	          ||dz
             n-t          | t
                    r| D ]}t	          ||dz
             | S )a  
    Remove JSON schema reference fields like '$id' and '$schema' that can cause issues with some providers.

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

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

    Relevant Issues: Mistral API grammar validation fails when schema contains $id and $schema references
    r   z$idNz$schemar   )r   rc  rO  r  _remove_json_schema_refsrU  )r  	max_depthr  r  rO  s        r   rU  rU    s     A~~&$ :

5$

9d### !,,.. 	; 	;JC$UIM::::	; 
FD	!	! : 	: 	:D$T9q=9999Mr   r  supported_openai_paramsc                     g }|i S |                                  D ]}||vr|                    |           |D ]}|                     |d           | S )z;
    Remove unsupported params from non_default_params
    N)r  r   rO  )r  rW  remove_keysparamr  s        r   _remove_unsupported_paramsr[    s~     K&	#((** & &///u%%% * *sD))))r   c                       e Zd Zededededeee                  dedee         defd            Ze	 	 ddedededeee                  d
ede	de	defd            Z
dS )r0  r  r  rU  r  default_param_values#additional_endpoint_specific_paramsr   c                 N   |                                 D ]j\  }}|                    d          r|dk    r|                    d          s6|dk    r|dk    rC|                    d          r|dk    r|dk    re|| |<   kfd|                                  D             }|S )	Nr  rX  r  r  r  r  r  c                     i | ]S\  }}|d k    rH|dk    rB|dk    r<|dk    r6|dk    r0|dk    r*|vr&|v r"||         k    rt          |          du P||TS )r6  rU  api_versionr  allowed_openai_paramsr  r  F)r  )r   r  r  r  r^  r]  s      r   r  zRPreProcessNonDefaultParams.base_pre_process_non_default_params.<locals>.<dictcomp>  s     
 
 
1W...&&&&000111@@@----a000&0F     q  r   )r  r  )	r  r  rU  r  r]  r^  r  r  r  s	      ```   r   #base_pre_process_non_default_paramsz>PreProcessNonDefaultParams.base_pre_process_non_default_params  s     #((** 	! 	!DAq||F## #y00+66{CC 1 o%%*=*L*LY''';66'+;;; M!
 
 
 
 
 
%++--
 
 
( "!r   Fr6  remove_sensitive_keysadd_provider_specific_paramsc                 f    t                               | |||d t          D             dg          }|S )Nc                     i | ]}|d S r   r  )r   r  s     r   r  zWPreProcessNonDefaultParams.embedding_pre_process_non_default_params.<locals>.<dictcomp>4  s    %O%O%O!a%O%O%Or   r0  r  r  rU  r  r]  r^  )r0  rc  r%   )r  r  rU  r  r6  rd  re  r  s           r   r1  zCPreProcessNonDefaultParams.embedding_pre_process_non_default_params$  sM     'JJ+-$7'=%O%O7N%O%O%O5<I K   	 "!r   N)FF)r  
__module____qualname__staticmethodrc  rQ  r   r   rc  boolr1  r  r   r   r0  r0    s       -"-"-" !-" !)c 3	-"
 #-" .2#Y-" 
-" -" -" \-"^  ',-2" """ !" !)c 3	"
 "  $" '+" 
" " " \" " "r   r0  r  rd  re  c           	      |   t                               | |||t          dg          }d|v r;| |                    |d                   |d<   nt	          |d                   |d<   d|v rt          |t                    rx|d         }	|	D ]m}
|
                    di           }|                    dd          }|=t          j	        |          }d	|v r |d	         d
u r|
                    d	d           ||d<   n|r2t          || |t          t          j                              |          }|rt          |          }|S )zA
    Pre-process non-default params to a standardized format
    r/  rh  r  Nr  rN  function
parametersrL  Fr  )r0  rc  r   $get_json_schema_from_pydantic_objectr   r   rU  r  r"  deepcopyrO  r  r  remove_sensitive_keys_from_dict)r  r  rU  r  r6  rd  re  r  r  rN  tooltool_functionro  new_parameterss                 r   pre_process_non_default_paramsrv  <  s    4WW#%/5A-7L X   ...&DD$67H$I E   011 5R 23D E5 5 501 $$$D* *$ #7+ 	= 	= !HHZ44M&**<>>J%!%z!:!:*n<<&'=>%GG"&&'=tDDD.<l+# 
L.' 3CHJJKK#9
 
 
  Q<=OPPr   dc                     g d}g }|                                  D ]2t          fd|D                       r|                               3|D ]|                                | S )z1
    Remove sensitive keys from a dictionary
    )r  secretaccess
credentialc              3   D   K   | ]}|                                 v V  d S r   r;  )r   phraser  s     r   r   z2remove_sensitive_keys_from_dict.<locals>.<genexpr>  s0      IIv$IIIIIIr   )r  r  r   rO  )rw  sensitive_key_phrasesrY  r  s      @r   rr  rr    s     FEEKvvxx $ $IIII3HIIIII 	$s###  	c



Hr   c                    i }t           j        }||d         v r	 |dk    r)t          j                                        | |          }n|dk    r)t          j                                        | |          }nc|dk    s|dk    r)t          j                                        | |          }n.|dk    r(t          j                                        | |          }d|v s	d	|v sd
|v rb|dk    r[|dk    rT|dk    rM|dk    rF|dk    r?|dk    r8|dk    r1|dk    r*|dk    r#|dk    r|dk    r|dk    r|dk    r|dk    r |dk    r|dk    r|dk    r|dk    r|dk    r|dk    r|dk    r|dk    r|dk    r|dk    r|t           j        vr|dk    rad |d!<   d"t           _        d
|v r/|	                    d
          |d#<   |	                    d$d%           nld|v r|	                    d          |d#<   nOt           j        r.|	                    d
|	                    dd%                    |d#<   nt          d&d'| d()          |S )*z-For .completion(), preprocess optional params	providersrW  r	  rX  r  r  watsonx	functionsfunction_callrN  ollamar  anyscaletogether_air  r#  cerebrasxai	ai21_chat
volcenginedeepseek	codestralr(  r  cohere_chatr  ollama_chatr  r  nebiuswandbrJ  formatTfunctions_unsupported_modelrO  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_promptrO  r   )r  r  rU  rL  common_auth_dicts        r   pre_process_optional_paramsr    sh    O@.{;;;	 '))%799QQ#0/ R  OO !I--133KK'4o L   O  ;.."&666%466NN#0/ O  OO !I--%8::RR#0/ S  O 	)))000(((  8++#'???#w..#{22#z11#}44#v--#|33#z11#u,,#{22#|33#z11#{22#y00#{22#}44#x//#y00#}44#|33#':::#x//#w..#7+NNN"h..,2) . 000*..w77 $$AB '**%t    !$666*..{;; $$AB .
 BTAWAW/33KFFB B =>> - #ZDWZZZ   
 r   rb  thinkingweb_search_optionssafety_identifierc%           
       %   ./ t                                                      //                    d          }&t          /|&|            .t	          /.          }'d }(<d t
          D             v r)t                               t                              }(dt          t                   f ./fd})t                     }*|*t           d	          }*|*pg }*|pg }|*                    |            |)|*pg 
           dk    rEt          j                                         .|'t          t                     rnd          }'nωdk    rt          j                                         .|'t          t                     rnd          }'t          j                                         .|'t          t                     rnd          }'nAdk    sdk    rEt          j                                        .|' t          t                     rnd          }'ndk    r0t          j                                        .|' nd          }'ndk    rEt          j                                        .|' t          t                     rnd          }'nodk    rEt          j                                        .|' t          t                     rnd          }'n$dk    rEt          j                                        .|' t          t                     rnd          }'nىdk    rEt          j                                        .|' t          t                     rnd          }'ndk    rEt          j                                        .|' t          t                     rnd          }'nCdk    r t          j        v sF t          j        v s8 t          j        v s* t          j        v s t          j        v s t          j        v rEt          j                                        .|' t          t                     rnd          }'ndk    rEt          j                                         .|' t          t                     rnd          }'nYdk    s
dk    rId v rEt          j                                        .|' t          t                     rnd          }'nt          j!        "                               rEt          j!                                         .|'t          t                     rnd          }'ndk    rj t          j#        v rd v rEt          j$                                         .|'t          t                     rnd          }'n@t          j%                                         .|'t          t                     rnd          }'n t          j&        v rEt          j'                                        .|' t          t                     rnd          }'n|(4|(                    .|' t          t                     rnd          }'nrt          j(                                        .|' t          t                     rnd          }'n-dk    rEt          j)                                        .|' t          t                     rnd          }'
ndk    rXtU          j+                   }+tU          j,                   },|+dk    s|+dk    rEt          j-                                         .|'t          t                     rnd          }'
nbd|,v r|+d k    r|,.                    d!          rEt          j/                                        .|' t          t                     rnd          }'	nt          j0                                        .|' t          t                     rnd          }'	n|(2|(                    .|' t          t                     rnd          }'	nd"k    rEt          j1                                         .|'t          t                     rnd          }'	n8d#k    rEt          j2                                        .|' t          t                     rnd          }'nd$k    rEt          j3                                         .|'t          t                     rnd          }'nd%k    rEt          j4                                        .|' t          t                     rnd          }'nWd&k    rEt          j5                                        .|' t          t                     rnd          }'nd'k    rEt          j6                                        .|' t          t                     rnd          }'nd(k    r6|(4|(                    .|' t          t                     rnd          }'nd)k    sdk    rEt          j%                                        .|' t          t                     rnd          }'n4d*k    rEt          j$                                        .|' t          t                     rnd          }'nd+k    rEt          j7                                        .|' t          t                     rnd          }'nd,k    rEt          j8                                         .|'t          t                     rnd          }'nSd-k    rEt          j9                                        .|' t          t                     rnd          }'nd.k    r+t          j:                                         .|'/          }'n׉d0k    sd1k    rEt          j;                                        .|' t          t                     rnd          }'nd2k    rEt          j<                                        .|' t          t                     rnd          }'n;d3k    rEt          j=                                        .|' t          t                     rnd          }'nd4k    rEt          j>                                        .|' t          t                     rnd          }'nd5k    rEt          j?                                        .|' t          t                     rnd          }'nZd6k    rEt          j@                                        .|' t          t                     rnd          }'nd7k    rEt          jA                                        .|' t          t                     rnd          }'nĉd8k    rEt          jB                                        .|' t          t                     rnd          }'nyd9k    rt          jC                                        .|' t          t                     rnd          }'/D                                D ]:}-t          jE                    F                    |-          rt          d:|-           ;n߉d;k    rEt          jE                                        .|' t          t                     rnd          }'nd	k    rEt          jA                                        .|' t          t                     rnd          }'nId<k    rEt          jH                                        .|' t          t                     rnd          }'nd=k    rt          jI                    J                     >          rEt          jI                                        .|' t          t                     rnd          }'nt          jK        L                     >          rEt          jK                                        .|' t          t                     rnd          }'n&t          jN        d?O                    |t          jP        t          d@                               |p&t          jP        pt          d@          pt          jR        }t          jS                                        .|' |t          t                     rndA          }'nx|(3|(                    .|' t          t                     rnd          }'nCt          jT                                        .|' t          t                     rnd          }'t          |'/t          t          jD                              | B          }'t          dC|'            t          |'.|D          }'|'S )ENr  r  )r  r  rU  c                     g | ]	}|j         
S r  r  )r   r   s     r   r  z'get_optional_params.<locals>.<listcomp>,  s-     C C C#C C Cr   r  r  c                 v   t          j        d d            t          j        d            t          j        d            i }                                D ]8}|| vr2|dk    s|dk    s|dk    r|dk    rd	k    r&|d
k    r-|         ||<   9|rt          j        du s3du r/|                                D ]}                    |d           dS t          d dt          |                                           d dt          |                                           d          dS )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() rK  rJ  rC  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  rO  r   rU  )	r  r  r  rU  r  r6  r  r  r  s	      r   r  z-get_optional_params.<locals>._check_valid_arg3  s    	VUVVATVV	
 	
 	
 	GGG	
 	
 	
 	XDVXX	
 	
 	
  #((** 	B 	BA(((;;!'7"7"71==88Q&& -?q,A&q) 
	"d**'K4,?,?+0022 4 4A&**1d33334 4 - #2  o  oRVWiWnWnWpWpRqRq  o  o  @E  o  o  }A  BT  BY  BY  B[  B[  }\  }\  o  o  o   
	 
	r   r`  r  r  r  F)r6  r  rL  r  anthropic_textr  r  r  r  maritalkr5  	predibasehuggingfacer  r  r$  r  r  r  rX  converseconverse_likeinvokezanthropic.claude-3
cloudflarer  r  r  petals	deepinfra
perplexityr(  text-completion-codestralr"  r#  r  r  )r6  r  rL  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  rW  r%  zoAzure optional params - api_version: api_version={}, litellm.api_version={}, os.environ['AZURE_API_VERSION']={}AZURE_API_VERSION)r  rL  r6  ra  r  r  z Final returned optional params: )rL  r  rb  )Zr  r"  rO  rv  r  rl   r  get_provider_chat_configr   rQ  r:   r#  r   AnthropicConfigr  r   rl  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SagemakerConfigrM   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  ra  rR   AZURE_DEFAULT_API_VERSIONr  OpenAILikeChatConfigr  rU  r   r   _apply_openai_param_overrides)0r6  r  r  r  top_pr  rC  rJ  stopr  max_completion_tokens
modalities
predictionaudiopresence_penaltyfrequency_penalty
logit_biasrK  rU  r  seedrN  rO  r  logprobstop_logprobsextra_headersra  parallel_tool_callsr  rb  reasoning_effortr  r/  r  r  r  r  r  rL  r  r  r  bedrock_routebedrock_base_modelrZ  r  r  s0   `    `            `          `                @@r   get_optional_paramsr    sU   T HHMMOOM"&&x00N7#%/5   2#-/  O
 -1O&+> C C'3C C C , , 0HH,/B"C"C I 
 
)49 ) ) ) ) ) ) ) ) ) ) )V 3)<   6X
 
 
 (-217R1222)/R    k))!133EE1+ *z+t/L/L*  F 	
 	
 
 0	0	0!577II1+ *z+t/L/L*  J 	
 	
 "577II1+ *z+t/L/L*  J 	
 	
 
	-	-1D1P1P!244FF1+ *z+t/L/L*  G 	
 	
 
	(	(!.00BB1+'2'>E	 C 
 
 

	*	*!022DD1+ *z+t/L/L*  E 	
 	
 
	+	+!133EE1+ *z+t/L/L*  F 	
 	
 
	+	+!133EE1+ *z+t/L/L*  F 	
 	
 
	-	-!799KK1+ *z+t/L/L*  L 	
 	
 
	-	-!24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66HH1+ *z+t/L/L*  I 	
 	
 
	(	(!<>>PP1+ *z+t/L/L*  Q 	
 	
 
 0	0	0{**x5/@/@!466HH1+ *z+t/L/L*  I 	
 	
 
	(	;	;)< 
< 
 
 b
 "9;;MM1+ *z+t/L/L*  N 	
 	
 
	+	+G111e##9;;MM#+=(7  +6:kSW;X;X6 (K!& N 	 	   #*"7"9"9"K"K'9$3 '2z+t7T7T2 $" #L 	# 	# g333%8::LL#5 / #.:k43P3P.  K M 	 	OO (-??#5 / #.:k43P3P.  K @ 	 	OO &:<<NN#5 / #.:k43P3P.  K O 	 	OO 
	+	+!133EE1+ *z+t/L/L*  F 	
 	
 
		)	)(:5AA-<UCCJ&&-?*J*J%:<<NN#5 / #.:k43P3P.  K O 	 	OO ...=H3L3L!,,-ABB 799KK+=(7#  +6:kSW;X;X6 (K!& L 	 	   #*"?"A"A"S"S'9$3 '2z+t7T7T2 $" #T 	# 	# (-??#5 / #.:k43P3P.  K @ 	 	O 
	,	,!688JJ1+ *z+t/L/L*  K 	
 	
 
	(	(!.00BB1+ *z+t/L/L*  C 	
 	
 
	-	-!244FF1+ *z+t/L/L*  G 	
 	
 
	+	+!022DD1+ *z+t/L/L*  E 	
 	
 
	(	(!.00BB1+ *z+t/L/L*  C 	
 	
 
	+	+!133EE1+ *z+t/L/L*  F 	
 	
 
	,	,1L);;1+ *z+t/L/L*  < 	
 	
 
		)	)-@K-O-O!/11CC1+ *z+t/L/L*  D 	
 	
 
 ;	;	;!?AASS1+ *z+t/L/L*  T 	
 	
 
	,	,!244FF1+ *z+t/L/L*  G 	
 	
 
	,	,!133EE1+ *z+t/L/L*  F 	
 	
 

	*	*!022DD1+ *z+t/L/L*  E 	
 	
 
	%	%!/11CC1+ D 
 

 
	+	+/Bf/L/L!022DD1+ *z+t/L/L*  E 	
 	
 
	.	.!355GG1+ *z+t/L/L*  H 	
 	
 
	,	,!244FF1+ *z+t/L/L*  G 	
 	
 
	-	-!688JJ1+ *z+t/L/L*  K 	
 	
 
	&	&!,..@@1+ *z+t/L/L*  A 	
 	
 
	&	&!022DD1+ *z+t/L/L*  E 	
 	
 

	*	*!.00BB1+ *z+t/L/L*  C 	
 	
 
	,	,!244FF1+ *z+t/L/L*  G 	
 	
 
		)	)!688JJ1+ *z+t/L/L*  K 	
 	
 #'')) 	 	E)++AA%HH   x  qv  x  x  	
 
	.	.!466HH1+ *z+t/L/L*  I 	
 	
 
	(	(!.00BB1+ *z+t/L/L*  C 	
 	
 
	(	(!.00BB1+ *z+t/L/L*  C 	
 	
 
	'	'&((:::GG ,	%9;;MM#5 / #.:k43P3P.  K N 	 	OO *??e?LL !	%;==OO#5 / #.:k43P3P.  K P 	 	OO   B  I  I!4jAT6U6U     5&51225 4	  &799KK#5 /' #.:k43P3P.  K L 
 
OO 
	$);;1+ *z+t/L/L*  < 	
 	
 "688JJ1+ *z+t/L/L*  K 	
 	
 F'#/?DFFGG5  O F_FFGGG3'-3  O
 r   r  c                    |g dt           j        z   v rt          d          du r|                    di           }|                                D ]}||vr||         ||         ||<   |                     di            i | d         |}!fd|                                D             }n|}t          |          | d<   n.|                                D ]}||vr||         ||         | |<   | S )z9
    Add provider specific params to optional_params
    )r  rW  r  r/  r  FNc                 $    i | ]\  }}|v	||S r  r  )r   r  r  r  s      r   r  zCadd_provider_specific_params_to_optional_params.<locals>.<dictcomp>  s5     ( ( (1 666 q666r   )r/  )r   r  r  rO  r  r  r  r;   )	rL  r  rU  r  r  r/  r  initial_extra_bodyprocessed_extra_bodys	       `    r   r  r    s    	888

-.	. 	. 7M    
 '**<<<J"'')) 5 5M))mA.>.J$1!$4JqM&&|R888"!,/""
 &1( ( ( ( 2 8 8 : :( ( ($$ (:$,F/- - -OL) ##%% 	6 	6A%%-*:*F%21%5"r   c                 N    |r"|D ]}|| vr|                     |d          | |<    | S )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)rO  )rL  r  rb  rZ  s       r   r  r  .  sJ      M* 	M 	MEO++);)?)?t)L)L&r   c                 B    d |                                  D             }|S )Nc                 f    i | ].\  }}|d k    r#|dk    r|t           v r|t           |         k    +||/S r`  )r   r  s      r   r  z*get_non_default_params.<locals>.<dictcomp>?  s\     	 	 	AqLL***9999!<<< 	
1 =<<r   r  )r  r  s     r   get_non_default_paramsr  =  s5    	 	!''))	 	 	 r   max_parallel_requestsrpmtpmdefault_max_parallel_requestsc                 `    | | S ||S |t          |dz  dz            }|dk    rd}|S ||S dS )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  M  s[    : ($$	
	S4Z!^,,QN	&	2,,4r   healthy_deploymentsc                 b    t          d | D             d           fd| D             }|S | S )Nc              3   F   K   | ]}d |d         v |d         d          V  dS )orderrM  Nr  )r   
deployments     r   r   z2_get_order_filtered_deployments.<locals>.<genexpr>z  sJ       	
 	
*%5666 '(16666	
 	
r   )defaultc                 R    g | ]#}|d                               d          k    !|$S )rM  r  r  )r   r  	min_orders     r   r  z3_get_order_filtered_deployments.<locals>.<listcomp>  sB      
  
  
*+//88IEE EEEr   )min)r  filtered_deploymentsr  s     @r   _get_order_filtered_deploymentsr  x  sw    	
 	
1	
 	
 	

   I  
  
  
  
1 
  
  
 $#r   rM  c                     | dk    rK|j         p)t          j         pt          d          pt          d          }|t          |t                    r|S n#| dk    r|j        }||S n| dk    r|j        }||S |j        S )z=
    Return the region for a model, for a given provider
    r  VERTEXAI_LOCATIONVERTEX_LOCATIONNrX  r  )vertex_locationr   rR   r   rQ  aws_region_namewatsonx_region_nameregion_name)rU  rM  vertex_ai_locationr  r   s        r   _get_model_regionr#    s     k)) * -&--..- +,,	 	 )j9KS.Q.Q)%%			)	)(8&"" '			)	),@*&&%%r   c                    t          j        | j        |           \  }}}}t          ||           }|.t	          j        d                    | j                             dS |dk    rKt          j                                                    }t          j                    	                                }n|dk    rKt          j
                                                    }t          j
                    	                                }n|dk    rKt          j                                                    }t          j                    	                                }nU|dk    rKt          j                                                    }t          j                    	                                }ng }g }|D ]}||                                v r d	S |D ]}||                                v r d
S dS )z
    Infer if a model is in the EU or US region

    Returns:
    - str (region) - "eu" or "us"
    - None (if region not found)
    )r6  rM  )rU  rM  Nz'Cannot infer model region for model: {}rW  r  rX  r  euus)r   r9   r6  r#  r   r   r  r  get_eu_regionsget_us_regionsr  r  r  r;  )rM  r6  rU  rj  model_region
eu_regions
us_regionsregions           r   _infer_model_regionr-    s    (/'?">( ( ($E1 %/  L 5<<^=QRR	
 	
 	
 tg%%.00??AA
.00??AA

		+	++--<<>>
+--<<>>

			)	)688GGII
688GGII

			)	)/11@@BB
/11@@BB



  \''))))44 *  \''))))44 *4r   c                 T    | j         dk    rdS t          |           }||dk    rdS dS )8
    Return true/false if a deployment is in the EU
    r%  TrM  NFr!  r-  rM  r)  s     r   _is_region_eur3    C     !T))t 'nEEELLD$8$8t5r   c                 T    | j         dk    rdS t          |           }||dk    rdS dS )z8
    Return true/false if a deployment is in the US
    r&  Tr0  NFr1  r2  s     r   _is_region_usr6    r4  r   allowed_model_regionc                      | j         |k    rdS dS )r/  TF)r!  )rM  r7  s     r   is_region_allowedr9    s     !%999t5r   modec                 x   d| j         v rt          | j        t                    rt          | j        t                    r|| j                             dd          }t          j                                        || j        | j        | j	        pt          j
        d|pd          }|                    dd          }|S dS )	zM
    Pass the litellm params for an azure model, and get back the region
    rW  zazure/r8  rS  chat)r6  api_keyrI  ra  r  r:  zx-ms-regionN)r6  r   r=  rQ  rI  replacer   AzureChatCompletionget_headersra  r  r  )rM  r:  _modelr  r,  s        r   get_model_regionrB    s     	>'''~-s33 	(~.44 	(  %--h;; 466BB"*#,&2Wg6W C 
 
 !)]D A A4r   c                     	 |                      d          }t          |          d d         }|S # t          $ r Y dS w xY w)Nr/  d   r8  )r  rQ  r   )r  	_messagess     r   get_first_chars_messagesrF    sT    JJz**		NN4C4(	   rrs   -0 
>>c                 ^    d                     d | D                       }t          |          S )Nr8  c              3   B   K   | ]}|                                 |V  d S r   )isspace)r   chars     r   r   z$_count_characters.<locals>.<genexpr>#  s/      HHTHDHHHHHHr   )r   rP  )rA  filtered_texts     r   _count_charactersrL  !  s0    GGHHTHHHHHM}r   response_objc                     | j         }d}|D ]c}t          |t                    r|j        j        ||j        j        z  }3t          |t
                    r|j        j        ||j        j        z  }d|S )Nr8  )r  r   rc   r3  r7  rx   delta)rM  _choicesresponse_strchoices       r   get_response_stringrS  '  s      L 5 5fg&& 	5~%1 66 011 	5|#/ 44r   llm_providerdynamic_api_keyc                    |pt           j        }| dk    s| dk    r|pt           j        pt          d          }n| dk    s| dk    r|pt           j        pt          d          }n| dk    r|pt           j        pt          d          }nZ| d	k    r|pt           j        pt          d
          }n5| dk    r|pt           j        pt          d          }n| dk    s| dk    r|pt           j        pt          d          }n| dk    r|pt           j	        pt          d          }n| dk    r|pt           j
        pt          d          }n| dk    r|pt           j        pt          d          }nz| dk    r-|p)t           j        pt          d          pt          d          }nG| dk    r|pt           j        pt          d          }n#| dk    r|pt           j        pt          d          }|S )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_KEYr5  REPLICATE_API_KEYr  TOGETHERAI_API_KEYTOGETHER_AI_TOKENr  NEBIUS_API_KEYr  WANDB_API_KEY)r   r=  
openai_keyrR   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)rT  rU  r=  s      r   get_api_keyrq  8  s7   0Gx<3K#K#KOW/O:>N3O3O		$	$8H(H(HUW2UjAT6U6U			LW-LO1L1L		&	&Sw.S*=R2S2S 	 
	"	"QW0QJ?P4Q4Q		!	!\]%B%BOW/O:>N3O3O		&	&Sw.S*=R2S2S 	 
	$	$UW2UjAT6U6U		$	$UW2UjAT6U6U		&	& /)/./// -..	 	 
	!	!OW/O:>N3O3O		 	 MW.M*_2M2MNr   c                  ~    dd l } ddl m } t          | d          r |j        | j                  S  |j                    S )Nr   r  UTC)r  hasattrr  rt  utcnow)dtr  s     r   get_utc_datetimerx  j  sV    !!!!!!r5 !x|BF###x   r   c                 X   d }	 | t           j        v rXdt           j        |          v rt           j        |          d         S dt           j        |          v rt           j        |          d         S t          |           \  } }}}|dk    r ||           }|S | t           j        v rYdt           j        |          v rt           j        |          d         S dt           j        |          v rt           j        |          d         S nt                      dS # t          $ r t          d|  d	          w xY w)
aY  
    Get the maximum number of output tokens allowed for a given model.

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

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

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

    Example:
        >>> get_max_tokens("gpt-4")
        8192
    c                     d|  d}	 t           j                            |          }|                                 |                                }|                    d          }||S d S # t
          $ r Y d S w xY wNzhttps://huggingface.co/z/raw/main/config.jsonmax_position_embeddingsr   module_level_clientr  raise_for_statusrJ  r   
model_name
config_urlr  config_jsonr|  s        r   _get_max_position_embeddingsz4get_max_tokens.<locals>._get_max_position_embeddings  s    PzPPP
	266zBBH%%''' #--//K&1oo6O&P&P#&2..t 	 	 	44	   AA* *
A87A8max_output_tokensr  r%  r  r  NzModel zr isn't mapped yet. Add it here - https://github.com/BerriAI/litellm/blob/main/model_prices_and_context_window.json)r   r  r9   r   )r6  r  rU  rj  r  s        r   get_max_tokensr  t  sg   $  &
G&&&"g&8&???)%01DEE!3E!:::)%0>>+;%+H+H+H("Aq-//55GGGJG&&&"g&8&???)%01DEE!3E!:::)%0>> ; ++t 
 
 
 OU  O  O  O
 
 	

s(   9D +D +(D 9D +D :D D)c                 .    t          j        dd|           S )Nz-\d+$r8  resubr  s    r   _strip_stable_vertex_versionr    s    6(B
+++r   c                 .    ddl m}  |j        |           S )z
    Get the base model from the given model name.

    Handle model names like - "us.meta.llama3-2-11b-instruct-v1:0" -> "meta.llama3-2-11b-instruct-v1"
    AND "meta.llama3-2-11b-instruct-v1:0" -> "meta.llama3-2-11b-instruct-v1"
    r   rL   )!litellm.llms.bedrock.common_utilsrM   r  )r  rM   s     r   _get_base_bedrock_modelr    s+     CBBBBB**:666r   r  c                 .    t          j        dd|           S )a  
    Strips the organization, custom suffix, and ID from an OpenAI fine-tuned model name.

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

    Args:
    model_name (str): The full model name

    Returns:
    str: The stripped model name
    z(:[^:]+){3}$r8  r  r  s    r   !_strip_openai_finetune_model_namer    s     6/2z222r   c                     |r|dv rt          |           }|S |r|dk    s|dk    rt          |           }|S |r|dk    rt          |           }|S d| v rt          |           }|S | S )N)rX  bedrock_converser  r  r$  r"  zft:)r  r  r  )r6  rU  stripped_bedrock_modelstrip_versionstrip_finetunes        r   _strip_model_namer    s     26UUU!8E!J!J!J%%	 {**.AX.M.M4FFF	 "5"E"E4FFF	%:eLLLr   c                 &    t           j        |          S r   r   r  r  s    r   _get_model_info_from_model_costr    s    c""r   rk  c                 .   |rd| v r| d         |k    r|dk    r| d                              d          rdS |dk    r| d                              d          rdS |                     d          r| d                              d          rdS |dk    rdS dS dS )zG
    Check if the model info provider matches the custom provider.
    r  r  Tr,  rX  litellm_proxyFr  rk  rU  s     r   _check_provider_matchr    s      j(()*.AAA+--*3

*[
!
! . 4 N22z8

*^
$
$ 3 4 ++I66 		:<

*Y

		 4?22454r   )	TypedDictc                   B    e Zd ZU eed<   eed<   eed<   eed<   eed<   dS )'PotentialModelNamesAndCustomLLMProvidersplit_modelcombined_model_namestripped_model_namecombined_stripped_model_namerU  N)r  ri  rj  rQ  __annotations__r  r   r   r  r  	  sN         "%%%%r   r  c           
         |?	 t          |           \  }}}}n# t          $ r | }Y nw xY w| }t          | |          }|}n|r^|                     |dz             rF|                     dd          d         }| }t          ||          }d                    ||          }n?| }d                    ||           }t          | |          }d                    ||          }t          ||||t          t          |                    S )Nr%  r`  r  r   z{}/{})r  r  r  r  rU  )	r9   r   r  r  r  r  r  r   rQ  )r6  rU  r  rj  r  r  r  s          r   _get_potential_model_namesr    s    "	 5EE5R5R5R2K,a 	  	  	 KKK	 #/-@
 
 
 (;$$	 
!1!1c!" " 
 kk#q))!,#/3F
 
 
 (/~~!4(
 (
$$ %nn-@%HH/-@
 
 
 (/~~(
 (
$
 3//%A &9::   s    ))c                     d|  d}	 t           j                            |          }|                                 |                                }|                    d          }||S d S # t
          $ r Y d S w xY wr{  r}  r  s        r   r  r  >  s    L:LLLJ.22:>>!!### mmoo #.//2K"L"L".**4   ttr  c                 $    t          | |          S )z_
    _get_model_info_helper wrapped with lru_cache

    Speed Optimization to hit high RPS
    r`  )ri  r`  s     r   _cached_get_model_info_helperr  U  s     "CVWWWWr   c                     d }|r2|t           v r)t                              | t          |                    }d }|r|                    |           }|S )Nr  r%  )rm   r  get_provider_model_inforl   r|  )r6  rU  r  rk  s       r   r|  r|  `  sq     37O 
2oEE/GG,/B"C"C H 
 
 7;J D$66U6CC
r   potential_model_namesc                 X    t          d |                                 D                       S )zA
    Check if the potential model name is in the model cost.
    c              3   2   K   | ]}|t           j        v V  d S r   r  )r   potential_model_names     r   r   z9_is_potential_model_name_in_model_cost.<locals>.<genexpr>z  s>          	 22     r   )r  r3  )r  s    r   &_is_potential_model_name_in_model_costr  t  s>       $9$@$@$B$B     r   c           	         	 i t           j        t           j        }| |v r||          } ||dk    rd}|J|dk    rDd| z   t           j        v rd| z   } n-| dz   t           j        v r| dz   } n| dz   t           j        v r| dz   } t          | |          }t          j        d|            |d         }|d	         }|d
         }|d         }|d         }|dk    rJt          |           }t          dRi d| d|ddddddddddddddddddddddddddd dS |d!k    s|d"k    r5t          |          s&t          j                                        |           S 	 d}	d}
|t           j        v r8|}
t          t!          t"          |
          #          }	t%          |	|$          sd}	|	F| t           j        v r8| }
t          t!          t"          |
          #          }	t%          |	|$          sd}	|	F|t           j        v r8|}
t          t!          t"          |
          #          }	t%          |	|$          sd}	|	F|t           j        v r8|}
t          t!          t"          |
          #          }	t%          |	|$          sd}	|	F|t           j        v r8|}
t          t!          t"          |
          #          }	t%          |	|$          sd}	|	|
t'          d%          |	                    d          }|*t          j        d&                    | |                     d}|	                    d          }|*t          j        d'                    | |                     d}t          dRi d|
d|	                    dd          d|	                    dd          d|	                    dd          d|d(|	                    d(d          d)|	                    d)d          d*|	                    d*d          d+|	                    d+d          d,|	                    d,d          d-|	                    d-d          d.|	                    d.d          d/|	                    d/d          d0|	                    d0d          d1|	                    d1d          d2|	                    d2d          d3|	                    d3d          d4|	                    d4d          d5|	                    d5          d6|	                    d6          d|d7|	                    d7d          d8|	                    d8d          d9|	                    d9d          d:|	                    d:d          d;|	                    d;d          d<|	                    d<d          d=|	                    d=d          d>|	                    d>d          d?|	                    d?d          d@|	                    d@d          dA|	                    dAd          dB|	                    dBd          dC|	                    dCd          d|	                    d|          d|	                    d          d|	                    dd          d|	                    dd          dD|	                    dDd          d|	                    dd          d|	                    dd          d|	                    dd          d|	                    dd          dE|	                    dEd          dF|	                    dFd          d |	                    d d          dG|	                    dGd          dH|	                    dHd          dI|	                    dId          dJ|	                    dJd          dK|	                    dKd          d|	                    dd          dL|	                    dLd          dM|	                    dMd          dN|	                    dNd          S # t,          $ rR}t          j        dO|            dPt#          |          v r|t-          dQ                    | |                    d}~ww xY w)Szy
    Helper for 'get_model_info'. Separated out to avoid infinite loop caused by returning 'supported_openai_param's
    Nr  r  zmeta/z@latestr`  z6checking potential_model_names in litellm.model_cost: r  r  r  r  rU  r  r  r  r  max_input_tokensr  input_cost_per_tokenr   output_cost_per_tokenr  r:  r<  r\  rm  rw  ry  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_costcache_read_input_token_cost 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_imageoutput_vector_sizecitation_cost_per_tokentiered_pricingr  r  r  r  rf  rb  rd  r  search_context_cost_per_queryr	  r  z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.r  )r   
azure_llmsazure_embedding_modelsvertex_llama3_modelsr  r  r  r   r   r  rq   r  r  r  r  r  r   rQ  r  r  r  r  r   )r6  rU  r  r  r  r  r  r  r  _model_infor  _input_cost_per_token_output_cost_per_tokenr  s                 r   ri  ri    s   F
M*Mg.LM
Ju%E*/BFV/V/V"-*/Bk/Q/Q'">>>%"g&CCC	)"g&CCC	) :-@!
 !
 !
 	\EZ\\	
 	
 	
 44IJ34IJ'<*(
$ ,M:34IJ-//5GGGJ    E%: "& #'$	
 &'Q '(a "/ V *. *. +/$ &*T ,04 )- '+d  $(4! &  8++/Bm/S/S89NOO 0T'))88??? 59K!%C"g&888)=$sC..QQQ,*@S   ' #'K"u0B'B'B=$sC..QQQ,*@S   ' #'K#0G4FFF2=$sC..QQQ,*@S   ' #'K"':g>P'P'P)=$sC..QQQ,*@S   ' #'K"{g6H'H'H!=$sC..QQQ,*@S   ' #'K"ck  S   6A__&6 6! %,$v}}2   
 )*%6Aoo'7 7" &-$w~~2   
 *+&  v v vCv&??<>>>v "-1CT!J!J!Jv #.//2Et"L"L"L	v
 &;%:v +6///+ + +v /:oo3T/ / /v 1<5t1 1 1v -8OO14- - -v$ 2=62 2 2%v* 6A__:D6 6 6+v0 ;F//?; ; ;1v6 *5.* * *7v< 8C<d8 8 8=vB 8C<d8 8 8CvH &1__5KT%R%R%RIvJ '2oo6Mt&T&T&TKvL ,7??0$, , ,MvR .9__2. . .SvX /:oo3/ / /Yv^ '=&<_v` ,7??0$, , ,avf 0;4d0 0 0gvl -8OO14- - -mvr +6///+ + +svx 1<5t1 1 1yv~ 9D=t9 9 9vD =HOOA4= = =EvJ 9D=t9 9 9KvP (37OQU'V'V'VQvR '2oo6Mt&T&T&TSvT $/??3G#N#N#NUvV )4-t) ) )Wv\  +/?FFF]v^ "-&(;" " "_vd !__V,,,evf *5.* * *gvl *5.* * *mvr !,0A4 H H Hsvt +6///+ + +uvz &1__5KT%R%R%R{v| ,7??0$, , ,}vB )4-t) ) )CvH &1__5KT%R%R%RIvJ '2oo6Mt&T&T&TKvL $/??3G#N#N#NMvN 0;4d0 0 0OvT +6///+ + +UvZ %0OO4I4$P$P$P[v\ &1__5KT%R%R%R]v^ $/??3G#N#N#N_v` '2oo6Mt&T&T&Tavb /:oo3T/ / /cvh  OOE4000ivj  OOE4000kv vn  
 
 
=!==>>>CFF""G n  u  u* 
 
 	
	
s'   D` A ` Z;` 
a7%Aa22a7c                     t          j        | |          }t          | |          }t          j        d|            t          di |d|i}|S )a  
    Get a dict for the maximum tokens (context window), input_cost_per_token, output_cost_per_token  for a given model.

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

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

    Example:
        >>> get_model_info("gpt-4")
        {
            "max_tokens": 8192,
            "input_cost_per_token": 0.00003,
            "output_cost_per_token": 0.00006,
            "litellm_provider": "openai",
            "mode": "chat",
            "supported_openai_params": ["temperature", "max_tokens", "top_p", "frequency_penalty", "presence_penalty"]
        }
    r`  zmodel_info: rW  r  )r   r:   ri  r   r   rp   )r6  rU  rW  r  returned_model_infos        r   r  r    s    N &A)<   )/  K
 555666#  
 /F   r   python_type_namec                     t           j        dt          j        dt          j        dt          j        dt
          j        dt          j        dddi}|                    | d          S )	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arrayrH  NoneTypenull)rQ  r  r  r  rl  rU  rc  r  )r  python_to_json_schema_typess     r   json_schema_typer    sT     	hiywxF# '**+;XFFFr   c           	         	 ddl }ddlm} ddlm} n# t
          $ r}|d}~ww xY w| j        } |j        |           } ||          }d                    d |d         D                       }i }	g }
 |j	        |           j
        }|                                D ]L\  }}t          |d          rt          |j        j                  }nd}d}d}|d	         D ]}|j        |k    rt          |d
          rs|j        }d|v r|                    d          d         }n=d|v r9	 t%          t'           ||                              }d}n# t
          $ r Y nw xY wt          |          }d                    d |j        D                       }|||d}t+          d |                                D                       |	|<   |j        |j        k    r|
                    |           N||d|	dd}|
r|
|d         d<   |S )ae  Using type hints and numpy-styled docstring,
    produce a dictionnary 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
c                 6    g | ]}|                                 S r  stripr   ss     r   r  z$function_to_dict.<locals>.<listcomp>  s     DDD1QWWYYDDDr   Summary
annotation
Parametersr   optional,{r  c                 6    g | ]}|                                 S r  r  r  s     r   r  z$function_to_dict.<locals>.<listcomp><  s     .R.R.RQqwwyy.R.R.Rr   )r   descriptionenumc                 F    g | ]\  }}t          |t                    ||fS r  r   rQ  r  s      r   r  z$function_to_dict.<locals>.<listcomp>E  s/    III1jC6H6HIaVIIIr   rH  r   
propertiesnamer  ro  ro  required)inspectastr  numpydoc.docscraper  r   r  getdocr   	signaturero  r  ru  r  r  r  r   r  rQ  rU  descrc  r  emptyr   )input_functionr  r  r  r  r  	docstringnumpydocr  ro  required_params
param_info
param_namerZ  
param_typeparam_description
param_enum
param_data
param_dictr  s                       r   function_to_dictr    s   $$$$$$5555555    "D~..I~i((H))DD0CDDDEEK JO"">22=J'--// '/ '/
E5,'' 	)%*:*CDDJJJ 
 #<0 	T 	TJ*,,:v.. >!+J!Z//%/%5%5c%:%:1%=


**!),T,,z2J2J-K-K)L)LJ)1JJ( ! ! ! D!!1*!=!=J$(II.R.R*/.R.R.R$S$S! ,
 

 "&II
 0 0 2 2III"
 "

:
 =EK''"":... "$
 
 F  ;+:|Z(Ms"    
$$"'E


EEc                 t    t          j        |           }|                    |          }t          |          S )Npath)r  URL	copy_withrQ  )original_urlnew_pathr  modified_urls       r   
modify_urlr   ]  s2    
)L
!
!C==h=//L|r   rI  	num_callsforce_timeoutc                 V   dd}|r||r|}fdt          |          D             }t          j                    }	 t          j        | ||||           t          j                    }	|	|z
  }
|
ddd dS # t          $ r)}t          j                    }	|	|z
  }
|
dd|dcY d }~S d }~ww xY w)NzHey, how's it goingrD  c                     g | ]}d dg	S )rK  roler7  r  )r   rj  test_prompts     r   r  z#load_test_model.<locals>.<listcomp>q  s$    VVVq&[99:VVVr   )r6  r/  rU  rI  r"  r   )total_response_time
calls_madestatusr{  failed)rangetimer   batch_completionr   )r6  rU  rI  r1  r!  r"  
test_callsr/  rD  r  response_timer  r'  s               @r   load_test_modelr1  c  s    (KJ  
VVVVE*DUDUVVVHJ
  3'	
 	
 	
 	
 9;; :-#0	
 
 	
  
 
 
9;; :-#0	
 
 	
 	
 	
 	
 	
 	

s   7A5 5
B(?B#B(#B(c                    | dk    r%t          j                                                    S | dk    r%t          j                                                    S | dk    r%t          j                                                    S g S )z,Return the fields required for each providerr"  r  azure_ai)r   r  get_required_paramsr  AzureAIStudioConfigrU  s    r   get_provider_fieldsr7    s}     l**'))==???		(	(#%%99;;;	
	*	**,,@@BBB 	r   c                     d t                                                      D             } i }i }t          j        dd           }|r|                    d          ng }|                                 D ]d\  }}|-t          j                    ||<   t          j                    ||<   4t          j        |          ||<   t          j        |          ||<   e|D ].}t          j                    ||<   t          j                    ||<   /||fS )Nc                 >    i | ]\  }}||d nt          |          S )Nr  r   )r   r  r  s      r   r  z5create_proxy_transport_and_mounts.<locals>.<dictcomp>  s>       C 	S[TTennn  r   NO_PROXYr  )proxy)r   r  osgetenvr  r  HTTPTransportAsyncHTTPTransport)proxiessync_proxy_mountsasync_proxy_mountsno_proxyno_proxy_urlsr  r;  r  s           r   !create_proxy_transport_and_mountsrE    s6    /117799  G
  yT**H+3;HNN3'''Mmmoo L L
U=%*%8%:%:c"&+&>&@&@s##%*%8u%E%E%Ec"&+&>U&K&K&Ks## = =!&!4!6!6#"'":"<"<3000r   r=  ra  c                 d   d}g }| ||dS 	 t          |           \  }}}}n# t          $ r d}Y nw xY w|r|dk    r)dt          j        v rd}no|                    d           nX|dk    rGd	t          j        v r d
t          j        v rdt          j        v rd}n$|                    g d           n|dk    r)dt          j        v rd}n|                    d           n|dk    r)dt          j        v rd}n|                    d           n|dk    r)dt          j        v rd}n|                    d           n~|dk    r)dt          j        v rd}nf|                    d           nO|dk    r)dt          j        v rd}n7|                    d           n |dk    r)dt          j        v rd}n|                    d           
n|dk    r9dt          j        v rdt          j        v rd}
n|                    ddg           
n|dk    r)dt          j        v rd}
n|                    d           
n|dk    r)dt          j        v rd}
nk|                    d           
nT|d k    r)d!t          j        v rd}
n<|                    d!           
n%|d"k    r)d#t          j        v rd}
n|                    d#           	n|d$k    r)d%t          j        v rd}	n|                    d%           	n|d&k    r)d't          j        v rd}	n|                    d'           	n|d(k    s|d)k    rLd*t          j        v rd+t          j        v rd}	nl|                    d*           |                    d+           	n@|d,v r)d-t          j        v rd}	n*|                    d-           	n|d.k    r)d/t          j        v rd}n|                    d/           n|d0k    r)d1t          j        v rd}n|                    d1           n|d2k    r)d3t          j        v rd}n|                    d3           n|d4k    rLd5t          j        v sd6t          j        v rd}n`|                    d5           |                    d6           n4|d7k    r)d8t          j        v rd}n|                    d8           n|d9k    r)d:t          j        v rd}n|                    d:           n|d;k    r)d<t          j        v rd}n|                    d<           n|d$k    r)d%t          j        v rd}n|                    d%           nx|d=k    r)d>t          j        v rd}n`|                    d>           nI|d?k    r)dt          j        v rd}n1|                    d           n|d@k    r)dAt          j        v rd}n|                    dA           n|dBk    s|dCk    r)dDt          j        v rd}n|                    dD           n|dEk    r)dFt          j        v rd}n|                    dF           n|dGk    r)dHt          j        v rd}no|                    dH           nX|dIk    r)dJt          j        v rd}n@|                    dJ           n)|dKk    r)dLt          j        v rd}n|                    dL           n|dMk    r)dNt          j        v rd}n|                    dN           n|dOk    r)dPt          j        v rd}n|                    dP           n|dQk    rSdRt          j        v s*dSt          j        v sdTt          j        v sdUt          j        v rd}nZ|                    dR           nC|dVk    rZdWt          j        v r dXt          j        v sdYt          j        v rd}n|                    dW           |                    dY           n|dZk    r)d[t          j        v rd}n|                    d[           n|d\k    r)d]t          j        v rd}n|                    d]           n|d^k    r)d_t          j        v rd}nm|                    d_           nV|d`k    r)dat          j        v rd}n>|                    da           n'|dbk    r'dct          j        v rd}n|                    dc           n| t          j        v s*| t          j        v s| t          j	        v s| t          j
        v r)dt          j        v rd}n|                    d           n| t          j        v r)dt          j        v rd}nw|                    d           n`| t          j        v r)dt          j        v rd}n@|                    d           n)| t          j        v r)dt          j        v rd}n	|                    d           n| t          j        v r)dt          j        v rd}n|                    d           n| t          j        v r)dt          j        v rd}n|                    d           n| t          j        v r)dt          j        v rd}nd|                    d           nM| t          j        v s"| t          j        v s| t          j        d         v r9dt          j        v rdt          j        v rd}n|                    ddg           n| t          j        v r)dt          j        v rd}n|                    d           n| t          j        v r)dt          j        v rd}n|                    d           nv| t          j        v r)d!t          j        v rd}nV|                    d!           n?| t          j        v r)d#t          j        v rd}n|                    d#           n| t          j        v r'd%t          j        v rd}n|                    d%           n| t          j        v r'd't          j        v rd}n|                    d'           n| t          j        v r'd[t          j        v rd}n|                    d[           ni| t          j        v r'd]t          j        v rd}nJ|                    d]           n4| t          j        v r&d_t          j        v rd}n|                    d_           ddt:          t<                   det<          dft:          t<                   fdg}| ||dh          }| ||di          }| ||dj          }t?          |          dkk    rd}||dS )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_keysr%  r  rW  TrW  AZURE_API_BASEr  AZURE_API_KEY)rI  r  rJ  r  rX  r  r]  r5  r`  r  OPENROUTER_API_KEYr  VERCEL_AI_GATEWAY_API_KEY	datarobotDATAROBOT_API_TOKENr  VERTEXAI_PROJECTr  r  r^  r  AI21_API_KEYr  ra  r  rZ  r[  r\  r  r_  rX  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_KEYr$  GOOGLE_API_KEYGEMINI_API_KEYr  GROQ_API_KEYr#  NVIDIA_NIM_API_KEYr  CEREBRAS_API_KEYr  XAI_API_KEYr  r  VOLCENGINE_API_KEYr  r  CODESTRAL_API_KEYr  DEEPSEEK_API_KEYr(  MISTRAL_API_KEYpalmPALM_API_KEYr  PERPLEXITYAI_API_KEYr*  VOYAGE_API_KEYr+  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  rc  r  rd  	dashscopeDASHSCOPE_API_KEYmoonshotMOONSHOT_API_KEYr  exclude_patternr   c                      fd| D             S )zDFilter out keys that contain the exclude_pattern (case insensitive).c                 @    g | ]}|                                 v|S r  r}  )r   r  rs  s     r   r  zEvalidate_environment.<locals>.filter_missing_keys.<locals>.<listcomp>4  s+    JJJciikk'I'I'I'I'Ir   r  )r  rs  s    `r   filter_missing_keysz1validate_environment.<locals>.filter_missing_keys2  s    JJJJtJJJJr   r=  rI  ra  r   ) r9   r   r<  environr   r#  r   r  r  open_ai_embedding_modelsopenai_image_generation_modelsr8  r6  replicate_modelsr  r  datarobot_modelsr  r  models_by_providerhuggingface_modelsr  together_ai_modelsr  baseten_modelsr  r  nebius_modelswandb_modelsr   rQ  rP  )	r6  r=  rI  ra  rG  rH  rj  rU  rv  s	            r   validate_environmentr    s   $   L}#6(
 
 	

#'7e'D'D'D$11 # # #"#  V5(**2:--&*####$45555 G++ BJ..'2:55#rz11&*####LLL    !K//"bj00&*####$78888 H,,2:--&*####$45555 K//"bj00&*####$78888 L00#rz11&*####$89999 $777*bj88&*####$?@@@@ K//$
22&*####$9:::: K//!RZ//4G2:4U4U&*####%79L$MNNNN M11$
22&*####$9:::: F**++&*####N3333 M11#rz11&*####$89999 M11$
22&*####$9:::: I-- BJ..&*####$56666 K//"bj00&*####$78888 I--1D1S1S#rz11+rz99&*####$7888##$;<<<< $=== BJ..&*####$56666 J..!RZ//&*####$67777 K//"bj00&*####$78888 $444'2:55&*####$<==== H,, BJ..4D
4R4R&*####$4555##$45555 F**++&*####N3333 L00#rz11&*####$89999 J..!RZ//&*####$67777 I-- BJ..&*####$56666 E))
**&*####M2222 K//++&*####N3333 L00#rz11&*####$89999;.."&AAA"bj00&*####$78888 J..!RZ//&*####$67777 I-- BJ..&*####$56666 F**++&*####N3333 L00%33&*####$:;;;; H,,2:--&*####$45555 J..!RZ//&*####$67777 N22&"*44&"*44(BJ66'2:55&*####$:;;;; L00#rz11'2:55(BJ66&*####$8999##$9:::: H,,2:--&*####$45555 H,,2:--&*####$45555 G++"*,,&*####O4444 K//"bj00&*####$78888 J..!RZ//&*####$6777 W;;;>>>888>>>2:--&*####$45555g..."bj00&*####$78888g+++2:--&*####$45555g..."bj00&*####$78888g///#rz11&*####$89999g666*bj88&*####$?@@@@g...$
22&*####$9:::: W///2222;???!RZ//4G2:4U4U&*####%79L$MNNNNg000$
22&*####$9::::g)))++&*####N3333g000#rz11&*####$89999g000$
22&*####$9::::g,,, BJ..&*####$56666g..."bj00&*####$78888g+++2:--&*####$45555g+++2:--&*####$45555g***"*,,&*####O444K$s) Kc Kd3i K K K K **<CC**<DD**<GG
<A"#6UUUs   # 22c                  $    t          j        | i |S r   )r   r`  )r}  r  s     r   acreater  E  s    ////r   c                 0   d                     d |D                       }d}d| v rO	 dd l}n# t          $ r t          d           Y nw xY wddlm}m}m}  |            }|                    |          }n!t          t          j	        |                    }|S )N c              3   &   K   | ]}|d          V  dS )r7  Nr  r   r3  s     r   r   z*prompt_token_calculator.<locals>.<genexpr>K  s'      ??7GI&??????r   r   claudez:Anthropic import failed please run `pip install anthropic`)	AI_PROMPTHUMAN_PROMPT	Anthropic)
r   r  r   r  r  r  count_tokensrP  r2   r@  )	r6  r/  rA  
num_tokensr  r  r  r  anthropic_objs	            r   prompt_token_calculatorr  I  s    88??h?????DJ5	T 	T 	T 	TRSSSSS	T@@@@@@@@@@!	"//55

..//
s   , AAc                     	 | t           j        v s| t           j        v r!t          j                            |            d S dddg}t          j        | |           d S # t          $ r t          d| d          w xY w)NrK  zHello Worldr%  r6  r/  r8  )r3  r6  rT  )	r   r  r  r  modelsretriever_  r   r   r  s     r   valid_modelr  [  s    H W;;;>>>M""5)))))!'MBBCHUX>>>>>> H H HbBGGGGHs   ;A A A:c                 ~    dddg}	 t          j        | ||d           dS # t          $ r Y dS t          $ r Y dS w xY w)aW  
    Checks if a given API key is valid for a specific model by making a litellm.completion call with max_tokens=10

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

    Returns:
        bool: True if the API key is valid for the model, False otherwise.
    rK  zHey, how's it going?r%  rS  )r6  r/  r=  r  TF)r   r_  r   r   )r6  r=  r/  s      r   check_valid_keyr  j  s      ,BCCDH(G	
 	
 	
 	
 t   uu   uus   " 
<	<<r  c                 F    | dk    rdS | dk    rdS | dk    rdS | dk    rdS dS )a  
    Retries on 408, 409, 429 and 500 errors.

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

    Reimplementation of openai's should retry logic, since that one can't be imported.
    https://github.com/openai/openai-python/blob/af67cfab4210d8e497c05390ce14f39105c77519/src/openai/_base_client.py#L639
    i  Ti  i  r  Fr  )r  s    r   _should_retryr    sO     ct ct ct ct5r   response_headersc                 b   	 ddl }| |                     d          }	 t          |          }nn# t          $ r_ |j                            |          }|d}n=|j                            |          }t          |t          j                    z
            }Y nw xY wd}|S # t          $ r d}Y dS w xY w)z
    Reimplementation of openai's calculate retry after, since that one can't be imported.
    https://github.com/openai/openai-python/blob/af67cfab4210d8e497c05390ce14f39105c77519/src/openai/_base_client.py#L631
    r   Nzretry-after)emailr  r  r   rt  parsedate_tz	mktime_tzr-  )r  r  retry_headerretry_afterretry_date_tuple
retry_dates         r   &_get_retry_after_from_exception_headerr    s     '+//>>L@!,// @ @ @#(;#;#;L#I#I #+"$KK!&!6!67G!H!HJ"%j49;;&>"?"?K@ K   s2   B . B A&BB BB B.-B.remaining_retriesr  min_timeoutc                    t          |          }t          t          j                    z  }|d|cxk     rdk    rn n||z   S || z
  }t          t	          d|          z  }t          ||          }t          |t                    }||z   S )Nr   <   g       @)r  r!   randomr    powmaxr  r"   )r  r  r  r  r  jitterr  sleep_secondss           r   _calculate_retry_afterr    s     99IJJK fmoo%F 1{#8#8#8#8b#8#8#8#8#8V##  11K'#c;*?*??M {33M77M6!!r   rolesinitial_prompt_valuefinal_prompt_valuetokenizer_configc                    | }|g}	 t          |           d         } |                    |            n# t          $ r Y nw xY w|r|D ]}|ddt          j        |<   n|D ]}|||dt          j        |<   t          j        S )a  
    Register a prompt template to follow your custom format for a given model

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

    Returns:
        dict: The updated custom prompt dictionary.
    Example usage:
    ```
    import litellm
    litellm.register_prompt_template(
            model="llama-2",
        initial_prompt_value="You are a good assistant" # [OPTIONAL]
            roles={
            "system": {
                "pre_message": "[INST] <<SYS>>
", # [OPTIONAL]
                "post_message": "
<</SYS>>
 [/INST]
" # [OPTIONAL]
            },
            "user": {
                "pre_message": "[INST] ", # [OPTIONAL]
                "post_message": " [/INST]" # [OPTIONAL]
            },
            "assistant": {
                "pre_message": "
" # [OPTIONAL]
                "post_message": "
" # [OPTIONAL]
            }
        }
        final_prompt_value="Now answer as best you can:" # [OPTIONAL]
    )
    ```
    r%  r   r   )r2  r*  )r  r  r  )r9   r   r   r   known_tokenizer_configcustom_prompt_dict)r6  r  r  r  r  complete_modelpotential_modelsr  s           r   register_prompt_templater    s    T N&' u---a0&&&&    ! 	 	A-#1 1G*1--	 " 	 	A(<&8- -G&q)) %%s   +3 
A A c                   `    e Zd Z	 	 ddee         dee         fdZd Zd Zde	fdZ
d	 Zd
 ZdS )TextCompletionStreamWrapperNrJ  rU  c                 >    || _         || _        || _        || _        d S r   )completion_streamr6  rJ  rU  )selfr  r6  rJ  rU  s        r   __init__z$TextCompletionStreamWrapper.__init__  s)     "3
,#6   r   c                     | S r   r  r  s    r   __iter__z$TextCompletionStreamWrapper.__iter__*      r   c                     | S r   r  r  s    r   	__aiter__z%TextCompletionStreamWrapper.__aiter__-  r  r   r  c           	         	 t                      }|                    dd           |d<   d|d<   |                    dd           |d<   |                    dd           |d<   t                      }t          |t                    rt
          |d         d         d         }|d	         |d
<   |                    d          |d<   |d         d         d         |d<   |d         d         d         |d<   |g|d<   | j        r6| j                            dd          du r|                    dd           |d<   |S # t
          $ r'}t          d| dt          |                     d }~ww xY w)Nr(  rn  rH  createdr6  r  r   rO  r7  rA  reasoning_contentr  finish_reasoninclude_usageFTusagez=Error occurred converting to text completion object - chunk: z	; Error: )rz   r  ry   r   rc   r   rJ  rQ  )r  r  r  text_choicesrO  r  s         r   !convert_to_text_completion_objectz=TextCompletionStreamWrapper.convert_to_text_completion_object0  s   	-//H"YYtT22HTN!2HX"'))It"<"<HY %		'4 8 8HW&==Lw     )$Q'0E#(#3L 05		:M0N0NL,-$))$4Q$7$@L!,1),<Q,?,PL)#/.HY #='++OUCCtKK$)IIgt$<$<!O 	 	 	hPUhh`cde`f`fhh  	s   D1D4 4
E%>"E  E%c                    t                       	 | j        D ]*}|dk    s|t          |                     |          }|c S t          # t          $ r t          t          $ r%}t          | j        | j        pd|i i           d }~ww xY w)NNoner  r8  )r6  rU  original_exceptioncompletion_kwargsextra_kwargs)rz   r  r   r  StopIterationr4   r6  rU  )r  r  processed_chunkr  s       r   __next__z$TextCompletionStreamWrapper.__next__P  s       	/ ' 'F??em#O"&"H"Hu"H"U"U&&&& 	  	  	  	 	 	 j$($<$B#$"$   	s   1A	 A	 	B# BBc                    K   	 | j         2 3 d {V }|dk    s|t          |                     |          }|c S 6 t          # t          $ r t          w xY w)Nr  r  )r  r   r  r  StopAsyncIteration)r  r  r  s      r   	__anext__z%TextCompletionStreamWrapper.__anext__e  s      	%#5 ' ' ' ' ' ' 'eF??em#O"&"H"Hu"H"U"U&&&&	  6
   	% 	% 	%$$	%s   A ;)A A ANN)r  ri  rj  r   rc  rQ  r  r  r  rr   r  r  r  r  r   r   r  r    s        
 *.-1
7 
7 !	
7
 &c]
7 
7 
7 
7    }    @  *	% 	% 	% 	% 	%r   r  c              #     K   t          |t          j                  r|t          dt	          |          d          D ]}t          d|||dz                      }||| j        d         _        n{g }t          |          D ]b}t          j        	                    |t          j                            d|||dz                                }|
                    |           c|| _        | V  d S Nr      	assistantr%  )r  rO  r   r   MockExceptionr,  rP  rg   r  rO  rt  rx   r   	r  mock_responser6  r  icompletion_obj_all_choicesj_streaming_choices	            r   mock_completion_streaming_objr  q  s      -!677 1c-((!,,  Kq1q5y9QRRR9.<N"1%++L1XX 7 7$+M$B$B!---(-AE	2J .   %C % %! ##$56666%1N" r   c                  K   t          |t          j                  r|t          dt	          |          d          D ]}t          d|||dz                      }||| j        d         _        n{g }t          |          D ]b}t          j        	                    |t          j                            d|||dz                                }|
                    |           c|| _        | W V  d S r  r  r  s	            r   #async_mock_completion_streaming_objr    s"      -!677 1c-((!,,  Kq1q5y9QRRR9.<N"1%++L1XX 7 7$+M$B$B!---(-AE	2J .   %C % %! ##$56666%1N" r   c                     	 dd l } |j                     t          | d          5 }t          j        |          }d d d            n# 1 swxY w Y   |S # t
          $ r}|d }~ww xY w)Nr   r~   )r<  getcwdopenrJ  loadr   )config_pathr<  config_fileconfigr  s        r   read_config_argsr    s    
				+s## 	,{Y{++F	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,    s9   #A AA A

A A
A 
A$AA$c                     d| d}t          |g|          }||k    r1t          d           t          |||          }t          |g|          }|||z
  fS )Nsystemr%  zH`tokentrimmer`: Warning, system message exceeds token limit. Trimming...)get_token_countr   shorten_message_to_fit_limit)system_messager  r6  system_message_eventsystem_message_tokensnew_system_messages         r   process_system_messager    s    $,HH+-A,BEJJz))V	
 	
 	
 : *e
 
 !01C0De L L.C!CCCr   c                    | d d d         } g }t          j        d|  d| d|            | D ]{}t          j        d|            t          ||          }||z
  }t          j        d| d|            |dk    r n,t          |||||	          }t          j        d
|            |t          j        d|            |S )Nr  z(calling process_messages with messages: , max_tokens: z	, model: zprocessing final_messages: zused_tokens: z, available_tokens: r  )final_messagesr3  available_tokensr  r6  z/final_messages after attempt_message_addition: Final messages: )r   r   r  attempt_message_addition)r/  r  r6  r  r3  used_tokensr  s          r   process_messagesr    s3   "~HNg8gg:gg`egg    
 
K>KKLLL%ne<<%3OKOO=MOO	
 	
 	
 q  E1)-!
 
 
 	NnNN	
 	
 	
 	
 <N<<===r   c                 J   |g| z   }t          ||          }t          j        d| d|            ||k    r|S d|vret          j        d           t          |||          }t	          || ||          rt          j        d           |g| z   S t          j        d           | S )Nr/  r6  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  r3  r  r  r6  temp_messagestemp_message_tokensupdated_messages           r   r   r     s     I.M)=NNNO 3OO:OO   j(( 
	'	'IJJJ6w@PRWXX?NJNN 	Q O   $$~55 !OPPPr   c                 :    t          || gz   |          |k    rdS dS r  )r  )r3  r/  r  r6  s       r   r  r    s(    x7)+U33zAAt5r   c                 $    t          ||           S )Nr  r   r  s     r   r  r    s    ux8888r   raise_error_on_max_limitc                 j   |d|v r|dk    r| S | d         }d}t          j        d|            |t          k     rt          j        d|             t          | g|          }t          j        d| d	|            ||k    rn||z  }t	          t          |          |z            d
z
  }t          d|          }|dz  }	|d|	         }
||	 d         }|
dz   |z   }|| d<   t          j        d|            |}|d
z  }|t          k     |t          k    r|rt          d| dt           d          | S )a|  
    Shorten a message to fit within a token limit by removing characters from the middle.

    Args:
        message: The message to shorten
        tokens_needed: The maximum number of tokens allowed
        model: The model being used (optional)
        raise_error_on_max_limit: If True, raises an error when max attempts reached. If False, returns final trimmed content.
    NgptrS  r7  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  rP  r  r   )r3  tokens_neededr6  r  r7  attemptstotal_tokensratio
new_lengthhalf_length	left_half
right_halftrimmed_contents                r   r  r    s     Ue^^0C0Ci GH.W..///
0
0
0JJJKKK&y%88K\KKMKK	
 	
 	
 =((,.W-..2
J''
 AoL[L)	k\]]+
#d*Z7,	BBBCCC!A/ 0
0
02 ...3K.wMwwQlwww
 
 	
 Nr   
trim_ratioreturn_response_tokensc                    | }t          j        |           } 	 |_|t          j        v rOt          j        |                             dt          j        |         d                   }t          ||z            }n| S d}| D ]"}|d         dk    r||rdndz  }||d         z  }#g }	t          |           D ]%}|d         d	k    r n|	                    |           &|	                                 t          |	          r| dt          |	                    } t          |pd| 
          }
t          d|
 d|            |
|k     r| |	z   S t          d|  d|
 d|            d}|r*t          |||          \  }}|dk    r|gS d | D             } t          j        d|            t          | ||          }t          j        d|            |r|g|z   }t          |	          dk    r|                    |	           t          j        d| d|            |r|t#          ||          z
  }||fS |S # t$          $ r@}t          j        d                    t+          |                               |cY d}~S d}~ww xY w)a  
    Trim a list of messages to fit within a model's token limit.

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

    Returns:
        Trimmed messages and optionally the number of tokens available for response.
    Nr  r  r8  r&  r  r  r7  rs  r  zCurrent tokens: z, max tokens: zNeed to trim input messages: z, current_tokensr  )r  r  r6  r   c                 *    g | ]}|d          dk    |S )r&  r  r  r  s     r   r  z!trim_messages.<locals>.<listcomp>  s&    WWWG76?h;V;V;V;V;Vr   zProcessed system message: )r/  r  r6  zProcessed messages: r  z, return_response_tokens: z'Got exception while token trimming - {})r"  rq  r   r  r  r  rZ  r   reverserP  r   r   r  r   r   r  r#  r  r   r{  r  rQ  )r/  r6  r  r  r  original_messagesmax_tokens_for_modelr  r3  tool_messagescurrent_tokensr  r  response_tokensr  s                  r   trim_messagesr"  A  ss   , !}X&&HR!***'.'9%'@'D'D&(:5(A,(O( ($ !!5
!BCC


   	5 	5Gv(**."@$$b@')"44 )) 	* 	*Gv&((  ))))} 	7 53}#5#5"5 56H&U[b8LLLSSSzSSTTT J&&m++ 	pHppnppdnpp	
 	
 	
 04 
	X/E-*E0 0 0, * Q,-- XWxWWWHP:NPPQQQ)*E
 
 
 	DNDDEEE   	E23nDN}!!!!-000a~aaI_aa	
 	
 	
 #	3 )?>5+Q+QQO!?22 ! ! ! 5<<SVVDD	
 	
 	
 !      	!s8   A H0 9CH0 9H0 ?B.H0 .H0 0
I::5I5/I:5I:)InMemoryCachec            	            e Zd Zddedef fdZdefdZdefdZd	e	e         d
e	e
         defdZ	 	 dd	e	e         d
e	e
         de	ee                  fdZd	ed
e	e
         dee         fdZ xZS )AvailableModelsCache,  r  ttl_secondsmax_sizec                 Z    t                                          ||           d | _        d S r   )superr  	_env_hash)r  r'  r(  	__class__s      r   r  zAvailableModelsCache.__init__  s(    h///(,r   r   c                     d t           j                                        D             }t          t	          t          |                                                              S )z/Create a hash of relevant environment variablesc                 D    i | ]\  }}|                     d           ||S ))OPENAI	ANTHROPICAZUREAWSr  r  s      r   r  z6AvailableModelsCache._get_env_hash.<locals>.<dictcomp>  sA     
 
 
1||CDD
q
 
 
r   )r<  rw  r  rQ  hash	frozenset)r  env_varss     r   _get_env_hashz"AvailableModelsCache._get_env_hash  sX    
 

((**
 
 

 4	(.."2"23344555r   c                 `    |                                  }| j        	|| _        dS || j        k    S )z+Check if environment variables have changedNT)r6  r+  )r  current_hashs     r   _check_env_changedz'AvailableModelsCache._check_env_changed  s4    ))++>!)DN4t~--r   rU  rM  c                     d}||                                 }|| d| }t          j        |                                                                          S )Nr8  :)model_dump_jsonhashlibsha256r@  	hexdigest)r  rU  rM  	valid_strs       r   _get_cache_keyz#AvailableModelsCache._get_cache_key  sa    
 	%&6688I*.<<<<I~i..0011;;===r   Nc                 <   |/|                                  r| j                                         dS |                     ||          }t	          t
          t          t                            |                     |                    }|t          j
        |          S |S )zGet cached model infoN)r9  
cache_dictclearrA  r   r   r   rQ  	get_cacher"  rq  )r  rU  rM  	cache_keyr  s        r   get_cached_model_infoz*AvailableModelsCache.get_cached_model_info  s     !d&=&=&?&?!O!!###4''(;^LL	htCy)4>>)+D+DEE=(((r   available_modelsc                     |                      ||          }|                     |t          j        |                     dS )zSet cached model infoN)rA  	set_cacher"  rq  )r  rU  rM  rH  rF  s        r   set_cached_model_infoz*AvailableModelsCache.set_cached_model_info  s?     ''(;^LL	y$-0@"A"ABBBBBr   )r&  r  r  )r  ri  rj  r  r  rQ  r6  rl  r9  r   r   rA  r   rG  rK  __classcell__r,  s   @r   r%  r%    sR       - -C - - - - - - -6s 6 6 6 6.D . . . .>%c]> !0> 
	> > > > .237 %c] !0 
$s)		   &C C !0C s)	C C C C C C C Cr   r%  c                 <   g }t           j                                        }t          j        D ]n}| r|| k    r|                    dd          }|}|                                 d}|                                 d}||v s||v r|                    |           o|S )Nrj  r8  _API_KEY)r<  rw  r  r   r   r>  upperr   )rU  valid_providersenviron_keysr   env_provider_1env_provider_2expected_provider_key_1expected_provider_key_2s           r   #_infer_valid_provider_from_env_varsrW    s     "$O:??$$L) - - 	8/B#B#B "))#r22! &4%9%9%;%;"E"E"E%3%9%9%;%;"E"E"E#|33&,66 ""8,,,r   c                 0   	 t                               ||          }||S |                     ||j        nd ||j        nd           }t                               |||           |S # t          $ r#}t          j        d|            g cY d }~S d }~ww xY w)N)r=  rI  Error getting valid models: )	_model_cacherG  
get_modelsr=  rI  rK  r   r   rN  )r  rU  rM  r  r  r  s         r   #_get_valid_models_from_provider_apir\    s    
$::
 
 $   ++.<.HN**d0>0J^,,PT , 
 

 	**+>PVWWW   AaAABBB						s#   A( AA( (
B2B
BBcheck_provider_endpointc                    	 |t          d          }|||_        |||_        | pt          j        } g }g }|r|g}nt          |          }|D ]}t                              dt          |                    }|r||k    r4|dk    r|	                    d           P|)| r'|%|
                    t          |||                     {t          j        t          j                            |g                     }	|
                    |	           |S # t           $ r#}
t#          j        d|
            g cY d}
~
S d}
~
ww xY w)a  
    Returns a list of valid LLMs based on the set environment variables

    Args:
        check_provider_endpoint: If True, will check the provider's endpoint for valid models.
        custom_llm_provider: If provided, will only check the provider's endpoint for valid models.
        api_key: If provided, will use the API key to get valid models.
        api_base: If provided, will use the API base to get valid models.
    Returns:
        A list of valid LLMs
    Nr8  r%  r  rW  z	Azure-LLMrY  )r   r=  rI  r   r]  rW  r  r  rl   r   r#  r\  r"  rq  r|  r  r   r   rN  )r]  rU  rM  r=  rI  rQ  valid_modelsr   r  models_for_providerr  s              r   get_valid_modelsra  )  s   &: !+"555N%,N"&.N# $Fw'F 	 
 &("$  	W23OOABUVVO' 	9 	9H3KK%h// L  O
 # x3F'F'F7""##K0000++ ,(##7' &     '+m.228R@@' '# ##$78888   AaAABBB						s   DD 
ED<6E<Ec           	         t                      sd S 	 d|v r|d         du r| j        dk    rd S d|v r|d         du r| j        dk    rd S d|v r|d         du r| j        dk    rd S d                    t          t          |                    }d                    d	 |                                D                       }t          d
           t          d           |r!|rt          d| j         d| d| d           nT|rt          d| j         d| d           n6|rt          d| j         d| d           nt          d| j         d           t          d
           d S # t          $ r Y d S w xY w)Nr`  Tr_  rh  rg  r  img_generationr  c              3   D   K   | ]\  }}| d t          |           V  dS )=N)repr)r   r  r  s      r   r   z/print_args_passed_to_litellm.<locals>.<genexpr>  s:      WW*#u#55U55WWWWWWr   r  z[92mRequest to litellm:[0mz[92mlitellm.(z)[0mz()[0m)r   r  r   maprf  r  r   r   )r&  r}  r  args_str
kwargs_strs        r   r  r  y  s/    . V##}%--!*l::FF""|$,,!*k99F''()T11!*.>>>F99St__--YYWWWWWWW
	
 	
 	
 	0	
 	
 	
  	TF 	T`#4#=````J```     		TR#4#=RRRRR     	TT#4#=TT
TTT    R->-GRRRSSSd   s#   E" E" E" #C=E" "
E0/E0c                     	 d|                      d          z   dz   |                    d          z   }|S # t          $ r Y d S w xY w)Nztime-z%H-%M-%S-%frj  r(  )strftimer  r   )rD  rM  response_ids      r   get_logging_idrn    se    j))-8883>AQAQRVAWAWW 	    tts   25 
AAc                     | d S |                      di           }|@|                     dd           }||S |                     di           }t          |          S d S )NrM  r  r	  )r	  )r  r6   )model_call_detailsrM  _base_modelr	  s       r   _get_base_model_from_metadatarr    su    !t'++,<bAAN!$((t<<"!%%j"5598LLLL4r   c                   8    e Zd Zd
dedefdZd Zd Zd Zd Z	d	S )ModelResponseIteratorFr  convert_to_deltac                     |du rIt          d          | _        | j        j        d         j        }|j        d         j        j        |_        n|| _        d| _        d S )NT)rC  r   F)rr   r  r  rO  r3  r7  is_done)r  r  ru  _deltas       r   r  zModelResponseIterator.__init__  s]    t##"/t"<"<"<D(039F+3A6>FFNN"0Dr   c                     | S r   r  r  s    r   r  zModelResponseIterator.__iter__  r  r   c                 :    | j         rt          d| _         | j        S NT)rw  r  r  r  s    r   r  zModelResponseIterator.__next__  s"    < 	 ""r   c                     | S r   r  r  s    r   r  zModelResponseIterator.__aiter__  r  r   c                 >   K   | j         rt          d| _         | j        S r{  )rw  r  r  r  s    r   r  zModelResponseIterator.__anext__  s&      < 	%$$""r   NF)
r  ri  rj  rr   rl  r  r  r  r  r  r  r   r   rt  rt    sw         }       # # #  # # # # #r   rt  c                   @    e Zd Zddee         fdZd Zd Zd Zd Z	dS )	ModelResponseListIteratorNdelayc                 0    || _         d| _        || _        d S r  )model_responsesr  r  )r  r  r  s      r   r  z"ModelResponseListIterator.__init__  s    .



r   c                     | S r   r  r  s    r   r  z"ModelResponseListIterator.__iter__  r  r   c                     | j         t          | j                  k    rt          | j        | j                  }| xj         dz  c_         | j        rt          j        | j                   |S Nr   )r  rP  r  r  r  r-  sleepr  r  s     r   r  z"ModelResponseListIterator.__next__  s`    :T12222-dj9

a

: 	#Jtz"""r   c                     | S r   r  r  s    r   r  z#ModelResponseListIterator.__aiter__  r  r   c                    K   | j         t          | j                  k    rt          | j        | j                  }| xj         dz  c_         | j        rt          j        | j                   d {V  |S r  )r  rP  r  r  r  r  r  r  s     r   r  z#ModelResponseListIterator.__anext__  sv      :T12222$$-dj9

a

: 	,-
+++++++++r   r   )
r  ri  rj  r   r  r  r  r  r  r  r  r   r   r  r    st         x              r   r  c                         e Zd Zd fdZ xZS )CustomModelResponseIteratorr   Nc                 H    t                                                       d S r   )r*  r  )r  r,  s    r   r  z$CustomModelResponseIterator.__init__  s    r   )r   N)r  ri  rj  r  rL  rM  s   @r   r  r    s=                 r   r  r3  c                     d| vrdS | d         t          | d         t                    rdS | d         D ]8}|d         dk    r*|                    d          |d         d         dk    r dS 9dS )	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"}}
    r7  FNr   rA  cache_control	ephemeralT)r   rQ  r  )r3  r7  s     r   is_cached_messager  
  s     uy!Z	0BC%H%H!u9%  FOv%%O,,8(0K??445r   r  c                    	 |                      d          sdS |                     d          d         } t          j        | d          }t          j        |                              d          | k    S # t          $ r Y dS w xY w)Nzdata:Fr  r   T)validater   )r  r  base64	b64decode	b64encoderF  r   )r  decoded_bytess     r   is_base64_encodedr  "  s    ||
 
 	 5GGCLLO (T::: ..55g>>!CC   uus   A5 AA5 5
BBc                 D    d| v r|                      d          d         S | S )z3
    s: b64str OR data:image/png;base64,b64str
    r  r   )r  )r  s    r   get_base64_strr  5  s&     axxwws||AHr   c                 @    | D ]}|                     d           dS dS )zm
    Returns true, if messages has tool call blocks.

    Used for anthropic/bedrock message validation.
    
tool_callsNTFr  )r/  r3  s     r   has_tool_call_blocksr  >  s6       ;;|$$044 15r   c           
      L    t          dt          dddi d                    gS )z
    Prevent Anthropic from raising error when tool_use block exists but no tools are provided.

    Relevent Issues: https://github.com/BerriAI/litellm/issues/5388, https://github.com/BerriAI/litellm/issues/5747
    rn  
dummy_toolzThis is a dummy tool callrH  r   r  )r   rn  )rY   rZ   r6  s    r   add_dummy_toolr  J  sK     	 9!7$"$   
	
 
	
 
	
 r   )ChatCompletionAudioObjectChatCompletionImageObjectChatCompletionTextObjectChatCompletionUserMessageOpenAIMessageContentValidUserMessageContentTypesc                     t          | t                    r|                     d          S t          | t                    r| S t	          dt          |            d          )z
    Converts a message to a dictionary if it's a Pydantic model.

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

    Returns:
        dict: The converted message.
    Texclude_nonezInvalid message type: z". Expected dict or Pydantic model.)r   r   
model_dumprc  r  r   r3  s    r   convert_to_dictr  i  sj     '9%% 
!!t!444	GT	"	" 
VT']]VVV
 
 	
r   c                     g }| D ]I}t          t          t          |                    }t          |          }|                    |           J|S )Nr  )r   rU   r  cleanup_none_field_in_messager   r/  new_messagesr3  convert_msg_to_dictcleaned_messages        r   convert_list_message_to_dictr  }  s]    L - -"#3_W5M5MNN7@STTTO,,,,r   c                 N   g }| D ]}|                     d          sd|d<   |                     d          rt          |d                   |d<   t          t          t	          |                    }t          |          }|                    |           t          |          S )z{
    Ensures all messages are valid OpenAI chat completion messages.

    Handles missing role for assistant messages.
    r&  r  r  )rN  r  r  )r  jsonify_toolsr   rU   r  r  r   &validate_chat_completion_user_messagesr  s        r    validate_and_fix_openai_messagesr    s     L - -{{6"" 	*)GFO;;|$$ 	O$18M$N$N$NGL!"#3_W5M5MNN7@STTTO,,,,1<HHHHr   c                     g }| | S | D ]i}t          |t                    r(|                    |                                           ?t          |t                    r|                    |           j|S )z<
    Ensure tools is List[dict] and not List[BaseModel]
    )r   r   r   r  rc  rN  	new_toolsrs  s      r   validate_and_fix_openai_toolsr    s     I} # #dI&& 	#T__..////d## 	#T"""r   c                 f    |                                  }d |                                D             S )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
    c                     i | ]
\  }}|||S r   r  r  s      r   r  z1cleanup_none_field_in_message.<locals>.<dictcomp>  s    BBBTQAMAqMMMr   )r"  r  )r3  new_messages     r   r  r    s1     ,,..KBB[..00BBBBr   c           	      $   t          |           D ]\  }}	 |d         dk    r|                    d          }|pt          |t                    r?t          |t                    rE|D ]B}t          |t
                    r+|                    d          t          vrt          d          C# t          $ rY}t          |t                    rt          d| d| d	          dt          |          v rt          d
| d| d          |d}~ww xY w| S )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&  rK  r7  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.)	rW  r  r   rQ  rU  rc  r  r   KeyError)r/  r  r  user_contentrO  r  s         r   r  r    s    H%%  Q	yF"" uuY//+!,44 L #L$77 L$0 L LD)$55 L#'88F#3#3;W#W#W*34J*K*K$K 
	 
	 
	!X&&  Aq  A  AC  A  A  A   &Q// KA  K  K  K  K  K   
	 Os   8B*AB**
D4ADDc                 p   ddl m}m} | | S t          | t                    r| S t          | t
                    r\|                     d          dv rd| vr| S |                     d          |                     d          t          d|  d          | S t          d|  d	t          |            d
          )z
    Confirm the tool choice is passed in the OpenAI format.

    Prevents user errors like: https://github.com/BerriAI/litellm/issues/7483
    r   )#ChatCompletionToolChoiceObjectParam$ChatCompletionToolChoiceStringValuesNr   )autononer  rn  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   rQ  rc  r  r   r   )rO  r  r  s      r   $validate_chat_completion_tool_choicer    s          
 	K	%	% 	K	&	&  OOF##'CCC+-- ??6""*kooj.I.I.QtKttt   
 	jK  	j  	jtK?P?P  	j  	j  	j  r   c                      e Zd Zedededee         fd            Zedededee	         fd            Z
edededee         dee         def
d            Zedededee         fd	            Zedededee         fd
            Ze	 ddedee         dee         fd            Zedededefd            Zedee         dedee         fd            Zedededee         fd            Zedededee         fd            Zedededee         fd            Zedededee         fd            Zededee          fd            Z!ededee"         fd            Z#edededee$         fd            Z%edededee&         fd            Z'edededee(         fd            Z)edededee*         fd            Z+dS )r  r6  r   r   c                     |t           j        k    r,t          j                            |           rt          j        S |t           j        k    r3t          j                            |           rt          j                    S t          j         j        |k    rt          j                    S t          j         j	        |k    rt          j
                    S t          j         j        |k    rt          j                    S t          j         j        |k    rt          j                    S t          j         j        |k    rt          j                    S t          j         j        |k    rt          j                    S t          j         j        |k    rt          j                    S t          j         j        |k    rt          j                    S t          j         j        |k    st          j         j        |k    rt          j                    S t          j         j        |k    rt          j                    S t          j         j        |k    rt          j                    S t          j         j        |k    rt          j                    S t          j         j         |k    rt          j!                    S t          j         j"        |k    rt          j#                    S t          j         j$        |k    rd| v rt          j#                    S d| v rt          j%                    S d| v rddl&m'}  |            S | t          j(        v r*d| v rt          j)                    S t          j*                    S | t          j+        v rt          j,                    S t          j-                    S t          j         j.        |k    rt          j/                    S t          j         j0        |k    rt          j1                    S t          j         j2        |k    rt          j3                    S t          j         j4        |k    rt          j5                    S t          j         j6        |k    rt          j7                    S t          j         j8        |k    rt          j9                    S t          j         j:        |k    rt          j;                    S t          j         j<        |k    rt          j=                    S t          j         j>        |k    rt          j?                    S t          j         j@        |k    rt          jA                    S t          j         jB        |k    rt          jC                    S t          j         jD        |k    s*t          j         jE        |k    st          j         jF        |k    rt          jG                    S t          j         jH        |k    rt          jI                    S t          j         jJ        |k    rt          jK                    S t          j         jL        |k    rt          jM                    S t          j         jN        |k    rt          jO                    S t          j         jP        |k    rt          jQ                    S t          j         jR        |k    rt          jS                    S t          j         jT        |k    rt          jU                    S t          j         jV        |k    rt          jW                    S t          j         jX        |k    rt          jY                    S t          j         jZ        |k    rt          j[                    S t          j         j\        |k    rt          j]                    S t          j         j^        |k    rt          j_                    S t          j         j`        |k    rt          ja                    S t          j         jb        |k    st          j         jc        |k    rt          jd                    S t          j         je        |k    rt          jf                    g                    |           rt          jf                    S t          jh                            |           rt          jh                    S t          ji                    S t          j         jj        |k    rt          jk                    S t          j         jl        |k    rt          jm                    S t          j         jJ        |k    rt          jK                    S t          j         jn        |k    rt          jo                    S t          j         jp        |k    rt          jq                    S t          j         jr        |k    rt          js                    S t          j         jt        |k    rt          ju                    S t          j         jv        |k    rt          jw                    S t          j         jx        |k    st          j         jy        |k    rt          j*                    S t          j         jz        |k    rt          j{                    S t          j         j|        |k    rt          j}                    S t          j         j~        |k    rt          j                    S t          j         j        |k    rt          j                    S t          j         j        |k    rt          j)                    S t          j         j        |k    rt          j                    S t          j         j        |k    rt          j                    S t          j         j.        |k    rt          j/                    S t          j         j         |k    rt          j!                    S t          j         j        |k    rt          j                    S t          j         j        |k    rt          j                    S t          j         j        |k    rt          j                    S t          j         j        |k    rt          j                    S t          j         j        |k    rt          j                    S t          j         j        |k    rt          j                    S t          j         j        |k    rt          j                    S t          j         j        |k    rt          j                    S t          j         j        |k    rt          j                    S t          j         j        |k    rt          j                    S t          j         j        |k    rt          j                    S t          j         j        |k    rt          j                    S t          j         j        |k    rt          j                    S t          j         j        |k    rtE          j        |           }t          j                            |           }tE          j        |           }|dk    s|d	k    rt          j                    S |d
k    rddlm}  |            S |dk    rt          j                    S |dk    rF|t          j                                        v rt          j                    S t          j                    S |dk    s|dk    rt          j                    S |dk    rt          j                    S |dk    rt          j                    S |dk    rt          j                    S |dk    rt          j                    S |dk    rt          j                    S t          j                    S t          j         j        |k    rt          j                    S t          j         j        |k    rt          j                    S t          j         j        |k    rt          j                    S t          j         j        |k    rt          j                    S t          j         j        |k    rt          j                    S t          j         j        |k    rt          j                    S t          j         j        |k    rt          j                    S t          j         j        |k    rt          j                    S dS )zC
        Returns the provider config for a given provider.
        r%  r$  r  zgpt-ossr   )VertexAIGPTOSSTransformationr  r  r  agent)AmazonInvokeAgentConfigamazonr  metallamar  r  r(  deepseek_r1novaN)rl   r/  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COHEREr  	SNOWFLAKESnowflakeConfigCLARIFAIClarifaiConfigr0  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  ro  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LlamafileChatConfigrp  LMStudioChatConfig	GALADRIELGaladrielChatConfig	REPLICATEr  HUGGINGFACEr  TOGETHER_AIr  
OPENROUTERr  VERCEL_AI_GATEWAYVercelAIGatewayConfigCOMETAPICometAPIConfig	DATAROBOTDataRobotConfigGEMINIr  AI21	AI21_CHATr  r1  r  r  r  r  AZURE_AIr5  
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  rn  r  TRITONr  PETALSr  FEATHERLESS_AIFeatherlessAIConfigNOVITANovitaConfigrq  r  WANDBWandbConfig	DASHSCOPEDashScopeChatConfigMOONSHOTMoonshotChatConfigV0V0ChatConfigMORPHMorphChatConfigBEDROCKrM   r  
BedrockLLMget_bedrock_invoke_providerr  r  5litellm.llms.bedrock.chat.invoke_agent.transformationr  AmazonTitanConfigr   get_legacy_anthropic_model_namesr  AmazonLlamaConfigAmazonAI21ConfigAmazonCohereConfigAmazonMistralConfigAmazonDeepSeekR1ConfigAmazonInvokeNovaConfigAmazonInvokeConfigLITELLM_PROXYLiteLLMProxyChatConfigOpenAIGPTConfigGRADIENT_AIGradientAIConfigNSCALENscaleConfigHEROKUHerokuChatConfigOCIOCIChatConfig
HYPERBOLICHyperbolicChatConfigOVHCLOUDOVHCloudChatConfig)r6  r   r  r  bedrock_invoke_providerr  r  s          r   r  z.ProviderConfigManager.get_provider_chat_config   s    ++++CC%CPP , ..+++(==E=JJ , +---!*h66-///!&(22)+++!'833*,,,!,88+---!%11(***!+x77-///!'833)+++!8HDD5777 ,88#*h66+---!+x77*,,,!*h66)+++!+x77*,,,!0H<<.000!0H<<-///!+x775  1333U""6888e##      43555'777%''"@BBB"0222'77713333555!,88/111!0H<<.000!+x77*,,,!.(::,...!,88/111!)X55/111!.(::-///!)X55,...!(H44+---!-990222!0H<<.000 '833#1X==#/8;;/111!0H<<2444!-99/111!+x77.000!+x77-///!+x77.000!+x77*,,,!-990222!-99+---!,88+---!3x??0222!*h66)+++!+x77*,,,!(H445777 %11#-99)+++!'833*,,>>U>KK 52444,AAANN 74666,...!*h66.000!,880222!-99/111!+x77)+++!+x77*,,,!-99+---!+x77*,,,!,88/111 (H44#-99(***!,88*,,,!*h66)+++!)X55(***!,88+---!;xGG8:::!+x77*,,,!*h66)+++!,88/111!0H<<.000!&(22%'''!(H44')))!+x77*,,,!(H44')))!(H44')))!0H<<.000!(H44')))!(H44')))!'833&(((!+x77.000!*h66-///!$00')))!'833*,,,!)X55,>uEEM&-&8&T&T 'U ' '# *8??J
**m.N.N3555'))      /.000(H440222(K774UUWWX X #8:::">@@@'6115LPW5W5W0222(F22/111(H441333(I552444(M995777(F2257771333!/8;;1333!(H44*,,,!-99+---!(H44')))!(H44+---!%11(***!,88/111!*h66-///tr   c                 |   t           j        j        |k    r2t           j                            |           rt          j                    S t           j        j        |k    rt          j                    S t           j        j        |k    rt          j                    S t           j        j        |k    rt          j	                    S t           j        j
        |k    rt          j                    S t           j        j        |k    rt          j                    S t           j        j        |k    st           j        j        |k    rddlm}  |            S t           j        j        |k    rddlm}  |            S t           j        j        |k    rddlm}  |            S t           j        j        |k    rt          j                    S d S )Nr   )CohereEmbeddingConfig)r@  )VolcEngineEmbeddingConfig)r   rl   VOYAGErA  rB  rC  r,  r5  r  IBMWatsonXEmbeddingConfigINFINITYrD  r'  rF  r  r  (litellm.llms.cohere.embed.transformationrZ  JINA_AI-litellm.llms.jina_ai.embedding.transformationr@  r%  0litellm.llms.volcengine.embedding.transformationr[  rV  rG  )r6  r   rZ  r@  r[  s        r   r4  z3ProviderConfigManager.get_provider_embedding_config  s     '8337TT  4
 :<<<!(H440222!(H440222!)X554666!*h662444!+x773555 '833#/8;;VVVVVV((***!)X55      )(***!,88      -,...!*h662444tr   rI  present_version_paramsc                    t           j        j        |k    st           j        j        |k    r6t	          ||          rt          j                    S t          j                    S t           j        j        |k    rt          j                    S t           j        j	        |k    rt          j
                    S t           j        j        |k    rt          j                    S t           j        j        |k    rt          j                    S t           j        j        |k    rt          j                    S t           j        j        |k    rt          j                    S t          j                    S r   )r   rl   r  r  should_use_cohere_v1_clientCohereRerankConfigCohereRerankV2Configr  AzureAIRerankConfigr^  InfinityRerankConfigr`  JinaAIRerankConfigr	  HuggingFaceRerankConfigr  DeepinfraRerankConfigr!  NvidiaNimRerankConfig)r6  r   rI  rc  s       r   get_provider_rerank_configz0ProviderConfigManager.get_provider_rerank_config0  s&     '833#/8;;*85KLL 613333555!*h66.000!*h66/111!)X55-///!-992444!+x770222!,880222)+++r   c                     t           j        j        |k    rt          j                    S t           j        j        |k    rddlm}  |j        |           S t           j        j        |k    rd| v rddl	m
}  |            S d S )Nr   rL   r  ),VertexAIPartnerModelsAnthropicMessagesConfig)r   rl   r0  AnthropicMessagesConfigr<  r  rM   ,get_bedrock_provider_config_for_messages_apir  blitellm.llms.vertex_ai.vertex_ai_partner_models.anthropic.experimental_pass_through.transformationrp  )r6  r   rM   rp  s       r   &get_provider_anthropic_messages_configz<ProviderConfigManager.get_provider_anthropic_messages_configM  s    
 )X552444 !)X55JJJJJJP#PQVWWW!+x775        DCEEEtr   c                    t           j        j        |k    rt          j                    S t           j        j        |k    rt          j                    S t           j        j        |k    rddlm}  |            S t           j        j	        |k    r*d| v rt          j
                    S t          j                    S t           j        j        |k    rddlm}  |            S d S )Nr   )"ElevenLabsAudioTranscriptionConfigzgpt-4o)"HostedVLLMAudioTranscriptionConfig)r   rl   ro  #FireworksAIAudioTranscriptionConfigDEEPGRAM DeepgramAudioTranscriptionConfig
ELEVENLABS:litellm.llms.elevenlabs.audio_transcription.transformationrv  r/  !OpenAIGPTAudioTranscriptionConfig%OpenAIWhisperAudioTranscriptionConfigr  6litellm.llms.hosted_vllm.transcriptions.transformationrw  )r6  r   rv  rw  s       r   r  z=ProviderConfigManager.get_provider_audio_transcription_configc  s   
 ,88>@@@!*h66;===!,88      65777!(H445  @BBBDFFF!-99      65777tr   Nc                    t           j        j        | k    rt          j                    S t           j        j        | k    rM|r8d|                                v st          |          rt          j                    S t          j                    S d S )No_series)	r   rl   r/  OpenAIResponsesAPIConfigr1  r;  r  $AzureOpenAIOSeriesResponsesAPIConfigAzureOpenAIResponsesAPIConfig)r   r6  s     r   !get_provider_responses_api_configz7ProviderConfigManager.get_provider_responses_api_config  s    
 &(223555!'833 ?*559KE9R9R5CEEE<>>>tr   c                     t           j        |k    rt          j                    S t           j        |k    rt          j                    S t          j                    S r   )rl   ro  r   FireworksAITextCompletionConfigr
  TogetherAITextCompletionConfigr  r  s     r   #get_provider_text_completion_configz9ProviderConfigManager.get_provider_text_completion_config  sM    
 $00:<<<%119;;;1333r   c                 6   t           j        |k    rt          j                    S t           j        |k    rt          j                    S t           j        |k    rt          j                    S t           j        |k    rddl	m
}  |            S t           j        |k    rt          j                    S t           j        |k    rt          j                    S t           j        |k    rt          j                    S t           j        |k    rt          j                    S t           j        |k    st           j        |k    rddlm}  |            S t           j        |k    st           j        |k    rddlm}  |            S t           j        |k    rt          j                    S d S )Nr   )VertexAIModelInfo)OllamaModelInfo)VLLMModelInfo)rl   ro  r   r  r/  rK  r  GeminiModelInfor  #litellm.llms.vertex_ai.common_utilsr  rI  rJ  TOPAZTopazModelInfor0  AnthropicModelInfor  XAIModelInfor+  r   litellm.llms.ollama.common_utilsr  r*  r  litellm.llms.vllm.common_utilsr  LEMONADELemonadeChatConfig)r6  r   r  r  r  s        r   r  z-ProviderConfigManager.get_provider_model_info  s   
 $00,... H,,*,,, H,,*,,,#x//MMMMMM$$&&&'83313338++)+++#x//-///))'))) H,,0HH0T0THHHHHH"?$$$(**l.F(.R.R      !=??""h..-///tr   c                     t           j        |k    rddlm}  |            S t           j        |k    rddlm}  |            S t           j        |k    rddlm	}  |            S d S )Nr   )BedrockPassthroughConfig)VLLMPassthroughConfig)AzurePassthroughConfig)
rl   r<  /litellm.llms.bedrock.passthrough.transformationr  r*  ,litellm.llms.vllm.passthrough.transformationr  r1  -litellm.llms.azure.passthrough.transformationr  )r6  r   r  r  r  s        r   get_provider_passthrough_configz5ProviderConfigManager.get_provider_passthrough_config  s    
 8++      ,+---(**      )(***8++      *)+++tr   c                     t           j        |k    rt          j                    S t           j        |k    rt          j                    S d S r   )rl   r/  r   OpenAIImageVariationConfigr  TopazImageVariationConfigr  s     r   #get_provider_image_variation_configz9ProviderConfigManager.get_provider_image_variation_config  sC    
 (**57778++4666tr   c                     t           j        |k    rddlm}  |            S t           j        |k    rddlm}  |            S t           j        |k    rddlm	}  |            S d S )Nr   )GoogleAIStudioFilesHandler)VertexAIFilesConfig)BedrockFilesConfig)
rl   r  (litellm.llms.gemini.files.transformationr  r  +litellm.llms.vertex_ai.files.transformationr  r<  )litellm.llms.bedrock.files.transformationr  )r6  r   r  r  r  s        r   get_provider_files_configz/ProviderConfigManager.get_provider_files_config  s    
 (**      .-///#x//WWWWWW&&(((!X--TTTTTT%%'''tr   c                 F    t           j        |k    rddlm}  |            S d S )Nr   )BedrockBatchesConfig)rl   r<  +litellm.llms.bedrock.batches.transformationr  )r6  r   r  s      r   get_provider_batches_configz1ProviderConfigManager.get_provider_batches_config  s8    
 8++XXXXXX'')))tr   c                 Z    ddl m} t          j        | k    r|                                S d S )Nr   )BedrockVectorStore)Clitellm.integrations.vector_store_integrations.bedrock_vector_storer  rl   r<  get_initialized_custom_logger)r   r  s     r    get_provider_vector_store_configz6ProviderConfigManager.get_provider_vector_store_config  sG    	
 	
 	
 	
 	
 	
 8++%CCEEEtr   c                 x   t           j        j        | k    rddlm}  |            S t           j        j        | k    rddlm}  |            S t           j        j        | k    rddl	m
}  |            S t           j        j        | k    rddlm}  |            S t           j        j        | k    rddlm}  |            S dS )zT
        v2 vector store config, use this for new vector store integrations
        r   )OpenAIVectorStoreConfig)AzureOpenAIVectorStoreConfig)VertexVectorStoreConfig)BedrockVectorStoreConfig)PGVectorStoreConfigN)r   rl   r/  0litellm.llms.openai.vector_stores.transformationr  r1  /litellm.llms.azure.vector_stores.transformationr  r  3litellm.llms.vertex_ai.vector_stores.transformationr  r<  1litellm.llms.bedrock.vector_stores.transformationr  	PG_VECTOR3litellm.llms.pg_vector.vector_stores.transformationr  )r   r  r  r  r  r  s         r   !get_provider_vector_stores_configz7ProviderConfigManager.get_provider_vector_stores_config  sI    &(22      +*,,,!'833      0/111!+x77      +*,,,!)X55      ,+---!+x77      '&(((tr   c                    t           j        |k    rddlm}  ||           S t           j        |k    rddlm}  ||           S t           j        |k    rddlm	}  ||           S t           j
        |k    rddlm}  ||           S t           j        |k    rddlm}  ||           S t           j        |k    rddlm}  ||           S t           j        |k    rddlm}  ||           S t           j        |k    rdd	lm}	  |	            S d S )
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_gemini_image_generation_config)!LiteLLMProxyImageGenerationConfig)rl   r/  $litellm.llms.openai.image_generationr  r1  #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  r  $litellm.llms.gemini.image_generationr  rI  :litellm.llms.litellm_proxy.image_generation.transformationr  )
r6  r   r  r  r  r  r  r  r  r  s
             r   $get_provider_image_generation_configz:ProviderConfigManager.get_provider_image_generation_config6  s   
 (**      65e<<<8++      54U;;;"h..      87>>>$00      :9%@@@!X--      76u===(**      43E::: H,,      65e<<<'833      54666tr   c                 F    t           j        |k    rddlm}  |            S d S )Nr   )GeminiRealtimeConfig)rl   r  +litellm.llms.gemini.realtime.transformationr  )r6  r   r  s      r   get_provider_realtime_configz2ProviderConfigManager.get_provider_realtime_configm  s8    
 (**XXXXXX'')))tr   c                 H   t           j        |k    rddlm}  |            S t           j        |k    rddlm}  |            S t           j        |k    rddlm	}  |            S t           j
        |k    rddlm}  ||           S t           j        |k    rddlm}  |            S d S )Nr   )OpenAIImageEditConfig)AzureImageEditConfig)RecraftImageEditConfig)get_azure_ai_image_edit_config)LiteLLMProxyImageEditConfig)rl   r/  -litellm.llms.openai.image_edit.transformationr  r1  ,litellm.llms.azure.image_edit.transformationr  r  .litellm.llms.recraft.image_edit.transformationr  r   litellm.llms.azure_ai.image_editr  rI  4litellm.llms.litellm_proxy.image_edit.transformationr  )r6  r   r  r  r  r  r  s          r   get_provider_image_edit_configz4ProviderConfigManager.get_provider_image_edit_configx  s.   
 (**      )(***8++      (')))!X--      *)+++"h..WWWWWW11%888'833      /.000tr   c                     t           j        j        |k    rddlm}  |            S t           j        j        |k    r-ddlm} ddlm	} |
                    |           rd S  |            S d S )Nr   )GoogleGenAIConfig)VertexAIGoogleGenAIConfig)VertexAIPartnerModels)r   rl   r  /litellm.llms.gemini.google_genai.transformationr  r  2litellm.llms.vertex_ai.google_genai.transformationr  4litellm.llms.vertex_ai.vertex_ai_partner_models.mainr  is_vertex_partner_model)r6  r   r  r  r  s        r   1get_provider_google_genai_generate_content_configzGProviderConfigManager.get_provider_google_genai_generate_content_config  s    
 &(22      %$&&&!+x77           %<<UCC t -,...tr   r   ),r  ri  rj  rk  rQ  rl   r   r   r  r   r4  r   r   rn  r   rt  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  rK   r  r  r   r   r  r    s       @@*@	*	@ @ @ \@D *** 
%	&* * * \*X ,,, 3-, !%S		,
 
, , , \,8  
-	.   \*  
.	/   \6   $ } 
(	)   \ 444 
"4 4 4 \4 #}## 
"	## # # \#J  
'	(   \0  
*	+   \  
/	"   \(  
#	$   \ 			,		 	 	 \	 $$	'	($ $ $ \$L 444 
+	,4 4 4 \4l  
$	%   \     
%	&      \ D  
6	7   \  r   r  rS  service_type)rS  
prometheusc                 >   t          t          t          t          |                               }t          t          t                   |                     d          p|                    d                    }t          j        rdS |dk    rt          j        durdS |S )z
    Used for enforcing `disable_end_user_cost_tracking` param.

    service_type: "litellm_logging" or "prometheus" - used to allow prometheus only disable cost tracking.
    r0  user_api_key_end_user_idNr  T)	r   rc  r-   r   rQ  r  r   disable_end_user_cost_tracking-enable_end_user_cost_tracking_prometheus_only)rM  r  	_metadataend_user_ids       r   !get_end_user_id_for_cost_trackingr    s     .t>/R/R/RSS I 566 	5==344 K
 - t |##@LL4r   rc  c                 t    | sdS d|v od|v}|                      d          p|o|                      d           S )NFmax_chunks_per_docmax_tokens_per_docz
/v1/rerankz
/v2/rerank)endswith)rI  rc  uses_v1_paramss      r   re  re    sc      u*.DD $::  \** >x00>>>r   c                     	 ||dS ||                      |          s|dz   | z   } t          ||| d          }|t          k    S # t          $ r"}t	          j        d|            Y d}~dS d}~ww xY w)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/  rN  r6  rP  z)Error in is_prompt_caching_valid_prompt: )r  r   r$   r   r   r   )r6  r/  rN  rU  token_countr  s         r   is_prompt_caching_valid_promptr     s    5*53C3C4
 4
* (#-5E#*.	
 
 
 >>>   LLLMMMuuuuus   A <A 
A1A,,A1srt_or_vtt_contentc                     d}t          j        ||           }|sdS g }|D ]E}t          t          |          \  }}}}|dz  |dz  z   |z   |dz  z   }	|                    |	           F|rt          |          ndS )a  
    Extracts the total duration (in seconds) from SRT or VTT content.

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

    Returns:
        Optional[float]: The total duration in seconds, or None if no timestamps are found.
    z"(\d{2}):(\d{2}):(\d{2})[.,](\d{3})Ni  r  g     @@)r  findallrh  r  r   r  )
r  timestamp_pattern
timestamps	durationsmatchhoursminutessecondsmillisecondstotal_secondss
             r    extract_duration_from_srt_or_vttr    s     >-/ABBJ t I ( (03C-ww|3g=v@UU''''&03y>>>D0r   ending_pathc                    t          j        |           }|                    i           }|j                            d          }|                    d          }d |                    d          D             }d |                    d          D             }g }t          t          |                    D ]7}	||	d         |dt          |          |	z
           k    r|d|	         |z   } n8||z   }dd	                    |          z   }
|                    |
          }t          |                    |j                            S )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  c                     g | ]}||S r  r  r  s     r   r  z)_add_path_to_api_base.<locals>.<listcomp>8  s    :::1:Q:::r   c                     g | ]}||S r  r  r  s     r   r  z)_add_path_to_api_base.<locals>.<listcomp>9  s    888!a8A888r   Nr  )r  r  r  r  rstriplstripr  r,  rP  r   rQ  r  )rI  r  r  base_url	base_pathend_pathbase_segmentsend_segmentsfinal_segmentsr  modified_pathr  s               r   _add_path_to_api_baser  '  s`    9X&&L%%R%00H!((--I!!#&&H ;:	 4 4:::M88x~~c22888L N3}%%&& 6 6-Es=/A/AA/E-E FFF*2A2.=NE G
 '5 #((>222M%%=%99L |%%\-@%AABBBr   r  c                 >    d |                                  D             S )Nc                 :    i | ]\  }}|t           j        v |||S r   )r   OPENAI_CHAT_COMPLETION_PARAMSr  s      r   r  z.get_standard_openai_params.<locals>.<dictcomp>N  s8       Aq555!- 	
1:G--r   r  r  s    r   get_standard_openai_paramsr!  M  s+     LLNN   r   c                 t    t           j        }|t          z   fd|                                 D             }|S )Nc                 $    i | ]\  }}|v	||S r  r  r  s      r   r  z5get_non_default_completion_params.<locals>.<dictcomp>X  s0       A1N+B+B1+B+B+Br   )r   r   r}   r  )r  r  r  r  s      @r   !get_non_default_completion_paramsr$  U  sO    9M"%77N      r   c                 h    ddl m} |t          z   fd|                                 D             }|S )Nr   r  c                 $    i | ]\  }}|v	||S r  r  r  s      r   r  z8get_non_default_transcription_params.<locals>.<dictcomp>c  s)    UUU41aQn=T=T!Q=T=T=Tr   )r  r  r}   r  )r  r  r  r  s      @r   $get_non_default_transcription_paramsr'  _  sH    ======03EENUUUU6<<>>UUUr   r	  c                     | dS d |                                  D             }t          |          dk    r0i }d}|                                 D ]\  }}|dk     r|||<   |dz  }|}|                                S )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
    Nc                 P    i | ]#\  }}|d k    t          |t                     ||$S )hidden_paramsr  r  s      r   r  z'add_openai_metadata.<locals>.<dictcomp>w  sB       AqJq3$8$8 	
1r      r   r   )r  rP  r"  )r	  visible_metadatafiltered_metadatar  r  r  s         r   add_openai_metadatar.  g  s     t NN$$   r!!$**,, 	 	DAqRxx'(!!$1HCC,  """r   endpointc           
         ddl m } ddlm}  |ddddgdd	d
 |j                    d
d          }t	          t
          | j                  }d}	  |di ||dd n&# t          $ r}t          |          }Y d}~nd}~ww xY w|j	        
                    d          }|rt          t          |          S t          |          S )z
    Return the json str of the request

    This is currently in BETA, and tested for `/chat/completions` -> `litellm.completion` calls.
    r   rs  )Loggingzgpt-3.5-turborK  hir%  Fr`  1234T)r6  r/  rC  r@  rA  rD  r*  log_raw_request_responser8  zmy-fake-api-key)r  r=  Nraw_request_typed_dict)r   r  )r  r   r1  r  getattrr   r  r   rQ  rp  r  r   rv   )	r/  r  r  r1  r  llm_api_endpointreceived_exceptionr  r5  s	            r   return_raw_requestr9    sU    "!!!!!BBBBBB!'!d3348<>>!%	 	 	 w77$ 	
 	
	
 3%	
 	
 	
 	
 	
 	

  $ $ $ VV$ 1CGG    
')?@@@"$
 
 
 	
s   A 
A?&A::A?c                    g }| D ]}t          |t                    r|                    d          }n)t          |t                    r|                                }t          |t                    r|                    |           |S )zn
    Fixes https://github.com/BerriAI/litellm/issues/9321

    Where user passes in a pydantic base model
    Tr  )r   r   r  rc  r"  r   r  s      r   r  r    s     I # #dI&& 	???55DDd## 	99;;DdD!! 	#T"""r   c                  &    t          ddd          S )Nr   )prompt_tokenscompletion_tokensr  )r|   r  r   r   get_empty_usager>    s"       r   r  mock_tool_callsmock_timeoutc                     | s|s|rdS dS r  r  )r  r?  r@  s      r   should_run_mock_completionrB    s$    
   < t5r   )Fr   r~  r   )r8  r8  N)rH  N)	r8  NNNFNNFN)NNNNNN)NNNNNNNNNNN)NNNr8  NN)rS  )FFN)$NNNNNFNNNNNNNNNNNr8  NNNNNNNNNNNNNNNNNN)r8  r8  r8  r   r   )NNNNr  )NNNNN)rS  r  (  r  r  r  binasciir"  r  r=  r  io	itertoolsrJ  loggingr<  r  r  struct
subprocesssystextwrap	threadingr-  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,   r\  r-   r.   r/   .litellm.litellm_core_utils.credential_accessorr0   +litellm.litellm_core_utils.default_encodingr2   2litellm.litellm_core_utils.exception_mapping_utilsr3   r4   r5   -litellm.litellm_core_utils.get_litellm_paramsr6   r7   1litellm.litellm_core_utils.get_llm_provider_logicr8   r9   6litellm.litellm_core_utils.get_supported_openai_paramsr:   ,litellm.litellm_core_utils.llm_request_utilsr;   Flitellm.litellm_core_utils.llm_response_utils.convert_dict_to_responser<   r=   r>   r?   r@   :litellm.litellm_core_utils.llm_response_utils.get_api_baserA   Blitellm.litellm_core_utils.llm_response_utils.get_formatted_promptrB   9litellm.litellm_core_utils.llm_response_utils.get_headersrC   ?litellm.litellm_core_utils.llm_response_utils.response_metadatarD   8litellm.litellm_core_utils.prompt_templates.common_utilsrE   *litellm.litellm_core_utils.redact_messagesrF   rG    litellm.litellm_core_utils.rulesrH   ,litellm.litellm_core_utils.streaming_handlerrI   (litellm.litellm_core_utils.token_counterrJ   1litellm.llms.base_llm.google_genai.transformationrK   r  rM   &litellm.llms.custom_httpx.http_handlerrN   rO   *litellm.router_utils.get_retry_from_policyrP   rQ   litellm.secret_managers.mainrR   litellm.types.llms.anthropicrS   rT   r  rU   rV   rW   rX   rY   rZ   r[   r\   litellm.types.rerankr]   litellm.types.utilsr^   r_   r`   ra   rb   rc   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}   filesjoinpathr  fr  	json_dataImportErrorAttributeErrorr  	open_textdumpsr:  importlib.metadatatypingr   r   r   r   r   r   r   r   r   r   r   r   r   r   OriginalErrorr   /litellm.litellm_core_utils.thread_pool_executorr   r   rT  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.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   _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   sentry_sdk_instancecapture_exceptionr[  posthog	slack_appalerts_channelheliconeLoggerathinaLoggerpromptLayerLoggerlangsmithLoggerlogfireLoggerweightsBiasesLoggercustomLoggerlangFuseLoggeropenMeterLogger
lagoLoggerdataDogLoggerprometheusLoggerdynamoLoggers3LoggergreenscaleLoggerlunaryLoggeraispendLoggersupabaseClientr   rQ  r  r^  r   r   last_fetched_atlast_fetched_at_keysrl  r   r   r   r   r   r  r  rc  r  r%  r  r  r   r  r  r  r  r  r  r  r  r  r  ry  r)  r'  r-  r.  r@  rF  r&  rL  rZ  r\  rb  rd  rf  rm  rt  rw  ry  r~  r_  r  r  r  r  r  r  r  r  r  r  r  r  r  rU  r  r  r  r  rJ  rM  rR  rU  r[  r0  rv  rr  r  r  r  r  r  r  r  r#  r-  r3  r6  r9  rB  rF  rL  rS  rq  rx  r  r  r  r  r  r  r  typing_extensionsr  r  r  r  r  r|  r  ri  r  r  r  r   r1  r7  rE  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%  rZ  rW  r\  ra  r  rn  rr  rt  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  re  r   r  r  r!  r$  r'  r.  r9  r  r>  rB  r  r   r   <module>r     s.   



        				       				  				      


           ( ( ( ( ( ( ( ( & & & & & & & &                   * * * * * * * * * *            0 0 0 0 0 0 * * * * * * * * E E E E E E                              ! ! ! ! 3 3 3 3 6 6 6 6               A A A A A A - - - - - - U U U U U U U U                            B A A A A A ; ; ; ; ; ;     
         
         
 N M M M M M @ @ @ @ @ @         
                    T S S S S S              T S S S S S                            3 2 2 2 2 2 L L L L L L L L L L L L      ? > > > > > P P P P P P P P        4 3 3 3 3 3       	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 0 / / / / / ) ) ) ) ) )                                                                                                                                   D
!	@	A	A	J	J"
 

d3d!!!%&DIaLL	! ! ! ! ! ! ! ! ! ! ! ! ! ! ! 	^Y/ ! ! !		/1K
 
 !	
DIaLL	! ! ! ! ! ! ! ! ! ! ! ! ! ! !! $*Y''                                   0 / / / / /      E D D D D D W W W W W W                  K J J J J J @ @ @ @ @ @ T T T T T T N N N N N N F F F F F F O O O O O O           S R R R R R L L L L L L H H H H H H Q Q Q Q Q Q S S S S S S 6 6 6 6 6 6 6 6                                                " B A A A A A A A         
 ) ( ( ( ( (   
	  
  %'xS	" ' ' '/1 HT#s(^, 1 1 1(*Xd38n% * * * 2 3:  /0   (	E 	E 	E==")*>"?=	= = = =@ 	     	    4S> d3i    4S> d3i    &	$t 	$ 	$ 	$ 	$U3,+F%G HI	   mm m m m`	
%

 #'
 
 
 
DcN'0
8C=$sCx.()   .cN'0eE3-./   <d < < < <c3h C    0"%2:92Ec]   ,k d^k k k k\t t tr " TN 
   @cNY^$ 
   @ JN
1 
1
1"*+E"F
1 
1 
1 
1 -...+C +,C + + + /.+?C ?,C ? ? ? ? :Q1R    .     ( PT  T#Y x~     CGE EE2:3-E E E E6E3 E E E 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 T T TnT    )-GOPT~	   & # %)!%JN"&Z ZZZ smZ SM	Z
 c]Z #Z &d73D+E&FGZ $Z Z Z ZzXc] s    (  !%))--1;?"&I IC=I}I c]I c]	I
 3-I C=I 3-I "#I %TNI 78I $I I I I^ %) $"&26d dd 3-d c]	d
 d $d %T#Y/d d d dN	  .  *   B7?S	7J	   "F" F" F" F" F" F" F" F"^ #().,0C CCC C %T#Y/	C
 C  C #'C j)C 
C C C CLt     ``-1`HK`	` ` ` `N 

	
		
151515;?'+OD D DB $DI.CDH t,-.IDJ -.KDL !!78MDN  }OD D D DX .21 111 1 9	1
 %TN1 
1 1 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    "/c /HSM / / / /d! ! !:
# :
(3- :
 :
 :
 :
z, , , , ,	73 	7 	7 	7 	73# 3# 3 3 3 3 S x}     &# # # # # #d # SW    < ( ' ' ' ' '    i   **%-c]*,* * * *ZS Xc]    .XX%-c]XX X X X%-c]'(   (	B			 	 	 	 6:L
 L
L
%-c]L
L
 L
 L
 L
^V V# VHSM VY V V V VrGs G G G G4X X Xv    "(
 (
(
(
 (
 	(

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