Amazon Bedrock Provider

Handles the AWS Bedrock ConverseStream API. Selected automatically when ModelConfig.api == ApiProtocol::BedrockConverseStream.

Usage

#![allow(unused)]
fn main() {
use phi_core::BasicAgent;
use phi_core::provider::{ModelConfig, ApiProtocol};

// With static credentials in api_key: "ACCESS_KEY:SECRET_KEY" or "ACCESS_KEY:SECRET_KEY:SESSION_TOKEN"
let creds = std::env::var("AWS_BEDROCK_CREDENTIALS").unwrap_or_default();
let agent = BasicAgent::new(ModelConfig {
    id: "anthropic.claude-3-sonnet-20240229-v1:0".into(),
    name: "Claude Sonnet (Bedrock)".into(),
    api: ApiProtocol::BedrockConverseStream,
    provider: "bedrock".into(),
    base_url: "https://bedrock-runtime.us-east-1.amazonaws.com".into(),
    api_key: creds, // "access_key:secret_key[:session_token]", or "" for IAM roles
    ..Default::default()
});
}

Authentication

The api_key field uses a colon-separated format:

{access_key_id}:{secret_access_key}
{access_key_id}:{secret_access_key}:{session_token}

For IAM roles (e.g., EC2 instance profiles, ECS task roles), pass an empty api_key and provide pre-computed Authorization headers via ModelConfig.headers.

API Details

  • Endpoint: {base_url}/model/{model}/converse-stream
  • Default base URL: https://bedrock-runtime.us-east-1.amazonaws.com
  • Protocol: ApiProtocol::BedrockConverseStream

Message Format

Bedrock uses its own content block format:

phi-coreBedrock API
Content::Text{"text": "..."}
Content::Image{"image": {"format": "...", "source": {"bytes": "..."}}}
Content::ToolCall{"toolUse": {"toolUseId": "...", "name": "...", "input": ...}}
Message::ToolResult{"toolResult": {"toolUseId": "...", "content": [...], "status": "success"}}
System promptsystem array of text blocks
ToolstoolConfig.tools[].toolSpec
Max tokensinferenceConfig.maxTokens

Stream Events

Bedrock's ConverseStream returns these event types:

  • contentBlockStart — New content block (text or tool use)
  • contentBlockDelta — Text or tool use input delta
  • contentBlockStop — Block complete
  • messageStop — Stop reason (end_turn, max_tokens, tool_use)
  • metadata — Token usage