Enable caching for a request
Set thewandb-cache-mode request header to one of the following modes:
To bypass the cache, omit the header.
For compatibility with OpenPipe clients, the proxy also accepts the deprecated
op-cache header. It takes the same modes, plus true as an alias for readWrite and false to bypass the cache. If a request sends both headers, they must select the same mode. Otherwise, the proxy returns 400 Bad Request.
The following examples send a request in readWrite mode and read the cache result from the response headers.
- Python
- JavaScript
- cURL
readWrite or readOnly), the response includes a wandb-cache-status header with the value hit or miss. The proxy sends the same value in the x-wandb-cache compatibility header. The response to a writeOnly request doesn’t include either header.
What makes two requests identical
The proxy looks up a cached response after it resolves the project version and routing revision, and before it selects or decrypts a provider. The cache key combines the following values:- The W&B entity, project, and project version.
- The routing revision in effect for the request.
- The request path and query string.
- A canonical hash of the request body fields that affect the output.
- The
modelvalue, soticket-classifierandticket-classifier@v1share entries. - Metadata keys that start with
wandb., includingwandb.entityandwandb.thread_id. stream: false, which the proxy treats the same as omittingstream.- The proxy hostname and the order of query parameters.
wandb., such as gen_ai.conversation.id or user.id.
Publishing a new routing revision changes the key, so existing entries stop matching without being deleted. A cached response also records which routing target produced it. If that target is no longer in the routing configuration, the proxy treats the entry as a miss.
The proxy serves a cache hit from the target that produced the stored response. It doesn’t participate in weighted or sticky routing for that request.
Limits
The following limits apply to which requests can use the cache and which responses the proxy stores.- Project-routed requests only. Direct
provider/modelrequests that set a cache header return400 Bad Request. - Non-streaming requests only. Requests with
stream: truethat set a cache header return400 Bad Request. - Successful responses only. The proxy stores only 2xx responses up to 8 MiB.
- Retention is 7 days. Stored responses are deleted 7 days after they’re written. Within that window, a hit doesn’t depend on the entry’s age.
- Invalid modes are rejected. Any
wandb-cache-modevalue other than those listed, or conflicting modes inwandb-cache-modeandop-cache, returns400 Bad Request.
Traces and Analytics
The proxy still records a cache hit as a project trace. The trace keeps the original response and its token usage, is marked withcache_hit=true, and has no provider latency. A request that enables cache reads but is forwarded to the provider is marked with cache_hit=false.
Analytics counts the provider spend of a cache hit as zero, because no inference ran, while token totals still include the replayed usage. Dataset creation deduplicates identical inputs, so replayed responses don’t add duplicate training rows.
Browser clients
The proxy allows thewandb-cache-mode and op-cache request headers in cross-origin requests, and it exposes wandb-cache-status, x-wandb-cache, and x-proxy-request-id to browser code.
Chat Completions
See how the proxy builds the provider request, handles streaming, and forwards tools and structured output.