litellm/tests
Cesar Garcia 0e601d0bfe
Fix: Map Gemini cached_tokens to Langfuse cache_read_input_tokens (#18614)
* Fix: Map Gemini cached_tokens to Langfuse cache_read_input_tokens

Fixes #18520

## Problem
Langfuse integration was not capturing cached tokens from Gemini models.
Gemini returns cached tokens in `usage.prompt_tokens_details.cached_tokens`,
but Langfuse only read from top-level `usage.cache_read_input_tokens`
(which only Anthropic populates).

## Solution
Updated langfuse.py to check both locations:
1. First check top-level cache_read_input_tokens (for Anthropic)
2. Then check prompt_tokens_details.cached_tokens (for Gemini, OpenAI, others)

This ensures all providers' cached tokens are properly reported to Langfuse.

## Changes
- Modified litellm/integrations/langfuse/langfuse.py (lines 742-761)
- Added 3 unit tests in tests/test_litellm/integrations/langfuse/test_gemini_cached_tokens.py
- All existing Langfuse tests still pass (11/11)

## Testing
- test_cached_tokens_extraction: Verifies Gemini cached_tokens extraction
- test_cached_tokens_not_present: Backward compatibility (no cached_tokens)
- test_cached_tokens_is_zero: Edge case when cached_tokens = 0

* Refactor: Extract cache token logic into helper function

Address review feedback from @officer47p

- Created _extract_cache_read_input_tokens() helper function
- Reduces code bloat in _log_langfuse_v2 method
- Improves testability and reusability
- All tests still passing (11/11)
2026-01-06 01:34:09 +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 Add output file id in managed objects for batches 2025-12-16 15:52:07 +05:30
code_coverage_tests Add UnboundedDataStructurePattern to memory test detector (#18590) 2026-01-02 11:49:32 -08:00
documentation_tests
enterprise added extraction of top level metadata for custom lables in prometheus callbacks (#18087) 2025-12-17 11:17:12 +05:30
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 test_amazon_titan_image_gen 2025-12-20 15:16:55 +05:30
litellm Merge branch 'main' into litellm_staging_12_16_2025 2025-12-16 21:38:14 +05:30
litellm_utils_tests Fix CI: Revert security scan changes and add GitGuardian ignore rules (#18358) 2025-12-22 17:03:53 -08:00
litellm-proxy-extras
llm_responses_api_testing [Fix] CI/CD - responses_api_testing (#18295) 2025-12-20 10:27:58 -08:00
llm_translation fix: handle empty error objects in response conversion (#18493) 2026-01-04 00:37:52 +05:30
load_tests
local_testing Merge pull request #18579 from BerriAI/litellm_remove_prompt_chaching_header 2026-01-02 21:01:50 +05:30
logging_callback_tests added the option of adding langsmith tenant id in the env (#18623) 2026-01-06 01:19:27 +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 vertex ai deepseek doesn't support pdf urls, so skip them 2025-12-19 23:53:17 +05:30
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
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 Fix CI: Revert security scan changes and add GitGuardian ignore rules (#18358) 2025-12-22 17:03:53 -08:00
router_unit_tests fix(router): Validate routing_strategy at startup to fail fast with helpful error. (#18624) 2026-01-06 01:22:09 +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: Map Gemini cached_tokens to Langfuse cache_read_input_tokens (#18614) 2026-01-06 01:34:09 +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.