
    ic                     N    d Z ddlmZmZ ddlmZ ddlmZ dededee	e	f   fdZ
y	)
zg
Helper util for handling perplexity-specific cost calculation
- e.g.: citation tokens, search queries
    )TupleUnion)Usage)get_model_infomodelusagereturnc                 :   t        |dd      }|0t        |t              r |j                  d      }|dt	        |      fS t        | d      }	 ddt        t        t        t        dt        f   dt        d	t        fd
} ||j                  d            }|j                  xs d|z  }t        |dd      xs d}|j                  d      }	|dkD  r|	 ||	      }
|||
z  z  } ||j                  d            }|j                  xs d|z  }t        |dd      xs d}|dk(  r3t        |d      r'|j                  rt        |j                  dd      xs d}|j                  d      }|dkD  r| ||      }|||z  z  }d}t        |d      r'|j                  rt        |j                  dd      xs d}|j                  d      xs |j                  d      }|dkD  r@|>t        |t              r ||j                  dd            dz  }n ||      }||z  }||z  }||fS )aW  
    Calculates the cost per token for a given model, prompt tokens, and completion tokens.

    Input:
        - model: str, the model name without provider prefix
        - usage: LiteLLM Usage block, containing perplexity-specific usage information

    Returns:
        Tuple[float, float] - prompt_cost_in_usd, completion_cost_in_usd
    costN
total_cost        
perplexity)r   custom_llm_providervaluedefaultr	   c                 P    | |S 	 t        |       S # t        t        f$ r |cY S w xY w)z@Safely cast a value to float with proper type handling for mypy.)float
ValueError	TypeError)r   r   s     x/Users/manta/Documents/Projects/TheRoad-I1/.venv/lib/python3.12/site-packages/litellm/llms/perplexity/cost_calculator.py_safe_float_castz(cost_per_token.<locals>._safe_float_cast%   s6     =N	<I& 	N	s   
 %%input_cost_per_tokenr   citation_tokenscitation_cost_per_tokenoutput_cost_per_tokenreasoning_tokenscompletion_tokens_detailsoutput_cost_per_reasoning_tokenprompt_tokens_detailsweb_search_requestssearch_queries_cost_per_querysearch_context_cost_per_querysearch_context_size_lowi  )r   )getattr
isinstancedictgetr   r   r   strintobjectprompt_tokenscompletion_tokenshasattrr   r   )r   r   	cost_infor   
model_infor   r   prompt_costr   citation_cost_valuer   r   completion_costr   reasoning_cost_valuereasoning_cost_per_tokennum_search_queriessearch_cost_valuesearch_cost_per_querysearch_costs                       r   cost_per_tokenr9      s    vt,IIt!<]]<0
! z*++  eNJ GJ	S#udF23	>C			 ,JNN;Q,RS--26JJK e%6:?aO$..)BC2>"23F"G)@@@ -Z^^<S-TU#55:>SSO u&8!<A 	AE67++ E335GKPq 	 &>>*KL! 4 @#34H#I +.FFF u-.53N3NE//1FJOa 	
 #' 9	7	8  A"3"?'. !!2!6!67PRS!TU "
 %55F$G!(+@@;&''    N)__doc__typingr   r   litellm.types.utilsr   litellm.utilsr   r(   r   r9    r:   r   <module>r@      s<   
   % (](# ](e ](eUl0C ](r:   