mirror of
https://github.com/BerriAI/litellm.git
synced 2026-10-04 02:31:27 +00:00
fix(cost-optimization): preserve cache token helper coverage
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
This commit is contained in:
parent
20cf663a1c
commit
1f628e4311
2 changed files with 41 additions and 0 deletions
|
|
@ -73,6 +73,10 @@ else:
|
|||
ProxyLogging = Any
|
||||
|
||||
|
||||
def _extract_cache_read_tokens(usage_obj: dict) -> int:
|
||||
return extract_cache_read_tokens({"usage_object": usage_obj})
|
||||
|
||||
|
||||
def _extract_cache_creation_tokens(usage_obj: dict) -> int:
|
||||
"""
|
||||
Anthropic: top-level cache_creation_input_tokens field.
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ import pytest
|
|||
from litellm.proxy.management_endpoints.cost_optimization_endpoints import (
|
||||
build_optimized_request_log,
|
||||
cost_optimization_usage_logs,
|
||||
_parse_date,
|
||||
)
|
||||
|
||||
|
||||
|
|
@ -48,6 +49,30 @@ def test_build_optimized_request_log_computes_both_savings():
|
|||
|
||||
def test_build_optimized_request_log_ignores_unoptimized_row():
|
||||
assert build_optimized_request_log(_row({"usage_object": {"prompt_tokens": 10}})) is None
|
||||
assert build_optimized_request_log(_row("{invalid-json")) is None
|
||||
|
||||
|
||||
def test_build_optimized_request_log_handles_cached_request_metadata_string():
|
||||
result = build_optimized_request_log(
|
||||
_row(
|
||||
'{"usage_object": {"prompt_tokens_details": {"cached_tokens": 50}}}',
|
||||
startTime="2026-07-13T12:00:00+00:00",
|
||||
total_tokens="invalid",
|
||||
)
|
||||
)
|
||||
|
||||
assert result is not None
|
||||
assert result.optimization_type == "caching"
|
||||
assert result.cache_read_tokens == 50
|
||||
assert result.timestamp == "2026-07-13T12:00:00+00:00"
|
||||
assert result.total_tokens == 0
|
||||
|
||||
|
||||
def test_parse_date_supports_empty_and_end_of_day_values():
|
||||
assert _parse_date(None) is None
|
||||
assert _parse_date("2026-07-01") == datetime(2026, 7, 1, tzinfo=timezone.utc)
|
||||
assert _parse_date("2026-07-01", end=True) == datetime(2026, 7, 2, tzinfo=timezone.utc)
|
||||
assert _parse_date("2026-07-01 12:30:00") == datetime(2026, 7, 1, 12, 30, tzinfo=timezone.utc)
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
|
|
@ -81,3 +106,15 @@ async def test_cost_optimization_usage_logs_returns_paginated_entries():
|
|||
assert result.logs[0].optimization_type == "compression"
|
||||
assert result.logs[0].tokens_saved == 25
|
||||
assert query_raw_mock.await_count == 2
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_cost_optimization_usage_logs_returns_empty_without_prisma():
|
||||
with patch("litellm.proxy.proxy_server.prisma_client", None):
|
||||
result = await cost_optimization_usage_logs(page=2, page_size=25)
|
||||
|
||||
assert result.logs == []
|
||||
assert result.total == 0
|
||||
assert result.page == 2
|
||||
assert result.page_size == 25
|
||||
assert result.total_pages == 0
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue