# Warning: Prompt caching disabled because system message changed between requests

- **ID:** `llm/prompt-caching-ignored-with-system-message-change`
- **Domain:** llm
- **Category:** runtime_error
- **Verification:** ai_generated
- **Fix Rate:** 90%

## Root Cause

LLM API prompt caching (e.g., Anthropic's prompt caching) requires identical system messages across requests to reuse cached prefixes; any change invalidates the cache.

## Version Compatibility

| Version | Status | Introduced | Deprecated |
|---------|--------|------------|------------|
| anthropic-python>=0.25.0 | active | — | — |
| claude-3-opus-20240229 | active | — | — |
| claude-3-sonnet-20240229 | active | — | — |

## Workarounds

1. **Ensure system messages are identical across requests that should benefit from caching. Use a template system: `system_message = {"role": "system", "content": [{"type": "text", "text": "You are a helpful assistant.", "cache_control": {"type": "ephemeral"}}]}` and reuse this object.** (90% success)
   ```
   Ensure system messages are identical across requests that should benefit from caching. Use a template system: `system_message = {"role": "system", "content": [{"type": "text", "text": "You are a helpful assistant.", "cache_control": {"type": "ephemeral"}}]}` and reuse this object.
   ```
2. **If system message must change, structure the prompt so that the variable part is in the user message, keeping system message static. Example: system = "You are a math tutor.", user = "Solve: {problem}".** (85% success)
   ```
   If system message must change, structure the prompt so that the variable part is in the user message, keeping system message static. Example: system = "You are a math tutor.", user = "Solve: {problem}".
   ```
3. **Monitor cache metrics via API response headers (e.g., `x-should-cache`) to verify caching is working.** (70% success)
   ```
   Monitor cache metrics via API response headers (e.g., `x-should-cache`) to verify caching is working.
   ```

## Dead Ends

- **** — This defeats the purpose of caching and actually guarantees cache misses. (90% fail)
- **** — Caching is most effective on system messages; user messages vary too much to benefit from caching. (70% fail)
- **** — The warning indicates caching is disabled; ignoring it means paying for full compute on every request. (80% fail)
