# cua-bench

Framework for benchmarking Computer-Use Agents with verifiable cross-platform environments.

**[Documentation](https://cua.ai/docs/cuabench)** - Installation, guides, and API reference.

## Running Tests

The test suite covers the core gym interface, worker system, and benchmark runners.

### Install dev dependencies

```bash
uv pip install -e ".[dev,browser,server,rl]"
```

Note: The `browser` extra installs Playwright for e2e tests with the simulated provider.

### Run all tests

```bash
uv run --with pytest pytest cua_bench/tests/ -v
```

### Run specific test modules

```bash
# Core gym interface (make, reset, step, evaluate)
uv run --with pytest pytest cua_bench/tests/test_gym_interface.py -v

# HTTP worker client (/reset, /step endpoints)
uv run --with pytest pytest cua_bench/tests/test_worker_client.py -v

# Worker server endpoints and action serialization
uv run --with pytest pytest cua_bench/tests/test_worker_server.py -v

# Benchmark runner functions
uv run --with pytest pytest cua_bench/tests/test_run_benchmark.py -v

# Worker manager (spawning/managing workers)
uv run --with pytest pytest cua_bench/tests/test_worker_manager.py -v

# Action parsing
uv run --with pytest pytest cua_bench/tests/test_actions.py -v
```

### Run tests with coverage

```bash
uv run --with pytest --with pytest-cov pytest cua_bench/tests/ -v --cov=cua_bench --cov-report=term-missing
```

## Test Structure

| Test Module              | What it Tests                                                     | Approach                                                                  |
| ------------------------ | ----------------------------------------------------------------- | ------------------------------------------------------------------------- |
| `test_gym_interface.py`  | Core Environment API: `make()`, `reset()`, `step()`, `evaluate()` | **E2E** - Real simulated (Playwright) environments                        |
| `test_worker_client.py`  | HTTP client for worker servers (`CBEnvWorkerClient`)              | **Mock server** - Uses `@patch("requests.post")` to mock HTTP responses   |
| `test_worker_server.py`  | FastAPI endpoints and action serialization                        | **Unit** - Action serialize/deserialize, request models, simple endpoints |
| `test_run_benchmark.py`  | `run_benchmark()`, `run_single_task()`, `run_interactive()`       | **E2E** - Real simulated (Playwright) environments                        |
| `test_worker_manager.py` | Workers + dataloader training loop                                | **E2E** - Real workers, real envs, mock model for actions                 |
| `test_actions.py`        | Action string parsing (`repr_to_action()`)                        | **Unit** - Pure function tests                                            |

### Test Approach Philosophy

- **E2E tests** use real simulated (Playwright) environments. The `simulated` provider is fast enough for testing.
- **Mock server tests** (`test_worker_client.py`) mock HTTP responses to test client logic in isolation.
- **Mock model** (`test_worker_manager.py`) uses a mock model that returns simple actions to test the dataloader training loop without requiring a real ML model.

## Infrastructure Benchmarking

Measure the throughput of the worker infrastructure:

```bash
uv run python -m cua_bench.scripts.benchmark_workers --num_workers 16 --num_steps 10
```

Options:

| Flag            | Default | Description                                    |
| --------------- | ------- | ---------------------------------------------- |
| `--num_workers` | 16      | Number of parallel workers                     |
| `--num_steps`   | 10      | Steps per worker                               |
| `--task_path`   | None    | Path to task directory (creates temp if empty) |

Output:

- Average reset time
- Average step time
- Average finish time
- Step throughput (steps/sec)
