Ë
    uPêjd¸ ã            /       ó˜  — U d dl Z d dlZd dlmZmZ d dlmZ d dlmZm	Z	m
Z
mZmZ d dlmZ d dlmZ d dlZd dlZd dlmZ d dlmZmZ d d	lmZ d d
lmZmZ d dlmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z& d dl'm(Z) d dl*m(Z+ d dl,m(Z- d dl.m/Z/ d dl0m(Z1 d dl2m(Z3 d dl4m(Z5 d dl6m(Z7 d dl8m(Z9 d dl:m(Z; d dl<m=Z= d dl<m>Z? d dl<m(Z@ d dlAm(ZB d dlCm(ZD d dlEmFZFmGZG d dlHmIZJ d dlHm(ZK d dlHmLZM d dlNm(ZO d dlPmQZQ d dlRmSZS d dlTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\ d dl]m^Z^m_Z_ d dl`maZambZbmcZcmdZdmeZemfZfmgZgmhZhmiZimjZjmkZkmlZl d dlmmnZnmoZompZpmqZqmrZrmsZsmtZtmuZumvZvmwZwmxZx erd dlymzZ{ ne	Z{ e|enjú                  jü                  enjþ                  jü                  h«      Z€e
e�d<    e|en�j                  jü                  en�j                  jü                  en�j                  jü                  en�j
                  jü                  en�j                  jü                  en�j                  jü                  h«      Zˆe
e�d<    e|en�j                  jü                  en�j                  jü                  h«      Z‹e
e�d<    e|en�j                  jü                  en�j                  jü                  h«      ZŽe
e�d<    e|en�j                  jü                  en�j                   jü                  h«      Z‘e
e�d<    e|en�j$                  jü                  en�j&                  jü                  h«      Z”e
e�d<   en�j*                  jü                  Z–e
e�d <   en�j.                  jü                  Z˜e
e�d!<   	 	 	 	 	 	 	 d d#e™d$e™d%e™dz  d&e™d'e™d(eodz  d)e™dz  d*eše™e™f   dz  fd+„Z›d,eœd-eœdz  d#e�d$e�d*eždz  f
d.„ZŸd/ekdz  d*e fd0„Z¡	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d¡d,eœd#e�d$e�d%e™dz  d-eœdz  d2e�dz  d3e�dz  d4e�dz  d5e�dz  d(eodz  d)e™dz  d6e�dz  d7ekdz  d8e^dz  d9ead:e™d;eœdz  d<eœdz  d=eœdz  d>e	dz  d?eœdz  d*eše™e™f   f,d@„Z(d¢dAežfdB„Z¢dCe£d*e fdD„Z¤	 d£d,eœdz  d-eœdz  d*eœdz  fdE„Z¥dFe£dGeœd*eœdz  fdH„Z¦	 	 	 	 d¤d,eœdz  dAe£dz  dIeœdz  dJe dz  d-eœdz  dKeœdz  d*eœdz  fdL„Z§d,eœdMeœdz  d*eœfdN„Z¨ ee¬O«      d,eœd*e fdP„«       Z©dAe£d*eœdz  fdQ„ZªdRdSdSdSddTœZ«e
ež   e�dU<   dVeœdz  d*eœdz  fdW„Z¬d;e£d*eœdz  fdX„Z­dYe£d*eœdz  fdZ„Z®dAe£d*ekdz  fd[„Z¯d\„ Z°d9eadz  dAe	d*eadz  fd]„Z±d^e™d-eœdz  d*eše™e™e™f   fd_„Z²d^e™d-eœdz  d*eše™e™e™e™f   fd`„Z³	 	 	 	 	 	 	 	 	 	 	 	 	 d¥dae{dz  dbe™dce™dde™dee™dfeždz  dge™dz  dhe™dz  die™dz  dje™dz  dke™dz  dle™dz  dme™dz  dne™dz  doe™dz  d;eœdz  d<eœdz  d=eœdz  d*df&dp„Z´ddd1g d1d"ddddddddddddddddddfdAe£dz  d,eœdz  dqeµdre™dz  d9eadz  dseœdz  dteœdz  due�dz  d(eodz  d)e™dz  dveždz  dJe dz  dIeœdz  dwehdz  dxeœdz  dKeœdz  dae{dz  d;eœdz  d<eœdz  d=eœdz  d*e™f*dy„Z¶dFežez  d*e™dz  fdz„Z·	 	 	 	 	 	 	 	 	 	 	 d¦d{erepz  eqz  evz  euz  eUz  e_z  e\z  ebz  eWz  ez  e/z  d,eœd-eœdz  d9ed|   dvežd}e dz  dIeœdz  dJe dz  d~eœdwehdz  dxeœdz  dKeœdz  dae{dz  d;eœdz  d<eœdz  d=eœdz  d*e™f"d„Z¸	 d£d,eœd-eœdz  d>e£dz  d*eše™e™f   fd€„Z¹d,eœdz  d-eœd>eld*eše™e™f   fd�„Zº	 d£d,eœd-eœdz  d‚e^dz  d*eše™e™f   fdƒ„Z»d,eœd-eœdz  d„e™d*eše™e™f   fd…„Z¼	 	 	 	 	 d§d,eœd-eœdz  dteœdz  due�dz  dseœdz  dveždz  d*e™fd†„Z½	 	 	 d¨d,eœd‡e™d-eœdz  dˆeedz  d‰eœdz  d*e™fdŠ„Z¾	 	 	 d¨d‹ekd,eœd-eœdz  dˆeedz  d<eœdz  d*eše™e™f   fdŒ„Z¿d�ed*eµeœ   fdŽ„ZÀ G d�„ d�«      ZÁ G d‘„ d’eÁ«      ZÂd“ZÃe
e�d”<   d•eœd–ekd-eœd<eœdz  d*eše™e™f   dz  f
d—„ZÄd•eœd-eœd*e fd˜„ZÅd™eeœdz     d–ekd-eœd<eœdz  d*eše™e™f   f
dš„ZÆ	 	 d©d›eXd–ekd-eœdxeœd<eœdz  dae{dz  d*e™fdœ„ZÇd›eXd-eœdxeœd*e™fd�„ZÈd›eXd*eœdz  fdž„ZÉd‹eždˆeedz  d*e™fdŸ„ZÊy)ªé    N)ÚMappingÚSequence)Ú	lru_cache)ÚTYPE_CHECKINGÚAnyÚFinalÚLiteralÚcast)ÚResponse)Ú	BaseModel)Úverbose_logger)ÚDEFAULT_MAX_LRU_CACHE_SIZEÚ&DEFAULT_REPLICATE_GPU_PRICE_PER_SECOND)ÚStandardBuiltInToolCostTracking)Ú%InteractionsUsageObjectTransformationÚ&TranscriptionUsageObjectTransformation)
ÚCostCalculatorUtilsÚ_generic_cost_per_characterÚ_get_regional_uplift_multiplierÚ_get_service_tier_cost_keyÚcalculate_cost_componentÚgeneric_cost_per_tokenÚget_billable_input_tokensÚget_token_type_cost_breakdownÚparse_prompt_tokens_detailsÚselect_cost_metric_for_model©Úcost_per_token)ÚSearchResponse)Ú_video_output_cost_per_second)Úcost_per_second)Úget_model_params_and_categoryÚhas_together_registry_pricing)Úcost_per_character)Úcost_router)ÚResponseAPILoggingUtils)ÚLiteLLMSendMessageResponse)ÚHttpxBinaryResponseContentÚImageGenerationRequestQualityÚOpenAIModerationResponseÚOpenAIRealtimeStreamListÚ&OpenAIRealtimeStreamResponseBaseObjectÚ!OpenAIRealtimeStreamSessionEventsÚResponseAPIUsageÚResponsesAPIResponse)ÚRerankBilledUnitsÚRerankResponse)ÚCallTypesLiteralÚ"LiteLLMRealtimeStreamLoggingObjectÚLlmProvidersÚLlmProvidersSetÚ	ModelInfoÚPromptTokensDetailsWrapperÚServiceTierÚStandardBuiltInToolsParamsÚ TranscriptionUsageDurationObjectÚTranscriptionUsageTokensObjectÚUsageÚVectorStoreSearchResponse)Ú	CallTypesÚCostPerTokenÚEmbeddingResponseÚImageResponseÚModelResponseÚModelResponseStreamÚProviderConfigManagerÚTextCompletionResponseÚTranscriptionResponseÚ_cached_get_model_info_helperÚtoken_counter)ÚLoggingÚ_A2A_CALL_TYPESÚ_VIDEO_CALL_TYPESÚ_SPEECH_CALL_TYPESÚ_TRANSCRIPTION_CALL_TYPESÚ_RERANK_CALL_TYPESÚ_SEARCH_CALL_TYPESÚ_AREALTIME_CALL_TYPEÚ_MCP_CALL_TYPEç        Úprompt_tokensÚcompletion_tokensÚresponse_time_msÚcached_tokensÚcache_creation_tokensÚcustom_cost_per_tokenÚcustom_cost_per_secondÚreturnc                 óê   — |€|€y|�Z|d   }|d   }|j                  d|«      }	|j                  d|«      }
t        | |z
  |z
  d«      }||z  ||	z  z   ||
z  z   }||z  }||fS |�||xs dz  dz  }d|fS y)	aQ  Internal helper function for calculating cost, if custom pricing given.

    prompt_tokens is assumed to include both cached_tokens and cache_creation_tokens
    (OpenAI-compatible convention). Anthropic-style usage where prompt_tokens excludes
    cache tokens is handled at the caller (cost_per_token) before invoking this helper.
    NÚinput_cost_per_tokenÚoutput_cost_per_tokenÚcache_read_input_token_costÚcache_creation_input_token_costr   rR   éè  )ÚgetÚmax)rS   rT   rU   rV   rW   rX   rY   r\   r]   r^   r_   Úregular_prompt_tokensÚ
input_costÚoutput_costs                 ú\/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/cost_calculator.pyÚ%_cost_per_token_custom_pricing_helperrg   ¿   sí   € ð  Ð$Ð)?Ð)GØàÐ(Ø&;Ð<RÑ&SÐØ'<Ð=TÑ'UÐà-B×-FÑ-FØ)Ø ó.
Ð#ð 2G×1JÑ1JØ-Ø ó2
Ð'ô
 (+Ø˜MÑ)Ð,AÑAØó(
Ðð "Ð$8Ñ8ØÐ9Ñ9ñ:à#Ð&EÑEñFð 	ð
 (Ð*?Ñ?ˆØ˜;Ð&Ð&Ø	Ð	+Ø,Ð0@Ò0GÀCÑHÈ4ÑOˆØ�+ˆ~Ðàó    ÚmodelÚcustom_llm_providerc                 óä   — |sy	 d}|dk(  rddl m} |j                  | «      }|r t        |d«      r|j	                  | ||¬«      S y# t
        $ r }t        j                  d|«       Y d}~yd}~ww xY w)a  
    Calculate additional costs beyond standard token costs.

    This function delegates to provider-specific config classes to calculate
    any additional costs like routing fees, infrastructure costs, etc.

    Args:
        model: The model name
        custom_llm_provider: The provider name (optional)
        prompt_tokens: Number of prompt tokens
        completion_tokens: Number of completion tokens

    Returns:
        Optional dictionary with cost names and amounts, or None if no additional costs
    NÚazure_air   )ÚAzureFoundryModelInfoÚcalculate_additional_costs)ri   rS   rT   z&Error calculating additional costs: %s)Ú"litellm.llms.azure_ai.common_utilsrm   Úget_azure_ai_config_for_modelÚhasattrrn   Ú	Exceptionr   Údebug)ri   rj   rS   rT   Úconfig_classrm   Úes          rf   Ú_get_additional_costsrv   ò   s�   € ñ* ØðJØˆØ *Ò,ÝPà0×NÑNÈuÓUˆLñ
 œG LÐ2NÔOØ×:Ñ:ØØ+Ø"3ð ;ó ð ð øô ò JÜ×ÑÐEÀq×IÐIàûðJús   …?A Á	A/ÁA*Á*A/Úusage_blockc                 óÜ   — | €yt        | dd«      xs d}t        | dd«      xs d}t        | dd «      }|�-t        |dd«      xs d}t        |dd«      xs d}|dkD  s|dkD  ry|dkD  xs |dkD  S )	NFrS   r   rT   Úprompt_tokens_detailsÚaudio_tokensÚtext_tokensT)Úgetattr)rw   Úprompt_tokens_valÚcompletion_tokens_valÚprompt_detailsÚaudio_token_countÚtext_token_counts         rf   Ú&_transcription_usage_has_token_detailsr‚      sŸ   € ð ÐØä& {°OÀQÓGÒLÈ1ÐÜ#*¨;Ð8KÈQÓ#OÒ#TÐSTÐÜ?FÀ{ÐTkÐmqÓ?r€NàÐ!Ü#*¨>¸>È1Ó#MÒ#RÐQRÐÜ")¨.¸-ÈÓ"KÒ"PÈqÐØ˜qÒ Ð$4°qÒ$8Øà Ñ!ÒAÐ'<¸qÑ'@ÐArh   Ú Úprompt_charactersÚcompletion_charactersÚcache_creation_input_tokensÚcache_read_input_tokensÚnumber_of_queriesÚusage_objectÚrerank_billed_unitsÚ	call_typeÚ!audio_transcription_file_durationÚservice_tierÚdata_residencyÚvertex_locationÚresponseÚrequest_modelc                 óð  — | €t        d«      ‚|�|}nt        ||||z   ||	¬«      }d}d}d}|�Œt        |dd«      }|�Ct        t        |dd«      xs d«      }t        t        |dd«      xs t        |d	d«      xs d«      }t        |d
d«      }t        |dd«      }|€|�d}|�t        |«      }|�t        |«      }|s|	rt        |	«      }d}|s|rt        |«      }d}t        |«      }|r|||z   z  }t	        |||||||
¬«      }|�
|d   |d   fS d}d} t
        j                  }!|du}"t        | t        «      }#|"rM|#rK|› d�}$| j                  |$«      r5| t        |$«      d }%|%j                  |$«      r|%} nn| j                  |$«      rŒ5| }&|"r5|› d�}'|#r| j                  |'«      r| }&n|› d| › �}&|�,|› d|› d| › �}(|(|!v r|(}&nt        j                  | ¬«      \  })}})})|€J ‚| }*| j                  dd«      }+t        |+«      dkD  r|+d   }*n| }*	 |&|!v r|&} n| |!v r| } n|*|!v r|*} |dk(  s|dk(  r�t        j                  |*|¬«      },t        |,«      }-d}.d}/|-dk(  rV|€t        d|› d| › d|› d|› �«      ‚t!        |*||ddd¬«      \  }0}1|0�|1€t        d|0› d|1› d|*› d|› d|› d|› �«      ‚|0}.|1}/|.|/fS |-dk(  rt#        |*||||¬ «      \  }.}/|.|/fS |d!k(  s|d"k(  rt%        | ||¬#«      S |d$k(  s|d%k(  rt'        | |t)        t*        |«      ¬&«      S |d'k(  s|d(k(  rt-        | ||¬&«      S |d)k(  s+|d*k(  s&|t.        j0                  k(  s|t.        j2                  k(  rt5        || ||¬+«      S |d,k(  s|d-k(  r)t7        |«      rt#        |*||||¬ «      S t9        |*||¬.«      S |d/k(  s|d0k(  r5dd1lm}2  |2| ||xs d|rt?        |d2«      r|j@                  ¬3«      S d¬3«      S |d4k(  r;tC        |*||¬5«      }3|3dk(  rtE        |*||||||¬6«      S |3dk(  rtG        |*||||¬7«      S y|d8k(  rtI        | ||¬9«      S |d:k(  rtK        | ||¬9«      S |d;k(  rtM        | |||¬<«      S |d=k(  rtO        | |¬>«      S |d?k(  rtQ        | |¬>«      S |d@k(  rtS        | |||¬A«      S |dBk(  rtU        | ||¬9«      S |dCk(  rtW        | |¬>«      S |dDk(  rtY        | |¬>«      S |dEk(  rt[        | |¬>«      S |dFk(  rt]        | |¬>«      S |dGk(  rt_        | |¬>«      S |dHk(  rddIl0m1}4  |4| |¬>«      S |dJk(  rte        | ||||¬K«      S tg        | |¬«      }5|5ji                  dL«      xs ddkD  s)|5ji                  dM«      xs ddkD  s|5ji                  dN«      �t#        | ||||¬ «      S |5ji                  dO«      }6|6�"|� tk        jl                  dP| |6|«       |6|z  dQz  }|5ji                  dR«      }7|7�"|� tk        jl                  dS| |7|«       |7|z  dQz  } tk        jl                  dT| || «       || fS )Uar  
    Calculates the cost per token for a given model, prompt tokens, and completion tokens.

    Parameters:
        model (str): The name of the model to use. Default is ""
        prompt_tokens (int): The number of tokens in the prompt.
        completion_tokens (int): The number of tokens in the completion.
        response_time (float): The amount of time, in milliseconds, it took the call to complete.
        prompt_characters (float): The number of characters in the prompt. Used for vertex ai cost calculation.
        completion_characters (float): The number of characters in the completion response. Used for vertex ai cost calculation.
        custom_llm_provider (str): The llm provider to whom the call was made (see init.py for full list)
        custom_cost_per_token: Optional[CostPerToken]: the cost per input + output token for the llm api call.
        custom_cost_per_second: Optional[float]: the cost per second for the llm api call.
        call_type: Optional[str]: the call type

    Returns:
        tuple: A tuple containing the cost in USD dollars for prompt tokens and completion tokens, respectively.
    Nz"Invalid arg. Model cannot be none.)rS   rT   Útotal_tokensr†   r‡   r   Fry   rV   Úcache_write_tokensrW   r‡   r†   T)rS   rT   rU   rV   rW   rY   rX   é   ú/©ri   ÚspeechÚaspeech©ri   rj   rR   r$   zDprompt_characters must be provided for tts calls. prompt_characters=ú, model=ú, custom_llm_provider=z, call_type=)ri   rj   r„   r…   Úcustom_prompt_costÚcustom_completion_costz'cost for tts call is None. prompt_cost=z, completion_cost=z, prompt_characters=z, completion_characters=r   )ri   Úusagerj   r�   rŽ   ÚarerankÚrerank)ri   rj   Úbilled_unitsÚavector_store_searchÚvector_store_search)ri   rj   r�   ÚocrÚaocrÚaretrieve_batchÚretrieve_batch)rŸ   ri   rj   rŽ   ÚatranscriptionÚtranscription©ri   rj   ÚdurationÚsearchÚasearch©Úsearch_provider_cost_per_queryÚ_hidden_params©ri   rj   rˆ   Úoptional_paramsÚ	vertex_ai)ri   rj   r‹   )ri   rj   r„   r…   rŸ   r�   r�   )ri   rj   rŸ   r�   r�   Ú	anthropic)ri   rŸ   r�   ÚbedrockÚopenai)ri   rŸ   r�   rŽ   Ú
databricks)ri   rŸ   Úfireworks_aiÚazure)ri   rŸ   rU   r�   ÚgeminiÚdeepseekÚtencentÚ
perplexityÚxaiÚlemonadeÚ	dashscoper   rl   )ri   rŸ   rU   r‘   r�   r\   r]   Útiered_pricingÚinput_cost_per_secondz;For model=%s - input_cost_per_second: %s; response time: %sr`   Úoutput_cost_per_secondz<For model=%s - output_cost_per_second: %s; response time: %szlReturned custom cost for model=%s - prompt_tokens_cost_usd_dollar: %s, completion_tokens_cost_usd_dollar: %s)7rr   r<   r|   Úfloatrg   ÚlitellmÚ
model_costÚ
isinstanceÚstrÚ
startswithÚlenÚget_llm_providerÚsplitÚget_model_infor   Ú
ValueErrorr   r   Úrerank_costÚvector_store_search_costr
   r=   Úocr_costr>   r§   r¨   Úbatch_cost_calculatorr‚   Úopenai_cost_per_secondÚlitellm.searchr°   rq   r±   Úgoogle_cost_routerÚgoogle_cost_per_characterÚgoogle_cost_per_tokenÚanthropic_cost_per_tokenÚbedrock_cost_per_tokenÚopenai_cost_per_tokenÚdatabricks_cost_per_tokenÚfireworks_ai_cost_per_tokenÚazure_openai_cost_per_tokenÚgemini_cost_per_tokenÚdeepseek_cost_per_tokenÚtencent_cost_per_tokenÚperplexity_cost_per_tokenÚxai_cost_per_tokenÚlemonade_cost_per_tokenÚ&litellm.llms.dashscope.cost_calculatorr   Úazure_ai_cost_per_tokenrG   ra   r   rs   )8ri   rS   rT   rU   rj   Úregion_namer„   r…   r†   r‡   rX   rY   rˆ   r‰   rŠ   r‹   rŒ   r�   rŽ   r�   r�   r‘   rw   Ú_cache_read_tokensÚ_cache_creation_tokensÚ_is_anthropic_styleÚ_pt_detailsÚ_anthropic_readÚ_anthropic_createÚ_normalized_prompt_tokensÚresponse_costÚprompt_tokens_cost_usd_dollarÚ!completion_tokens_cost_usd_dollarÚmodel_cost_refÚcaller_supplied_providerÚmodel_is_strÚ_dup_prefixÚ
