4b6817381b
CI (OpenClaw E2E) / openclaw test (push) Has been cancelled
CI / coverage-report (push) Has been cancelled
CI / test-kubernetes (push) Has been cancelled
CI / should-run-thorough (push) Has been cancelled
CI / test-thorough (cloudwatch-demo) (push) Has been cancelled
CI / test-thorough (flink-ecs) (push) Has been cancelled
CI / test-thorough (upstream-lambda) (push) Has been cancelled
CI / test-thorough (prefect-ecs-fargate) (push) Has been cancelled
Release / build-binaries (zip, opensre.exe, onefile, windows-latest, windows-x64) (push) Has been cancelled
Benchmark image — build + push to ECR (any adapter) / build + push (push) Has been cancelled
CI / quality (ubuntu-latest) (push) Has been cancelled
CI / test (tools-runtime) (push) Has been cancelled
CI / test (e2e-general) (push) Has been cancelled
CI / test (cli-runtime) (push) Has been cancelled
CI / test (e2e-provider-and-openclaw) (push) Has been cancelled
CI / test (integrations-and-misc) (push) Has been cancelled
Release / verify (push) Has been cancelled
Release / build-python-dist (push) Has been cancelled
Release / build-binaries (tar.gz, opensre, onedir, macos-15-intel, darwin-x64) (push) Has been cancelled
Release / build-binaries (tar.gz, opensre, onedir, macos-latest, darwin-arm64) (push) Has been cancelled
Release / build-binaries (tar.gz, opensre, onedir, ubuntu-22.04, linux-x64) (push) Has been cancelled
Release / publish-release (push) Has been cancelled
Release / publish-main-release (push) Has been cancelled
Interactive Shell Live (PR + post-merge) / turn-checks (no-LLM) (push) Has been cancelled
CodeQL / Analyze (python) (push) Has been cancelled
Interactive Shell Live (PR + post-merge) / turn-live shard ${{ matrix.shard_index }} (push) Has been cancelled
Release / prepare (push) Has been cancelled
Release / build-binaries (tar.gz, opensre, onedir, ubuntu-22.04-arm, linux-arm64) (push) Has been cancelled
Synthetic Deterministic Tests / Synthetic offline (deterministic) (push) Has been cancelled
102 lines
5.5 KiB
Markdown
102 lines
5.5 KiB
Markdown
# CloudOpsBench configs — layout
|
|
|
|
YAML configs that drive the bench framework. Each config names the
|
|
adapter (`benchmark: cloudopsbench`), the LLMs, the arms, the case
|
|
slice, and the budget. The framework reads the config, validates it
|
|
against the registered adapter's capabilities, and runs.
|
|
|
|
## Layout
|
|
|
|
```
|
|
configs/
|
|
├── README.md # this file
|
|
├── experiments/ # configs grouped by experiment
|
|
│ └── exp_db_evidence_pipeline/ # one folder per experiment
|
|
│ ├── README.md # experiment summary + history
|
|
│ ├── preregistration.yml # locked predictions / decision matrix
|
|
│ ├── smoke_db_pod_logs.yml # the first smoke
|
|
│ ├── smoke_perf_only.yml # diagnostic smoke
|
|
│ └── full_n.yml # the promotable full-N
|
|
├── preregistrations/ # standalone pre-regs
|
|
│ ├── cloudopsbench_smoke.yml # generic smoke pre-reg (placeholder for exploratory runs)
|
|
│ ├── cloudopsbench_v1.yml # baseline (cycle 1) pre-reg
|
|
│ └── exp_structured_outputs_v1.yml # legacy — to migrate into experiments/
|
|
└── (flat .yml files) # historical / baseline configs (see below)
|
|
```
|
|
|
|
## Per-experiment folders are the source of truth going forward
|
|
|
|
For any new experiment:
|
|
|
|
1. Create `configs/experiments/exp_<name>/`.
|
|
2. Put the pre-registration in that folder as `preregistration.yml`.
|
|
3. Put the run configs (smoke, full-N, ablations) alongside.
|
|
4. Add a `README.md` that includes:
|
|
- **What the experiment tests** — mechanisms by ID (M1, M2, …).
|
|
- **Locked decision matrix** — what counts as ship / roll-back.
|
|
- **Tracking issue** link.
|
|
- **Run ledger** — a table mapping each run to (a) the config that
|
|
produced it, (b) the image SHA, (c) the S3 run dir with raw
|
|
artifacts, (d) the headline metrics, (e) the report doc. Every
|
|
new dispatch adds a row. See
|
|
[`experiments/exp_db_evidence_pipeline/README.md`](experiments/exp_db_evidence_pipeline/README.md)
|
|
for the canonical shape.
|
|
|
|
The benefits:
|
|
|
|
- The file tree shows which configs belong together.
|
|
- `rm -rf exp_<name>/` cleanly removes the experiment + all metadata.
|
|
- A reviewer reads the folder's README + the pre-reg without hunting
|
|
through `preregistrations/` for the matching file.
|
|
- Pre-reg + run configs cannot drift in opposite directions if they
|
|
live in the same folder reviewed in the same PR.
|
|
- Config ↔ result mapping is explicit. Anyone asking "where did this
|
|
number come from?" follows the link from the report → the S3 run
|
|
dir → the config + image SHA → the pre-reg in the same folder.
|
|
|
|
## What's still in the flat directory
|
|
|
|
Older configs from the first ~6 weeks of bench work are still flat at
|
|
`configs/*.yml`. They map to historical experiments (some rejected, some
|
|
baseline) per
|
|
[`~/DevBox/tracer-cloud/opensre-notes/cloudopsbench-experiments-chain.md`](../../../../opensre-notes/cloudopsbench-experiments-chain.md).
|
|
Migrating each into an `experiments/exp_<name>/` folder is a lazy
|
|
follow-up — not blocking. Mapping below for future reference:
|
|
|
|
| Flat config | Likely experiment folder |
|
|
|---|---|
|
|
| `cloudopsbench_definitive_openai.yml`, `cloudopsbench_definitive_floor0_openai.yml`, `cloudopsbench_definitive_trimmed_prompt_openai.yml` | `exp_definitive_baseline` |
|
|
| `cloudopsbench_floorsweep_openai.yml`, `cloudopsbench_floor0_ablation_openai.yml`, `cloudopsbench_floor_ablation_v2_openai.yml` | `exp_floor_ablation` |
|
|
| `cloudopsbench_fixa_validation_openai.yml` | `exp_fixa_validation` (rejected) |
|
|
| `cloudopsbench_vocabpilot_openai.yml`, `cloudopsbench_vocabpilot_anthropic.yml` | `exp_vocabpilot` |
|
|
| `cloudopsbench_trimmed_prompt_openai.yml` | `exp_trimmed_prompt` |
|
|
| `cloudopsbench_structured_outputs_smoke_openai.yml`, `cloudopsbench_structured_outputs_smoke_100_openai.yml`, `cloudopsbench_structured_outputs_openai.yml` | `exp_structured_outputs` (rejected; pre-reg already exists) |
|
|
| `cloudopsbench_v1.yml`, `cloudopsbench_v1_openai.yml`, `cloudopsbench_v1_anthropic.yml`, `cloudopsbench_v1_deepseek.yml` | baselines (keep flat — they're the canonical cross-LLM baseline) |
|
|
| `cloudopsbench_smoke.yml` | baseline smoke (keep flat) |
|
|
| `cloudopsbench_control_openai.yml`, `cloudopsbench_postpatch_anthropic.yml` | one-off controls (archive candidate) |
|
|
|
|
## Naming conventions inside `experiments/exp_<name>/`
|
|
|
|
| Suffix | Meaning |
|
|
|---|---|
|
|
| `preregistration.yml` | The locked pre-reg (exactly one per experiment). |
|
|
| `smoke_<focus>.yml` | A small-N exploratory run (≤ 100 cases). The `<focus>` describes the slice (e.g. `perf_only`, `db_pod_logs`). |
|
|
| `full_n.yml` | The full-corpus run (n=452 for CloudOpsBench v1). Promotable. |
|
|
| `ablation_<arm>.yml` | An ablation that drops one mechanism. The `<arm>` names what was dropped (e.g. `layer1_only`). |
|
|
|
|
## What a config must contain
|
|
|
|
Mandatory fields (per `BenchmarkConfig` in
|
|
`tests/benchmarks/_framework/config.py`):
|
|
|
|
- `benchmark` — adapter name; resolved via the framework registry.
|
|
- `modes`, `llms`, `model_versions`, `runs_per_case`, `cost_budget_usd`, `seed`.
|
|
- `pre_registration_path` — relative path from repo root. For
|
|
experiments in this layout, point at `./preregistration.yml`.
|
|
- `output_dir`, `filters`, `report_formats`.
|
|
|
|
Adapter-specific knobs (`agent_variant`, `predictor_variant`,
|
|
`min_tool_calls`) are validated against the adapter's
|
|
`AdapterCapabilities`. A capability the adapter doesn't declare is
|
|
refused at lint time.
|