Simple caching is available for all plans.
Semantic caching requires a vector database and is only available on select Enterprise plans. Contact us to learn more about enabling this feature.
Semantic caching requires a vector database and is only available on select Enterprise plans. Contact us to learn more about enabling this feature.
Enable Cache
Addcache to your config object:
Caching won’t work if
x-portkey-debug: "false" header is included.Simple Cache
Returns the cached response when the exact same request is sent again. Hit when all of these match a cached entry:- Full request body (
messagesorprompt,model,temperature,max_tokens, and every other parameter) x-portkey-metadata(if used)x-portkey-cache-namespace(if used)- The entry is still within
max_age
- The request is sent for the first time
- Any field in the body changes—even one character in the prompt or a different parameter
- The cached entry has expired
x-portkey-cache-force-refresh: trueis set on the request
Semantic Cache
Matches requests with similar meaning using cosine similarity, not just identical text. Learn more →Semantic cache is a superset of simple cache. Portkey checks for an exact
match first and only runs semantic search on a miss.
Semantic cache works with requests under 8,191 tokens and ≤4 messages.
- User text has similar meaning to a cached request — cosine similarity above the threshold (default
0.95) model,temperature,max_tokens, and any other body parameter match exactlyx-portkey-metadatamatches exactly (if used)- The system prompt is ignored — changing it does not affect cache hits
- At least one
usermessage must be present
Set up semantic caching (self-hosted)
To enable semantic caching on a self-hosted Portkey gateway, configure the embedding provider and a vector database.1
Configure the embedding provider
Set the following environment variables in your gateway environment for generating vector embeddings:
SEMANTIC_CACHE_EMBEDDING_PROVIDER accepts openai, google (Gemini embeddings), or vertex-ai (Vertex AI embeddings). Set SEMANTIC_CACHE_EMBEDDINGS_URL, SEMANTIC_CACHE_EMBEDDING_MODEL, and SEMANTIC_CACHE_EMBEDDING_DIMENSIONS to match the chosen provider’s embedding model.2
Configure the vector database
Set the following environment variables in your gateway environment to connect to your vector store (Milvus or Pinecone):MilvusCreate a collection whose name matches
SEMANTIC_CACHE_EMBEDDING_MODEL (for example, text-embedding-3-small when using that model). The collection must define these fields:If you change the embedding model or dimension, update the collection schema and
SEMANTIC_CACHE_EMBEDDING_DIMENSIONS so the vector field size stays aligned.PineconeVECTOR_STORE_COLLECTION_NAME— Omit this; it is not used for Pinecone.VECTOR_STORE_ADDRESS— Set to your Pinecone index name (not a generic host string).SEMANTIC_CACHE_EMBEDDING_DIMENSIONS— Must match the dimension configured on the index (same as your embedding vectors).- In the Pinecone console, create or use an index with cosine as the similarity metric so it matches Portkey’s semantic cache behavior.
3
Enable semantic caching per request
Set the cache mode to
semantic in your config object for each LLM request:Cache TTL
Set expiration withmax_age (in seconds):
Organization-Level TTL
Admins can set default TTL for all workspaces to align with data retention policies:- Go to Admin Settings → Organization Properties → Cache Settings
- Enter default TTL (seconds)
- Save
- No
max_agein request → org default used - Request
max_age> org default → org default wins - Request
max_age< org default → request value honored
Force Refresh
Fetch a fresh response even when a cached response exists. This is set per-request (not in Config):- Requires cache config to be passed - For semantic hits, refreshes ALL matching entries
Cache Namespace
By default, Portkey partitions cache by all request headers. Use a custom namespace to partition only by your custom string—useful for per-user caching or optimizing hit ratio:Cache with Configs
Set cache at top-level or per-target:Target-level cache takes precedence over top-level.
Targets with
override_params need that exact param combination cached before
hits occur.Analytics & Logs
Analytics → Cache tab shows:- Cache hit rate
- Latency savings
- Cost savings
Cache Hit, Cache Semantic Hit, Cache Miss, Cache Refreshed, or Cache Disabled. Learn more →