_remainderÚmodel_with_providerÚ_prov_prefixÚmodel_with_provider_and_regionÚ_Úmodel_without_prefixÚmodel_partsÚspeech_model_infoÚcost_metricÚprompt_costÚcompletion_costÚ_prompt_costÚ_completion_costr°   r%   Údashscope_cost_per_tokenÚ
model_inforÃ   rÄ   s8                                                           rf   r   r   3  s!	  € ðl €}ÜÐ<Ó=Ð=ð ÐØ"‰äØ'Ø/Ø&Ð):Ñ:Ø(CØ$;ô
ˆð !"ÐØ$%ÐØÐàÐÜ@GÈÐVmÐosÓ@tˆØÐ"Ü!&¤w¨{¸OÈQÓ'OÒ'TÐSTÓ!UÐô &+Ü˜Ð%9¸1Ó=ÒvÄÈÐVmÐopÓAqÒvÐuvó&Ð"ô .5°\ÐC\Ð^bÓ-cˆÜ/6°|ÐEbÐdhÓ/iÐØÐ&Ð*;Ð*GØ"&ÐØÐ*Ü%*¨?Ó%;Ð"Ø Ð,Ü).Ð/@Ó)AÐ&áÑ"9Ü"Ð#:Ó;ÐØ"ÐÙ!Ñ&AÜ!&Ð'BÓ!CÐØ"Ðô !& mÓ 4ÐÙØ!Ð%7Ð:PÑ%PÑPÐ!ä@Ø/Ø+Ø)Ø(Ø4Ø5Ø3ô€Mð Ð Ø˜QÑ ¨qÑ!1Ð1Ð1ð ,-Ð!Ø/0Ð%Ü#×.Ñ.€Nð
 ':ÀÐ&EÐô % U¬CÓ0€Lñ  ¡LØ 3Ð4°AÐ6ˆØ×Ñ˜{Ô+Øœs ;Ó/Ð1Ð2ˆJØ×$Ñ$ [Ô1Ø"‘àð ×Ñ˜{Õ+ð  ÐÙØ!4Ð 5°QÐ7ˆÙ˜E×,Ñ,¨\Ô:Ø"'Ñà%8Ð$9¸¸5¸'Ð"BÐØÐ"Ø7JÐ6KÈ1È[ÈMÐYZÐ[`ÐZaÐ4bÐ*Ø-°Ñ?Ø&DÑ#ä'.×'?Ñ'?ÀeÔ'LÑ$ˆÐ  1àÐ*Ð*Ð*à ÐØŸ™ S¨!Ó,€KÜ
ˆ;Ó˜!ÒØ*¨1™~Ñà$Ððð ˜nÑ,Ø#‰Ø	�.Ñ	 Ø‰à Ñ.à$ˆð �HÒ 	¨YÒ 6Ü#×2Ñ2Ð9MÐcvÔwÐÜ9Ð:KÓLˆØ ˆØ!$ˆØÐ.Ò.Ø Ð(Ü ØZÐ[lÐZmÐmuÐv{Ðu|ð  }Sð  Tgð  Shð  htð  u~ð  tð  @óð ô .IØ*Ø$7Ø"3Ø&'Ø#'Ø'(ô.Ñ*ˆLÐ*ð Ð#Ð'7Ð'?Ü Ø=¸l¸^ÐK]Ð^nÐ]oÐowð  yMð  xNð  Ndð  exð  dyð  yMð  N_ð  M`ð  `xð  yNð  xOð  Póð ð 'ˆKØ.ˆOð ˜OÐ+Ð+ð Ð,Ò,Ü+AØ*Ø!Ø$7Ø)Ø-ô,Ñ(ˆK˜ð ˜OÐ+Ð+Ø	�iÒ	 9°Ò#8ÜØØ 3Ø,ô
ð 	
ð
 
Ð,Ò	,°	Ð=RÒ0RÜ'ØØ 3ÜÔ3°XÓ>ô
ð 	
ð
 
�eÒ	˜y¨FÒ2ÜØØ 3Øô
ð 	
ð 	Ð&Ò&ØÐ(Ò(Øœ	×1Ñ1Ò1Øœ	×0Ñ0Ò0ä$ØØØ 3Ø)ô	
ð 	
ð 
Ð&Ò	&¨)°Ò*FÜ1°+Ô>Ü)Ø*Ø!Ø$7Ø)Ø-ôð ô &Ø&Ø 3Ø6ô
ð 	
ð
 
�hÒ	 )¨yÒ"8åAá-ØØ 3Ø/Ò4°1Ù8@ÄWÈXÐWgÔEh˜X×4Ñ4ô	
ð 	
ð osô	
ð 	
ð 
 Ò	+Ü/Ø&Ø 3Øô
ˆð
 Ð.Ò.Ü,Ø*Ø$7Ø"3Ø&;Ø!Ø)Ø /ôð ð Ð,Ò,Ü(Ø*Ø$7Ø!Ø)Ø /ôð ð -ð 
 Ò	+Ü'¨e¸;ÐUaÔbÐbØ	 	Ò	)Ü%¨E¸ÐS_Ô`Ð`Ø	 Ò	(Ü$ØØØ%Ø)ô	
