Skip to content

Amazon Bedrock

SideSeat automatically extracts model information, token usage, and costs from Amazon Bedrock API calls.

  • SideSeat running locally (sideseat)
  • SDK installed (pip install sideseat / uv add sideseat or npm install @sideseat/sdk)
  • AWS credentials configured for Amazon Bedrock
from sideseat import SideSeat
SideSeat()
import boto3
import json
bedrock = boto3.client("bedrock-runtime", region_name="us-east-1")
response = bedrock.invoke_model(
modelId="anthropic.claude-sonnet-4-5-20250929-v1:0",
body=json.dumps({
"anthropic_version": "bedrock-2023-05-31",
"max_tokens": 1024,
"messages": [{"role": "user", "content": "Hello!"}]
})
)
result = json.loads(response["body"].read())
print(result["content"][0]["text"])

Strands has native Bedrock support:

from sideseat import SideSeat, Frameworks
SideSeat(framework=Frameworks.Strands)
from strands import Agent
agent = Agent()
response = agent("Hello!")
print(response)

Strands uses Amazon Bedrock by default. To specify a model explicitly:

from strands.models import BedrockModel
model = BedrockModel(model_id="anthropic.claude-sonnet-4-5-20250929-v1:0")
agent = Agent(model=model)
AttributeSource
gen_ai.systembedrock
gen_ai.request.modelModel ID from request
gen_ai.response.modelModel ID from response
gen_ai.usage.input_tokensUsage metrics
gen_ai.usage.output_tokensUsage metrics
cloud.provideraws
cloud.regionAWS region

Bedrock cross-region inference is supported:

model = BedrockModel(
model_id="anthropic.claude-sonnet-4-5-20250929-v1:0",
region_name="us-east-1"
)

The us. prefix indicates cross-region inference.

Streaming responses are captured:

response = bedrock.invoke_model_with_response_stream(
modelId="anthropic.claude-sonnet-4-5-20250929-v1:0",
body=json.dumps({
"anthropic_version": "bedrock-2023-05-31",
"max_tokens": 1024,
"messages": [{"role": "user", "content": "Tell me a story"}]
})
)
for event in response["body"]:
chunk = json.loads(event["chunk"]["bytes"])
if chunk["type"] == "content_block_delta":
print(chunk["delta"]["text"], end="")

The Bedrock Converse API is also supported:

response = bedrock.converse(
modelId="anthropic.claude-sonnet-4-5-20250929-v1:0",
messages=[{
"role": "user",
"content": [{"text": "Hello!"}]
}]
)
print(response["output"]["message"]["content"][0]["text"])

Amazon Bedrock uses the standard AWS credential chain:

Terminal window
# Environment variables
export AWS_ACCESS_KEY_ID=xxx
export AWS_SECRET_ACCESS_KEY=xxx
export AWS_REGION=us-east-1
# Or AWS profile
export AWS_PROFILE=my-profile