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
240 lines
7.9 KiB
YAML
240 lines
7.9 KiB
YAML
# yaml-language-server: $schema=https://promptfoo.dev/config-schema.json
|
|
# Multi-Agent System Example with AWS Bedrock Agents
|
|
# This example demonstrates testing multiple specialized agents working together
|
|
|
|
description: 'Multi-Agent Customer Support System Evaluation'
|
|
|
|
# Define multiple specialized agents
|
|
providers:
|
|
# Technical Support Agent - handles technical queries
|
|
- id: tech-agent
|
|
provider: bedrock-agent:TECH_AGENT_ID
|
|
config:
|
|
agentId: TECH_AGENT_ID
|
|
agentAliasId: TECH_ALIAS_ID
|
|
region: us-east-1
|
|
enableTrace: true
|
|
memoryId: LONG_TERM_MEMORY # Remember customer issues
|
|
|
|
# Billing Agent - handles payment and subscription queries
|
|
- id: billing-agent
|
|
provider: bedrock-agent:BILLING_AGENT_ID
|
|
config:
|
|
agentId: BILLING_AGENT_ID
|
|
agentAliasId: BILLING_ALIAS_ID
|
|
region: us-east-1
|
|
enableTrace: true
|
|
memoryId: LONG_TERM_MEMORY
|
|
|
|
# Product Specialist Agent - handles product recommendations
|
|
- id: product-agent
|
|
provider: bedrock-agent:PRODUCT_AGENT_ID
|
|
config:
|
|
agentId: PRODUCT_AGENT_ID
|
|
agentAliasId: PRODUCT_ALIAS_ID
|
|
region: us-east-1
|
|
enableTrace: true
|
|
memoryId: SHORT_TERM_MEMORY
|
|
|
|
# Supervisor Agent - routes queries and escalates issues
|
|
- id: supervisor-agent
|
|
provider: bedrock-agent:SUPERVISOR_AGENT_ID
|
|
config:
|
|
agentId: SUPERVISOR_AGENT_ID
|
|
agentAliasId: SUPERVISOR_ALIAS_ID
|
|
region: us-east-1
|
|
enableTrace: true
|
|
sessionId: supervisor-session-001 # Shared session for coordination
|
|
|
|
# Test scenarios for multi-agent collaboration
|
|
prompts:
|
|
- id: technical-issue
|
|
content: |
|
|
My application keeps crashing when I try to upload files larger than 10MB.
|
|
Error code: UPLOAD_SIZE_EXCEEDED. How can I fix this?
|
|
|
|
- id: billing-question
|
|
content: |
|
|
I was charged twice for my subscription last month.
|
|
Can you help me get a refund for the duplicate charge?
|
|
|
|
- id: product-recommendation
|
|
content: |
|
|
I need a solution for real-time data processing that can handle
|
|
100,000 events per second. What product do you recommend?
|
|
|
|
- id: complex-issue
|
|
content: |
|
|
I upgraded my plan but I'm still seeing the old limits.
|
|
Also, the API is returning 403 errors even though my payment went through.
|
|
|
|
- id: escalation-needed
|
|
content: |
|
|
This is the third time I'm contacting support about the same issue.
|
|
I need to speak with a manager about getting a full refund and account closure.
|
|
|
|
tests:
|
|
# Test Technical Agent's capability
|
|
- description: 'Technical agent handles error troubleshooting'
|
|
vars:
|
|
query: '{{prompts.technical-issue}}'
|
|
providers:
|
|
- tech-agent
|
|
assert:
|
|
- type: javascript
|
|
value: |
|
|
const v = output.toLowerCase();
|
|
['file size', 'upload limit', 'configuration'].some(s => v.includes(s))
|
|
- type: javascript
|
|
value: |
|
|
// Check if technical solution is provided
|
|
output.toLowerCase().includes('limit') ||
|
|
output.toLowerCase().includes('configuration') ||
|
|
output.toLowerCase().includes('setting')
|
|
|
|
# Test Billing Agent's capability
|
|
- description: 'Billing agent handles refund requests'
|
|
vars:
|
|
query: '{{prompts.billing-question}}'
|
|
providers:
|
|
- billing-agent
|
|
assert:
|
|
- type: javascript
|
|
value: |
|
|
const v = output.toLowerCase();
|
|
['refund', 'duplicate', 'charge'].some(s => v.includes(s))
|
|
- type: javascript
|
|
value: |
|
|
// Check for customer service tone
|
|
output.toLowerCase().includes('sorry') ||
|
|
output.toLowerCase().includes('apologize') ||
|
|
output.toLowerCase().includes('help')
|
|
|
|
# Test Product Agent's recommendations
|
|
- description: 'Product agent provides relevant recommendations'
|
|
vars:
|
|
query: '{{prompts.product-recommendation}}'
|
|
providers:
|
|
- product-agent
|
|
assert:
|
|
- type: javascript
|
|
value: |
|
|
const v = output.toLowerCase();
|
|
['stream', 'kafka', 'kinesis', 'event', 'real-time'].some(s => v.includes(s))
|
|
- type: javascript
|
|
value: |
|
|
// Check if throughput requirements are acknowledged
|
|
output.includes('100,000') ||
|
|
output.toLowerCase().includes('high throughput') ||
|
|
output.toLowerCase().includes('scale')
|
|
|
|
# Test Multi-Agent Coordination (Complex Issue)
|
|
- description: 'Multiple agents handle complex cross-functional issue'
|
|
vars:
|
|
query: '{{prompts.complex-issue}}'
|
|
providers:
|
|
- tech-agent
|
|
- billing-agent
|
|
assert:
|
|
- type: javascript
|
|
value: |
|
|
// Tech agent should address API errors
|
|
const techResponse = outputs['tech-agent'];
|
|
const billingResponse = outputs['billing-agent'];
|
|
|
|
const techAddressed = techResponse && (
|
|
techResponse.toLowerCase().includes('403') ||
|
|
techResponse.toLowerCase().includes('permission') ||
|
|
techResponse.toLowerCase().includes('authorization')
|
|
);
|
|
|
|
const billingAddressed = billingResponse && (
|
|
billingResponse.toLowerCase().includes('payment') ||
|
|
billingResponse.toLowerCase().includes('plan') ||
|
|
billingResponse.toLowerCase().includes('upgrade')
|
|
);
|
|
|
|
return techAddressed || billingAddressed;
|
|
|
|
# Test Supervisor Escalation
|
|
- description: 'Supervisor agent handles escalations appropriately'
|
|
vars:
|
|
query: '{{prompts.escalation-needed}}'
|
|
providers:
|
|
- supervisor-agent
|
|
assert:
|
|
- type: javascript
|
|
value: |
|
|
const v = output.toLowerCase();
|
|
['escalate', 'manager', 'supervisor', 'priority'].some(s => v.includes(s))
|
|
- type: javascript
|
|
value: |
|
|
// Check for appropriate escalation handling
|
|
output.toLowerCase().includes('understand') ||
|
|
output.toLowerCase().includes('frustration') ||
|
|
output.toLowerCase().includes('priority')
|
|
|
|
# Test Agent Memory Persistence
|
|
- description: 'Agents remember context from previous interactions'
|
|
vars:
|
|
customer_id: 'CUST-12345'
|
|
tests:
|
|
- vars:
|
|
query: "My customer ID is {{customer_id}} and I'm having login issues"
|
|
providers:
|
|
- tech-agent
|
|
- vars:
|
|
query: 'What is my customer ID?'
|
|
providers:
|
|
- tech-agent
|
|
assert:
|
|
- type: contains
|
|
value: '{{customer_id}}'
|
|
|
|
# Test Agent Collaboration with Trace Analysis
|
|
- description: 'Analyze agent tool usage and decision making'
|
|
vars:
|
|
query: 'I need help choosing between your Pro and Enterprise plans for my 50-person startup'
|
|
providers:
|
|
- product-agent
|
|
assert:
|
|
- type: javascript
|
|
value: |
|
|
// Check if agent used comparison tools
|
|
if (metadata && metadata.trace && metadata.trace.toolCalls) {
|
|
const toolsUsed = metadata.trace.toolCalls.map(t => t.name);
|
|
return toolsUsed.some(tool =>
|
|
tool.includes('compare') ||
|
|
tool.includes('pricing') ||
|
|
tool.includes('plan')
|
|
);
|
|
}
|
|
// Pass if no trace available but response is relevant
|
|
return output.toLowerCase().includes('enterprise') &&
|
|
output.toLowerCase().includes('pro');
|
|
|
|
# Performance and Quality Metrics
|
|
defaultTest:
|
|
assert:
|
|
# Latency check for all responses
|
|
- type: latency
|
|
threshold: 5000 # 5 seconds max
|
|
|
|
# Ensure responses are not empty
|
|
- type: javascript
|
|
value: output && output.trim().length > 10
|
|
|
|
# Check for professional tone
|
|
- type: javascript
|
|
value: |
|
|
// Avoid inappropriate responses
|
|
!output.toLowerCase().includes('i don\'t know') &&
|
|
!output.toLowerCase().includes('not sure') &&
|
|
!output.toLowerCase().includes('error')
|
|
|
|
# Shared test configuration
|
|
options:
|
|
cache: false # Disable caching for accurate latency measurements
|
|
maxConcurrency: 2 # Limit concurrent agent calls to avoid rate limits
|
|
|