ð 	
ð 
 Ò	,Ü(¨u¸KÔHÐHØ	 Ò	.Ü*°¸kÔJÐJØ	 Ò	'Ü*ØØØ-Ø%ô	
ð 	
ð 
 Ò	(Ü$¨5¸ÐR^Ô_Ð_Ø	 
Ò	*Ü&¨U¸+ÔFÐFØ	 	Ò	)Ü%¨E¸ÔEÐEØ	 Ò	,Ü(¨u¸KÔHÐHØ	 Ò	%Ü!¨°[ÔAÐAØ	 
Ò	*Ü&¨U¸+ÔFÐFØ	 Ò	+õ	
ñ (¨e¸;ÔGÐGØ	 
Ò	*Ü&ØØØ-Ø'Ø%ô
ð 	
ô :ÀÐ[nÔoˆ
ð �^‰^Ð2Ó3Ò:°s¸aÒ?Ø—‘Ð6Ó7Ò>¸3À!ÒCØ�~‰~Ð.Ó/Ð;ä)ØØ!Ø$7Ø)Ø-ôð ð (2§~¡~Ð6MÓ'NÐØ Ð,Ð1AÐ1MÜ× Ñ ØMØØ%Ø ô	ð -BÐDTÑ,TÐW[Ñ,[Ð)à(2¯©Ð7OÓ(PÐØ!Ð-Ð2BÐ2NÜ× Ñ ØNØØ&Ø ô	ð 1GÐIYÑ0YÐ\`Ñ0`Ð-ä×ÑØzØØ)Ø-ô		
ð -Ð.OÐOÐOrh   Úcompletion_responsec                 ó¸   — t         }|dk(  rH| j                  dt        j                  «       «      }t        | dt        j                  «       «      }||z
  }||z  dz  S )NrR   ÚcreatedÚendedr`   )r   ra   Útimer|   )r  Ú
total_timeÚ!a100_80gb_price_per_second_publicÚ
start_timeÚend_times        rf   Ú get_replicate_completion_pricingr  Á  s]   € ô 	/ð &ð �SÒØ/×3Ñ3°I¼t¿y¹y»{ÓKˆ
Ü!Ð"5°wÄÇ	Á	ÃÓLˆØ 
Ñ*ˆ
à,¨zÑ9¸DÑ@Ð@rh   Úobjc                 ó   — t        | d«      S )Nr±   )rq   )r  s    rf   Úhas_hidden_paramsr  Ï  s   € Ü�3Ð(Ó)Ð)rh   c                 ó¤   — |�|S | €y 	 t        j                  | ¬«      \  }}}}|S # t        $ r }t        j                  d|«       Y d }~y d }~ww xY w)Nr—   zdlitellm.cost_calculator.py::_get_provider_for_cost_calc() - Error inferring custom_llm_provider - %s)rÆ   rÌ   rr   r   rs   )ri   rj   rú   ru   s       rf   Ú_get_provider_for_cost_calcr  Ó  sj   € ð Ð&Ø"Ð"Ø€}ØðÜ'.×'?Ñ'?ÀeÔ'LÑ$ˆÐ  1ð Ðøô ò Ü×ÑØrÐtuô	
ô ûð	ús   ‰& ¦	A¯A
Á
AÚhidden_paramsÚkeyc                 ór   — t        | t        «      sy | j                  |«      }t        |t        «      r|r|S d S ©N)rÈ   r   ra   rÉ   )r  r  Úvalues      rf   Ú_get_hidden_str_for_cost_calcr  æ  s5   € Ü�m¤WÔ-ØØ(×,Ñ,¨SÓ1€EÜ˜u¤cÔ*©uˆ5Ð>¸$Ð>rh   Ú
base_modelÚcustom_pricingÚrouter_model_idc                 óî  — d}t        | |¬«      }d}|�@t        |t        «      rt        |dd«      }n"t        |t        «      r|j                  dd«      }t        |dd«      }t        |d«      }	|du xs |du}
|	duxs |du}|
s|rt        |d«      nd}|du rc|�^|t        j                  v rLt        j                  |   }|j                  d«      €"|j                  d	«      €|j                  d
«      �|}nJ| }nG| }nD|€|	�|�|n|	}n9|€7|�5|j                  dd«      �#t        |d   «      dkD  r|j                  d| «      }|€|�|}|€| �| }|�)|�'t        |«      s|€|n|› d|› �}t        |› d|› �|«      }|S )zê
    1. If custom pricing is true, return received model name
    2. If base_model is set (e.g. for azure models), return that
    3. If completion response has model set return that
    4. Check if model is passed in return that
    Nrš   ri   r±   Úprovider_response_modelTrç   r\   rÃ   rÂ   r   r–   )r  rÈ   r   r|   Údictra   r  rÆ   rÇ   rË   Ú"_model_contains_known_llm_providerÚ$_strip_unregistered_leading_segments)ri   r  r  r  rj   r  Úreturn_modelÚcompletion_response_modelr  r  Úexplicit_pricingÚpriced_from_responserç   ÚentryÚprovider_prefixs                  rf   Ú _select_model_name_for_cost_calcr(  í  sÿ  € ð  $€LÜ5¸EÐWjÔkÐà,0ÐØÐ&ÜÐ)¬9Ô5Ü(/Ð0CÀWÈdÓ(SÑ%ÜÐ+¬TÔ2Ø(;×(?Ñ(?ÀÈÓ(NÐ%Ü(/Ð0CÐEUÐW[Ó(\€MÜ%BÀ=ÐRkÓ%lÐØ,°Ð4ÒN¸
È$Ð8NÐØ"9ÀÐ"EÒ"nÐIbÐjnÐInÐñ  Ñ$8ô 	& m°]ÔCàð ð ˜ÑØÐ&¨?¼g×>PÑ>PÑ+PÜ"×-Ñ-¨oÑ>ˆEà—	‘	Ð0Ó1Ð=Ø—9‘9Ð4Ó5ÐAØ—9‘9Ð-Ó.Ð:à.‘à$‘à ‰Là	Ð	Ð#:Ð#FØ%/Ð%;‘zÐAX‰à	"Ð	*¨}Ð/HØ×Ñ˜W dÓ+Ð7¼CÀÈgÑ@VÓ<WÐZ[Ò<[Ø(×,Ñ,¨W°eÓ<ˆLàÐÐ 9Ð EØ0ˆàÐ Ð 1Øˆð 	Ð ØÐ+Ü2°<Ô@à8CÐ8KÑ!4ÐTgÐShÐhiÐjuÐivÐQwˆÜ;¸Ð>OÈqÐQ]ÐP^Ð<_ÐalÓmˆàÐrh   rç   c           	      óª  ‡‡— | j                  d«      }dj                  |dd «      t        j                  v r| S |�t	        |«      dkD  r
|d   |k(  rdnd}dj                  |d| «      Š||d Št        d„ t        ‰«      D «       t	        ‰«      «      }ˆˆfd„t        t        |t	        ‰«      dz
  «      dz   «      D «       }t        d„ |D «       | «      S )a  Resolve a provider-prefixed slash alias like "vertex_ai/vertex/claude-opus-5" to the
    registered cost key ("vertex_ai/claude-opus-5"), keeping the model unchanged when it already
    resolves downstream (custom-priced router ids) or no stripped candidate is registered (#38069).r–   r•   Né   c              3   ó8   K  — | ]  \  }}|t         v sŒ|–— Œ y ­wr  )r5   )Ú.0ÚindexÚsegments      rf   ú	<genexpr>z7_strip_unregistered_leading_segments.<locals>.<genexpr>?  s   è ø€ Òh©¨¨wÈWÔXgÒMgœeÑhùs   ‚“c              3   óP   •K  — | ]  }‰› d d j                  ‰|d «      › �–— Œ y­w)r–   N)Újoin)r,  ÚstartÚheadÚtails     €€rf   r/  z7_strip_unregistered_leading_segments.<locals>.<genexpr>@  s,   øè ø€ ÒsÀ˜D˜6  3§8¡8¨D°°¨LÓ#9Ð":Ô;Ñsùs   ƒ#&c              3   óF   K  — | ]  }|t         j                  v sŒ|–— Œ y ­wr  )rÆ   rÇ   )r,  Ú	candidates     rf   r/  z7_strip_unregistered_leading_segments.<locals>.<genexpr>A  s   è ø€ ÒZ˜y¸)Äw×GYÑGYÒ:Y”ÑZùs   ‚!š!)	rÍ   r1  rÆ   rÇ   rË   ÚnextÚ	enumerateÚrangeÚmin)ri   rç   ÚsegmentsÚhead_lenÚ
strippableÚ
candidatesr3  r4  s         @@rf   r!  r!  5  sÖ   ù€ ð —k‘k #Ó&€HØ
‡x�x�˜˜�Ó¤×!3Ñ!3Ñ3ØˆØ&Ð2´s¸8³}ÀqÒ7HÈXÐVWÉ[Ð\gÒMg‘aÐmn€HØ—(‘(˜8 I XÐ.Ó/€DØ˜8˜9Ð%€DÜÑh¼)ÀD»/ÔhÔjmÐnrÓjsÓt€JÜsÌÌsÐS]Ô_bÐcgÓ_hÐklÑ_lÓOmÐpqÑOqÓIrÔs€JÜÑZ¨JÔZÐ\aÓbÐbrh   )Úmaxsizec                 ó:   — | j                  d«      d   }|t        v S )z:
    Check if the model contains a known llm provider
    r–   r   )rÍ   r5   )ri   Ú_provider_prefixs     rf   r   r   D  s#   € ð
 $Ÿk™k¨#Ó.¨qÑ1ÐØœÐ.Ð.rh   c                 óˆ   — | €yt        | t        «      rt        | dd«      S t        | t        «      r| j	                  dd«      S y)zÆ
    Extract the model name from a completion response object.

    Used as a fallback for cost calculation when the input model name
    doesn't exist in model_cost (e.g., Azure Model Router).
    Nri   ©rÈ   r   r|   r  ra   ©r  s    rf   Ú_get_response_modelrE  M  sI   € ð Ð"ØäÐ%¤yÔ1ÜÐ*¨G°TÓ:Ð:Ü	Ð'¬Ô	.Ø"×&Ñ& w°Ó5Ð5àrh   ÚpriorityÚflex)ÚON_DEMAND_PRIORITYÚFLEXÚBATCHÚON_DEMAND_FLEXÚ	ON_DEMANDÚ$_GEMINI_TRAFFIC_TYPE_TO_SERVICE_TIERÚtraffic_typec                 ód   — | €yt         j                  t        | «      j                  «       «      }|S )a  
    Map a Gemini usageMetadata.trafficType value to a LiteLLM service_tier string.

    This allows the same `_priority` / `_flex` cost-key suffix logic used for
    OpenAI/Azure to work for Gemini and Vertex AI models.

    trafficType values seen in practice
    ------------------------------------
    ON_DEMAND               -> standard pricing  (service_tier = None)
    ON_DEMAND_PRIORITY      -> priority pricing  (service_tier = "priority")
    FLEX / BATCH / ON_DEMAND_FLEX -> batch/flex pricing (service_tier = "flex")
    N)rM  ra   rÉ   Úupper)rN  r�   s     rf   Ú!_map_traffic_type_to_service_tierrQ  l  s1   € ð ÐØÜ>×BÑBÄ3À|ÓCT×CZÑCZÓC\Ó]€LØÐrh   c                 ó~   — t        | t        «      r+| j                  «       t        j                  j
                  k(  ry| S )ae  
    Reduce a service_tier value to a concrete billable tier string or None.

    "auto" is a routing preference and any non-string value is not a billable
    tier, so both defer to standard pricing (or to the tier the provider reports
    on the response usage) instead of crashing the downstream cost-key lookup,
    which calls service_tier.lower()
    N)rÈ   rÉ   Úlowerr8   ÚAUTOr  )r�   s    rf   Ú_normalize_service_tierrU    s3   € ô �l¤CÔ(¨L×,>Ñ,>Ó,@ÄK×DTÑDT×DZÑDZÒ,ZØØÐrh   Úsourcec                 ó€   — t        | t        «      rt        | dd«      S t        | t        «      r| j	                  d«      S y)z^Read a raw ``service_tier`` off a response body or usage object, dict or pydantic model alike.r�   NrC  )rV  s    rf   Ú_extract_service_tierrX  �  s7   € ä�&œ)Ô$Ü�v˜~¨tÓ4Ð4Ü	�FœDÔ	!Ø�z‰z˜.Ó)Ð)àrh   c           	      óØ  — t        t        t        z  t        z  t        z  t        | t        «      r| j                  d«      n t        | dd„ «      d«      «      }|€y t        |t        «      r|S t        |t        «      rDt        j                  j                  |«      r%t        j                  «       j                  |d ¬«      S |�Jt        |t        «      st        |t        «      r*t        j                  |«      rt        j                  |«      S t        j                   |«      r*t        j"                  t        t$        t&        z  |«      «      S t        |t        «      r*t)        j*                  |«      rt)        j,                  |«      S t        |t        «      rt        di |¤ŽS t        |t        «      rt        di |j/                  «       ¤ŽS t1        j2                  dt5        |«      |«       y )NrŸ   ra   c                  ó   — y r  © )Úxs    rf   ú<lambda>z#_get_usage_object.<locals>.<lambda>Ÿ  s   � rh   ©r‰   Úreasoning_contentz,Unknown usage object type: %s, usage_obj: %sr[  )r
   r<   r.   r  r   rÈ   ra   r|   rÆ   ÚAnthropicConfigÚis_anthropic_usage_objectÚcalculate_usager&   Ú_is_response_api_usageÚ+_transform_response_api_usage_to_chat_usager   Úis_transcription_usage_objectÚ$transform_transcription_usage_objectr:   r;   r   Úis_interactions_usage_objectÚ#transform_interactions_usage_objectÚ
model_dumpr   rs   Útype)r  Ú	usage_objs     rf   Ú_get_usage_objectrl  —  sœ  € ô ÜÔ Ñ ¤4Ñ'¬)Ñ3ô Ð-¬tÔ4ð  ×#Ñ# GÔ,àD”Ð,¨e±^ÓDÀWÓMó€Ið ÐØÜ�)œUÔ#ØÐÜ	�IœtÔ	$¬×)@Ñ)@×)ZÑ)ZÐ[dÔ)eÜ×&Ñ&Ó(×8Ñ8ÀiÐcgÐ8ÓhÐhàÐÜ˜	¤4Ô(¬J°yÔBRÔ,SÜ#×:Ñ:¸9ÔEä&×RÑRÐS\Ó]Ð]Ü	/×	MÑ	MÈiÔ	XÜ5×ZÑZÜÜ0Ô3QÑQØóó
ð 	
ô 
�IœtÔ	$Ô)N×)kÑ)kÐluÔ)vÜ4×XÑXÐYbÓcÐcÜ	�IœtÔ	$ÜÑ!�yÑ!Ð!Ü	�IœyÔ	)ÜÑ.�y×+Ñ+Ó-Ñ.Ð.ä×ÑÐKÌTÐR[Ë_Ð^gÔhØrh   c                 óˆ   — t        | t        j                  «      xs' t        | t        «      xs t	        j
                  | «      S )z3Returns True if the usage obj is a known Usage type)rÈ   rÆ   r<   r.   r   re  ©rk  s    rf   Ú_is_known_usage_objectsro  Á  s=   € ô 	�9œgŸm™mÓ,ò 	[Ü�iÔ!1Ó2ò	[ä1×OÑOÐPYÓZðrh   c                 óD  — | �| S |€y t        |t        «      st        |t        «      ryt        |t        «      ryt        |t        «      ryt        |t
        «      ryt        |t        «      ryt        |t        «      ryt        |t        «      ryt        |t        «      ry| S )	NÚ
completionÚ	embeddingrª   r˜   r¡   Úimage_generationÚtext_completionÚsend_message)
rÈ   rB   rC   r@   rF   r(   r1   rA   rE   r'   )r‹   r  s     rf   Ú_infer_call_typerv  Ê  s�   € ØÐØÐàÐ"ØäÐ%¤}Ô5¼ÐDWÔYlÔ9mØÜ	Ð'Ô):Ô	;ØÜ	Ð'Ô)>Ô	?ØÜ	Ð'Ô)CÔ	DØÜ	Ð'¬Ô	8ØÜ	Ð'¬Ô	7Ø!Ü	Ð'Ô)?Ô	@Ø Ü	Ð'Ô)CÔ	DØàÐrh   Ú	base_costc                 ó   — | }d}d}|r‚|t         j                  v rpt         j                  |   }||z  }||z
  }t        j                  t        j
                  «      r+t        j                  d|dz  › d|› d|d›d|d›d|d›d	�«       |||fS | ||fS )
a  
    Apply provider-specific cost discount from module-level config.

    Args:
        base_cost: The base cost before discount
        custom_llm_provider: The LLM provider name

    Returns:
        Tuple of (final_cost, discount_percent, discount_amount)
    rR   zApplied éd   z% discount to ú: $ú.6fú -> $z	 (saved $ú))rÆ   Úcost_discount_configr   ÚisEnabledForÚloggingÚDEBUGrs   )rw  rj   Úoriginal_costÚdiscount_percentÚdiscount_amountÚ
final_costs         rf   Ú_apply_cost_discountr†  å  sÊ   € ð %€MØÐØ€OáÐ2´g×6RÑ6RÑRÜ"×7Ñ7Ð8KÑLÐØ'Ð*:Ñ:ˆØ)¨OÑ;ˆ
ä×&Ñ&¤w§}¡}Ô5Ü× Ñ ØÐ+¨cÑ1Ð2°.ÐATÐ@Uð VØ! #Ð& e¨J°sÐ+;¸9À_ÐUXÐDYÐYZð\ôð
 Ð+¨_Ð<Ð<àÐ&¨Ð7Ð7rh   c                 ó  — | }d}d}d}d}|r`|t         j                  v rNt         j                  |   }t        j                  t        j
                  «      rÖt        j                  d||«       n¾dt         j                  v rMt         j                  d   }t        j                  t        j
                  «      rvt        j                  d|«       n_t        j                  t        j
                  «      r<t        j                  d|t        t         j                  j                  «       «      «       |�Ðt        |t        t        f«      rt        |«      }||z  }nAt        |t        «      r1d|v rt        |d   «      }|||z  z  }d|v rt        |d   «      }||z  }||z   }t        j                  t        j
                  «      r:t        j                  d	|xs d› d
