0d3cb498a3
CI / Shell Format Check (push) Has been cancelled
CI / Check Ruby (3.4) (push) Has been cancelled
CI / CI Config (push) Has been cancelled
CI / Test on Node ${{ matrix.node }} and ${{ matrix.os }}${{ matrix.shard && format(' (shard {0}/3)', matrix.shard) || '' }} (push) Has been cancelled
CI / Build on Node ${{ matrix.node }} (push) Has been cancelled
CI / Style Check (push) Has been cancelled
CI / Generate Assets (push) Has been cancelled
CI / Check Python (3.14) (push) Has been cancelled
CI / Check Python (3.9) (push) Has been cancelled
CI / Build Docs (push) Has been cancelled
CI / Code Scan Action (push) Has been cancelled
CI / Site tests (push) Has been cancelled
CI / webui tests (push) Has been cancelled
CI / Run Integration Tests (push) Has been cancelled
CI / Run Smoke Tests (push) Has been cancelled
CI / Go Tests (push) Has been cancelled
CI / Share Test (push) Has been cancelled
CI / Redteam (Production API) (push) Has been cancelled
CI / Redteam (Staging API) (push) Has been cancelled
CI / GitHub Actions Lint (push) Has been cancelled
CI / Check Ruby (3.0) (push) Has been cancelled
release-please / release-please (push) Has been cancelled
release-please / build (push) Has been cancelled
release-please / publish-npm (push) Has been cancelled
release-please / publish-npm-backfill (push) Has been cancelled
release-please / docker (push) Has been cancelled
release-please / publish-code-scan-action (push) Has been cancelled
release-please / attest-code-scan-action (push) Has been cancelled
Deploy local.promptfoo.app / Deploy to Cloudflare Pages (push) Has been cancelled
Test and Publish Multi-arch Docker Image / test (push) Has been cancelled
Test and Publish Multi-arch Docker Image / build-docker-and-push-digests (map[digest-suffix:linux-amd64 platform:linux/amd64 runner:ubuntu-latest]) (push) Has been cancelled
Test and Publish Multi-arch Docker Image / build-docker-and-push-digests (map[digest-suffix:linux-arm64 platform:linux/arm64 runner:ubuntu-24.04-arm]) (push) Has been cancelled
Test and Publish Multi-arch Docker Image / merge-docker-digests (push) Has been cancelled
Test and Publish Multi-arch Docker Image / Attest Multi-arch Image (push) Has been cancelled
Validate Renovate Config / Validate Renovate Configuration (push) Has been cancelled
323 lines
13 KiB
Markdown
323 lines
13 KiB
Markdown
# amazon-bedrock/models (Amazon Bedrock Examples)
|
|
|
|
You can run this example with:
|
|
|
|
```bash
|
|
npx promptfoo@latest init --example amazon-bedrock/models
|
|
cd amazon-bedrock/models
|
|
```
|
|
|
|
## Prerequisites
|
|
|
|
1. Set up your AWS credentials:
|
|
|
|
```bash
|
|
export AWS_ACCESS_KEY_ID="your_access_key"
|
|
export AWS_SECRET_ACCESS_KEY="your_secret_key"
|
|
```
|
|
|
|
See [authentication docs](https://www.promptfoo.dev/docs/providers/aws-bedrock/#authentication) for other auth methods, including SSO profiles.
|
|
|
|
2. Request model access in your AWS region:
|
|
- Visit the [AWS Bedrock Model Access page](https://us-west-2.console.aws.amazon.com/bedrock/home?region=us-west-2#/modelaccess)
|
|
- Switch to your desired region. We recommend us-west-2 and us-east-1 which tend to have the most models available.
|
|
- Enable the models you want to use.
|
|
3. Install required dependencies:
|
|
|
|
```bash
|
|
# For basic Bedrock models
|
|
npm install @aws-sdk/client-bedrock-runtime
|
|
|
|
# For Knowledge Base examples
|
|
npm install @aws-sdk/client-bedrock-agent-runtime
|
|
```
|
|
|
|
## Available Examples
|
|
|
|
This directory contains several example configurations for different Bedrock models:
|
|
|
|
- [`promptfooconfig.claude.yaml`](promptfooconfig.claude.yaml) - Claude 4.6 Opus, Claude 4.1 Opus, Claude 4 Opus/Sonnet, Claude Haiku 4.5
|
|
- [`promptfooconfig.openai.yaml`](promptfooconfig.openai.yaml) - OpenAI GPT-OSS models (120B and 20B) with reasoning effort
|
|
- [`promptfooconfig.openai-frontier.yaml`](promptfooconfig.openai-frontier.yaml) - OpenAI frontier models (GPT-5.5 and GPT-5.4) with native reasoning effort
|
|
- [`promptfooconfig.grok.yaml`](promptfooconfig.grok.yaml) - xAI Grok 4.3 on the Bedrock Mantle endpoint (requires `AWS_BEARER_TOKEN_BEDROCK`)
|
|
- [`promptfooconfig.mantle.yaml`](promptfooconfig.mantle.yaml) - `bedrock:mantle:` Chat Completions endpoint for mantle-only models like GLM 4.6 and DeepSeek V3.1 (requires `AWS_BEARER_TOKEN_BEDROCK`)
|
|
- [`promptfooconfig.llama.yaml`](promptfooconfig.llama.yaml) - Llama3
|
|
- [`promptfooconfig.mistral.yaml`](promptfooconfig.mistral.yaml) - Mistral
|
|
- [`promptfooconfig.openai-compatible.yaml`](promptfooconfig.openai-compatible.yaml) - OpenAI-compatible families: Z.AI GLM, MiniMax, Moonshot Kimi, NVIDIA Nemotron, Google Gemma, Writer Palmyra
|
|
- [`promptfooconfig.nova.yaml`](promptfooconfig.nova.yaml) - Amazon's Nova models
|
|
- [`promptfooconfig.nova.tool.yaml`](promptfooconfig.nova.tool.yaml) - Nova with tool usage examples
|
|
- [`promptfooconfig.nova.multimodal.yaml`](promptfooconfig.nova.multimodal.yaml) - Nova with multimodal capabilities
|
|
- [`promptfooconfig.kb.yaml`](promptfooconfig.kb.yaml) - Knowledge Base RAG example with citations and contextTransform
|
|
- [`promptfooconfig.inference-profiles.yaml`](promptfooconfig.inference-profiles.yaml) - Comprehensive Application Inference Profiles example with multiple model types
|
|
- [`promptfooconfig.inference-profiles-simple.yaml`](promptfooconfig.inference-profiles-simple.yaml) - Simple production-ready inference profile setup for high availability
|
|
- [`promptfooconfig.yaml`](promptfooconfig.yaml) - Combined evaluation across multiple providers
|
|
- [`promptfooconfig.nova-sonic.yaml`](promptfooconfig.nova-sonic.yaml) - Amazon Nova Sonic model for audio
|
|
- [`promptfooconfig.converse.yaml`](promptfooconfig.converse.yaml) - Converse API with extended thinking (ultrathink)
|
|
- [`promptfooconfig.converse-mcp.yaml`](promptfooconfig.converse-mcp.yaml) - Converse API with Model Context Protocol (MCP) tools
|
|
|
|
## Converse API Example
|
|
|
|
The Converse API example (`promptfooconfig.converse.yaml`) demonstrates the unified Bedrock Converse API with extended thinking (ultrathink) support.
|
|
|
|
### Key Features
|
|
|
|
- **Extended Thinking**: Enable Claude's reasoning capabilities with configurable token budgets
|
|
- **Unified Interface**: Single API format works across Claude, Nova, Llama, Mistral, and more
|
|
- **Show/Hide Thinking**: Control whether thinking content appears in output with `showThinking`
|
|
|
|
### Configuration
|
|
|
|
```yaml
|
|
providers:
|
|
- id: bedrock:converse:us.anthropic.claude-sonnet-4-6
|
|
label: Claude Sonnet 4.6 with Thinking
|
|
config:
|
|
region: us-west-2
|
|
maxTokens: 20000
|
|
thinking:
|
|
type: enabled
|
|
budget_tokens: 16000
|
|
showThinking: true
|
|
```
|
|
|
|
Run the Converse API example with:
|
|
|
|
```bash
|
|
promptfoo eval -c examples/amazon-bedrock/models/promptfooconfig.converse.yaml
|
|
```
|
|
|
|
## Converse MCP Example
|
|
|
|
The Converse MCP example (`promptfooconfig.converse-mcp.yaml`) demonstrates how to attach Model Context Protocol (MCP) servers to a Bedrock Converse provider. MCP tools are discovered from the configured server, converted to Bedrock Converse tool definitions, and executed when the model requests a tool call.
|
|
|
|
### Configuration
|
|
|
|
```yaml
|
|
providers:
|
|
- id: bedrock:converse:us.anthropic.claude-sonnet-4-6
|
|
label: Claude Sonnet 4.6 with MCP
|
|
config:
|
|
region: us-east-1
|
|
maxTokens: 1024
|
|
temperature: 0
|
|
mcp:
|
|
enabled: true
|
|
servers:
|
|
- name: deepwiki
|
|
url: https://mcp.deepwiki.com/mcp
|
|
tools:
|
|
- ask_question
|
|
toolChoice: auto
|
|
```
|
|
|
|
Run the Converse MCP example with:
|
|
|
|
```bash
|
|
promptfoo eval -c examples/amazon-bedrock/models/promptfooconfig.converse-mcp.yaml
|
|
```
|
|
|
|
Replace the `servers` entry with a local `command`/`args`, `path`, or another remote `url` to use your own MCP server.
|
|
|
|
> **Note:** When the model emits `tool_use`, the provider executes the requested
|
|
> MCP tool and returns the **raw tool result** as the eval output. There is no
|
|
> follow-up Converse turn that feeds the tool result back to the model for a
|
|
> synthesized answer, so the assertions in this example match substrings present
|
|
> in the MCP server's response. If you need a model-summarized answer, wrap the
|
|
> provider in an agent harness or run a second eval over the captured tool
|
|
> output.
|
|
|
|
## Knowledge Base Example
|
|
|
|
The Knowledge Base example (`promptfooconfig.kb.yaml`) demonstrates how to use AWS Bedrock Knowledge Base for Retrieval Augmented Generation (RAG).
|
|
|
|
### Knowledge Base Setup
|
|
|
|
For this example, you'll need to:
|
|
|
|
1. Create a Knowledge Base in AWS Bedrock
|
|
2. Configure it to crawl or ingest content (the example assumes promptfoo documentation content)
|
|
3. Use the Amazon Titan Embeddings model for vector embeddings
|
|
4. Update the config with your Knowledge Base ID:
|
|
|
|
```yaml
|
|
providers:
|
|
- id: bedrock:kb:us.anthropic.claude-sonnet-4-6
|
|
config:
|
|
region: 'us-east-2' # Change to your region
|
|
knowledgeBaseId: 'YOUR_KNOWLEDGE_BASE_ID' # Replace with your KB ID
|
|
```
|
|
|
|
When running the Knowledge Base example, you'll see:
|
|
|
|
- Responses from a Knowledge Base-enhanced model with citations
|
|
- Responses from a standard model for comparison
|
|
- Citations from source documents that show where information was retrieved from
|
|
- Example of `contextTransform` feature extracting context from citations for evaluation
|
|
|
|
The example includes questions about promptfoo configuration, providers, and evaluation techniques that work well with the embedded promptfoo documentation.
|
|
|
|
**Note**: You'll need to update the `knowledgeBaseId` with your actual Knowledge Base ID and ensure the Knowledge Base is configured to work with the selected Claude model.
|
|
|
|
For detailed Knowledge Base setup instructions, see the [AWS Bedrock Knowledge Base Documentation](https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base.html).
|
|
|
|
## Application Inference Profiles Example
|
|
|
|
The Application Inference Profiles example (`promptfooconfig.inference-profiles.yaml`) demonstrates how to use AWS Bedrock's inference profiles for multi-region failover and cost optimization.
|
|
|
|
### Key Benefits of Inference Profiles
|
|
|
|
- **Automatic Failover**: If one region is unavailable, requests automatically route to another region
|
|
- **Cost Optimization**: Routes to the most cost-effective available model
|
|
- **Simplified Management**: Use a single ARN instead of managing multiple model IDs
|
|
- **Cross-Region Availability**: Access models across multiple regions with a single profile
|
|
|
|
### Configuration Requirements
|
|
|
|
When using inference profiles, you **must** specify the `inferenceModelType` parameter:
|
|
|
|
```yaml
|
|
providers:
|
|
- id: bedrock:arn:aws:bedrock:us-east-1:123456789012:application-inference-profile/my-profile
|
|
config:
|
|
inferenceModelType: 'claude' # Required!
|
|
region: 'us-east-1'
|
|
max_tokens: 1024
|
|
```
|
|
|
|
### Supported Model Types
|
|
|
|
- `claude` - Anthropic Claude models
|
|
- `nova` - Amazon Nova models
|
|
- `llama` - Defaults to Llama 4
|
|
- `llama2`, `llama3`, `llama3.1`, `llama3.2`, `llama3.3`, `llama4` - Specific Llama versions
|
|
- `mistral` - Mistral models
|
|
- `cohere` - Cohere models
|
|
- `ai21` - AI21 models
|
|
- `titan` - Amazon Titan models
|
|
- `deepseek` - DeepSeek models (with thinking capability)
|
|
- `openai` - OpenAI GPT-OSS models
|
|
- `zai` - Z.AI GLM models
|
|
- `minimax` - MiniMax models
|
|
- `moonshot` - Moonshot Kimi models
|
|
- `nvidia` - NVIDIA Nemotron models
|
|
- `writer` - Writer Palmyra models
|
|
- `gemma` - Google Gemma models
|
|
|
|
### Running the Examples
|
|
|
|
We provide two inference profile examples:
|
|
|
|
1. **Comprehensive Example** (`promptfooconfig.inference-profiles.yaml`):
|
|
|
|
```bash
|
|
promptfoo eval -c examples/amazon-bedrock/models/promptfooconfig.inference-profiles.yaml
|
|
```
|
|
|
|
This includes:
|
|
- Multiple inference profiles for different model families
|
|
- Comparison with direct model IDs
|
|
- Use of inference profiles for grading assertions
|
|
- Various model-specific configurations
|
|
|
|
2. **Simple Production Example** (`promptfooconfig.inference-profiles-simple.yaml`):
|
|
```bash
|
|
promptfoo eval -c examples/amazon-bedrock/models/promptfooconfig.inference-profiles-simple.yaml
|
|
```
|
|
This demonstrates:
|
|
- A realistic customer support use case
|
|
- High availability setup with failover
|
|
- Comparison between inference profile and direct model access
|
|
- Consistent grading using inference profiles
|
|
|
|
**Note**: Replace the example ARNs with your actual application inference profile ARNs. To create an inference profile, visit the AWS Bedrock console and navigate to the "Application inference profiles" section.
|
|
|
|
## OpenAI Models Example
|
|
|
|
The OpenAI example (`promptfooconfig.openai.yaml`) demonstrates OpenAI's GPT-OSS models available through AWS Bedrock:
|
|
|
|
- **openai.gpt-oss-120b-1:0** - 120 billion parameter model with strong reasoning capabilities
|
|
- **openai.gpt-oss-20b-1:0** - 20 billion parameter model, more cost-effective
|
|
|
|
### Key Features
|
|
|
|
- **Reasoning Effort**: Control reasoning depth with `low`, `medium`, or `high` settings
|
|
- **OpenAI API Format**: Uses familiar OpenAI parameters like `max_completion_tokens`
|
|
- **Available in us-west-2**: Ensure you have model access in the correct region
|
|
|
|
Run the OpenAI example with:
|
|
|
|
```bash
|
|
promptfoo eval -c examples/amazon-bedrock/models/promptfooconfig.openai.yaml
|
|
```
|
|
|
|
## OpenAI Frontier Models Example
|
|
|
|
The frontier example (`promptfooconfig.openai-frontier.yaml`) demonstrates OpenAI's GPT-5.x frontier models on Bedrock:
|
|
|
|
- **openai.gpt-5.5** - Flagship frontier reasoning model (available in `us-east-2`)
|
|
- **openai.gpt-5.4** - Frontier reasoning model (available in `us-east-2` and `us-west-2`)
|
|
|
|
### Key Features
|
|
|
|
- **Responses API**: Frontier models are served through Bedrock's OpenAI-compatible Responses API (the mantle endpoint), not `InvokeModel`. promptfoo routes `bedrock:openai.gpt-5.x` there automatically, so output matches the `openai:responses` provider.
|
|
- **Bedrock API key auth**: Unlike the gpt-oss models (AWS SDK credentials), the frontier models authenticate with an Amazon Bedrock API key. Export it first:
|
|
|
|
```bash
|
|
export AWS_BEARER_TOKEN_BEDROCK="your_bedrock_api_key"
|
|
```
|
|
|
|
- **Native Reasoning Effort**: `reasoning_effort` supports `none`, `low`, `medium`, `high`, and `xhigh` (`minimal` is not supported by these Bedrock models).
|
|
- **Region-gated**: Request model access in a supported region before running.
|
|
|
|
These are the same model IDs that back OpenAI's [Codex](https://developers.openai.com/codex/) coding agent when it is configured with the `amazon-bedrock` provider.
|
|
|
|
Run the frontier example with:
|
|
|
|
```bash
|
|
promptfoo eval -c examples/amazon-bedrock/models/promptfooconfig.openai-frontier.yaml
|
|
```
|
|
|
|
## New Converse API Features (SDK 3.943+)
|
|
|
|
The Converse API supports additional stop reason handling:
|
|
|
|
- `malformed_model_output`: Model produced invalid output
|
|
- `malformed_tool_use`: Model produced a malformed tool use request
|
|
|
|
These are returned as errors in the response with `metadata.isModelError: true`.
|
|
|
|
## Nova Sonic Configuration
|
|
|
|
Nova Sonic now supports configurable timeouts:
|
|
|
|
```yaml
|
|
providers:
|
|
- id: bedrock:nova-sonic:amazon.nova-sonic-v1:0
|
|
config:
|
|
region: us-east-1
|
|
sessionTimeout: 300000 # 5 minutes (default)
|
|
requestTimeout: 120000 # 2 minutes
|
|
```
|
|
|
|
Error responses include categorized error types in `metadata.errorType`:
|
|
|
|
- `connection`: Network/AWS connectivity issues
|
|
- `timeout`: Request or session timeout
|
|
- `api`: Authentication/authorization errors
|
|
- `parsing`: Response parsing failures
|
|
- `session`: Bidirectional stream session errors
|
|
|
|
## Getting Started
|
|
|
|
1. Run the evaluation:
|
|
|
|
```bash
|
|
promptfoo eval -c [path/to/config.yaml]
|
|
```
|
|
|
|
2. View the results:
|
|
|
|
```bash
|
|
promptfoo view
|
|
```
|