Files
wehub-resource-sync 85742ab165
Deploy Documentation / deploy (push) Has been cancelled
CPU Test / Test (Utilities, legacy, Python 3.10) (push) Has been cancelled
CPU Test / Test (LLM proxy, stable, Python 3.11) (push) Has been cancelled
CPU Test / Test (Others, stable, Python 3.11) (push) Has been cancelled
CPU Test / Test (Store, stable, Python 3.11) (push) Has been cancelled
CPU Test / Test (Utilities, stable, Python 3.11) (push) Has been cancelled
CPU Test / Test (Weave, stable, Python 3.11) (push) Has been cancelled
CPU Test / Test (AgentOps, stable, Python 3.12) (push) Has been cancelled
CPU Test / Test (LLM proxy, stable, Python 3.12) (push) Has been cancelled
CPU Test / Test (Others, stable, Python 3.12) (push) Has been cancelled
CPU Test / Test (Weave, latest, Python 3.13) (push) Has been cancelled
Dashboard / Chromatic (push) Has been cancelled
CPU Test / Lint - fast (push) Has been cancelled
CPU Test / Lint - next (push) Has been cancelled
CPU Test / Lint - slow (push) Has been cancelled
CPU Test / Lint - JavaScript (push) Has been cancelled
CPU Test / Build documentation (push) Has been cancelled
CPU Test / Test (AgentOps, legacy, Python 3.10) (push) Has been cancelled
CPU Test / Test (LLM proxy, legacy, Python 3.10) (push) Has been cancelled
CPU Test / Test (Others, legacy, Python 3.10) (push) Has been cancelled
CPU Test / Test (Store, legacy, Python 3.10) (push) Has been cancelled
CPU Test / Test (Weave, legacy, Python 3.10) (push) Has been cancelled
CPU Test / Test (AgentOps, stable, Python 3.11) (push) Has been cancelled
CPU Test / Test (Store, stable, Python 3.12) (push) Has been cancelled
CPU Test / Test (Utilities, stable, Python 3.12) (push) Has been cancelled
CPU Test / Test (Weave, stable, Python 3.12) (push) Has been cancelled
CPU Test / Test (AgentOps, latest, Python 3.13) (push) Has been cancelled
CPU Test / Test (LLM proxy, latest, Python 3.13) (push) Has been cancelled
CPU Test / Test (Others, latest, Python 3.13) (push) Has been cancelled
CPU Test / Test (Store, latest, Python 3.13) (push) Has been cancelled
CPU Test / Test (Utilities, latest, Python 3.13) (push) Has been cancelled
CPU Test / Test (JavaScript) (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:44:17 +08:00
..

WebShop Example

This example demonstrates how to train a Vercel AI SDK agent on the WebShop benchmark using Agent Lightning with reinforcement learning (VERL/GRPO). The training pipeline uses a headless TypeScript runner that executes agent rollouts and reports traces to the Agent Lightning coordinator.

Requirements

  • Node.js 22+ and pnpm 10+
  • Docker (recommended) OR Python 3.8+ with Java 17+
  • GPU with 40GB+ VRAM (for VERL training)
  • HuggingFace token (HF_TOKEN)

Quick Start

The recommended way to run the training pipeline is with Docker, which starts all services with a single command.

cd examples/vercel_ai_webshop

# 1. Set up environment
make setup

# 2. Run GPU training (VERL manages the Qwen model via vLLM)
make train

This starts:

  • WebShop Server (:3000) - Flask shopping environment
  • Training Coordinator (:4747) - Agent Lightning Store + VERL
  • Headless Runners - Poll for tasks and execute agent rollouts

Note: The first run downloads ~100MB of dataset files. This takes about 2 minutes but only happens once.

Environment Variables

Variable Description Required
HF_TOKEN HuggingFace token for model access Yes
WANDB_API_KEY Weights & Biases API key for metrics No
WEBSHOP_URL WebShop server URL No (default: http://localhost:3000)

Included Files

File/Directory Description
agl/run_training.py Training coordinator entry point
agl/config.py VERL/GRPO configuration (model, epochs, batch sizes)
agl/tasks.py Task loading utilities (JSON, Parquet)
agl/generate_tasks.py Generate tasks from WebShop human instruction data
scripts/headless-runner.ts Headless rollout runner for training
scripts/run_stack.sh Stack orchestration script
src/agent/webshop-agent.ts ToolLoopAgent with Vercel AI SDK
src/environment/webshop-server.ts HTTP client for WebShop Flask server
src/utils/agentlightning/ Store client, OpenTelemetry tracing, ProxyLLM utilities
server/ Python WebShop backend
aml/ Azure ML configuration files

Running Examples

Training (Docker)

# Start GPU training - VERL manages vLLM, no API key needed
make train

# Run with more runners
N_RUNNERS=3 make train

# Check container status
make status

# Stop all services
make stop

Training (Manual)

If you prefer to run services manually without Docker:

Terminal 1 - WebShop Server:

cd examples/vercel_ai_webshop
docker compose up webshop --build

Terminal 2 - Training Coordinator:

cd examples/vercel_ai_webshop/agl
./setup.sh                    # First time only
source activate.sh
python run_training.py qwen   # Full training

Terminal 3+ - Headless Runners:

cd examples/vercel_ai_webshop
export AGENT_LIGHTNING_STORE_URL="http://localhost:4747"
pnpm headless -- --worker-id runner-1

Generating Tasks

By default, training uses sample_tasks.json with 8 tasks. For full training, generate tasks from the WebShop dataset:

# Generate all tasks (~12,000 tasks)
python agl/generate_tasks.py

# With custom options
python agl/generate_tasks.py --output agl/webshop_tasks.json --max-tasks 1000 --shuffle

# Train with generated tasks
python agl/run_training.py qwen --tasks-file agl/webshop_tasks.json

Running on Azure ML

The aml/ directory contains Azure ML configuration for running training jobs in the cloud. The job runs all services in a single container on a GPU node.

Prerequisites

  1. Install Azure CLI with ML extension:

    az extension add -n ml
    az login
    
  2. Set environment variables:

    export AZURE_SUBSCRIPTION_ID="your-subscription-id"
    export HF_TOKEN="your-huggingface-token"
    export WANDB_API_KEY="your-wandb-api-key"
    

Submit Job

# One-time setup (creates compute cluster)
make aml-setup

# Submit training job
make aml-train

# Stream logs
make aml-logs

# Check job status
make aml-status

Using az ml CLI directly

RG=<your-resource-group>
WS=<your-workspace>

# Create compute cluster (one-time)
az ml compute create -f aml/compute.yml -g $RG -w $WS

# Submit job
az ml job create -f aml/jobs/webshop-qwen.yml --stream \
  --set environment_variables.HF_TOKEN="$HF_TOKEN" \
  --set environment_variables.WANDB_API_KEY="$WANDB_API_KEY" \
  -g $RG -w $WS

# Stream logs
az ml job stream -n <job-name> -g $RG -w $WS

Customization

# Change number of runners
az ml job create -f aml/jobs/webshop-qwen.yml --stream \
  --set environment_variables.N_RUNNERS=4 \
  --set environment_variables.HF_TOKEN="$HF_TOKEN" \
  -g $RG -w $WS

# Use different compute
az ml compute create --name my-gpu-cluster --size Standard_NC48ads_A100_v4 \
  --min-instances 0 --max-instances 2 -g $RG -w $WS
az ml job create -f aml/jobs/webshop-qwen.yml --set compute=azureml:my-gpu-cluster ...

Troubleshooting

Issue Solution
connect ECONNREFUSED Wait for service healthcheck or run make status
Container Exited (1) Check logs: docker compose logs
Port 3000 in use Set WEBSHOP_URL=http://localhost:3001 in .env
WebShop data download fails Check network access; data downloads from Google Drive
AML compute not starting Check quota limits and VM availability in your region
vLLM/flash-attn build errors Ensure VLLM_USE_V1=1 is set; check CUDA 12.6+ support