|d›d|d›d|dkD  r|dz  nd› d|d›d|d›d�«       ||||fS | |||fS )aC  
    Apply provider-specific or global cost margin from module-level config.

    Args:
        base_cost: The base cost before margin (after discount if applicable)
        custom_llm_provider: The LLM provider name

    Returns:
        Tuple of (final_cost, margin_percent, margin_fixed_amount, margin_total_amount)
    rR   Nz0Found provider-specific margin config for %s: %sÚglobalzUsing global margin config: %sz;No margin config found. Provider: %s, Available configs: %sÚ
percentageÚfixed_amountzApplied margin to rz  r{  r|  z
 (margin: r   ry  z% + $z = $r}  )rÆ   Úcost_margin_configr   r  r€  r�  rs   ÚlistÚkeysrÈ   ÚintrÅ   r  )rw  rj   r‚  Úmargin_percentÚmargin_fixed_amountÚmargin_total_amountÚmargin_configr…  s           rf   Ú_apply_cost_marginr“    s%  € ð %€MØ€NØÐØÐð €MÙÐ2´g×6PÑ6PÑPÜ×2Ñ2Ð3FÑGˆÜ×&Ñ&¤w§}¡}Ô5Ü× Ñ Ð!SÐUhÐjwÕxØ	”W×/Ñ/Ñ	/Ü×2Ñ2°8Ñ<ˆÜ×&Ñ&¤w§}¡}Ô5Ü× Ñ Ð!AÀ=ÕQä×&Ñ&¤w§}¡}Ô5Ü× Ñ ØMØ#Ü”W×/Ñ/×4Ñ4Ó6Ó7ôð Ð ä�m¤c¬5 \Ô2ä" =Ó1ˆNØ"/°.Ñ"@ÑÜ˜¤tÔ,à˜}Ñ,Ü!& }°\Ñ'BÓ!C�Ø# }°~Ñ'EÑEÐ#Ø Ñ.Ü&+¨M¸.Ñ,IÓ&JÐ#Ø#Ð':Ñ:Ð#à)Ð,?Ñ?ˆ
ä×&Ñ&¤w§}¡}Ô5Ü× Ñ Ø$Ð%8Ò%D¸HÐ$Eð FØ! #Ð& e¨J°sÐ+;ð <Ø4BÀQÒ4F˜N¨SÒ0ÈAÐNÈeÐTgÐhkÐSlÐlpð  rEð  FIð  qJð  JKðLôð ˜>Ð+>Ð@SÐSÐSà�nÐ&9Ð;NÐNÐNrh   Úlitellm_logging_objrð   rñ   Ú'cost_for_built_in_tools_cost_usd_dollarÚtotal_cost_usd_dollarÚadditional_costsr‚  rƒ  r„  r�  r�  r‘  Úcache_read_costÚcache_creation_costÚreasoning_costc                 ó¨   — | €y	 | j                  |||||||||	|
|||||||¬«       y# t        $ r }t        j                  d|«       Y d}~yd}~ww xY w)ar  
    Helper function to store cost breakdown in the logging object.

    Args:
        litellm_logging_obj: The logging object to store breakdown in
        prompt_tokens_cost_usd_dollar: Cost of input tokens
        completion_tokens_cost_usd_dollar: Cost of completion tokens (includes reasoning if applicable)
        cost_for_built_in_tools_cost_usd_dollar: Cost of built-in tools
        total_cost_usd_dollar: Total cost of request
        additional_costs: Free-form additional costs dict (e.g., {"azure_model_router_flat_cost": 0.00014})
        original_cost: Cost before discount
        discount_percent: Discount percentage applied (0.05 = 5%)
        discount_amount: Discount amount in USD
        margin_percent: Margin percentage applied (0.10 = 10%)
        margin_fixed_amount: Fixed margin amount in USD
        margin_total_amount: Total margin added in USD
        service_tier: Tier the costs above were priced on, already resolved
        data_residency: Region uplift the costs above were priced on, already resolved
        vertex_location: Vertex AI location the costs above were priced on, already resolved
    N)rd   re   Ú
total_costr•  r—  r‚  rƒ  r„  r�  r�  r‘  r˜  r™  rš  r�   rŽ   r�   z Error storing cost breakdown: %s)Úset_cost_breakdownrr   r   rs   )r”  rð   rñ   r•  r–  r—  r‚  rƒ  r„  r�  r�  r‘  r˜  r™  rš  r�   rŽ   r�   Úbreakdown_errors                      rf   Ú$_store_cost_breakdown_in_logging_objrŸ  I  s‚   € ðP Ð"ØðRà×.Ñ.Ø4Ø9Ø,Ø4[Ø-Ø'Ø-Ø+Ø)Ø 3Ø 3Ø+Ø 3Ø)Ø%Ø)Ø+ð# 	/õ 	
øô( ò RÜ×ÑÐ?À×QÑQûðRús   …"( ¨	A±AÁAÚmessagesr
  ÚsizeÚqualityÚnr³   Ústandard_built_in_tools_paramsÚlitellm_model_namec                 ó  ‡U‡V— 	 t        || «      xs d}|dk(  s|dk(  r'|�%t        |t        «      rt        |«      dk(  r|dk(  rd}d}d}d}d}d}d}d}t	        | ¬	«      }d} |€|�|j                  d
«      }t        |«      }|€| �t        | «      }t        |«      }|€|�t        |«      }t        |«      }t        || ||||¬«      }!|!t        | «      g}"|�|"j                  |«       t        |"«      D �
]‹  \  }#}	 t        j                  t        j                  «      rt        j                   d|«       | ��ôt        | t"        «      st        | t$        «      �rÓt        | t$        «      r| j                  di «      }$nt'        | di «      }$t        |$t"        «      rJt)        |$¬«      s>t+        t"        |$«      }%t-        | dt/        j0                  doi |%j3                  «       ¤Ž«       |$€i }&n1t        |$t"        «      rt+        t"        |$«      j3                  «       }&n|$}&t.        j4                  j7                  |&«      r4t/        j4                  «       j9                  |&d¬«      j3                  «       }&nÆt;        j<                  |&«      r$t;        j>                  |&«      j3                  «       }&n�tA        jB                  |&«      r=tA        jD                  t+        tF        tH        z  |&«      «      }'|'�L|'j3                  «       }&n;tK        jL                  |&«      r$tK        jN                  |&«      j3                  «       }&n|&}&|&j                  dd«      }|&j                  dd«      }|&j                  dd«      }|&j                  dd«      }d|&v r4|&d   i k7  r,|&d   r'|&j                  d«      xs i }(|(j                  dd«      }t'        | dd«      }t'        | dd«      })|)�µ|)j                  d|xs d«      }|)j                  d|«      }|€‹|)j                  d«      xs i }*|*j                  d«      }+|+rctQ        |+«      }nW|€tS        d| › d|› �«      ‚t        |«      dkD  rtU        ||¬«      }nt        |«      dkD  rtU        ||¬«      }tU        ||¬«      }|tV        v rdd l,m-}, |,j]                  |¬!«      c S |€tS        d| › d|› �«      ‚|€	 t/        j^                  |¬"«      \  }}}-}-tc        jd                  |«      r/t        | tf        «      rtc        jh                  ||| |
||	||¬$«      c S |tj        v �rd}/|r'|�%t'        |d%d«      ŠU‰U�tm        ˆUˆVfd&„d'D «       d«      }/t'        | dd«      }$d}0d}1d}2| �Á|$r¿t        |$t$        «      r7|$j                  d(d«      }0|$j                  d)d«      }3|$j                  d*d«      }2n't'        |$d(d«      }0t'        |$d)d«      }3t'        |$d*d«      }2|3�'t        |3«      jo                  «       jq                  «       }1|/€|2�ts        |2«      c S |0�dd+l:m;}4  |4||0||/|1¬,«      c S ty        |d||/|1¬,«      c S |tz        v r"t.        j|                  j                  |¬-«      }�nÕ|t€        v r0t'        | di «      xs i }5|5j                  d.t'        | d/d«      «      }�n�|t‚        v r~| ��’t        | t„        «      �r�| j†                  }6|6�|6j                  d0«      xs i }7ni }7t‰        |7j                  d1«      |7j                  d2«      ¬3«      } |7j                  d1«      xs d4}8|8}�n|tŠ        v r¡dd5lFmG}9 d4}:|�1|j                  d6«      };t        |;t�        «      rt        |;«      }:n|;�d4}:|xs d7}<|r	d8|<vr|› d9�}< |9|<||:|¬:«      \  }=}>|=|>z   }?|?}@t“        |?|¬;«      \  }?}A}Bt•        |?|¬;«      \  }?}C}D}Et—        ||=|>d|?|@|A|B|C|D|E||¬<«       |?c S |t˜        k(  rBt        | tš        «      r2|�|€tS        d=|› d>|› �«      ‚t�        | jž                  |||||¬?«      c S |t         k(  rdd@lQmR}F |Fj§                  |¬!«      c S dA|v s	dB|v s|dBk(  r1t©        |t.        jª                  «      st­        |t¯        |«      ¬C«      }n6|t.        j°                  v sdD|v r |t.        jª                  vrt³        | |«      c S |€tS        d| › d|› �«      ‚|�¨|dEk(  r£t        |«      dkD  rCt.        j|                  jµ                  dF|id¬G«      }Gt.        j|                  j                  |G¬-«      }| �Pt        | t¶        «      r@t.        j|                  j¹                  | ¬H«      }Ht.        j|                  j                  |H¬-«      }d}I|�|jº                  }It½        doi dI|“d|xs d“d|xs d“d|“dJ|“d|“dK|“dL|“dM|“dN|“d|“d|“dO|“dP|“dQ|“dR| “d
|“dS|“dT|“dU| “dVI“Ž\  }J}K|dWk(  r‡I}L| �gt'        | dd«      xs i })|)j                  dI«      xs |)j                  dX«      }M|Mr,dYMxs d7jq                  «       v sdZMxs d7jq                  «       v sL€M}LL€|}Lt¿        L||xs d|xs d¬[«      }Nnd}NJKz   }?tÁ        jÂ                  || |||¬\«      }O|?|Oz  }?Nr|?tÅ        NjÇ                  «       «      z  }?|?}@t.        jÈ                  rt“        |?|¬;«      \  }?}A}Bnd}Ad}Bt.        jÊ                  rt•        |?|¬;«      \  }?}C}D}End}Cd}Dd}E|�’d}Pd}Qd}R|�K|rIt        |t        «      r|nd}StÍ        ||S||||¬]«      }T|TjÎ                  }P|TjÐ                  }Q|TjÒ                  }Rt—        doi d^|“d_J“d`K“daO“db|?“dc@“ddN“deA“dfB“dgC“dhD“diE“djQ“dkR“dlP“d
|“dS|“dT|“Ž |?c S  ta        dn|"› �«      ‚# t`        $ r!}.t        j                   d#|.«       Y d}.~.�Œàd}.~.ww xY w# t`        $ r5}.t        j                   dm||.«       |#t        |"«      d4z
  k(  r|.‚Y d}.~.�Œd}.~.ww xY w# t`        $ r}.|.‚d}.~.ww xY w)pa«  
    Calculate the cost of a given completion call fot GPT-3.5-turbo, llama2, any litellm supported llm.

    Parameters:
        completion_response (litellm.ModelResponses): [Required] The response received from a LiteLLM completion request.

        [OPTIONAL PARAMS]
        model (str): Optional. The name of the language model used in the completion calls
        prompt (str): Optional. The input prompt passed to the llm
        completion (str): Optional. The output completion text from the llm
        total_time (float, int): Optional. (Only used for Replicate LLMs) The total time used for the request in seconds
        custom_cost_per_token: Optional[CostPerToken]: the cost per input + output token for the llm api call.
        custom_cost_per_second: Optional[float]: the cost per second for the llm api call.

    Returns:
        float: The cost in USD dollars for the completion based on the provided parameters.

    Exceptions:
        Raises exception if model not in the litellm model cost map. Register model, via custom pricing or PR - https://github.com/BerriAI/litellm/blob/main/model_prices_and_context_window.json


    Note:
        - If completion_response is provided, the function extracts token information and the model name from it.
        - If completion_response is not provided, the function calculates token counts based on the model and input text.
        - The cost is calculated based on the model, prompt tokens, and completion tokens.
        - For certain models containing "togethercomputer" in the name, prices are based on the model size.
        - For un-mapped Replicate models, the cost is calculated based on the total time used for the request.
    rq  Úaimage_generationrs  Nr   rº   zdall-e-2rR   rD  r�   )ri   r  rj   r  r  r  z,selected model name for cost calculation: %srŸ   rn  r^  rS   rT   r†   r‡   ry   rV   Ú_response_msr±   rj   rç   Úprovider_specific_fieldsrN  z[Model is None and does not exist in passed completion_response. Passed completion_response=r›   )ri   r   )ri   Útext)ÚA2ACostCalculator)r”  r—   zXlitellm.cost_calculator.py::completion_cost() - Error inferring custom_llm_provider - %s)ri   rj   r  r¢  r£  r¡  r³   r‹   Úlitellm_paramsc              3   óp   •K  — | ]-  }‰j                  |«      xs i j                  d «      xŠ	 �‰–— Œ/ y­w)r  N©ra   )r,  Ú_metadata_keyÚ_litellm_paramsr  s     €€rf   r/  z"completion_cost.<locals>.<genexpr>‰  sF   øè ø€ ò !"à(5Ø7F×7JÑ7JÈ=Ó7YÒ7_Ð]_×6dÑ6dÐeqÓ6rÐ(r¨
Ø+/ð(0ô %/ñ!"ùs   ƒ36)ÚmetadataÚlitellm_metadataÚduration_secondsÚvideo_resolutionÚprovider_reported_cost_usd)Úvideo_generation_cost)ri   r³  rj   r  r´  )rª  Úaudio_transcription_durationr¬   r¢   Úsearch_unitsr“   )r¸  r“   r•   r¯   Úqueryrƒ   r–   z/searchr²   )rw  rj   )r”  rð   rñ   r•  r–  r‚  rƒ  r„  r�  r�  r‘  r�   rŽ   z|usage object and custom_llm_provider must be provided for realtime stream cost calculation. Got cost_per_token_usage_object=rœ   )ÚresultsÚcombined_usage_objectrj   r¥  rŽ   r”  )ÚMCPCostCalculatorÚtogethercomputerÚtogether_ai)r‹   Ú	replicater´   r   )Údatar‹   )Úresponse_objri   rU   rY   rX   r„   r…   r‰   r‹   rŒ   rŠ   rŽ   r�   r�   r‘   rl   r¥  Úmodel_routerzmodel-router)ri   rj   rS   rT   )ri   Úresponse_objectrŸ   r¤  rj   )ri   rj   rŸ   r�   rŽ   r�   r”  rð   rñ   r•  r–  r‚  r—  rƒ  r„  r�  r�  r‘  r˜  r™  rš  zXlitellm.cost_calculator.py::completion_cost() - Error calculating cost for model=%s - %sz=Unable to calculat cost for received potential model names - r[  )jrv  rÈ   rÉ   rË   rl  ra   rU  rX  r(  rE  Úappendr8  r   r  r€  r�  rs   r   r  r|   ro  r
   ÚsetattrrÆ   r<   ri  r`  ra  rb  r&   rc  rd  r   re  rf  r:   r;   r   rg  rh  rQ  rÏ   rH   rJ   Ú$litellm.a2a_protocol.cost_calculatorr«  Úcalculate_a2a_costrÌ   rr   r   Ú_call_type_has_image_responserA   Ú&route_image_generation_cost_calculatorrK   r7  ÚstriprS  rÅ   Ú$litellm.llms.openai.cost_calculationr¶  Údefault_video_cost_calculatorrL   ÚutilsÚ_count_charactersrM   rN   r1   Úmetar0   rO   rÕ   r°   rŒ  r†  r“  rŸ  rP   r3   Ú'handle_realtime_stream_cost_calculationrº  rQ   Ú6litellm.proxy._experimental.mcp_server.cost_calculatorr¼  Úcalculate_mcp_tool_call_costr#   rÇ   r"   r>   Úreplicate_modelsr  Úget_formatted_promptrB   Úget_response_stringri   r   rv   r   Úget_cost_for_built_in_toolsÚsumÚvaluesr~  r‹  r   rš  r˜  r™  )Wr  ri   Úpromptr   rq  r
  r‹   rj   rç   r¡  r¢  r£  rX   rY   r³   r  r  r¤  r¥  r  r”  r�   rŽ   r�   rS   r„   rT   r…   r†   r‡   rŒ   Úcost_per_token_usage_objectrŠ   Úselected_modelÚpotential_model_namesÚidxrk  Ú_usage_for_dumpÚ_usageÚtr_usagery   r  Úprovider_specificÚraw_traffic_typer«  rú   ru   Ú_video_model_infor³  r´  Úprovider_reported_costÚ_vrr¶  Ú_hiddenÚmeta_objr¢   r¸  r°   rˆ   r¹  Úsearch_modelrÿ   Úcompletion_cost_resultÚ_final_costr‚  rƒ  r„  r�  r�  r‘  r¼  Úprompt_stringÚcompletion_stringÚrequest_model_for_costrð   rñ   Úmodel_for_additional_costsÚhidden_modelr—  Úcost_for_built_in_toolsÚ_reasoning_costÚ_cache_read_costÚ_cache_creation_costÚ_breakdown_providerÚ_token_type_breakdownr°  r  sW                                                                                        @@rf   r   r   �  s“  ù€ ðxZÜ$ YÐ0CÓDÒTÈˆ	ð Ð-Ò-°Ð>PÒ1PØÐ!Ü˜5¤#Ô&Ü�E“
˜a’Ø# wÒ.àˆEàˆØ(,ÐØÐØ,0ÐØ26Ð#Ø.2ÐØ36Ð)Ü;LÐatÔ;uÐ#Ø8<Ðð Ð OÐ$?Ø*×.Ñ.¨~Ó>ˆLä.¨|Ó<ˆð ÐÐ$7Ð$CÜ0Ð1DÓEˆLä.¨|Ó<ˆð ÐÐ$?Ð$KÜ0Ð1LÓMˆLä.¨|Ó<ˆä @ØØ 3Ø 3Ø)Ø!Ø+ô!
ˆð ÜÐ 3Ó4ð(
Ðð ÐØ!×(Ñ(¨Ô/ä#Ð$9Ó:ó _	‰JˆC�ð^Ü!×.Ñ.¬w¯}©}Ô=Ü"×(Ñ(Ð)WÐY^Ô_à&Ñ2ÜÐ2´IÔ>Ä*ÐM`ÔbfÕBgä!Ð"5´tÔ<Ø9L×9PÑ9PÐQXÐZ\Ó9]™	ä$+Ð,?ÀÈ"Ó$M˜	Ü! )¬YÔ7Ô@WÐbkÕ@lÜ*.¬y¸)Ó*D˜ÜØ/Ø#Ü#ŸM™MÑI¨O×,FÑ,FÓ,HÑIôð
 !Ð(Ø!#™Ü# I¬yÔ9Ü!%¤i°Ó!;×!FÑ!FÓ!H™à!*˜ä×.Ñ.×HÑHÈÔPä#×3Ñ3Ó5ß,™_¸&ÐTX˜_ÓYß'™Z›\ñ ô
 1×GÑGÈÔOÜ!8×!dÑ!dØ"ó"ç$™*›,ñ ô @×]Ñ]Ð^dÔeÜ#I×#nÑ#nÜ Ü @ÔCaÑ aØ &óó$˜ð $Ð/Ø%-×%8Ñ%8Ó%:™FÜ>×[Ñ[Ð\bÔcÜ!F×!jÑ!jØ"ó"ç$™*›,ñ ð "(˜ð %+§J¡J¨ÀÓ$B�MØ(.¯
