Ë
    uPêj5  ã                   ó  — d Z ddlmZ ddlmZ ddlmZmZ ddlm	Z	m
Z
 ddlmZmZ ddlmZ  edd¬	«       G d
„ d«      «       Zdedefd„Zdedededefd„Zdedededz  defd„Zdedededz  defd„Zdededeeef   fd„Zy)ac  
Cost calculator for Dashscope Chat models.

Alibaba Model Studio tiered pricing is all-or-nothing: the tier is picked from the
total input tokens of a single request, and every token of that request (input,
cached, cache-creation, output, reasoning) is billed at that one tier's rate.
See https://help.aliyun.com/zh/model-studio/billing-for-model-studio
é    )Ú	dataclass)ÚFinal)Úselect_tier_for_inputÚ	tier_rate)Úparse_completion_tokens_detailsÚparse_prompt_tokens_details)Ú	ModelInfoÚUsage)Úget_model_infoT)ÚfrozenÚslotsc                   óV   — e Zd ZU eed<   eed<   eed<   eed<   eed<   edefd„«       Zy)	ÚTokenBreakdownÚtext_tokensÚcached_tokensÚcache_creation_tokensÚcompletion_tokensÚreasoning_tokensÚreturnc                 óN   — | j                   | j                  z   | j                  z   S )N)r   r   r   )Úselfs    úk/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/dashscope/cost_calculator.pyÚtotal_input_tokensz!TokenBreakdown.total_input_tokens   s$   € à×Ñ $×"4Ñ"4Ñ4°t×7QÑ7QÑQÐQó    N)Ú__name__Ú
__module__Ú__qualname__ÚintÚ__annotations__Úpropertyr   © r   r   r   r      s<   … àÓØÓØÓØÓØÓàðR Cò Ró ñRr   r   Úusager   c                 óÚ   — t        | «      }|d   }|d   }t        | j                  |z
  |z
  d«      }t        | «      d   }t        | j                  xs d|z
  d«      }t        |||||¬«      S )NÚcache_hit_tokensr   r   r   )r   r   r   r   r   )r   ÚmaxÚprompt_tokensr   r   r   )r"   Úprompt_detailsr   r   r   r   r   s          r   Ú_extract_token_breakdownr(   #   s�   € Ü7¸Ó>€NØ)Ð*<Ñ=€MØ#1Ð2IÑ#JÐÜ˜U×0Ñ0°=Ñ@ÐCXÑXÐZ[Ó\€Kä=¸eÓDÐEWÑXÐÜ" E×$;Ñ$;Ò$@¸qÐDTÑ#TÐVWÓXÐäØØ#Ø3Ø+Ø)ôð r   Ú
model_infoÚcost_keyÚfallback_cost_keyc                 óz   — | j                  |«      }|€t        | j                  |«      xs d«      S t        |«      S )Nç        )ÚgetÚfloat)r)   r*   r+   Úvalues       r   Ú
_flat_rater1   5   s9   € Ø—>‘> (Ó+€EØ€}Ü�Z—^‘^Ð$5Ó6Ò=¸#Ó>Ð>Ü�‹<Ðr   Ú	breakdownÚtierNc                 ór  — |�O| j                   t        |d«      z  | j                  t        |dd«      z  z   | j                  t        |dd«      z  z   S t	        |j                  d«      xs d«      }t        |dd«      }t        |dd«      }| j                   |z  | j                  |z  z   | j                  |z  z   S )NÚinput_cost_per_tokenÚcache_read_input_token_costÚcache_creation_input_token_costr-   )r   r   r   r   r/   r.   r1   )r2   r)   r3   Ú
input_costÚcache_read_costÚcache_creation_costs         r   Ú_calculate_prompt_costr;   <   sá   € ð
 Ðà×"Ñ"¤Y¨tÐ5KÓ%LÑLØ×&Ñ&¬°4Ð9VÐXnÓ)oÑoñqð ×/Ñ/Ü˜DÐ"CÐE[Ó\ñ]ñð	
ô ˜jŸn™nÐ-CÓDÒKÈÓL€JÜ'¨
Ð4QÐSiÓj€OÜ!+¨JÐ8YÐ[qÓ!rÐð 
×	Ñ	 Ñ	+Ø×"Ñ" _Ñ4ñ	6à×*Ñ*Ð-@Ñ@ñ	Bðr   c                 ó&  — |d uxr d|v }|rt        |d«      nt        |j                  d«      xs d«      }|d uxr d|v }|rd n|j                  d«      }|rt        |dd«      n|�t        |«      n|}| j                  |z  | j                  |z  z   S )NÚoutput_cost_per_tokenr-   Úoutput_cost_per_reasoning_token)r   r/   r.   r   r   )r2   r)   r3   Útier_declares_outputÚoutput_costÚtier_declares_reasoningÚmodel_reasoning_rateÚreasoning_costs           r   Ú_calculate_completion_costrD   V   sÊ   € ð #'¨dÐ"2Ò"VÐ7NÐRVÐ7VÐñ  ô 	�$Ð/Ô0ä�:—>‘>Ð"9Ó:ÒA¸cÓBð ð
 &*°Ð%5Ò%cÐ:[Ð_cÐ:cÐÙ*>¡$ÀJÇNÁNÐStÓDuÐñ #ô 	�$Ð9Ð;RÔSð  Ð+ô Ð'Ô(àð ð ×'Ñ'¨+Ñ5¸)×:TÑ:TÐWeÑ:eÑfÐfr   Úmodelc                 óò   — t        | d¬«      }t        |«      }|j                  d«      }t        |t        «      r|nd}|rt        ||j                  ¬«      nd}t        |||¬«      }t        |||¬«      }||fS )a>  
    Calculate cost per token for Dashscope models.

    Supports both tiered and flat pricing with cached and reasoning tokens.

    Args:
        model: Model name without provider prefix
        usage: LiteLLM Usage block

    Returns:
        Tuple[float, float] - (prompt_cost_in_usd, completion_cost_in_usd)
    Ú	dashscope)rE   Úcustom_llm_providerÚtiered_pricingN)rI   Úinput_tokens)r2   r)   r3   )	r   r(   r.   Ú
isinstanceÚlistr   r   r;   rD   )	rE   r"   r)   r2   Ú	raw_tiersrI   r3   Úprompt_costÚcompletion_costs	            r   Úcost_per_tokenrP   q   s…   € ô '¨UÈÔT€JÜ/°Ó6€IØ!—~‘~Ð&6Ó7€IÜ)3°I¼tÔ)D™IÈ$€Nñ ô 	¨^È)×JfÑJfÕgàð 	ô 0¸)ÐPZÐaeÔf€KÜ7À)ÐXbÐimÔn€Oà˜Ð'Ð'r   )Ú__doc__Údataclassesr   Útypingr   Ú7litellm.litellm_core_utils.llm_cost_calc.tiered_pricingr   r   Ú.litellm.litellm_core_utils.llm_cost_calc.utilsr   r   Úlitellm.types.utilsr	   r
   Úlitellm.utilsr   r   r(   Ústrr/   r1   Údictr;   rD   ÚtuplerP   r!   r   r   ú<module>r[      sü   ðñõ "Ý ç d÷÷ 1Ý (ñ �$˜dÔ#÷	Rð 	Ró $ð	Rð Eð ¨nó ð$˜9ð °ð Èð ÐPUó ðØðàðð �‰+ðð ó	ð4gØðgàðgð �‰+ðgð ó	gð6(˜#ð ( eð (°°e¸U°lÑ0Cô (r   