fix(cost_calculator.py): handle openai usage pydantic object

Fixes https://github.com/BerriAI/litellm/issues/5165
This commit is contained in:
Krrish Dholakia 2024-08-12 15:45:21 -07:00
parent fdd9a07051
commit 22e2840daa
2 changed files with 15 additions and 2 deletions

View file

@ -490,6 +490,10 @@ def completion_cost(
isinstance(completion_response, BaseModel)
or isinstance(completion_response, dict)
): # tts returns a custom class
if isinstance(completion_response, BaseModel) and not isinstance(
completion_response, litellm.Usage
):
completion_response = litellm.Usage(**completion_response.model_dump())
# get input/output tokens from completion_response
prompt_tokens = completion_response.get("usage", {}).get("prompt_tokens", 0)
completion_tokens = completion_response.get("usage", {}).get(

View file

@ -918,9 +918,18 @@ def test_vertex_ai_llama_predict_cost():
assert predictive_cost == 0
def test_vertex_ai_mistral_predict_cost():
@pytest.mark.parametrize("usage", ["litellm_usage", "openai_usage"])
def test_vertex_ai_mistral_predict_cost(usage):
from litellm.types.utils import Choices, Message, ModelResponse, Usage
if usage == "litellm_usage":
response_usage = Usage(prompt_tokens=32, completion_tokens=55, total_tokens=87)
else:
from openai.types.completion_usage import CompletionUsage
response_usage = CompletionUsage(
prompt_tokens=32, completion_tokens=55, total_tokens=87
)
response_object = ModelResponse(
id="26c0ef045020429d9c5c9b078c01e564",
choices=[
@ -939,7 +948,7 @@ def test_vertex_ai_mistral_predict_cost():
model="vertex_ai/mistral-large",
object="chat.completion",
system_fingerprint=None,
usage=Usage(prompt_tokens=32, completion_tokens=55, total_tokens=87),
usage=response_usage,
)
model = "mistral-large@2407"
messages = [{"role": "user", "content": "Hey, hows it going???"}]