
    hk                     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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
    
perplexity)r   custom_llm_providervalueN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     c/var/www/Befach/backend/env/lib/python3.12/site-packages/litellm/llms/perplexity/cost_calculator.py_safe_float_castz(cost_per_token.<locals>._safe_float_cast   s4    =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  )g        )r   r   strintr   objectgetprompt_tokensgetattrcompletion_tokenshasattrr   r   
isinstancedict)r   r   
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_tokenr5      s.     eNJc3tV&C D u _d  ,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10K!LQVQpQp"5#B#BDVXYZ_^_%>>*KL! 4 @#34H#I +.FFF u-.53N3N$U%@%@BWYZ[`_` #'FGz:>>ZyKzA"3"?'.$45F5J5JKdfg5h$ilp$p!$45F$G!(+@@;&''    N)__doc__typingr   r   litellm.types.utilsr   litellm.utilsr   r!   r   r5    r6   r   <module>r<      s<   
   % (C(# C(e C(eUl0C C(r6   