Prompt caching not working: app does not send anthropic-beta header on /anthropic/v1/messages requests
Nobody has claimed this yet.
- Dominant language
- No language data
- Stars
- 2.1k
- Forks
- 157
- PR merge metrics
- No merged PRs in 30d
Description
Summary
The Copilot app correctly uses the /anthropic/v1/messages endpoint when a custom model provider is configured with an Anthropic-compatible base URL. However, it does not send the anthropic-beta: prompt-caching-2024-07-31 header, so prompt caching is never activated — even when cache_control: {type: ephemeral} markers are present in the request.
Evidence (from local hai-desktop proxy logs)
The local hai-desktop proxy forwards requests and adds ?beta=true to the upstream URL only when it sees the anthropic-beta header from the client. Comparing the two callers:
| Client | User-Agent | Upstream target | Caching |
|---|---|---|---|
| Claude Code | claude-cli/2.1.222 |
...llm-proxy/anthropic/v1/messages?beta=true |
✅ works |
| Copilot app | Anthropic/JS 0.94.0 |
...llm-proxy/anthropic/v1/messages |
❌ broken |
Claude Code sends anthropic-beta: prompt-caching-2024-07-31; the Copilot app does not.
Confirmed by live test (same proxy, same model)
With anthropic-beta header (Claude Code / manual curl):
- Request 1:
cache_creation_input_tokens: 1202, cost0.005942 - Request 2:
cache_read_input_tokens: 1202, cost0.000587— 10× cheaper
Without anthropic-beta header (Copilot app):
- Request 1:
cache_creation_input_tokens: 0 - Request 2:
cache_read_input_tokens: 0— no savings
Workaround
I added a local HTTP caching proxy on a separate port that sits in front of hai-desktop to avoid redundant calls. This is a symptom fix, not a solution.
Request
When the Copilot app is configured with a custom provider using an Anthropic-format endpoint, and a model reports supports_prompt_caching: true, the app should send:
anthropic-beta: prompt-caching-2024-07-31
on requests to /anthropic/v1/messages. This is the only missing piece — the endpoint, the model, and the cache_control markers in the request body are all already correct.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by tracing the Copilot app request construction for the /anthropic/v1/messages endpoint and how supports_prompt_caching is read. Confirm that requests for eligible custom-provider models include anthropic-beta: prompt-caching-2024-07-31, while other requests remain unchanged; verify the outgoing header with the existing request or proxy logging setup.
Written by the indexing model from the issue text.
Assessment
- Domain
- api, desktop
- Issue type
- Bug
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 68/100