mirror of
https://github.com/BerriAI/litellm.git
synced 2025-04-26 03:04:13 +00:00
80 lines
2.4 KiB
Python
80 lines
2.4 KiB
Python
# What is this?
|
|
## File for 'response_cost' calculation in Logging
|
|
from typing import Optional, Union, Literal
|
|
from litellm.utils import (
|
|
ModelResponse,
|
|
EmbeddingResponse,
|
|
ImageResponse,
|
|
TranscriptionResponse,
|
|
TextCompletionResponse,
|
|
CallTypes,
|
|
completion_cost,
|
|
print_verbose,
|
|
)
|
|
import litellm
|
|
|
|
|
|
def response_cost_calculator(
|
|
response_object: Union[
|
|
ModelResponse,
|
|
EmbeddingResponse,
|
|
ImageResponse,
|
|
TranscriptionResponse,
|
|
TextCompletionResponse,
|
|
],
|
|
model: str,
|
|
custom_llm_provider: str,
|
|
call_type: Literal[
|
|
"embedding",
|
|
"aembedding",
|
|
"completion",
|
|
"acompletion",
|
|
"atext_completion",
|
|
"text_completion",
|
|
"image_generation",
|
|
"aimage_generation",
|
|
"moderation",
|
|
"amoderation",
|
|
"atranscription",
|
|
"transcription",
|
|
"aspeech",
|
|
"speech",
|
|
],
|
|
optional_params: dict,
|
|
cache_hit: Optional[bool] = None,
|
|
base_model: Optional[str] = None,
|
|
custom_pricing: Optional[bool] = None,
|
|
) -> Optional[float]:
|
|
try:
|
|
response_cost: float = 0.0
|
|
if cache_hit is not None and cache_hit == True:
|
|
response_cost = 0.0
|
|
else:
|
|
response_object._hidden_params["optional_params"] = optional_params
|
|
if isinstance(response_object, ImageResponse):
|
|
response_cost = completion_cost(
|
|
completion_response=response_object,
|
|
model=model,
|
|
call_type=call_type,
|
|
custom_llm_provider=custom_llm_provider,
|
|
)
|
|
else:
|
|
if (
|
|
model in litellm.model_cost
|
|
and custom_pricing is not None
|
|
and custom_llm_provider == True
|
|
): # override defaults if custom pricing is set
|
|
base_model = model
|
|
# base_model defaults to None if not set on model_info
|
|
response_cost = completion_cost(
|
|
completion_response=response_object,
|
|
call_type=call_type,
|
|
model=base_model,
|
|
custom_llm_provider=custom_llm_provider,
|
|
)
|
|
return response_cost
|
|
except litellm.NotFoundError as e:
|
|
print_verbose(
|
|
f"Model={model} for LLM Provider={custom_llm_provider} not found in completion cost map."
|
|
)
|
|
return None
|