forked from phoenix/litellm-mirror
feat(litellm_logging.py): refactor standard_logging_payload function … (#6388)
* feat(litellm_logging.py): refactor standard_logging_payload function to be <50 LOC fixes issue where usage information was not following typed values * fix(litellm_logging.py): fix completion start time handling
This commit is contained in:
parent
d59f8f952d
commit
c04c4a82f1
3 changed files with 286 additions and 121 deletions
|
@ -0,0 +1,67 @@
|
|||
"""
|
||||
Unit tests for StandardLoggingPayloadSetup
|
||||
"""
|
||||
|
||||
import json
|
||||
import os
|
||||
import sys
|
||||
from datetime import datetime
|
||||
from unittest.mock import AsyncMock
|
||||
|
||||
from pydantic.main import Model
|
||||
|
||||
sys.path.insert(
|
||||
0, os.path.abspath("../..")
|
||||
) # Adds the parent directory to the system-path
|
||||
|
||||
import pytest
|
||||
import litellm
|
||||
from litellm.types.utils import Usage
|
||||
from litellm.litellm_core_utils.litellm_logging import StandardLoggingPayloadSetup
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"response_obj,expected_values",
|
||||
[
|
||||
# Test None input
|
||||
(None, (0, 0, 0)),
|
||||
# Test empty dict
|
||||
({}, (0, 0, 0)),
|
||||
# Test valid usage dict
|
||||
(
|
||||
{
|
||||
"usage": {
|
||||
"prompt_tokens": 10,
|
||||
"completion_tokens": 20,
|
||||
"total_tokens": 30,
|
||||
}
|
||||
},
|
||||
(10, 20, 30),
|
||||
),
|
||||
# Test with litellm.Usage object
|
||||
(
|
||||
{"usage": Usage(prompt_tokens=15, completion_tokens=25, total_tokens=40)},
|
||||
(15, 25, 40),
|
||||
),
|
||||
# Test invalid usage type
|
||||
({"usage": "invalid"}, (0, 0, 0)),
|
||||
# Test None usage
|
||||
({"usage": None}, (0, 0, 0)),
|
||||
],
|
||||
)
|
||||
def test_get_usage(response_obj, expected_values):
|
||||
"""
|
||||
Make sure values returned from get_usage are always integers
|
||||
"""
|
||||
|
||||
usage = StandardLoggingPayloadSetup.get_usage_from_response_obj(response_obj)
|
||||
|
||||
# Check types
|
||||
assert isinstance(usage.prompt_tokens, int)
|
||||
assert isinstance(usage.completion_tokens, int)
|
||||
assert isinstance(usage.total_tokens, int)
|
||||
|
||||
# Check values
|
||||
assert usage.prompt_tokens == expected_values[0]
|
||||
assert usage.completion_tokens == expected_values[1]
|
||||
assert usage.total_tokens == expected_values[2]
|
Loading…
Add table
Add a link
Reference in a new issue