Appearance
Amazon Bedrock
Run foundation models on AWS with BedrockModel — Claude, Nova, Llama, Mistral, and more. Best when you need AWS-native deployment, IAM-based auth, and enterprise compliance.
For standalone invoke / stream usage, see LLM Models — Amazon Bedrock.
Install
bash
pip install --extra-index-url https://elsai-agents.elsai.ai/root/ elsai-agents==0.3.5
pip install --extra-index-url https://core-packages.elsai.ai/root/elsai-model/ "elsai-model[bedrock]==2.1.1"Setup
- Enable model access in the Amazon Bedrock console.
- Configure AWS credentials (environment variables,
aws configure, or an IAM role). - Export your chosen model ID:
bash
export AWS_ACCESS_KEY_ID=...
export AWS_SECRET_ACCESS_KEY=...
export AWS_DEFAULT_REGION=us-west-2
export BEDROCK_MODEL_ID=global.anthropic.claude-sonnet-4-6Agent — basic
python
import os
from elsai import Agent
from elsai_model import LLM, Provider
model = LLM(
provider=Provider.BEDROCK,
model=os.getenv("BEDROCK_MODEL_ID", "global.anthropic.claude-sonnet-4-6"),
region_name=os.getenv("AWS_DEFAULT_REGION", "us-west-2"),
max_tokens=256,
temperature=0.2,
)
agent = Agent(
model=model,
system_prompt="You are a concise assistant.",
)
result = agent("Summarize what an AI agent is in two sentences.")
print(result)Prompt caching
Pass cache_config on BedrockModel from elsai-model. The SDK injects cache points on each request — use plain string system prompts.
Bedrock needs enough static tokens before the cache breakpoint (~1024+).
python
import os
from elsai import Agent
from elsai_model.bedrock import BedrockModel
from elsai_model.models import CacheConfig
region = os.getenv("AWS_DEFAULT_REGION")
model = BedrockModel(
model_id=os.getenv("BEDROCK_MODEL_ID"),
region_name=region,
max_tokens=512,
temperature=0.2,
cache_config=CacheConfig(strategy="auto", ttl="1h"),
)
agent = Agent(
model=model,
system_prompt="...",
)
agent("What is 2+2?") # first call — writes to cache
agent("What is 3+3?") # second call — reads from cacheSet ttl="1h" only on models that support one-hour cache. Omit ttl for the default five-minute cache.
Or via the factory:
python
from elsai_model import LLM, Provider
model = LLM(
provider=Provider.BEDROCK,
model=os.getenv("BEDROCK_MODEL_ID"),
region_name=region,
cache_config=CacheConfig(strategy="auto"),
)
agent = Agent(model=model, system_prompt="...")Check cache activity on the agent result:
python
result = agent("What is 2+2?")
print(result.metrics.accumulated_usage.get("cacheWriteInputTokens", 0))
print(result.metrics.accumulated_usage.get("cacheReadInputTokens", 0))cache_prompt="default" is deprecated — use cache_config instead.
When ARMS is initialized, cache tokens appear on traces automatically. See Monitor Amazon Bedrock — Prompt cache tracking.
Example — multi-agent, prompt cache, and ARMS
Share one cached BedrockModel across agents, initialize ARMS, then run twice — first call writes to cache, second reads from cache. Check generation spans in ARMS for gen_ai.usage.cache_* attributes. See Prompt cache tracking.
Requires AWS credentials and ELSAI_ARMS_URL / ELSAI_ARMS_API_KEY in the environment. Use a long static system prompt (~1024+ tokens) so Bedrock can cache.
python
import os
import elsai_arms
from elsai import Agent
from elsai.agent import AgentConfig
from elsai_model.bedrock import BedrockModel
from elsai_model.models import CacheConfig
elsai_arms.init(
otlp_endpoint=os.environ["ELSAI_ARMS_URL"],
otlp_headers={"x-api-key": os.environ["ELSAI_ARMS_API_KEY"]},
pricing_json="./pricing.json",
)
model = BedrockModel(
model_id=os.getenv("BEDROCK_MODEL_ID", "global.anthropic.claude-sonnet-4-6"),
region_name=os.getenv("AWS_REGION", "us-west-2"),
cache_config=CacheConfig(strategy="auto", ttl="1h"),
)
researcher = Agent(
model=model,
system_prompt="Long static context...",
config=AgentConfig(name="researcher", description="..."),
)
manager = Agent(model=model, tools=[researcher], config=AgentConfig(name="manager"))
manager("your prompt") # run 1: cache WRITE
manager("your prompt") # run 2: cache READ — check ARMS spansPopular model IDs
| Model | Model ID |
|---|---|
| Claude Sonnet 4.6 (SDK default) | global.anthropic.claude-sonnet-4-6 |
| Claude 3.5 Sonnet v2 | anthropic.claude-3-5-sonnet-20241022-v2:0 |
| Amazon Nova Pro | us.amazon.nova-pro-v1:0 |
| Amazon Nova Lite | us.amazon.nova-lite-v1:0 |
| Llama 3.1 70B | us.meta.llama3-1-70b-instruct-v1:0 |