©
Ð3FÈÓ(JÐ%Ø28·*±*Ð=ZÐ\]Ó2^Ð/Ø.4¯j©jÐ9RÐTUÓ.VÐ+à/°6Ñ9Ø"Ð#:Ñ;¸rÒAØ"Ð#:Ò;à06·
±
Ð;RÓ0SÒ0YÐWYÐ-Ø2G×2KÑ2KÈOÐ]^Ó2_Ð/ä!(Ð)<¸nÈaÓ!P�Jä$+Ð,?ÐAQÐSWÓ$X�MØ$Ð0Ø.;×.?Ñ.?Ð@UÐWjÒWrÐnrÓ.sÐ+Ø&3×&7Ñ&7¸À{Ó&S˜ð (Ð/Ø0=×0AÑ0AÐB\Ó0]Ò0cÐacÐ-Ø/@×/DÑ/DÀ^Ó/TÐ,Ù/Ü/PÐQaÓ/b¡à�}Ü(Øyð  {Nð  zOð  OWð  X]ð  W^ð  _óð ô ˜8“} qÒ(Ü(5¸EÈHÔ(U™Ü˜V› qšÜ(5¸EÈÔ(O˜Ü(5¸EÈ
Ô(SÐ%ð ¤Ñ/ÝVà,×?Ñ?ÐTgÐ?ÓhÒhà�=Ü$Øuð  wJð  vKð  KSð  TYð  SZð  [óð ð 'Ð.ðÜ;B×;SÑ;SØ"'ô<Ñ8˜Ð2°A°qô '×DÑDÀYÔOÔT^Ø'¬ôUô /×UÑUØ#Ø,?Ø,?Ø 'ØØ!Ø(7Ø"+ô	ò 	ð Ô"3Ò3ð ;?Ð%Ù%Ð*=Ð*IÜ*1Ð2EÐGWÐY]Ó*^˜Ø*Ð6Ü04ô!"à9Yô!"ð !%ó1Ð-ô !(Ð(;¸WÀdÓ K�IØ59Ð$Ø37Ð$Ø;?Ð*Ø*Ð6¹9ä% i´Ô6Ø/8¯}©}Ð=OÐQUÓ/VÐ,Ø"+§-¡-Ð0BÀDÓ"I˜CØ5>·]±]ÐC_ÐaeÓ5fÑ2ä/6°yÐBTÐVZÓ/[Ð,Ü")¨)Ð5GÈÓ"N˜CÜ5<¸YÐHdÐfjÓ5kÐ2Ø˜?Ü/2°3«x¯~©~Ó/?×/EÑ/EÓ/GÐ,à,Ð4Ð9OÐ9[Ü#(Ð)?Ó#@Ò@à+Ð7õñ $9Ø&+Ø1AØ4GØ+<Ø1Aô$ò ô 9Ø#Ø),Ø,?Ø#4Ø)9ôò ð Ô"4Ñ4Ü(/¯©×(GÑ(GÈVÐ(GÓ(TÒ%ØÔ";Ñ;ô
 &Ð&9Ð;KÈRÓPÒVÐTV�GØ8?¿¹Ø6ÜÐ 3°ZÀÓEó9Ò5ð Ô"4Ñ4Ø*Ñ6¼:ÐFYÔ[iÕ;jØ#6×#;Ñ#;˜Ø#Ð/Ø>F¿l¹lÈ>Ó>ZÒ>`Ð^`™Là+-˜Lä.?Ø)5×)9Ñ)9¸.Ó)IØ)5×)9Ñ)9¸.Ó)Iô/Ð+ð
 (4×'7Ñ'7¸Ó'GÒ'LÈ1˜Ø,8Ò)ØÔ"4Ñ4ÝMð )*Ð%Ø&Ð2à /× 3Ñ 3°GÓ <˜Ü% e¬TÔ2Ü03°E³
Ñ-Ø"Ð.Ø01Ð-à#(¢;¨B�LÙ*¨s¸,Ñ/Fà*=Ð)>¸gÐ'F˜ñ
 7Ø*Ø,?Ø*;Ø(7ô	ñØ#Ø.ð #.Ð0FÑ"F�Kð %0�Mô
 -Ø"-Ø,?ôñ	Ø#Ø(Ø'ô +Ø"-Ø,?ôñØ#Ø&Ø+Ø+ô 9Ø,?Ø6AØ:PØ@CØ.9Ø&3Ø)9Ø(7Ø'5Ø,?Ø,?Ø%1Ø'5õð  'Ò&ØÔ"6Ò6¼:Ø'Ô)Kô<ð 3Ð:Ð>QÐ>YÜ(ð [ð  \wð  [xð  xNð  Obð  Ncð  dóð ô CØ 3× ;Ñ ;Ø.IØ,?Ø+0Ø'5Ø,?ôò ð ¤.Ò0õð -×IÑIÐ^qÐIÓrÒrð '¨%Ñ/°=ÀEÑ3IÐM`ÐdqÒMqÜ7¸¼w×?QÑ?QÔRÜ9¸%Ì9ÐU^ÓK_Ô`‘Eð œw×7Ñ7Ñ7¸;È%Ñ;OÐUZÔbi×btÑbtÑUtä;Ð<OÐQ[Ó\Ò\à�=Ü$Øuð  wJð  vKð  KSð  TYð  SZð  [óð ð 'Ð2Ð7JÈkÒ7Yä˜8“} qÒ(Ü(/¯©×(JÑ(JØ",¨hÐ!7À<ð )Kó )˜ô -4¯M©M×,KÑ,KÐQ^Ð,KÓ,_Ð)Ø*Ð6¼:ÐFYÔ[hÔ;iÜ,3¯M©M×,MÑ,MÐ[nÐ,MÓ,oÐ)Ü07·±×0OÑ0OÐUfÐ0OÓ0gÐ-ð *.Ð&Ø&Ð2Ø-@×-FÑ-FÐ*ô
 #ò Ùðà"/Ò"4°1øðð '8Ò&<¸1øðñ )<ð	ñ
 &0ðñ !,ðñ ,Bðñ +@ðñ '8ðñ +@ðñ 1Lðñ -Dðñ "=ðñ (ðñ 7Xðñ  )<ð!ñ" ".ð#ñ$ $2ð%ñ& %4ð'ñ( 1ð)ñ* #9ð+ñØ1Ø5ð4 '¨*Ò4Ø1GÐ.Ø*Ð6Ü(/Ð0CÐEUÐW[Ó(\Ò(bÐ`b˜Ø'4×'8Ñ'8¸Ó'AÒ'lÀ]×EVÑEVÐWkÓEl˜á(à .°<Ò3EÀ2×2LÑ2LÓ2NÑ NØ#1°lÒ6HÀb×5OÑ5OÓ5QÑ#Qà9ÐAà9EÐ6Ø1Ð9Ø5:Ð2Ü'<Ø8Ø,?Ø&3Ò&8°qØ*;Ò*@¸qô	(Ñ$ð (,Ð$à;Ð>_Ñ_�Ü*I×*eÑ*eØØ$7Ø5Ø3QØ(;ô+Ð'ð Ð6Ñ6�Ù#Ø¤3Ð'7×'>Ñ'>Ó'@Ó#AÑA�Kà +�Ü×/Ò/ô
 -Ø"-Ø,?ôñ	Ø#Ø(Ù'ð (+Ð$Ø&)�Oô ×-Ò-ô +Ø"-Ø,?ôñØ#Ø&Ø+Ù+ð &)�NØ*-Ð'Ø*-Ð'ð 'Ð2Ø48�OØ59Ð$Ø9=Ð(Ø2Ð>Á5ä3=Ð>QÔSVÔ3WÑ/Ð]að ,ô 1NØ"'Ø0CØ"=Ø)5Ø+9Ø,;ô1Ð-ð +@×*NÑ*N˜Ø+@×+PÑ+PÐ(Ø/D×/XÑ/XÐ,Ü8ò Ù,?ðá6Sðñ ;\ðñ AXð	ñ
 /:ðñ '4ðñ *:ðñ *:ðñ )8ðñ (6ðñ -@ðñ -@ðñ )9ðñ -Aðñ (7ðñ  &2ð!ñ" (6ð#ñ$ )8ñ%ð* #Ò"ðs_	ô@ ÐWÐXmÐWnÐoÓpÐpøôk %ò Ü&×,Ñ,ØvØ÷ò ûðûô^ ò Ü×$Ñ$ØnÐpuÐwxôð œ#Ð3Ó4°qÑ8Ò8Ø�Gõ 9ûð	ûô ò Øˆûðúså   „C4o< Ã9N&n;Òo< Ò"n;Ò8nÓAn;Ôo< ÔC0n;Øo< Ø
n;Øo< Ø!n;Ø0o< Ø3Fn;ßo< ßAn;ào< à n;à/o< à2A1n;â#o< â&Kn;í<o< í?o< î	n8în3î-n;î3n8î8n;î;	o9ï*o4ï.o< ï4o9ï9o< ï<	pðpðpc                 óÂ   — t        | t        «      rt        t        | «      j                  «       }n| }|j	                  di «      }|rd|v r|d   }|€y t        |d   «      S y )NÚadditional_headersz$llm_provider-x-litellm-response-cost)rÈ   r   r
   ri  ra   rÅ   )r  Ú_hidden_params_dictr÷  rï   s       rf   Ú$get_response_cost_from_hidden_paramsrù  è  ss   € ô �-¤Ô+Ü"¤9¨mÓ<×GÑGÓIÑà+Ðà 3× 7Ñ 7Ð8LÈbÓ QÐÙÐDÐHZÑZØ1Ð2XÑYˆØÐ ØÜÐ'Ð(NÑOÓPÐPØrh   rÃ  )rr  Ú
aembeddingrq  ÚacompletionÚatext_completionrt  rs  r§  Ú
moderationÚamoderationr©   rª   r™   r˜   r¡   r    r­   r®   Ú	cache_hitrÙ  c                 ó  — 	 d}|�|du rd}|S t        | t        «      r4t        | d«      r(|| j                  d<   t	        | j                  «      }|�|S t        | ||||||||	|
|||||¬«      }|S # t        $ r}|‚d}~ww xY w)z7
    Returns
    - float or None: cost of response
    rR   NTr±   r³   )r  ri   r‹   rj   r³   r  r  rÙ  r¤  r¥  r  r”  r�   rŽ   r�   )rÈ   r   rq   r±   rù  r   rr   )rÃ  ri   rj   r‹   r³   rÿ  r  r  rÙ  r¤  r¥  r  r”  r�   rŽ   r�   rï   Úprovider_response_costru   s                      rf   Úresponse_cost_calculatorr  ù  sÁ   € ðnØ"ˆØÐ  Y°$Ñ%6ØˆMð4 Ðô1 ˜/¬9Ô5Ü˜?Ð,<Ô=ØHW�O×2Ñ2Ð3DÑEÜ4XÐYh×YwÑYwÓ4xÐ*Ø-Ð9Ø5Ð5ä+Ø$3ØØ#Ø$7Ø /Ø-Ø%ØØ/MØ#5Ø /Ø$7Ø)Ø-Ø /ôˆMð" ÐøÜò Øˆûðús#   ‚A. ŽAA. ÁA. Á.	A>Á7A9Á9A>c                 ó8  — ddl m} |�t        ||«      st        dt	        |«      › �«      ‚|j
                  €t        d«      ‚	 t        j                  | |¬«      }t        |j
                  dd«      }d}|�|j                  d«      }|�	|�||z  d	fS d}|�|j                  d
