As multi-turn AI agents, code generation assistants, and retrieval-augmented generation (RAG) pipelines expand in production, prompt sizes routinely exceed tens of thousands of tokens per request. In these architectures, the vast majority of tokens across consecutive API calls are static: system prompts, OpenAPI tool specifications, reference documents, and accumulated conversation history.
Without optimization, inference engines must re-evaluate the full attention matrix for every token on each call. This prefill phase scales quadratically with sequence length, degrading time-to-first-token (TTFT) latency and driving up cloud compute expenses. Prompt caching (retaining precomputed Key-Value pairs in GPU high-bandwidth memory or host RAM) has emerged as the primary mechanism to mitigate this overhead.
However, providers implement prompt caching with conflicting abstractions, distinct eviction policies, and fundamentally different pricing economics.
Provider Architectural Implementations
Commercial API providers and open-source inference engines have taken divergent architectural paths to implement prefix KV reuse.
Anthropic Claude: Explicit Breakpoints and Rolling TTLs
Anthropic prompt caching documentation uses explicit cache breakpoints designated via cache_control: {"type": "ephemeral"} metadata on up to four content blocks per request, alongside an automatic caching mode for growing conversation histories.
Key operating constraints include:
- Minimum Token Threshold: 1,024 tokens for Claude 3.5 Sonnet, Claude 3.7 Sonnet, and Claude 3.5 Haiku, with 512 tokens supported on select newer endpoints and 2,048 tokens on legacy configurations.
- Cache Lifetime: 5 minutes by default, refreshed automatically each time a request hits the cache. Anthropic also offers an optional 1-hour cache duration tier.
- Pricing Structure: Cache creation carries a 25% surcharge (1.25x base input token price), while cache hits receive a 90% discount (0.10x base input token price).
Because the cache lifetime is measured from the start of the request that creates or refreshes the entry, slow streaming responses consume a portion of the 5-minute window before the next turn begins.
OpenAI: Implicit Prefix Matching and Zero Write Surcharges
OpenAI prompt caching architecture operates automatically across modern model families including GPT-4o, GPT-4o mini, o1, and o3-mini.
Key characteristics include:
- Minimum Token Threshold: 1,024 tokens. Cache matching occurs in 128-token increments from the beginning of the prompt.
- Cache Routing and Eviction: Requests are routed based on prefix hashes and cluster load. Eviction is managed dynamically via in-memory least-recently-used (LRU) policies, typically retaining entries for 5 to 10 minutes of inactivity, extending up to one hour during off-peak periods.
- Pricing Structure: 50% discount on cached input tokens with no cache-write fee (1.0x on cache writes, 0.50x on cache reads).
Google Gemini: Explicit Objects and Hourly Storage Fees
The Google Gemini context caching API and Google Cloud Vertex AI documentation support both implicit caching on newer endpoints and explicit cache objects created via dedicated API endpoints.
Key properties include:
- Minimum Token Threshold: 4,096 tokens on Gemini Flash models and up to 32,768 tokens on older long-context variants.
- Cache Control: Explicit cache objects allow user-defined time-to-live settings (defaulting to 1 hour), which can be updated programmatically.
- Pricing Structure: Caching separates computation from storage. Creating a cache incurs standard token processing costs, cached token reads receive an approximate 75% discount (0.25x base input price), and retained tokens accrue an hourly storage fee ($1.00 per million tokens per hour on Flash, $4.50 on Pro).
Open-Source Serving: RadixAttention and Block Hashing
In self-hosted infrastructure, SGLang RadixAttention research introduced Radix Trees to retain KV caches across arbitrary branches without requiring manual developer markup. SGLang treats the KV cache as a radix tree where nodes represent token subsequences, enabling efficient tree-structured branching for parallel sampling, multi-agent debates, and shared system prompts.
Concurrently, vLLM inference documentation provides Automatic Prefix Caching (APC) by computing hash values for fixed-size memory blocks (typically 16 or 32 tokens) in PagedAttention, dynamically matching incoming sequences against existing GPU allocations.
The Economic Break-Even Calculation
The commercial viability of prompt caching depends on call frequency, prompt length, and the provider billing model.
Under OpenAI's zero-surcharge model, prompt caching is cost-neutral on cache misses and profitable on hits, delivering an immediate 50% input discount whenever a 1,024-token prefix matches.
Under Anthropic's model, the 25% write penalty alters the break-even math:
- One request (Cache Miss): Cost = 1.25x base input price.
- Two requests (One Write, One Hit): Cost = 1.25x + 0.10x = 1.35x base input price, compared to 2.0x uncached (32.5% net savings).
- Five requests (One Write, Four Hits): Cost = 1.25x + 4 * (0.10x) = 1.65x base input price, compared to 5.0x uncached (67% net savings).
If an application sends requests spaced more than 5 minutes apart (such as an interactive human chat where users pause between messages), every call may write a fresh cache entry at 1.25x without ever hitting the 0.10x read discount. In low-frequency architectures, uncoordinated caching can increase total input token expenditure by up to 25%.

