Azure Blob Storage
Store evaluation results in Azure Blob Storage to enable team collaboration, centralized result browsing, and easy run comparison.
Why Azure Storage?
Section titled “Why Azure Storage?”Without centralized storage:
- Results live on developers’ machines
- Hard to compare runs across team members
- No historical tracking
- Results deleted when workspace cleaned up
With Azure Storage:
- Automatic uploads — Results upload immediately after
waza run - Team visibility — Browse all runs with
waza results list - Easy comparison — Compare any two runs with
waza results compare - Historical archive — Results organized by date
- No extra config — Uses your existing Azure credentials
Prerequisites
Section titled “Prerequisites”Azure Account
Section titled “Azure Account”You need an Azure Storage account. You can:
Option 1: Create a new storage account (recommended for team evaluation results)
# Create resource groupaz group create -n waza-eval -l eastus
# Create storage accountaz storage account create \ -n myteamwaza \ # Must be unique globally, lowercase alphanumeric -g waza-eval \ --sku Standard_LRS
# Create containeraz storage container create -n waza-results -a myteamwazaOption 2: Use existing storage account
# List your storage accountsaz storage account list --query "[].name"
# Use the account name in your .waza.yamlAzure Authentication
Section titled “Azure Authentication”Waza uses DefaultAzureCredential to automatically detect your Azure identity. It tries credentials in this order:
- Environment variables (
AZURE_CLIENT_ID,AZURE_CLIENT_SECRET,AZURE_TENANT_ID) - Managed Identity (when running on Azure VMs, App Service, etc.)
- Azure CLI (
az login) - Visual Studio Code (if you’ve signed in)
- Azure PowerShell (if you’ve signed in)
In 99% of cases, just run:
az loginIf you don’t have az CLI installed:
- macOS:
brew install azure-cli - Linux:
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash - Windows: Download from Azure CLI releases
Configuration
Section titled “Configuration”Add a storage: section to your .waza.yaml file in your project root:
storage: provider: azure-blob accountName: "myteamwaza" # Replace with your storage account name containerName: "waza-results" # Optional (default: waza-results) enabled: true # Optional (default: true when configured)Configuration fields:
| Field | Required | Description |
|---|---|---|
provider | Yes | Must be azure-blob |
accountName | Yes | Your Azure Storage account name (e.g., myteamwaza) |
containerName | No | Blob container name. Default: waza-results |
enabled | No | Toggle uploads on/off. Default: true when storage is configured |
Getting Started
Section titled “Getting Started”Step 1: Authenticate with Azure
Section titled “Step 1: Authenticate with Azure”az loginYou’ll be guided to a browser to sign in with your Azure account.
Verify you’re logged in:
az account showStep 2: Create a Storage Account (if needed)
Section titled “Step 2: Create a Storage Account (if needed)”If you don’t have a storage account yet:
# Create resource groupaz group create -n waza-eval -l eastus
# Create storage account (account name must be globally unique, 3-24 chars, lowercase)az storage account create \ -n myteamwaza \ -g waza-eval \ --sku Standard_LRS
# Create containeraz storage container create -n waza-results -a myteamwazaNote the storage account name — you’ll use it in .waza.yaml.
Step 3: Configure .waza.yaml
Section titled “Step 3: Configure .waza.yaml”cat > .waza.yaml <<EOFstorage: provider: azure-blob accountName: "myteamwaza" containerName: "waza-results" enabled: trueEOFReplace myteamwaza with your actual storage account name.
Step 4: Run Evaluations
Section titled “Step 4: Run Evaluations”waza run evals/my-skill/eval.yaml -vDuring the run, you’ll see:
📤 Uploading results to Azure Blob Storage...✅ Results uploaded: waza-results/code-explainer/20250226-143025-abc123.jsonUsing Results from Storage
Section titled “Using Results from Storage”List All Runs
Section titled “List All Runs”Browse all uploaded evaluation results:
waza results listOutput:
ID Skill Model Status Timestamp20250226-143025-abc123 code-explainer claude-sonnet-4.6 passed 2025-02-26 14:30:2520250226-135410-def456 code-explainer gpt-4o passed 2025-02-26 13:54:1020250226-124800-ghi789 math-solver claude-sonnet-4.6 failed 2025-02-26 12:48:00Show more results:
waza results list --limit 50Export as JSON:
waza results list --format json | jq .Compare Two Runs
Section titled “Compare Two Runs”Compare results side-by-side to see what changed:
waza results compare 20250226-143025-abc123 20250226-135410-def456Output shows:
- Task-level score changes
- Pass/fail differences
- Key metrics (tokens used, time taken, etc.)
Example:
Task Comparison━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━Task Score Δ Statusbasic-explanation -5 (-2%) ↓ regressededge-case-handling +10 (+5%) ↑ improvedperformance-check 0 (0%) ↔ unchanged
Aggregate Metrics━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━Pass rate: 85% → 90% (+5%)Avg completion time: 1.2s → 0.9s (-25%)Tokens used: 2,450 → 2,380 (-3%)View comparison as JSON:
waza results compare run-id-1 run-id-2 --format jsonFull Example Workflow
Section titled “Full Example Workflow”Here’s a complete example using Azure Storage for team evaluation:
# 1. Set up Azure (one-time)az loginaz group create -n waza-eval -l eastusaz storage account create -n myteamwaza -g waza-eval --sku Standard_LRSaz storage container create -n waza-results -a myteamwaza
# 2. Configure project (one-time)cat > .waza.yaml <<EOFstorage: provider: azure-blob accountName: "myteamwaza" containerName: "waza-results" enabled: trueEOF
# 3. Run evaluations (repeatable)waza run evals/code-explainer/eval.yaml -v -o results-$(date +%s).json
# 4. Browse team's resultswaza results list --limit 20
# 5. Compare your run with previous runwaza results compare 20250226-143025-abc123 20250226-135410-def456Troubleshooting
Section titled “Troubleshooting”❌ Error: “Subscription not found”
Section titled “❌ Error: “Subscription not found””Cause: az login didn’t work or you don’t have Azure access.
Fix:
# Clear cached credentialsaz logout
# Re-authenticateaz login
# Verify accessaz account show❌ Error: “Storage account not found”
Section titled “❌ Error: “Storage account not found””Cause: Account name in .waza.yaml doesn’t exist or has a typo.
Fix:
# List your storage accountsaz storage account list --query "[].name"
# Update .waza.yaml with the correct name❌ Error: “Container not found”
Section titled “❌ Error: “Container not found””Cause: The blob container doesn’t exist in the storage account.
Fix:
# Create the container (replace account name)az storage container create -n waza-results -a myteamwaza❌ Error: “Access Denied”
Section titled “❌ Error: “Access Denied””Cause: Your Azure user doesn’t have storage permissions.
Fix: Contact your Azure admin to grant you the Storage Blob Data Contributor role on the storage account.
❌ Results not uploading
Section titled “❌ Results not uploading”Fix: Verify storage is enabled and configured:
cat .waza.yaml | grep -A 5 "^storage:"Upload is automatic only if:
storage:section existsenabled: true(or omitted, since it defaults to true)- You’ve run
az login
❌ Where did my results go?
Section titled “❌ Where did my results go?”Results are stored in your Azure Storage account:
# View results in storageaz storage blob list -c waza-results -a myteamwaza
# Download a specific resultaz storage blob download \ -c waza-results \ -n code-explainer/20250226-143025-abc123.json \ -a myteamwaza \ -f result.jsonAdvanced
Section titled “Advanced”Disable uploads for a single run
Section titled “Disable uploads for a single run”# Create a temporary config with storage disabledcat > .waza-local.yaml <<EOFstorage: enabled: falseEOF
# Run with local-only results (doesn't upload)waza run eval.yaml -vUse a custom Azure credential
Section titled “Use a custom Azure credential”For CI/CD or service accounts, set environment variables:
export AZURE_CLIENT_ID="your-app-id"export AZURE_CLIENT_SECRET="your-secret"export AZURE_TENANT_ID="your-tenant-id"
waza run eval.yaml # Uses these credentialsNext Steps
Section titled “Next Steps”- CLI Reference — Complete
waza resultscommand docs - YAML Schema — Full storage configuration reference
- Dashboard Guide — Visualize results in the web dashboard