«      }|j
                  j                  }|€(|€|€t        j                  d| ||«       yt        d«      ‚|€t        j                  d| ||«       y||z  }	|	d	fS # t        $ r d}Y Œ½w xY w)aJ  
    Args:
        model: str - model name
        custom_llm_provider: Optional[str] - custom LLM provider
        response: Optional[Any] - response object

    Returns:
        Tuple[float, float]: cost of OCR processing

        (Parent function requires a tuple, so we return a tuple. Cost is only in the first element.)
    r   )ÚOCRResponseNz.response must be of type OCRResponse got type=zOCR response usage_info is Nonerš   ÚcreditsÚocr_cost_per_creditrR   Úocr_cost_per_pagezyOCR cost: model=%s custom_llm_provider=%s response.usage_info.pages_processed is None and credits=%s; returning 0.0 cost.©rR   rR   z$OCR response pages_processed is Nonez�OCR cost: model=%s custom_llm_provider=%s reported pages_processed=%s but no ocr_cost_per_page is configured; returning 0.0 cost.)Ú(litellm.llms.base_llm.ocr.transformationr  rÈ   rÏ   rj  Ú
usage_inforÆ   rÎ   rr   r|   ra   Úpages_processedr   Úwarning)
ri   rj   r�   r  r  r  Úcost_per_creditr  r  Útotal_ocr_processing_costs
             rf   rÒ   rÒ   R  ss  € õ  Eð
 Ðœz¨(°KÔ@ÜÐIÌ$ÈxË.ÐIYÐZÓ[Ð[à×ÑÐ"ÜÐ:Ó;Ð;ðÜ'.×'=Ñ'=ÀEÐ_rÔ'sˆ
ô ˜X×0Ñ0°)¸TÓB€GØ€OØÐØ$Ÿ.™.Ð)>Ó?ˆØÐ˜Ð:Ø Ñ(¨#Ð-Ð-à&*ÐØÐØ&ŸN™NÐ+>Ó?Ðà%×0Ñ0×@Ñ@€OØÐØÐ&Ð*;Ð*Cô
 ×"Ñ"ðNàØ#Øôð ÜÐ?Ó@Ð@àÐ ô 	×Ñð"ð ØØô	
ð à.?À/Ñ.QÐØ$ cÐ)Ð)øôa ò ØŠ
ðús   ÁD ÄDÄDc                 óæ   — d}|€d}| �d| v rt        j                  | ¬«      \  }}}}t        j                  t	        |«      |¬«      }|€t        j                  d|«       y|j                  |¬«      S )	zB
    Returns
    - float or None: cost of vector store search
    Nr·   r–   r—   )ÚproviderÚapi_typez+Vector store search is not supported for %sr  )r�   )rÆ   rÌ   rD   Ú!get_provider_vector_stores_configr4   r   rs   Úcalculate_vector_store_cost)ri   rj   r�   r  rú   Úconfigs         rf   rÑ   rÑ   ¢  s“   € ð  €HØÐ"Ø&ÐàÐ˜S E™\Ü.5×.FÑ.FØô/
Ñ+ˆÐ% q¨!ô *×KÑKÜÐ1Ó2Øô€Fð
 €~Ü×ÑÐJÐL_Ô`Øà×-Ñ-Øð .ó ð rh   r¢   c                 ó"  — t        j                  | |¬«      \  }}}}	 t        j                  | dg t	        |«      ¬«      }	 t        j
                  | |¬«      }|j                  | |||¬«      S # t        $ r d}Y Œ"w xY w# t        $ r}|‚d}~ww xY w)zI
    Returns
    - float or None: cost of response OR none if error.
    rš   N)ri   Úapi_baseÚpresent_version_paramsr  )ri   rj   r¢   r  )rÆ   rÌ   rD   Úget_provider_rerank_configr4   rÎ   rr   Úcalculate_rerank_cost)ri   rj   r¢   rú   r  r  ru   s          rf   rÐ   rÐ   Â  s²   € ô $+×#;Ñ#;À%Ð]pÔ#qÑ €AÐ˜A˜qðÜ-×HÑHØØØ#%Ü!Ð"5Ó6ô	
ˆð	Ü+2×+AÑ+AÈÐcvÔ+wˆJð ×+Ñ+ØØ 3Ø%Ø!ð	 ,ó 
ð 	
øô ò 	ØŠJð	ûô ò Øˆûðús;   ž"A> ÁA- ÁA> Á-A;Á8A> Á:A;Á;A> Á>	BÂB	Â	Br¬   c                 ó   — t        | ||¬«      S )Nr«   )rÔ   r«   s      rf   Útranscription_costr  ä  s   € Ü!¨ÐCVÐaiÔjÐjrh   c                 óÚ  — |xs d}d|v rd|vr|j                  dd«      n|}t        t        |j                  d«      «      \  }}|› d| › �}	d}
|r3| j	                  |› d�«      r| j                  |› d�d«      }
|› d|› d|
› �}	|r|› d|	› �n|	}t
        j                  j                  › d|	› �}t        j                  d||	«       |› d| j                  d«      d   › �}|r|› d|› �n|}d}||	|||| |
g}|D ],  }|€Œ|t        j                  v sŒt        j                  |   } n |€t        d	|› �«      ‚d
|v r|d
   �|d
   |z  S d|v r|d   �|d   |z  |z  |z  S t        d| › d|› �«      ‚)añ  
    Default image cost calculator for image generation

    Args:
        model (str): Model name
        image_response (ImageResponse): Response from image generation
        quality (Optional[str]): Image quality setting
        n (Optional[int]): Number of images generated
        size (Optional[str]): Image size (e.g. "1024x1024" or "1024-x-1024")

    Returns:
        float: Cost in USD for the image generation

    Raises:
        Exception: If model pricing not found in cost map
    ú1024-x-1024r\  z-x-r–   Nrƒ   z"Looking up cost for models: %s, %séÿÿÿÿz,Model not found in cost map. Tried checking Úinput_cost_per_imageÚinput_cost_per_pixelz'No pricing information found for model z. Tried checking )ÚreplaceÚmaprŽ  rÍ   rÊ   r)   ÚHIGHr  r   rs   rÆ   rÇ   rr   )ri   rj   r¢  r£  r¡  r³   Úsize_strÚheightÚwidthÚbase_model_nameÚ&model_name_without_custom_llm_providerÚmodel_name_with_qualityÚmodel_name_with_v2_qualityÚmodel_without_providerÚ#model_with_quality_without_providerÚ	cost_infoÚmodels_to_checkÚ_models                     rf   Údefault_image_cost_calculatorr0  è  s   € ð2 Ò)˜M€HØ/2°h©À5ÐPXÑCXˆx×Ñ  UÔ+Ð^f€Hô œ˜XŸ^™^¨EÓ2Ó3�M€FˆEð "˜
 ! E 7Ð+€OØ9=Ð*Ù˜u×/Ñ/Ð3FÐ2GÀqÐ0IÔJØ16·±ÐBUÐAVÐVWÐ?XÐZ\Ó1]Ð.Ø0Ð1°°8°*¸AÐ>dÐ=eÐfˆÙGN¨ y°°/Ð1BÑ%CÐTcÐô ,I×+MÑ+M×+SÑ+SÐ*TÐTUÐVeÐUfÐ(gÐä×ÑÐ=Ð?VÐXgÔhà'/ j°°%·+±+¸cÓ2BÀ2Ñ2FÐ1GÐ$HÐÙSZ¨W¨I°QÐ7MÐ6NÑ*OÐ`vÐ'ð "€IàØØ"Ø+ØØØ.ð0€Oð "ò ˆØÑ &¬G×,>Ñ,>Ò">Ü×*Ñ*¨6Ñ2ˆIÙðð ÐÜÐFÀÐFWÐXÓYÐYð  Ñ*¨yÐ9OÑ/PÐ/\ØÐ/Ñ0°1Ñ4Ð4à	 9Ñ	,°Ð;QÑ1RÐ1^ØÐ/Ñ0°6Ñ9¸EÑAÀAÑEÐEäÐAÀ%ÀÐHYÐZiÐYjÐkÓlÐlrh   r³  r  r´  c                 óT  — d}|�t        |«      }nÇ| }d}|r0| j                  |› d�«      r| j                  |› d�d«      }|› d|› �}t        j                  d|«       | j                  d«      d   }|| ||g}	|	D ],  }
|
€Œ|
t        j                  v sŒt        j                  |
   } n |€.|r,|› d| › �}|t        j                  v rt        j                  |   }|€t        d| › �«      ‚|j                  d«      }|�||z  S t        ||«      }|�||z  S t        j                  d| «       y	)
a½  
    Default video cost calculator for video generation

    Args:
        model (str): Model name
        duration_seconds (float): Duration of the generated video in seconds
        custom_llm_provider (Optional[str]): Custom LLM provider
        model_info (Optional[ModelInfo]): Deployment-level model info containing
            custom video pricing. When provided, used before falling back to
            the global litellm.model_cost lookup.
        video_resolution (Optional[str]): From usage (e.g. ``720p``, ``1080p``) for tiered per-second pricing.

    Returns:
        float: Cost in USD for the video generation

    Raises:
        Exception: If model pricing not found in cost map
    Nr–   rƒ   z#Looking up cost for video model: %sr  z&Model not found in cost map for model=Ú output_cost_per_video_per_secondzhNo cost information found for video model %s. Please add pricing to model_prices_and_context_window.jsonrR   )r  rÊ   r!  r   rs   rÍ   rÆ   rÇ   rr   ra   r    Úinfo)ri   r³  rj   r  r´  r-  r'  r(  r+  r.  r/  Úprefixed_modelÚvideo_cost_per_secondrÄ   s                 rf   rÌ  rÌ  3  s‘  € ð4 "€IØÐÜ˜Ó$‰	ð  ˆØ=AÐ.Ù 5×#3Ñ#3Ð7JÐ6KÈ1Ð4MÔ#NØ5:·]±]ÐFYÐEZÐZ[ÐC\Ð^`Ó5aÐ2Ø!4Ð 5°QÐ7]Ð6^Ð_ˆOä×ÑÐBÀOÔTà(-¯©°CÓ(8¸Ñ(<Ðð ØØ"Ø2ð	4
ˆð &ò 	ˆFØÑ! f´×0BÑ0BÒ&BÜ#×.Ñ.¨vÑ6�	Ùð	ð ÐÑ!4Ø':Ð&;¸1¸U¸GÐ$DˆNØ¤×!3Ñ!3Ñ3Ü#×.Ñ.¨~Ñ>�	àÐÜÐ@ÀÀÐHÓIÐIð $-§=¡=Ð1SÓ#TÐØÐ(Ø$Ð'7Ñ7Ð7ä$AÀ)ÐM]Ó$^ÐØÐ)Ø%Ð(8Ñ8Ð8ô ×ÑØrØôð rh   rŸ   c                 ó`  ‡— t        j                  ||¬«      \  }}}}t        j                  d||«       ‰€	 t        j                  ||¬«      Šn0t        ˆfd„dD «       «      s	 t        j                  ||¬«      }|r|Š‰sy‰j                  d«      }‰j                  d«      }‰j                  d	«      }	‰j                  d
«      }
d}d}|�| j                  |z  }nl|rjt        | «      }|d   }|d   }t        | «      |z
  }||z  dz  }t        dd«      }|t        ‰||«      dz  z  }‰j                  d«      xs |}|||z  dz  z  }|	�| j                  |	z  }n|
