github / github/app

Prompt caching not working: app does not send anthropic-beta header on /anthropic/v1/messages requests

Open Beginner friendly
#3,688 0 comments 0 reactions 0 assignees View on GitHub

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, cost 0.005942
  • Request 2: cache_read_input_tokens: 1202, cost 0.00058710× 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

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.