Five Common Cache Invalidation Pitfalls
Because prefix caching requires exact bit-for-bit token alignment from the beginning of the context window, small implementation oversights can completely destroy cache hit rates.
1. Dynamic Root Metadata
Injecting dynamic variables (current timestamps, request IDs, user session UUIDs, or latency counters) at the beginning of the system prompt shifts every subsequent token. Since token matchers evaluate prefixes strictly from index zero, a single changed timestamp at the start invalidates all downstream tools and conversation history.
2. Tool Schema Mutation
If tool definitions are dynamically filtered, sorted, or mutated based on runtime permissions or conversation state, the serialized tool schema changes. In the Claude and OpenAI message formats, tool definitions are evaluated before or alongside system messages. A change in a single tool description busts the cache for the entire session.
3. Serialization Non-Determinism
When generating system prompts or structured JSON payloads dynamically in Python or Node.js, dictionary key ordering can vary across worker processes unless explicitly sorted (json.dumps(obj, sort_keys=True)). Subtle whitespace variations or unpinned JSON serialization will produce different token sequences for identical logical data.
4. Sampling and Thinking Parameter Shifts
While temperature and top-p sampling do not affect KV caching directly (the KV cache stores key and value projections of the input sequence before sampling begins), changing system-level parameters like Anthropic thinking budgets (thinking.budget_tokens) or tool choice modes can change request header hashes and force recomputation on certain provider endpoints.
5. Multi-Tenant Gateway Fragmentation
In distributed environments running multiple load-balanced AI gateway instances (such as LiteLLM or custom reverse proxies), consecutive requests from the same user session may be dispatched to different provider cluster regions or backend nodes. Without session stickiness or prompt routing keys (prompt_cache_key), requests fail to land on the physical host holding the warm KV cache.
Production Engineering Checklist
To maximize cache hit rates and lower inference costs in production agent workflows:
- Enforce Strict Static-to-Dynamic Ordering: Construct prompt structures strictly in order of volatility: Static System Rules -> Static Tool Schemas -> Static Knowledge Base Context -> Conversation History -> Ephemeral User Input.
- Relocate Dynamic Metadata: Move current timestamps, session IDs, and real-time flags out of the system prompt and into the trailing user message.
- Sort Serialization Keys: Ensure all JSON tool definitions and schema objects pass through deterministic serializers with alphabetical key sorting.
- Implement Sticky Routing at the Gateway: When using multi-tenant proxies, hash session IDs or user IDs to route consecutive requests to consistent API regions and provider keys.
- Monitor Cache Hit Ratios in Telemetry: Track
cache_creation_input_tokensvscache_read_input_tokens(Anthropic) andcached_tokensinprompt_tokens_details(OpenAI) to detect silent cache invalidation regressions in production.