r| j                  |
z  dz  }t        ‰|«      }|dk7  r
||z  }||z  }||fS # t
        $ r dŠY �Œw xY w# t
        $ r Y �Œ,w xY w)aF  
    Calculate the cost of a batch job.

    Args:
        model_info: Optional deployment-level model info containing custom
            batch pricing (e.g. input_cost_per_token_batches). When provided,
            skips the global litellm.get_model_info() lookup so that
            deployment-specific pricing is used.
    rš   zBCalculating batch cost per token. model=%s, custom_llm_provider=%sNc              3   óD   •K  — | ]  }‰j                  |«      d u–— Œ y ­wr  r®  )r,  Úkr  s     €rf   r/  z(batch_cost_calculator.<locals>.<genexpr>   s'   øè ø€ ò àð 	�‰�qÓ Ô%ñùs   ƒ )Úinput_cost_per_token_batchesr\   Úoutput_cost_per_token_batchesr]   r  r9  r\   r:  r]   rR   Úcache_hit_tokensrW   r*  r^   r_   g      ð?)rÆ   rÌ   r   rs   rÎ   rr   Úanyra   rS   r   r   r   r   rT   r   )rŸ   ri   rj   r  rŽ   rú   Úglobal_infor9  r\   r:  r]   Útotal_prompt_costÚtotal_completion_costÚdetailsÚcache_read_tokensrW   Úbase_input_tokensÚcache_read_cost_keyr™  Úuplifts      `                rf   rÓ   rÓ   ‚  s:  ø€ ô" $+×#;Ñ#;À%Ð]pÔ#qÑ €AÐ˜A˜qä×ÑØLØØôð Ðð	Ü ×/Ñ/°eÐQdÔe‰Jô ó ð
ôô ð	Ü!(×!7Ñ!7¸eÐYlÔ!mˆKÙØ(�
ñ Øà*4¯.©.Ð9WÓ*XÐ Ø",§.¡.Ð1GÓ"HÐØ+5¯>©>Ð:YÓ+ZÐ!Ø#-§>¡>Ð2IÓ#JÐØÐØÐØ#Ð/Ø!×/Ñ/Ð2NÑNÑÙ	Ü4°UÓ;ˆØ#*Ð+=Ñ#>ÐØ'.Ð/FÑ'GÐô $=¸UÓ#CÐF[Ñ#[ÐàÐ!5Ñ6¸Ñ:ð 	ô
 &@Ð@]Ð_cÓ%dÐØÔ5°jÐBUÐWhÓiÐlmÑmÑmÐà%/§^¡^Ð4UÓ%VÒ%nÐZnÐØÐ2Ð5HÑHÈ1ÑLÑLÐØ$Ð0Ø %× 7Ñ 7Ð:WÑ WÑÙ	à×#Ñ#Ð'<Ñ=ÀÑAð 	ô 4°JÀÓO€FØ�‚}Ø˜VÑ#ÐØ Ñ'ÐàÐ3Ð3Ð3øô} ò 	Ø‹Jð	ûô$ ò 	Úð	ús#   ¸F Á%F  ÆFÆFÆ 	F-Æ,F-ry   c                 ó’   — t        t        | «      j                  «      }t        | dd «      €|S |D �cg c]
  }|dk7  sŒ	|‘Œ c}S c c}w )Nr”   rW   )rŒ  rj  Úmodel_fieldsr|   )ry   Úfield_namesÚattrs      rf   Ú_summable_prompt_token_fieldsrI  ß  sK   € ÜœdÐ#8Ó9×FÑFÓG€KÜÐ$Ð&:¸DÓAÐIØÐØ(ÖL�T¨DÐ4KÓ,KŠDÒLÐLùÒLs
   ²
A½Ac                   ó,   — e Zd Zedee   defd„«       Zy)ÚBaseTokenUsageProcessorÚusage_objectsrZ   c                 ól  — ddl m}m}m}  |«       }| D �]œ  }t	        |«      D ]…  }|j                  d«      rŒt        t        ||«      «      rŒ+t        ||d«      }t        ||d«      }|€ŒHt        |t        t        f«      sŒ_t        |t        t        f«      sŒvt        ||||z   «       Œ‡ t        |d«      rý|j                  rñt        |d«      r|j                  s |«       |_        t        |j                  «      D ]µ  }t        |j                  |«      sŒ|j                  d«      rŒ,t        t        |j                  |«      «      rŒLt        |j                  |d«      xs d}t        |j                  |d«      xs d}|€Œ…t        |t        t        f«      sŒœt        |j                  |||z   «       Œ· t        |d«      s�Œ®|j                  s�Œ¼t        |d«      r|j                  s |«       |_        t!        |j                  «      j"                  D ]›  }|j                  d«      rŒt        t        |j                  |«      «      rŒ5t        |j                  |d«      xs d}t        |j                  |d«      xs d}t        |t        t        f«      sŒ‚t        |j                  |||z   «       Œ� �ŒŸ |S )zs
        Combine multiple Usage objects into a single Usage object, checking model keys for nested values.
        r   )ÚCompletionTokensDetailsWrapperr7   r<   rú   ry   Úcompletion_tokens_details)Úlitellm.types.utilsrN  r7   r<   ÚdirrÊ   Úcallabler|   rÈ   rŽ  rÅ   rÅ  rq   ry   rI  rO  rj  rF  )	rL  rN  r7   r<   ÚcombinedrŸ   rH  Úcurrent_valÚnew_vals	            rf   Úcombine_usage_objectsz-BaseTokenUsageProcessor.combine_usage_objectsç  sh  € ÷
	
ñ 	
ñ  ›'ˆð #ó 2	ˆEä˜E›
ò 	G�Ø—‘ sÕ+´H¼WÀUÈDÓ=QÕ4RÜ")¨(°D¸!Ó"<�KÜ% e¨T°1Ó5�GàÑ+Ü& w´´e°Õ=Ü& {´S¼%°LÕAä ¨$°¸gÑ0EÕFð	Gô �uÐ5Ô6¸5×;VÒ;VÜ˜xÐ)@ÔAÈ×IgÒIgÙ5OÓ5Q�HÔ2ô :¸%×:UÑ:UÓVò �Dä × ;Ñ ;¸TÕBØ $§¡°Õ 4Ü (¬°×1LÑ1LÈdÓ)SÕ Tä&-¨h×.LÑ.LÈdÐTUÓ&VÒ&[ÐZ[˜Ü")¨%×*EÑ*EÀtÈQÓ"OÒ"TÐST˜Ø"Ñ.´:¸gÌÌUÀ|Õ3TÜ#Ø (× >Ñ >Ø $Ø +¨gÑ 5õðô  �uÐ9Ö:¸u×?^Ô?^Ü˜xÐ)DÔEÈX×MoÒMoÙ9WÓ9Y�HÔ6ô ! ×!@Ñ!@ÓA×NÑNò 	�DØŸ?™?¨3Õ/¼ÄÈ×IhÑIhÐjnÓAoÕ8pÜ&-¨h×.PÑ.PÐRVÐXYÓ&ZÒ&_Ð^_˜Ü")¨%×*IÑ*IÈ4ÐQRÓ"SÒ"XÐWX˜Ü% g´´U¨|Õ<Ü#Ø (× BÑ BØ $Ø +¨gÑ 5õò	ðS2	ðh ˆrh   N)Ú__name__Ú
__module__Ú__qualname__ÚstaticmethodrŒ  r<   rV  r[  rh   rf   rK  rK  æ  s*   „ ØðA¨T°%©[ð A¸Uò Aó ñArh   rK  c                   ód   — e Zd Zededee   fd„«       Zededefd„«       Zededede	fd„«       Z
y)ÚRealtimeAPITokenUsageProcessorrº  rZ   c                 óð   — t        t        t           | D �cg c]  }|d   dk(  sŒ|‘Œ c}«      }g }|D ];  }t        j                  |d   j                  di «      «      }|j                  |«       Œ= |S c c}w )z<
        Collect usage from realtime stream results
        rj  zresponse.doner�   rŸ   )r
   rŒ  r,   r&   rd  ra   rÄ  )rº  ÚresultÚresponse_done_eventsrL  r‰   s        rf   Ú*collect_usage_from_realtime_stream_resultszIRealtimeAPITokenUsageProcessor.collect_usage_from_realtime_stream_results-	  s�   € ô UYÜÔ7Ñ8Ø")ÖO˜¨V°F©^¸Ó-NŠVÒOóU
Ðð -/ˆØ*ò 	/ˆFÜ2×^Ñ^Ø�zÑ"×&Ñ& w°Ó3óˆLð × Ñ  Õ.ð		/ð
 Ðùò Ps
   –A3
¤A3
c                 óZ   — t         j                  | «      }t         j                  |«      }|S )zH
        Collect and combine usage from realtime stream results
        )r\  r`  rV  )rº  Úcollected_usage_objectsr»  s      rf   Ú6collect_and_combine_usage_from_realtime_stream_resultszURealtimeAPITokenUsageProcessor.collect_and_combine_usage_from_realtime_stream_results@	  s/   € ô #A×"kÑ"kÐlsÓ"tÐÜ'E×'[Ñ'[Ð\sÓ'tÐØ$Ð$rh   rŸ   c                 ó   — t        | |¬«      S )N©rŸ   rº  )r3   re  s     rf   Úcreate_logging_realtime_objectz=RealtimeAPITokenUsageProcessor.create_logging_realtime_objectK	  s   € ô 2ØØô
ð 	
rh   N)rW  rX  rY  rZ  r+   rŒ  r<   r`  rc  r3   rf  r[  rh   rf   r\  r\  ,	  sx   „ ØðØ)ðà	ˆe‰òó ðð$ ð%Ø)ð%à	ò%ó ð%ð ð
Øð
Ø7ð
à	+ò
ó ñ
rh   r\  z5conversation.item.input_audio_transcription.completedÚ#_TRANSCRIPTION_COMPLETED_EVENT_TYPEÚ
model_namer»  c                 ó@   — 	 t        | |||¬«      S # t        $ r Y y w xY w)N)ri   rŸ   rj   rŽ   )r   rr   ©rh  r»  rj   rŽ   s       rf   Ú_candidate_realtime_token_costsrk  X	  s4   € ðÜ%ØØ'Ø 3Ø)ô	
ð 	
øô ò Ùðús   ‚ ‘	œc                 ó¬   — t         j                  j                  | «      t         j                  j                  |› d| › �«      f}t        d„ |D «       «      S )Nr–   c              3   óh   K  — | ]*  }|d uxr  t        d„ |j                  «       D «       «      –— Œ, y ­w)Nc              3   ó6   K  — | ]  \  }}d |v xr |du–— Œ y­w)Úcost_perNr[  )r,  Úfieldr  s      rf   r/  z=_cost_map_entry_declares_pricing.<locals>.<genexpr>.<genexpr>o	  s)   è ø€ Ò!nÑP\ÐPUÐW\ *°Ð"5Ò"K¸%ÀtÐ:KÓ"KÑ!nùs   ‚)r<  Úitems)r,  r&  s     rf   r/  z3_cost_map_entry_declares_pricing.<locals>.<genexpr>n	  s:   è ø€ ò àð 	�TÐÒnœcÑ!nÐ`e×`kÑ`kÓ`mÔ!nÓnÓnñùs   ‚02)rÆ   rÇ   ra   r<  )rh  rj   Úentriess      rf   Ú _cost_map_entry_declares_pricingrs  i	  sZ   € ä×Ñ×Ñ˜zÓ*Ü×Ñ×ÑÐ"5Ð!6°a¸
°|ÐDÓEð€Gô ñ àôó ð rh   rÜ  c                 óP   ‡‡‡‡— ˆˆˆˆfd„| D «       }t        ˆfd„|D «       d«      S )Nc              3   óN   •K  — | ]  }|�t        |‰‰‰¬«      xŠ	 �|‰f–— Œ y ­w)Nrj  )rk  )r,  rh  r»  Úcostsrj   rŽ   s     €€€€rf   r/  z5_first_priced_realtime_token_costs.<locals>.<genexpr>z	  sI   øè ø€ ò àØÐ!ä4Ø%Ø&;Ø$7Ø-ô	ð ˆEð ðð 
�UÔñùs   ƒ"%c              3   ó\   •K  — | ]#  \  }}t        |«      d kD  st        |‰«      r|–— Œ% y­w)r   N)r×  rs  )r,  rh  rv  rj   s      €rf   r/  z5_first_priced_realtime_token_costs.<locals>.<genexpr>‰	  s3   øè ø€ ò 	
á!�
˜EÜ�5‹z˜AŠ~Ô!AÀ*ÐNaÔ!bô ñ	
ùs   ƒ),r  )r7  )rÜ  r»  rj   rŽ   Úcandidate_costsrv  s    ``` @rf   Ú"_first_priced_realtime_token_costsry  t	  s3   û€ öà/ô€Oô ó	
à%4ô	
ð
 	óð rh   rº  c           	      óf  — d}g }| D ]?  }|d   dk(  sŒt        t        |«      d   j                  dd«      }|j                  |«       ŒA |j                  |«       t	        ||||¬«      \  }	}
t        d„ | D «       «      rt        | ||¬«      nd	}|	|
z   |z   }t        ||	|
d	||d
kD  rd|ind|¬«       |S )zð
    Handles the cost calculation for realtime stream responses.

    Pick the 'response.done' events. Calculate total cost across all 'response.done' events.

    Args:
        results: A list of OpenAIRealtimeStreamBaseObject objects
    Nrj  úsession.createdÚsessionri   )rÜ  r»  rj   rŽ   c              3   óL   K  — | ]  }|j                  d «      t        k(  –— Œ y­w)rj  N)ra   rg  )r,  Úrs     rf   r/  z:handle_realtime_stream_cost_calculation.<locals>.<genexpr>¶	  s   è ø€ ÒUÈˆq�u‰u�V‹}Ô CÕCÑUùs   ‚"$)rº  rj   r¥  rR   r   r  )r”  rð   rñ   r•  r–  r—  rŽ   )r
   r-   ra   rÄ  ry  r<  Ú.handle_realtime_transcription_cost_calculationrŸ  )rº  r»  rj   r¥  rŽ   r”  Úreceived_modelrÜ  r^  r\   r]   r  rœ  s                rf   rÐ  rÐ  ’	  sÿ   € ð  €NØ#%ÐØò 9ˆØ�&‰>Ð.Ó.Ü!Ô"CÀVÓLÈYÑW×[Ñ[Ð\cÐeiÓjˆNØ!×(Ñ(¨Õ8ð9ð
 × Ñ Ð!3Ô4Ü2TØ3Ø3Ø/Ø%ô	3Ñ/ÐÐ/ô ÑUÈWÔUÔUô 	7ØØ 3Ø1õ	
ð ð ð -Ð/DÑDÐGYÑY€Jä(Ø/Ø&:Ø*?Ø03Ø(ØGYÐ\]ÒG]Ð.Ð0BÑCÐcgØ%õð Ðrh   c                 óL  — | D �cg c]+  }|j                  d«      t        k(  sŒt        t        |«      ‘Œ- }}|syt	        | «      xs |}	 t        j                  ||¬«      }d}|D ]&  }|j                  d«      xs i }	|t        |	|«      z  }Œ( |S c c}w # t        $ r d}Y ŒAw xY w)uÕ  
    Cost for realtime transcription sessions (e.g. gpt-realtime-whisper).

    Transcription sessions emit no `response.done` events; instead each
    `conversation.item.input_audio_transcription.completed` event carries a
    `usage` object billed by the ASR model. The usage is one of:
      - {"type": "duration", "seconds": <float>}  â†’ priced via input_cost_per_second
      - {"type": "tokens", "input_tokens": ...}    â†’ priced via input/audio token cost
    rj  rR   rš   NrŸ   )	ra   rg  r
   r  Ú*_get_transcription_model_name_from_resultsrÆ   rÎ   rr   Ú_transcription_usage_cost)
rº  rj   r¥  r^  Úcompleted_eventsrh  r  rœ  ÚeventrŸ   s
             rf   r  r  È	  sÇ   € ð *1öØ%°F·J±J¸vÓ4FÔJmÓ4mŒŒT�6ÕðÐð ñ ØäBÀ7ÓKÒaÐOa€JðÜ×+Ñ+°*ÐReÔfˆ
ð €JØ!ò CˆØ—	‘	˜'Ó"Ò( bˆØÔ/°°zÓBÑB‰
ðCð Ðùò!øô ò ØŠ
ðús   …B£BÁ
B ÂB#Â"B#c                 óz  — | D ]¶  }|j                  d«      dv sŒt        t        |«      j                  di «      xs i }|j                  di «      xs i j                  di «      xs i j                  di «      xs |j                  di «      }|xs i j                  d«      xs |j                  d«      }|sŒ´|c S  y	)
zGResolve the ASR model from a transcription_session.* / session.* event.rj  )ztranscription_session.createdztranscription_session.updatedr{  zsession.updatedr|  ÚaudioÚinputrª   Úinput_audio_transcriptionri   N)ra   r
   r  )rº  r^  r|  rª   ri   s        rf   r‚  r‚  é	  sÊ   € ð ò ˆØ�:‰:�fÓð "
ò 
ô œ4 Ó(×,Ñ,¨Y¸Ó;ÒA¸rˆGØ%Ÿk™k¨'°2Ó6Ò<¸"×AÑAÀ'È2ÓNÒTÐRT×YÑYØ óò >à—‘Ð8¸"Ó=ð ð #Ò( b×-Ñ-¨gÓ6ÒN¸'¿+¹+ÀgÓ:NˆEÚØ’ðð rh   c                 óœ  — |€y| j                  d«      }|dk(  rA| j                  d«      xs d}|j                  d«      xs d}t        |«      t        |«      z  S |dk(  rí| j                  d«      xs i }|j                  d«      xs d	}|j                  d
«      xs d	}| j                  d«      xs d	}t        |«      t        |j                  d«      xs |j                  d«      xs d«      z  }	t        |«      t        |j                  d«      xs d«      z  }
t        |«      t        |j                  d«      xs d«      z  }|	|
z   |z   S y)NrR   rj  r¬   ÚsecondsrÃ   ÚtokensÚinput_token_detailsrz   r   r{   Úoutput_tokensÚinput_cost_per_audio_tokenr\   r]   )ra   rÅ   )rŸ   r  Ú
usage_typer‹  Ú
per_secondr�  rz   r{   rŽ  Ú
audio_costÚ	text_costre   s               rf   rƒ  rƒ  þ	  sK  € ØÐØØŸ	™	 &Ó)€JØ�ZÒØŸ™ 9Ó-Ò4°ˆØ&ŸN™NÐ+BÓCÒJÀsˆ
Ü�W‹~¤ jÓ 1Ñ1Ð1Ø�XÒØ%*§Y¡YÐ/DÓ%EÒ%KÈÐØ1×5Ñ5°nÓEÒJÈˆØ0×4Ñ4°]ÓCÒHÀqˆØ$Ÿy™y¨Ó9Ò>¸QˆÜ! ,Ó/´%Ø�N‰NÐ7Ó8Òi¸J¿N¹NÐKaÓ<bÒiÐfió3
ñ 
ˆ
ô ! Ó-´°j·n±nÐE[Ó6\Ò6cÐ`cÓ0dÑdˆ	Ü" =Ó1´E¸*¿.¹.ÐI`Ó:aÒ:hÐehÓ4iÑiˆØ˜IÑ%¨Ñ3Ð3Ørh   )r   r   rR   r   r   NN)rƒ   r   r   rR   NNNNr   r   NNNNNrq  rR   NNNNN)rR   r  )NNNN)NNNNNNNNNNNNN)NNNrƒ   NNNNNNN)NNr•   r  N)NNN)NN)Ër€  r	  Úcollections.abcr   r   Ú	functoolsr   Útypingr   r   r   r	   r
   Úhttpxr   Úpydanticr   rÆ   Úlitellm._loggingr   Úlitellm.constantsr   r   Ú@litellm.litellm_core_utils.llm_cost_calc.tool_call_cost_trackingr   ÚDlitellm.litellm_core_utils.llm_cost_calc.usage_object_transformationr   r   Ú.litellm.litellm_core_utils.llm_cost_calc.utilsr   r   r   r   r   r   r   r   r   r   Ú'litellm.llms.anthropic.cost_calculationr   rÙ   Ú#litellm.llms.azure.cost_calculationrÞ   Ú%litellm.llms.azure_ai.cost_calculatorræ   Ú+litellm.llms.base_llm.search.transformationr   Ú%litellm.llms.bedrock.cost_calculationrÚ   Ú'litellm.llms.databricks.cost_calculatorrÜ   Ú%litellm.llms.deepseek.cost_calculatorrà   Ú)litellm.llms.fireworks_ai.cost_calculatorrÝ   Ú#litellm.llms.gemini.cost_calculatorrß   Ú%litellm.llms.lemonade.cost_calculatorrä   rË  r    r!   rÔ   rÛ   Ú'litellm.llms.perplexity.cost_calculatorrâ   Ú$litellm.llms.tencent.cost_calculatorrá   Ú(litellm.llms.together_ai.cost_calculatorr"   r#   Ú&litellm.llms.vertex_ai.cost_calculatorr$   r×   rØ   r%   rÖ   Ú litellm.llms.xai.cost_calculatorrã   Úlitellm.responses.utilsr&   Úlitellm.types.agentsr'   Úlitellm.types.llms.openair(   r)   r*   r+   r,   r-   r.   r/   Úlitellm.types.rerankr0   r1   rP  r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   Úlitellm.utilsr>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   Ú*litellm.litellm_core_utils.litellm_loggingrI   ÚLitellmLoggingObjectÚ	frozensetÚasend_messager  ru  rJ   Ú__annotations__Úcreate_videoÚacreate_videoÚ
