Restore cache_creation_tokens breakdown in UsageMetrics normalization.

Keep cache writes as a separate breakdown field while they remain folded into prompt_tokens for billed totals.
This commit is contained in:
ViditOstwal
2026-08-06 20:35:07 +05:30
parent 80d44851b9
commit e5182e79a5
5 changed files with 17 additions and 2 deletions

View File

@@ -277,10 +277,13 @@ The returned [`UsageMetrics`](https://github.com/crewAIInc/crewAI/blob/main/lib/
| `prompt_tokens` | Full input/prompt tokens billed for the request |
| `completion_tokens` | Output/completion tokens billed for the request |
| `cached_prompt_tokens` | Cache-read subset of prompt tokens (breakdown only) |
| `cache_creation_tokens` | Cache-write subset of prompt tokens (breakdown only, Anthropic) |
| `reasoning_tokens` | Reasoning/thinking subset where the provider reports it separately (breakdown only) |
| `successful_requests` | Number of LLM calls aggregated |
Breakdown fields such as `cached_prompt_tokens` and `reasoning_tokens` are **not** added on top of `total_tokens` — they describe portions already included in `prompt_tokens` or `completion_tokens`.
Breakdown fields such as `cached_prompt_tokens`, `cache_creation_tokens`, and
`reasoning_tokens` are **not** added on top of `total_tokens` — they describe
portions already included in `prompt_tokens` or `completion_tokens`.
For Anthropic, cache read and cache write counters are folded into `prompt_tokens`, so cached workloads are fully reflected in `total_tokens`. OpenAI-style providers already include cached input inside `prompt_tokens`; CrewAI surfaces the cached portion separately for visibility.

View File

@@ -427,7 +427,7 @@ In this section, you'll find detailed examples that help you select, configure,
`cached_prompt_tokens` records the cache-read portion as a breakdown only; it is
already included in `prompt_tokens` and must not be added again to
`total_tokens`.
`total_tokens`. `cache_creation_tokens` records cache writes the same way.
```python Code
usage = llm.get_token_usage_summary()