Prompt caching on Amazon Bedrock lets you cache specific portions of your requests for repeated use. This feature significantly reduces inference response latency and input token costs by allowing the model to skip recomputation of previously processed content.With Portkey, you can easily implement Amazon Bedrock’s prompt caching through our OpenAI-compliant unified API and prompt templates.
Amazon Bedrock prompt caching is generally available with the following models:
Currently Supported Models:
Claude 3.7 Sonnet
Claude 3.5 Haiku
Amazon Nova Micro
Amazon Nova Lite
Amazon Nova Pro
Customers who were given access to Claude 3.5 Sonnet v2 during the prompt caching preview will retain their access, but no additional customers will be granted access to prompt caching on the Claude 3.5 Sonnet v2 model.
When using prompt caching, you define cache checkpoints - markers that indicate parts of your prompt to cache. These cached sections must be static between requests; any alterations will result in a cache miss.
You can also use Bedrock Prompt Caching Feature with Portkey’s Prompt Templates.
Here’s how to implement prompt caching with Portkey:
import Portkey from 'portkey-ai'const portkey = new Portkey({ apiKey: "PORTKEY_API_KEY", // defaults to process.env["PORTKEY_API_KEY"] virtualKey: "VIRTUAL_KEY" // Your Bedrock Virtual Key})const chatCompletion = await portkey.chat.completions.create({ messages: [ { "role": 'system', "content": [ { "type":"text","text":"You are a helpful assistant" }, { "type":"text","text":"This is a large document I want to cache...", "cache_control": {"type": "ephemeral"} } ]}, { "role": 'user', "content": 'Summarize the above document for me in 20 words' } ], model: 'anthropic.claude-3-7-sonnet-20250219-v1:0'});console.log(chatCompletion.choices[0].message.content);
from portkey_ai import Portkeyportkey = Portkey( api_key="PORTKEY_API_KEY", virtual_key="BEDROCK_VIRTUAL_KEY",)chat_completion = portkey.chat.completions.create( messages= [ { "role": 'system', "content": [ { "type":"text","text":"You are a helpful assistant" }, { "type":"text","text":"This is a large document I want to cache...", "cache_control": {"type": "ephemeral"} } ]}, { "role": 'user', "content": 'Summarize the above document in 20 words' } ], model= 'anthropic.claude-3-7-sonnet-20250219-v1:0',)print(chat_completion.choices[0].message.content)
import OpenAI from "openai";import { PORTKEY_GATEWAY_URL, createHeaders } from "portkey-ai";const openai = new OpenAI({ apiKey: "BEDROCK_API_KEY", baseURL: PORTKEY_GATEWAY_URL, defaultHeaders: createHeaders({ provider: "bedrock", apiKey: "PORTKEY_API_KEY", }),});const chatCompletion = await openai.chat.completions.create({ messages: [ { "role": 'system', "content": [ { "type":"text","text":"You are a helpful assistant" }, { "type":"text","text":"This is a large document I want to cache...", "cache_control": {"type": "ephemeral"} } ]}, { "role": 'user', "content": 'Summarize the above document for me in 20 words' } ], model: 'anthropic.claude-3-7-sonnet-20250219-v1:0',});console.log(chatCompletion.choices[0].message.content);
from openai import OpenAIfrom portkey_ai import PORTKEY_GATEWAY_URL, createHeadersclient = OpenAI( api_key="BEDROCK_API_KEY", base_url=PORTKEY_GATEWAY_URL, default_headers=createHeaders( api_key="PORTKEY_API_KEY", provider="bedrock", ))chat_completion = client.chat.completions.create( messages= [ { "role": 'system', "content": [ { "type":"text","text":"You are a helpful assistant" }, { "type":"text","text":"This is a large document I want to cache...", "cache_control": {"type": "ephemeral"} } ]}, { "role": 'user', "content": 'Summarize the above document in 20 words' } ], model= 'anthropic.claude-3-7-sonnet-20250219-v1:0',)print(chat_completion.choices[0].message.content)
curl https://api.portkey.ai/v1/chat/completions \ -H "Content-Type: application/json" \ -H "x-portkey-virtual-key: $BEDROCK_VIRTUAL_KEY" \ -H "x-portkey-api-key: $PORTKEY_API_KEY" \ -d '{ "model": "anthropic.claude-3-7-sonnet-20250219-v1:0", "messages": [ { "role": "system", "content": [ { "type":"text","text":"You are a helpful assistant" }, { "type":"text","text":"This is a large document I want to cache...", "cache_control": {"type": "ephemeral"} } ]}, { "role": "user", "content": "Summarize the above document for me in 20 words" } ] }'