video_editÚavideo_editÚvideo_remixÚavideo_remixrK   r˜   r™   rL   r©   rª   rM   r¡   r    rN   r­   r®   rO   Ú	arealtimerP   Úcall_mcp_toolrQ   rÅ   Útuplerg   rÉ   rŽ  r  rv   Úboolr‚   r  Úobjectr  r  r  r(  r!  r   rE  rM  rQ  rU  rX  rl  ro  rv  r†  r“  rŸ  rŒ  r   rù  r  rÒ   rÑ   rÐ   r  r0  rÌ  rÓ   rI  rK  r\  rg  rk  rs  ry  rÐ  r  r‚  rƒ  r[  rh   rf   ú<module>rÂ     sÿ  ðô Û ß -Ý ß ;Õ ;å Ý ã Û Ý "÷õ÷÷÷ ÷ õõõõ Gõõõõõ Xõõõõõõ÷õõõ UÝ QÝ ;Ý ;÷	÷ 	ó 	÷ C÷÷ ÷ ó ÷÷ ÷ ñ ñ öð Ðñ #à×Ñ×%Ñ%Ø×Ñ×$Ñ$ðó€�ó ñ %à×Ò×$Ñ$Ø×Ò×%Ñ%Ø×Ò×"Ñ"Ø×Ò×#Ñ#Ø×Ò×#Ñ#Ø×Ò×$Ñ$ðó	Ð �5ó 	ñ &à×Ò×ÑØ×Ò×ÑðóÐ �Eó ñ $-à× Ò ×&Ñ&Ø×Ò×%Ñ%ðó$Ð ˜5ó ñ &à×Ò×ÑØ×Ò×ÑðóÐ �Eó ñ &à×Ò×ÑØ×Ò×ÑðóÐ �Eó ð (×1Ò1×7Ñ7Ð �eÓ 7Ø!×/Ò/×5Ñ5€�Ó 5ð Ø Ø%(ØØ#$à15Ø+/ñ0Øð0àð0ð ˜d‘lð0ð ð	0ð
 !ð0ð (¨$Ñ.ð0ð " D™Lð0ð ˆ5�%ˆ<Ñ˜4Ñó0ðf+Øð+à˜t™ð+ð ð+ð ð	+ð
 
ˆD�[ó+ð\BØ˜‘ðBà	óBð( ØØØ%(Ø&*Øà$(Ø(,à./Ø*+à15Ø+/à$(à!%à48à".Ø/2à#à!%à"&Øà $ñCKPØðKPàðKPð ðKPð ˜d‘lð	KPð
 ˜t™ðKPð ˜T‘zðKPð  ™:ðKPð "% t¡ðKPð ! 4™ZðKPð (¨$Ñ.ðKPð " D™LðKPð" ˜T‘zð#KPð& ˜$‘,ð'KPð* +¨TÑ1ð+KPð.  ð/KPð0 (-ð1KPð4 ˜‘*ð5KPð8 ˜$‘Jð9KPð< ˜4‘Zð=KPð> �D‰jð?KPðB ˜‘:ðCKPðD ˆ5�%ˆ<ÑóEKPñ\A¸$ó Að*˜6ð * dó *ð '+ñØ�‰:ðà˜t™ðð 	ˆ4�Zóð&?°ð ?¸cð ?ÀcÈDÁjó ?ð "Ø"&Ø&*Ø"&ñEØ�‰:ðEà $™ðEð �d‘
ðEð ˜4‘Kð	Eð
 ˜t™ðEð ˜4‘ZðEð 	ˆ4�ZóEðPc°ð cÀ#ÈÁ*ð cÐQTó cñ Ð-Ô.ð/¨cð /°dò /ó /ð/ð¨Vð ¸¸d¹
ó ð( %ð ØØàñ
5Ð $ e¨D¡kó 
ð°C¸$±Jð À3ÈÁ:ó ð&¨&ð °S¸4±Zó ð &ð ¨S°4©Zó ð'Øð'à
ˆT�\ó'òTðÐ 0°4Ñ 7ð Ècð ÐVfÐimÑVmó ð68Øð8à˜t™ð8ð ˆ5�%˜ÐÑó8ðD?OØð?Oà˜t™ð?Oð ˆ5�%˜ Ð%Ñ&ó?OðP %)Ø"&Ø%)Ø$(Ø#'Ø(,Ø(,Ø$(Ø(,Ø#'Ø#Ø!%Ø"&ñ%BRØ-°Ñ4ðBRà#(ðBRð (-ðBRð .3ð	BRð
 !ðBRð ˜T‘kðBRð ˜4‘<ðBRð ˜d‘lðBRð ˜T‘\ðBRð ˜D‘LðBRð  ™ðBRð  ™ðBRð ˜T‘\ðBRð  ™ðBRð ˜D‘LðBRð  ˜‘*ð!BRð" ˜$‘Jð#BRð$ ˜4‘Zð%BRð& 
ó'BRðN *.ØØØØØ"Ø)-àØàØØà15Ø+/Ø#'Ø"&Ø!ØHLØ%)Ø"&Ø7;à#à!%à"&ñ=V	Ø $™ðV	à�‰:ðV	ð ð	V	ð ˜‘ðV	ð   $Ñ&ðV	ð �‰*ðV	ð �4‰ZðV	ð ˆT�zðV	ð  (¨$Ñ.ð!V	ð" " D™Lð#V	ð$ ˜D‘[ð%V	ð& ˜4‘Kð'V	ð( �d‘
ð)V	ð* %?ÀÑ$Eð+V	ð, ˜d™
ð-V	ð. ˜4‘Zð/V	ð0 .°Ñ4ð1V	ð4 ˜‘*ð5V	ð8 ˜$‘Jð9V	ð< ˜4‘Zð=V	ð> ó?V	ðrØ˜)Ñ#ðà
ˆT�\óðj "Ø!Ø"&ØØHLØ%)Ø"&Ø7;à#à!%à"&ñcVØ"Øñàñð ñð ñ	ð
 !ñ!ð ñð ñð )ñ)ð ñ	ð ñ
ð ñðVð ðVð ˜t™ðVð ð	ñðVðF ðGVðH �d‰{ðIVðJ �d‘
ðKVðL ˜4‘KðMVðN ðOVðP %?ÀÑ$EðQVðR ˜d™
ðSVðT ˜4‘ZðUVðV .°Ñ4ðWVðZ ˜‘*ð[Vð^ ˜$‘Jð_Vðb ˜4‘ZðcVðd óeVðx #ñM*ØðM*à˜t™ðM*ð �t‰mðM*ð ˆ5�%ˆ<Ñó	M*ð`Ø�‰:ðàðð (ðð ˆ5�%ˆ<Ñó	ðF .2ñØðà˜t™ðð $ dÑ*ðð ˆ5�%ˆ<Ñó	ðDk˜cð k¸¸d¹
ð kÈeð kÐX]Ð^cÐejÐ^jÑXkó kð '+ØØØ$Ø#'ñHmØðHmà˜t™ðHmð �4‰ZðHmð ˆT�zð	Hmð
 �‰*ðHmð ˜D‘[ðHmð óHmð\ '+Ø#'Ø#'ñLØðLàðLð ˜t™ðLð ˜DÑ ð	Lð
 ˜D‘jðLð óLðd '+Ø#'Ø!%ñZ4ØðZ4àðZ4ð ˜t™ðZ4ð ˜DÑ ð	Z4ð
 ˜$‘JðZ4ð ˆ5�%ˆ<ÑóZ4ðzM¸ð MÀtÈCÁyó M÷Cñ CôL&
Ð%<ô &
ðR .eÐ # UÓ dðØðà ðð ðð ˜$‘Jð	ð
 ˆ5�%ˆ<Ñ˜4Ñóð"°ð È3ð ÐSWó ðØ# C¨$¡JÑ/ðà ðð ðð ˜$‘Jð	ð
 ˆ5�%ˆ<ÑóðF "&Ø7;ñ3Ø%ð3à ð3ð ð3ð ð	3ð
 ˜$‘Jð3ð .°Ñ4ð3ð ó3ðlØ%ðàðð ðð ó	ðBØ%ðàˆ4�Zóð* Tð °yÀ4Ñ7Gð ÈEô rh   