litellm/tests
Cesar Garcia 0ed261b34e
fix(gemini): fix negative text_tokens when using cache with images (#18768)
* fix(gemini): prevent negative text_tokens with explicit caching (#18750)

## Problem
When using Gemini with explicit caching (especially with images),
text_tokens would become negative (e.g., -3327) due to incorrectly
subtracting total cached_tokens from modality-specific text_tokens.

## Root Cause
The old code did:
```python
text_tokens = text_tokens - cached_tokens  # 737 - 4064 = -3327
```

This was wrong because:
- cached_tokens includes ALL modalities (text + image + audio + video)
- text_tokens only contains text
- Subtracting total from specific caused negative values

## Solution
Parse cacheTokensDetails to get per-modality cached token breakdown:
```python
if "cacheTokensDetails" in usage_metadata:
    cached_text_tokens = parse from cacheTokensDetails["TEXT"]
    text_tokens = text_tokens - cached_text_tokens  # Correct!
```

Now we subtract cached tokens per modality, preventing negatives.

## Changes
- Parse cacheTokensDetails field from Gemini response
- Calculate non-cached tokens per modality (text, image, audio)
- Remove incorrect global cached_tokens subtraction
- Add tests for explicit caching and implicit/no caching scenarios

## Testing
- Added test_gemini_cache_tokens_details_no_negative_values
- Added test_gemini_without_cache_tokens_details
- All existing Gemini caching tests pass

Fixes #18750

* feat: add cache_read_input_tokens to Usage object

Addresses reviewer feedback to include cached tokens at the top level
of the Usage object. This aligns with how Anthropic provider handles
cached tokens and ensures they are visible in the final usage response.

* fix: add cacheTokensDetails field to UsageMetadata TypedDict

Fixes mypy error where cacheTokensDetails was being accessed but not defined
in the UsageMetadata TypedDict type definition.
2026-01-12 17:04:33 +05:30
..
agent_tests Fix CI: Revert security scan changes and add GitGuardian ignore rules (#18358) 2025-12-22 17:03:53 -08:00
audio_tests [Feat] New provider TTS - Add AWS polly API for TTS (#18326) 2025-12-22 18:19:34 +05:30
basic_proxy_startup_tests
batches_tests [Feat] Manus FILES API - Add File upload, get, delete, list (#18904) 2026-01-10 13:27:54 -08:00
code_coverage_tests _mask_sequence 2026-01-10 13:20:43 -08:00
documentation_tests
enterprise Revert "added extraction of top level metadata for custom lables in prometheus callbacks (#18087)" 2026-01-10 14:00:54 -08:00
guardrails_tests [Feat] Guardrails Load Balancing - Allow Platform admins to load balance between guardrails (#18181) 2025-12-19 00:08:03 +05:30
image_gen_tests TestAzureAIFlux2ImageEdit 2026-01-08 18:23:05 +05:30
litellm Merge pull request #18833 from BerriAI/litellm_staging_01_08_2026 2026-01-09 17:04:29 +05:30
litellm_utils_tests Potential fix for code scanning alert no. 3954: Clear-text logging of sensitive information 2026-01-05 16:06:10 +05:30
litellm-proxy-extras Revert "feat: Add built-in migration lock to prevent concurrent Prisma migrat…" (#18719) 2026-01-06 23:56:02 +05:30
llm_responses_api_testing test_manus_responses_api_with_file_upload 2026-01-10 15:12:00 -08:00
llm_translation Merge pull request #18250 from sjmatta/claude/fix-issue-17910-QBgDq 2026-01-09 17:30:51 +05:30
load_tests Add memory leak detection tests with CI integration (#18881) 2026-01-09 17:36:10 -08:00
local_testing Litellm embeddings calltype fix for guardrail precallhook (#18740) 2026-01-07 21:40:36 +05:30
logging_callback_tests test_completion_claude_3_function_call_with_otel 2026-01-07 14:22:54 +05:30
mcp_tests feat: add UI support for configuring meta URLs 2026-01-02 15:07:37 +09:00
multi_instance_e2e_tests
ocr_tests OCR test fixes 2026-01-11 08:00:31 -08:00
old_proxy_tests/tests remove prompt caching headers as the support has been removed 2026-01-02 11:08:35 +05:30
openai_endpoints_tests
otel_tests Revert "[Fix] Security - Remove example API keys with high entropy (#18255)" 2025-12-20 20:48:11 +05:30
pass_through_tests test_anthropic_messages_to_wildcard_model 2026-01-07 15:03:06 +05:30
pass_through_unit_tests Fix CI: Revert security scan changes and add GitGuardian ignore rules (#18358) 2025-12-22 17:03:53 -08:00
proxy_admin_ui_tests
proxy_security_tests
proxy_unit_tests test fixes 2026-01-10 15:15:41 -08:00
router_unit_tests 🐛 fix: propagate headers in router embedding calls (#18844) 2026-01-09 23:57:18 +05:30
scim_tests
search_tests [Feat] New Search API Provider - LinkUp Search (#18174) 2025-12-18 14:27:36 +05:30
spend_tracking_tests
store_model_in_db_tests fix: test mock 2026-01-02 17:38:52 +09:00
test_litellm fix(gemini): fix negative text_tokens when using cache with images (#18768) 2026-01-12 17:04:33 +05:30
unified_google_tests [Feat] Interactions API - allow using all litellm providers (interactions -> responses api bridge) (#18373) 2025-12-23 22:30:22 +05:30
vector_store_tests [Feat] Add new Rag Search API / Query API with rerankers (#18217) 2025-12-19 19:05:07 +05:30
windows_tests
__init__.py
gettysburg.wav
large_text.py
openai_batch_completions.jsonl
README.MD
test_budget_management.py
test_callbacks_on_proxy.py Fix CI: Revert security scan changes and add GitGuardian ignore rules (#18358) 2025-12-22 17:03:53 -08:00
test_config.py
test_debug_warning.py
test_end_users.py
test_entrypoint.py
test_fallbacks.py
test_gpt5_azure_temperature_support.py
test_health.py
test_keys.py
test_litellm_proxy_responses_config.py
test_logging.conf
test_models.py
test_openai_endpoints.py
test_organizations.py
test_passthrough_endpoints.py
test_ratelimit.py
test_resource_cleanup.py
test_spend_logs.py Fix CI: Revert security scan changes and add GitGuardian ignore rules (#18358) 2025-12-22 17:03:53 -08:00
test_team_logging.py
test_team_members.py
test_team.py fix(test): Fix test_users_in_team_budget to create user with team_id (#18297) 2025-12-20 12:30:30 -08:00
test_users.py

In total litellm runs 1000+ tests

[02/20/2025] Update:

To make it easier to contribute and map what behavior is tested,

we've started mapping the litellm directory in tests/test_litellm

This folder can only run mock tests.