Setting the file. One moment.
Subchapter 23.28
references/sdk-converse-api-python.mdMarkdown6 KBView on GitHub
Condensed patterns for boto3 bedrock-runtime. For full API structure and provider-specific formats, see model-invocation.md.
Assets
Kb Shim Pypip install "boto3>=1.34.0"import boto3
from botocore.config import Config
# MUST use bedrock-runtime client (not bedrock) for inference
# MUST configure adaptive retry for production
client = boto3.client(
"bedrock-runtime",
config=Config(retries={"max_attempts": 5, "mode": "adaptive"})
)
response = client.converse(
modelId="us.anthropic.claude-sonnet-4-6",
messages=[{"role": "user", "content": [{"text": "Hello"}]}],
inferenceConfig={
"maxTokens": 1024, # MUST set explicitly — see Non-Obvious Patterns
"temperature": 0.7,
},
)
print(response["output"]["message"]["content"][0]["text"])us., eu., apac., global., us-gov., au., jp., ca., etc.). Using a direct model ID without the prefix for cross-region inference causes ResourceNotFoundException or AccessDeniedException. Model IDs in code examples below may be outdated — always verify current model IDs before use: aws bedrock list-foundation-models --region <region> and aws bedrock list-inference-profiles --region <region>, or refer to the latest Bedrock supported models (opens in a new tab) and cross-region inference profiles (opens in a new tab).modelId — it replaces the model ID, not alongside it. When using managed prompts, MUST NOT include inferenceConfig, system, toolConfig, or additionalModelRequestFields (baked into the prompt). Messages are appended after the prompt’s messages, not replacing them.messageStart → contentBlockStart → contentBlockDelta (repeated) → contentBlockStop → messageStop → metadata.UnknownOperationException.response = client.converse_stream(
modelId="us.anthropic.claude-sonnet-4-6",
messages=[{"role": "user", "content": [{"text": "Explain RAG in 3 sentences."}]}],
inferenceConfig={"maxTokens": 1024},
)
for event in response["stream"]:
if "contentBlockDelta" in event:
print(event["contentBlockDelta"]["delta"].get("text", ""), end="")
elif "metadata" in event:
usage = event["metadata"]["usage"]
print(f"\nTokens: {usage['inputTokens']} in, {usage['outputTokens']} out")tool_config = {
"tools": [{
"toolSpec": {
"name": "get_weather",
"description": "Get current weather for a city",
"inputSchema": {
"json": {
"type": "object",
"properties": {"city": {"type": "string", "description": "City name"}},
"required": ["city"],
}
},
}
}]
}
response = client.converse(
modelId="us.anthropic.claude-sonnet-4-6",
messages=[{"role": "user", "content": [{"text": "What's the weather in Seattle?"}]}],
inferenceConfig={"maxTokens": 1024},
toolConfig=tool_config,
)
# Check if model wants to use a tool
if response["stopReason"] == "tool_use":
tool_block = next(
b["toolUse"] for b in response["output"]["message"]["content"] if "toolUse" in b
)
tool_name = tool_block["name"] # "get_weather"
tool_input = tool_block["input"] # {"city": "Seattle"}
tool_use_id = tool_block["toolUseId"]
# IMPORTANT: Validate tool_input before use — model outputs are untrusted.
# The model could return malformed or unexpected values. Validate types,
# lengths, and allowlists before passing to any tool handler.
# Execute tool, then send result back
messages = [
{"role": "user", "content": [{"text": "What's the weather in Seattle?"}]},
response["output"]["message"], # assistant message with toolUse
{
"role": "user",
"content": [{
"toolResult": {
"toolUseId": tool_use_id,
"content": [{"text": "72°F, sunny"}],
}
}],
},
]
final = client.converse(
modelId="us.anthropic.claude-sonnet-4-6",
messages=messages,
inferenceConfig={"maxTokens": 1024},
toolConfig=tool_config,
)response = client.converse(
modelId="us.anthropic.claude-sonnet-4-6",
messages=[{"role": "user", "content": [{"text": "Tell me about investments"}]}],
inferenceConfig={"maxTokens": 1024},
guardrailConfig={
"guardrailIdentifier": "my-guardrail-id",
"guardrailVersion": "1", # Pin version in production, don't use DRAFT
"trace": "disabled", # MUST be "disabled" in production — "enabled" exposes PII/harmful content in response (HIPAA/GDPR risk)
},
)maxTokens explicitly — never rely on defaultbedrock-runtime for inference, bedrock for managementConfig(retries={"max_attempts": 5, "mode": "adaptive"})us. prefix) for higher availability:1 suffix in ARN)converse_stream for user-facing applications (lower time-to-first-token)