426e9eeabd
Benchmark Bridge Tests / benchmark (bunx @biomejs/biome check packages/lifeops-bench/src, benchmark-lint) (push) Waiting to run
Benchmark Bridge Tests / benchmark (bunx vitest run --config packages/lifeops-bench/vitest.config.ts --root packages/lifeops-bench --passWithNoTests, benchmark-tests) (push) Waiting to run
Build Agent Image / build-and-push (push) Waiting to run
Chat shell gestures / Chat shell gesture + parity e2e (push) Waiting to run
ci / test (push) Waiting to run
ci / lint-and-format (push) Waiting to run
ci / build (push) Waiting to run
ci / dev-startup (push) Waiting to run
Cloud Gateway Discord / Test (push) Waiting to run
Cloud Gateway Webhook / Test (push) Waiting to run
Cloud Tests / lint-and-types (push) Waiting to run
Cloud Tests / unit-tests (push) Waiting to run
Cloud Tests / integration-tests (push) Waiting to run
Cloud Tests / e2e-tests (push) Blocked by required conditions
CodeQL Advanced / Analyze (javascript-typescript) (push) Waiting to run
Deploy Apps Worker (Product 2) / Determine environment (push) Waiting to run
Deploy Apps Worker (Product 2) / Deploy apps worker to apps-control host (${{ needs.determine-env.outputs.environment }}) (push) Blocked by required conditions
Deploy Eliza Provisioning Worker / Determine environment (push) Waiting to run
Deploy Eliza Provisioning Worker / Deploy worker to Hetzner host (${{ needs.determine-env.outputs.environment }} @ ${{ needs.determine-env.outputs.deployment_sha }}) (push) Blocked by required conditions
Dev Smoke / Classify changed paths (push) Waiting to run
Dev Smoke / bun run dev onboarding chat (push) Blocked by required conditions
Dev Smoke / Vite HMR dependency-level smoke (push) Blocked by required conditions
Electrobun Submodule Guard / electrobun gitlink is fetchable (push) Waiting to run
gitleaks / gitleaks (push) Waiting to run
Markdown Links / Relative Markdown Links (push) Waiting to run
Publish @elizaos/example-code / check_npm (push) Waiting to run
Publish @elizaos/example-code / publish_npm (push) Blocked by required conditions
Publish @elizaos/plugin-elizacloud / verify_version (push) Waiting to run
Publish @elizaos/plugin-elizacloud / publish_npm (push) Blocked by required conditions
Quality (Extended) / Homepage Build (PR smoke) (push) Waiting to run
Quality (Extended) / Comment-only diff guard (push) Waiting to run
Quality (Extended) / Format + Type Safety Ratchet (push) Waiting to run
Quality (Extended) / Develop Gate (secret scan + UI determinism) (push) Waiting to run
Quality (Extended) / Develop Gate (lint) (push) Waiting to run
Sandbox Live Smoke / Sandbox live smoke (push) Waiting to run
Snap Build & Test / Build Snap (amd64) (push) Waiting to run
Snap Build & Test / Build Snap (arm64) (push) Waiting to run
supply-chain / sbom (push) Waiting to run
supply-chain / vulnerability-scan (push) Waiting to run
Build, Push & Deploy to Phala Cloud / build-and-push (push) Waiting to run
Test Packaging / Validate Packaging Configs (push) Waiting to run
Test Packaging / PyPI on Python ${{ matrix.python }} (push) Waiting to run
Test Packaging / Pack & Test JS Tarballs (push) Waiting to run
Test Packaging / elizaos CLI global-install smoke (node + bun) (push) Waiting to run
UI Fixture E2E / ui-fixture-e2e (push) Waiting to run
UI Fixture E2E / fixture-e2e (push) Waiting to run
UI Story Gate / story-gate (push) Waiting to run
vault-ci / test (macos-latest) (push) Waiting to run
vault-ci / test (ubuntu-latest) (push) Waiting to run
vault-ci / test (windows-latest) (push) Waiting to run
vault-ci / app-core wiring tests (push) Waiting to run
verify-patches / verify patches/CHECKSUMS.sha256 (push) Waiting to run
Voice Benchmark Smoke / voice-emotion fixture smoke (push) Waiting to run
Voice Benchmark Smoke / voiceagentbench fixture smoke (push) Waiting to run
Voice Benchmark Smoke / voicebench-quality unit smoke (push) Waiting to run
Voice Benchmark Smoke / voicebench TypeScript unit (no audio) (push) Waiting to run
Voice Benchmark Smoke / voice bench smoke summary (push) Blocked by required conditions
Windows CI / windows ([bun run --cwd packages/app-core test bun run --cwd packages/elizaos test bun run --cwd packages/cloud/shared test], app-and-cli) (push) Waiting to run
Windows CI / windows ([bun run --cwd packages/scenario-runner test bun run --cwd packages/vault test bun run --cwd packages/security test bun run --cwd plugins/plugin-coding-tools test], framework-packages) (push) Waiting to run
Windows CI / windows ([bun run --cwd plugins/plugin-elizacloud test bun run --cwd plugins/plugin-discord test bun run --cwd plugins/plugin-anthropic test bun run --cwd plugins/plugin-openai test bun run --cwd plugins/plugin-app-control test bun run --cwd plugins/pl… (push) Waiting to run
Windows CI / windows ([node packages/scripts/run-turbo.mjs run build --filter=@elizaos/core --filter=@elizaos/shared --filter=@elizaos/agent --concurrency=4 node packages/scripts/run-bash-linux-only.mjs scripts/verify-riscv64-buildpaths.sh node packages/scripts/run… (push) Waiting to run
Windows CI / windows ([node packages/scripts/run-turbo.mjs run typecheck --filter=@elizaos/core --filter=@elizaos/shared --filter=@elizaos/cloud-shared --concurrency=4 bun run --cwd packages/core test bun run --cwd packages/shared test], core-runtime, 75) (push) Waiting to run
Test Packaging / Build & Test PyPI Package (push) Waiting to run
Voice Workbench / headless workbench (mocked backends) (push) Has been cancelled
Voice Workbench / real acoustic lane (nightly, provisioned only) (push) Has been cancelled
761 lines
35 KiB
Markdown
761 lines
35 KiB
Markdown
# ElizaOS Benchmark Orchestrator
|
|
|
|
Run any integrated benchmark (or all benchmarks), store normalized results in
|
|
SQLite/JSON, and inspect history in the browser viewer.
|
|
|
|
Use the workspace Python (`/Users/shawwalters/eliza-workspace/.venv/bin/python`)
|
|
for consistent dependency versions across benchmark subprocesses.
|
|
|
|
## Paths
|
|
|
|
- Results DB: `benchmarks/benchmark_results/orchestrator.sqlite`
|
|
- Viewer dataset: `benchmarks/benchmark_results/viewer_data.json`
|
|
- Static viewer UI: `benchmarks/viewer/index.html`
|
|
|
|
## List integrated benchmarks
|
|
|
|
```bash
|
|
/opt/miniconda3/bin/python -m benchmarks.orchestrator list-benchmarks
|
|
```
|
|
|
|
This verifies adapter coverage for all benchmark directories under `benchmarks/`.
|
|
|
|
## Generate the static operator inventory
|
|
|
|
```bash
|
|
/opt/miniconda3/bin/python -m benchmarks.orchestrator inventory --format markdown
|
|
/opt/miniconda3/bin/python -m benchmarks.orchestrator inventory --format json
|
|
```
|
|
|
|
`inventory` emits the registry/adapter checklist without running benchmarks:
|
|
registry entries, discovered adapters, directory coverage, harness compatibility,
|
|
required environment variables, result locators, and trajectory expectations. It
|
|
exits with code `2` when static gaps exist so the drift is visible before a live
|
|
`run --all` or `validate-matrix` pass.
|
|
|
|
## Run benchmarks idempotently
|
|
|
|
Run one benchmark:
|
|
|
|
```bash
|
|
/opt/miniconda3/bin/python -m benchmarks.orchestrator run \
|
|
--benchmarks solana \
|
|
--provider groq \
|
|
--model openai/gpt-oss-120b
|
|
```
|
|
|
|
Run all benchmarks:
|
|
|
|
```bash
|
|
/opt/miniconda3/bin/python -m benchmarks.orchestrator run \
|
|
--all \
|
|
--provider groq \
|
|
--model openai/gpt-oss-120b
|
|
```
|
|
|
|
Idempotent behavior:
|
|
|
|
- Existing successful signatures are skipped automatically.
|
|
- `--rerun-failed` reruns only signatures whose latest run failed.
|
|
- `--force` always creates a fresh run.
|
|
|
|
Examples:
|
|
|
|
```bash
|
|
# rerun only failed signatures
|
|
/opt/miniconda3/bin/python -m benchmarks.orchestrator run --all --rerun-failed --provider groq --model openai/gpt-oss-120b
|
|
|
|
# force fresh runs
|
|
/opt/miniconda3/bin/python -m benchmarks.orchestrator run --all --force --provider groq --model openai/gpt-oss-120b
|
|
```
|
|
|
|
## Extra benchmark config
|
|
|
|
Use `--extra` with a JSON object for benchmark-specific knobs.
|
|
Adapter defaults are applied first, then `--extra` overrides are merged on top.
|
|
This keeps `run --all` idempotent with stable per-benchmark baseline settings
|
|
while still letting you override knobs when needed.
|
|
|
|
```bash
|
|
/opt/miniconda3/bin/python -m benchmarks.orchestrator run \
|
|
--benchmarks osworld \
|
|
--provider groq \
|
|
--model openai/gpt-oss-120b \
|
|
--rerun-failed \
|
|
--extra '{"max_tasks":1,"headless":true,"vm_ready_timeout_seconds":21600}'
|
|
```
|
|
|
|
`--extra` also supports a `per_benchmark` object for benchmark-specific overrides
|
|
in one `--all` run:
|
|
|
|
```bash
|
|
/Users/shawwalters/eliza-workspace/.venv/bin/python -m benchmarks.orchestrator run \
|
|
--all \
|
|
--agent eliza \
|
|
--provider cerebras \
|
|
--model gemma-4-31b \
|
|
--extra "$(cat benchmarks/orchestrator/profiles/sample10.json)"
|
|
```
|
|
|
|
Profile included in repo:
|
|
|
|
- `benchmarks/orchestrator/profiles/sample10.json` - roughly 10% sampled run
|
|
settings (where the benchmark supports sampling).
|
|
- `benchmarks/orchestrator/profiles/orchestrator_subagents.json` - orchestrator
|
|
matrix profile for `swe_bench_orchestrated` and `orchestrator_lifecycle`.
|
|
|
|
Model profiles included in repo:
|
|
|
|
- `benchmarks/orchestrator/profiles/cerebras-gemma-4-31b.json` (default eval model)
|
|
- `benchmarks/orchestrator/profiles/cerebras-gpt-oss-120b.json` (legacy eval model)
|
|
- `benchmarks/orchestrator/profiles/gpt-5.5.json`
|
|
- `benchmarks/orchestrator/profiles/claude-sonnet.json`
|
|
- `benchmarks/orchestrator/profiles/claude-opus.json`
|
|
|
|
Use them with `--model-profile`; benchmark `--extra` can still be combined
|
|
and overrides any profile `extra` keys:
|
|
|
|
```bash
|
|
/opt/miniconda3/bin/python -m benchmarks.orchestrator run \
|
|
--benchmarks bfcl \
|
|
--agent eliza \
|
|
--model-profile cerebras-gemma-4-31b \
|
|
--extra '{"per_benchmark":{"bfcl":{"sample":10}}}'
|
|
```
|
|
|
|
For `cerebras-gemma-4-31b`, the profile pins `reasoning_effort=none`
|
|
(gemma keeps reasoning off for deterministic, fast eval turns); the legacy
|
|
`cerebras-gpt-oss-120b` profile pins `reasoning_effort=low`.
|
|
The orchestrator exports that value as both `OPENAI_REASONING_EFFORT` and
|
|
`CEREBRAS_REASONING_EFFORT` for subprocesses, so OpenAI-compatible Eliza
|
|
runtime paths and direct Cerebras benchmark clients use the same setting.
|
|
Keep `CEREBRAS_API_KEY` in the shell environment or secret manager only; do
|
|
not commit it to a profile or `.env` file.
|
|
|
|
## Orchestrated Subagent Tracks
|
|
|
|
New orchestrator-centric benchmark IDs:
|
|
|
|
- `swe_bench_orchestrated`
|
|
- `orchestrator_lifecycle`
|
|
- `eliza_replay`
|
|
|
|
Code matrix example:
|
|
|
|
```bash
|
|
/opt/miniconda3/bin/python -m benchmarks.orchestrator run \
|
|
--benchmarks swe_bench_orchestrated \
|
|
--provider anthropic \
|
|
--model claude-sonnet-4-6 \
|
|
--extra '{"per_benchmark":{"swe_bench_orchestrated":{"matrix":true,"max_instances":3,"no_docker":true,"strict_capabilities":true}}}'
|
|
```
|
|
|
|
Lifecycle suite example:
|
|
|
|
```bash
|
|
/opt/miniconda3/bin/python -m benchmarks.orchestrator run \
|
|
--benchmarks orchestrator_lifecycle \
|
|
--provider openai \
|
|
--model gpt-4o \
|
|
--extra '{"per_benchmark":{"orchestrator_lifecycle":{"max_scenarios":12,"strict":true}}}'
|
|
```
|
|
|
|
Replay scoring example (from normalized Eliza capture artifacts):
|
|
|
|
```bash
|
|
/opt/miniconda3/bin/python -m benchmarks.orchestrator run \
|
|
--benchmarks eliza_replay \
|
|
--provider groq \
|
|
--model openai/gpt-oss-120b \
|
|
--extra '{"per_benchmark":{"eliza_replay":{"capture_path":"/path/to/replays","capture_glob":"*.replay.json"}}}'
|
|
```
|
|
|
|
`capture_path` is required and must point to a file or directory of normalized `*.replay.json` artifacts.
|
|
|
|
## Code Agent Matrix
|
|
|
|
Worker lane for comparing real coding agents across coding, terminal, browser,
|
|
and computer-use benchmarks. The default included matrix is sourced from
|
|
`benchmarks/orchestrator/code_agent_coverage.py` and currently covers
|
|
`swe_bench`, `terminal_bench`, `mind2web`, `visualwebbench`, `webshop`,
|
|
`osworld`, `swe_bench_multilingual`, `nl2repo`, `mint`, `app_eval_coding`,
|
|
`standard_humaneval`, `openclaw_benchmark`, `claw_eval`,
|
|
`qwen_claw_bench`, `clawbench`, and `agentbench`
|
|
for both `elizaos` and `opencode`.
|
|
|
|
```bash
|
|
cd /Users/shawwalters/milaidy/eliza
|
|
PYTHONPATH=packages python -m benchmarks.orchestrator.code_agent_matrix \
|
|
--benchmarks swe_bench,terminal_bench,mind2web,visualwebbench,webshop,osworld,swe_bench_multilingual,nl2repo,mint,app_eval_coding,standard_humaneval,openclaw_benchmark,claw_eval,qwen_claw_bench,clawbench,agentbench \
|
|
--adapters elizaos,opencode \
|
|
--provider cerebras \
|
|
--model gpt-oss-120b \
|
|
--max-tasks 1 \
|
|
--no-docker
|
|
```
|
|
|
|
The matrix writes one directory per `(benchmark, adapter)` cell under
|
|
`benchmark_results/code-agent-matrix/<timestamp>/`, preserving:
|
|
|
|
- `command.json` with the redacted command/environment metadata.
|
|
- `stdout.log` and `stderr.log` with secret-looking env values redacted.
|
|
- benchmark output JSON under each cell's `output/` directory.
|
|
- requested trajectory output under each cell's `trajectories/` directory.
|
|
- top-level `summary.json` and `summary.md` with failure buckets, normalized
|
|
right/wrong/total/accuracy, input/output/cached token metrics, LLM call
|
|
counts, run configuration metadata, an ElizaOS-vs-OpenCode head-to-head
|
|
status per benchmark with target/baseline input, output, total, cached
|
|
percentage, and LLM-call counts, and an explicit token-evidence section that
|
|
flags cells where no usable LLM/token telemetry was captured. Reports also
|
|
include a combined report gate for coverage, comparability, and required
|
|
stats; a benchmark-coverage section showing selected included benchmarks and
|
|
related deferred benchmarks; and an improvement queue pointing to logs,
|
|
results, and trajectory directories for inferior, weak, or missing
|
|
comparisons. `weak` means both adapters
|
|
produced measured zero accuracy, so the result is not accepted as meaningful
|
|
comparability. Queue entries include compact trajectory review briefs with
|
|
turn/token counts, cached-token percentage, latency, repeated-prefix signals,
|
|
and deterministic diagnosis strings that call out missing evidence, accuracy
|
|
loss, failure classes, extra token/call cost, or cache regressions. They also
|
|
include rerun command templates for targeted follow-up runs. Generated rerun
|
|
templates preserve the original
|
|
provider, model, task limit, timeout, run root, latest publish directory,
|
|
smoke/dry-run mode, Docker mode, and comparable/token/stat enforcement flags
|
|
while intentionally omitting secret env values and coverage enforcement. Coverage
|
|
enforcement is reserved for full release-style matrix reports, not targeted
|
|
reruns. `summary.json` also includes `report_rows`, a stable flat row set
|
|
for longitudinal tracking with right/wrong, accuracy, token, cached-token,
|
|
LLM-call, gate, release-readiness, blocking-requirement, and unblock-command
|
|
fields per benchmark. The same rows are written as
|
|
`report-rows.jsonl` and `report-rows.csv` beside the summary.
|
|
|
|
Add `--publish-latest-dir` to materialize the ElizaOS-vs-OpenCode report rows
|
|
as latest-style JSON artifacts:
|
|
|
|
```bash
|
|
PYTHONPATH=packages python -m benchmarks.orchestrator.code_agent_matrix \
|
|
--benchmarks swe_bench,terminal_bench,mind2web,visualwebbench,webshop,osworld,swe_bench_multilingual,nl2repo,mint,app_eval_coding,standard_humaneval,openclaw_benchmark,claw_eval,qwen_claw_bench,clawbench,agentbench \
|
|
--adapters elizaos,opencode \
|
|
--provider cerebras \
|
|
--model gpt-oss-120b \
|
|
--max-tasks 1 \
|
|
--force \
|
|
--enforce-live-report \
|
|
--enforce-trajectory-reviews \
|
|
--enforce-report \
|
|
--enforce-coverage \
|
|
--enforce-comparable \
|
|
--enforce-required-stats \
|
|
--enforce-token-evidence \
|
|
--enforce-efficiency \
|
|
--publish-latest-dir packages/benchmarks/benchmark_results/latest-code-agent
|
|
```
|
|
|
|
The publisher writes one `<benchmark>__elizaos_vs_opencode.json` row per
|
|
comparison plus an `index.json` with a code-agent `matrix_contract`. Generated
|
|
follow-up commands preserve `--publish-latest-dir`, so reruns and release
|
|
unblock commands keep refreshing the same latest artifact set. Each publish
|
|
also prunes stale `*__elizaos_vs_opencode.json` rows from that directory while
|
|
leaving unrelated latest rows alone; `index.json` records the count under
|
|
`code_agent_matrix.stale_row_count`.
|
|
|
|
Code-agent latest rows are publishable only when they include live-mode
|
|
execution, command/result/trajectory provenance for both adapters,
|
|
right/wrong/total outcomes, input/output/total tokens, cached-token percentage,
|
|
LLM-call counts, accuracy/input/output/total-token/call/cache deltas, and a
|
|
`comparison_status` of `superior` or `comparable`. The publisher and validators
|
|
also require that trajectory telemetry backs the reported token, cache, and
|
|
LLM-call fields; that deltas equal target minus baseline; that `score`,
|
|
accuracy, and right/wrong/total fields agree; that `comparison_status` matches
|
|
the measured accuracy relationship; and that ElizaOS has no token/call/cache
|
|
efficiency regression versus OpenCode. Rows that fail that contract are still
|
|
written for review, but their `status` is `failed`, their row and `index.json`
|
|
cell include `failure_reason`/`failure_reasons`, and the code-agent
|
|
`matrix_contract.status` becomes `incomplete`.
|
|
|
|
Related benchmarks that are not yet release-comparable in this matrix are
|
|
tracked as deferred coverage rather than ignored. Current deferred entries
|
|
include `swe_bench_pro`, `qwen_web_bench`, and `vision_language`.
|
|
`swe_bench_pro` has an explicit patch-generation wrapper for the vendored
|
|
public split, matched ElizaOS/OpenCode command templates, patch normalization,
|
|
and token/call aggregation, but it remains deferred until non-mock public-split
|
|
patch generation is validated against local Docker or Modal scoring.
|
|
`qwen_web_bench` remains deferred until the public upstream runner and dataset
|
|
ship. `openclaw_benchmark` is included through the local
|
|
execution runner's setup/implementation/testing scenarios with shared-sandbox
|
|
tool execution and deterministic rubric scoring. `clawbench` is included
|
|
through its deterministic scenario fixtures and non-LLM rubric scorer, with
|
|
both adapters routed through the same Eliza benchmark bridge. `agentbench` is
|
|
included as an OS/WebShop/Mind2Web-related fixture slice over AgentBench's
|
|
environment adapters, again using the same ElizaOS/OpenCode bridge for live
|
|
agent turns. `qwen_claw_bench` is included as the deterministic automated
|
|
workspace task from QwenClawBench, using the benchmark's embedded Python
|
|
grader while leaving hybrid and LLM-judge tasks deferred until judge
|
|
dependencies are stable. `vision_language` tracks the eliza-1
|
|
vision-CUA/plugin-computeruse harness and now has explicit
|
|
ElizaOS/OpenCode harness labels in the vision-language runner, but remains
|
|
deferred until those labels have non-stub right/wrong/token telemetry. These
|
|
entries are tracked so front-end code-generation, workspace, terminal,
|
|
browser, and computer-use coverage is not silently omitted from the code-agent
|
|
roadmap. `nl2repo` is included in the release matrix. Smoke mode uses canonical
|
|
task metadata without Docker scoring. Live generation uses the repo-native
|
|
helper by default; set
|
|
`NL2REPO_AGENT_COMMAND_TEMPLATE` or
|
|
`NL2REPO_AGENT_COMMAND_TEMPLATE_<ADAPTER>` to override it. Set
|
|
`NL2REPO_DISABLE_BUILTIN_AGENT_COMMAND=1` only when intentionally validating
|
|
external command-template wiring. Live release-comparable scoring also requires
|
|
Docker so the upstream per-task evaluator image can run.
|
|
|
|
`swe_bench_pro` can be selected explicitly through the matrix even while it is
|
|
deferred from release readiness. The wrapper loads the vendored public JSONL,
|
|
builds one workspace per instance, drives the selected adapter through a
|
|
matched patch-generation command template, writes `.pred` files plus
|
|
`patches.json`, and normalizes generated/evaluated patches into right/wrong,
|
|
token, cached-token, and LLM-call fields. Smoke mode is offline. Live
|
|
release-comparable scoring requires local Docker or Modal evaluator validation
|
|
before this benchmark can move from deferred to included. Set
|
|
`SWE_BENCH_PRO_EVALUATOR_BACKEND=modal` to use Modal instead of the default
|
|
local-Docker evaluator, and `SWE_BENCH_PRO_EVAL_NUM_WORKERS=<n>` to tune
|
|
upstream evaluator parallelism.
|
|
|
|
`mint` is included as a coding slice rather than the full benchmark. The matrix
|
|
selects the MINT HumanEval/MBPP code-generation subtasks, preserves the
|
|
multi-turn tool/feedback loop, and reports turn-k success in addition to the
|
|
normalized right/wrong/total fields. Smoke mode uses the offline HumanEval
|
|
fixture; live mode lazy-fetches upstream coding samples unless a cache or data
|
|
path is already populated.
|
|
|
|
`app_eval_coding` is also included in the release matrix. It materializes the
|
|
App Eval coding task workspaces, runs each adapter through a matched command
|
|
template, then scores the declared file, command-output, and test assertions.
|
|
Live generation uses the repo-native helper by default; set
|
|
`APP_EVAL_CODING_AGENT_COMMAND_TEMPLATE` or
|
|
`APP_EVAL_CODING_AGENT_COMMAND_TEMPLATE_<ADAPTER>` to override it. Set
|
|
`APP_EVAL_CODING_DISABLE_BUILTIN_AGENT_COMMAND=1` only when intentionally
|
|
validating external command-template wiring.
|
|
|
|
`openclaw_benchmark` is included through the local OpenClaw execution runner.
|
|
The matrix runs the setup, implementation, and testing scenarios in dependency
|
|
order with one shared sandbox so downstream tasks can use prerequisite files,
|
|
then normalizes rubric scores into right/wrong/total fields. Smoke mode uses a
|
|
deterministic offline setup fixture; live mode routes each LLM turn through the
|
|
ElizaOS/OpenCode bridge and writes trajectory/token telemetry beside the cell
|
|
artifacts.
|
|
|
|
`claw_eval` is included as a deterministic coding slice over Claw-Eval tasks
|
|
whose YAML scoring components do not require an LLM judge. The wrapper runs the
|
|
same CUDA-kernel-review and JavaScript async-tracing tasks for both adapters,
|
|
scores keyword/tool-use components from the task definitions, and preserves the
|
|
full hybrid/browser/multimodal Claw-Eval expansion path as future work.
|
|
|
|
`clawbench` is included through the local single-turn scenario runner. The
|
|
matrix selects the same fixture-backed scenarios for both adapters, scores
|
|
response/tool-call behavior with the deterministic ClawBench rubric, and
|
|
normalizes fractional rubric scores into right/wrong/total fields.
|
|
|
|
`agentbench` is included as a deterministic OS/WebShop/Mind2Web-related slice.
|
|
The wrapper runs compact AgentBench fixture tasks for operating-system,
|
|
shopping, and browser-action environments, preserving AgentBench's environment
|
|
step loop while normalizing pass/fail outcomes into the matrix report rows.
|
|
|
|
`qwen_claw_bench` is included as the QwenClawBench automated workspace slice.
|
|
The wrapper selects the non-LLM-judged task, prepares its Downloads workspace,
|
|
runs each adapter through the same command-template helper, and invokes the
|
|
benchmark's embedded Python grader. Live generation uses the repo-native helper
|
|
by default; set `QWEN_CLAW_BENCH_AGENT_COMMAND_TEMPLATE` or
|
|
`QWEN_CLAW_BENCH_AGENT_COMMAND_TEMPLATE_<ADAPTER>` to override it.
|
|
|
|
Smoke mode uses each benchmark's cheap offline fixtures where available:
|
|
Mind2Web `--sample --mock`, VisualWebBench `--use-sample-tasks --mock`,
|
|
WebShop `--use-sample-tasks --mock`, and OSWorld `--dry_run`. Real WebShop
|
|
runs add `--bridge`; real OSWorld runs do not add `--dry_run`, so they require
|
|
the desktop/VM capacity expected by OSWorld.
|
|
|
|
Resume is default: cells with `cell-result.json` are reused. Add `--force` to
|
|
rerun, or summarize an interrupted/keyed run without executing anything:
|
|
|
|
```bash
|
|
cd /Users/shawwalters/milaidy/eliza/packages
|
|
python -m benchmarks.orchestrator.code_agent_matrix \
|
|
--summarize /path/to/benchmark_results/code-agent-matrix/20260516T120000Z
|
|
```
|
|
|
|
To rerun only queued comparisons from a previous report, point at its
|
|
`summary.json`. This is useful after fixing ElizaOS behavior on one inferior
|
|
benchmark because it avoids rebuilding the full matrix:
|
|
|
|
```bash
|
|
cd /Users/shawwalters/milaidy/eliza/packages
|
|
python -m benchmarks.orchestrator.code_agent_matrix \
|
|
--rerun-queue /path/to/benchmark_results/code-agent-matrix/20260516T120000Z/summary.json \
|
|
--compare-summary /path/to/benchmark_results/code-agent-matrix/20260516T120000Z/summary.json \
|
|
--queue-priorities p0 \
|
|
--force
|
|
```
|
|
|
|
Use `--compare-summary` on any full or queued rerun to add a previous-summary
|
|
comparison table showing ElizaOS accuracy, token, cached-token, and LLM-call
|
|
deltas by benchmark.
|
|
|
|
When ElizaOS is accuracy-comparable but less efficient, `summary.json` includes
|
|
an `efficiency_queue` and the markdown includes an Efficiency Queue section.
|
|
This flags higher total-token use, extra LLM calls, and lower cached-token
|
|
percentage versus OpenCode so optimization work is not hidden by a passing
|
|
accuracy gate.
|
|
|
|
Use `--enforce-comparable` in CI or release gates to exit nonzero unless every
|
|
selected benchmark is `superior` or `comparable` for ElizaOS against OpenCode.
|
|
Inferior, weak, and missing comparisons block the gate. The generated
|
|
`summary.json` always includes `benchmark_gate` with the same blocking
|
|
benchmark list.
|
|
|
|
Use `--enforce-coverage` when the report must cover every benchmark currently
|
|
marked included in `code_agent_coverage.py`. This is separate from queued or
|
|
single-benchmark reruns: partial reruns can still produce useful comparison
|
|
and trajectory evidence, while full release reports can require the coverage
|
|
gate.
|
|
|
|
Use `--enforce-token-evidence` for live runs where token telemetry is required.
|
|
It exits nonzero unless every selected cell produced usable LLM-call, token
|
|
usage, and cached-token percentage evidence. This should usually be omitted for
|
|
no-LLM smoke fixtures.
|
|
|
|
Use `--enforce-required-stats` when a run should fail unless the report has
|
|
all stats required for the head-to-head benchmark claim. It checks measured
|
|
right/wrong/total outcome evidence for every selected benchmark and requires
|
|
token evidence for live runs. Smoke, dry-run, and summarize reports do not
|
|
require token evidence unless `--enforce-token-evidence` is also set.
|
|
|
|
Use `--enforce-efficiency` when a run should fail if ElizaOS is less efficient
|
|
than OpenCode on total tokens, LLM-call count, or cached-token percentage.
|
|
When combined with `--enforce-report`, the combined report gate includes the
|
|
efficiency gate.
|
|
|
|
Use `--enforce-no-regression` with `--compare-summary` when a follow-up report
|
|
must not reduce ElizaOS target accuracy versus the previous report. When
|
|
combined with `--enforce-report`, the combined report gate includes the
|
|
no-regression gate.
|
|
|
|
Use `--quality-guardrail-summary` to attach the JSON output from
|
|
`PYTHONPATH=packages python -m benchmarks.orchestrator validate-latest-readiness --skip-runtime-gates --exclude-benchmarks <code-agent-benchmark-csv> --json`
|
|
for the broader benchmark matrix. This validates the latest published
|
|
non-code-quality evidence without circularly re-validating the code-agent
|
|
benchmarks under release, and without letting host-specific runtime probes,
|
|
such as Docker availability for code benchmarks, block the guardrail artifact.
|
|
Add `--enforce-quality-guardrail` when a code-agent report must fail unless
|
|
that broader readiness report is present and clean. When combined with
|
|
`--enforce-report`, the combined report gate includes the quality guardrail.
|
|
Preflight reports include selected-scope
|
|
`live_evidence`, runnable-deferred `deferred_live_evidence`, full-scope
|
|
`release_preflight`, and full-scope `release_comparable` commands. The live and
|
|
release-comparable commands carry `--enforce-token-evidence`; the release and
|
|
deferred-live commands always use the ElizaOS/OpenCode adapter pair so a
|
|
single-adapter preflight cannot accidentally become release evidence. The
|
|
release commands also carry
|
|
`--quality-guardrail-summary /path/to/non-code-quality-guardrail.json` as an
|
|
explicit placeholder because final release readiness cannot pass without this
|
|
non-code guardrail evidence.
|
|
|
|
Use `--enforce-trajectory-reviews` when a run should fail unless every selected
|
|
cell has reviewable trajectory files, turns, and cached-token telemetry. When
|
|
combined with `--enforce-report`, the combined report gate includes the
|
|
trajectory review gate.
|
|
|
|
Use `--enforce-live-report` when smoke, dry-run, or summarize artifacts must
|
|
not be accepted as benchmark evidence. This fails unless the matrix ran in
|
|
live mode. When combined with `--enforce-report`, the combined report gate
|
|
includes the live-report gate.
|
|
|
|
Use `--enforce-report` for a single release-readiness exit code over the
|
|
combined report gate. It fails unless coverage, comparability, and required
|
|
stats all pass for the generated report, plus efficiency when
|
|
`--enforce-efficiency` is set and no-regression when `--enforce-no-regression`
|
|
is set, quality readiness when `--enforce-quality-guardrail` is set,
|
|
trajectory review coverage when `--enforce-trajectory-reviews` is set, and
|
|
live execution when `--enforce-live-report` is set. Use
|
|
`--enforce-release-readiness` when automation should fail unless the final
|
|
release-readiness checklist passes, including live execution, full included
|
|
coverage, no remaining deferred related code/browser/terminal/computer-use
|
|
benchmarks, comparable-or-better outcomes, right/wrong and token telemetry,
|
|
trajectory reviews, efficiency, and the broader non-code quality guardrail.
|
|
|
|
The generated `summary.json` includes an `exit_codes` map for automation plus
|
|
the selected run result as `exit_code` and `exit_reason`. The rendered
|
|
`summary.md` mirrors those selected fields in a `Run Result` section, so humans
|
|
and automation can see the enforced gate that decided the process exit. The
|
|
current exit-code contract is:
|
|
|
|
| code | name | meaning |
|
|
| --- | --- | --- |
|
|
| 0 | `ok` | run completed without an enforced gate failure |
|
|
| 2 | `preflight_failed` | preflight checks failed |
|
|
| 3 | `comparable_gate_failed` | ElizaOS was not comparable-or-better than OpenCode on every selected benchmark |
|
|
| 4 | `token_evidence_failed` | one or more selected cells lacked usable LLM token telemetry |
|
|
| 5 | `required_stats_failed` | one or more selected benchmarks lacked required outcome or token stats |
|
|
| 6 | `coverage_gate_failed` | the run did not cover every included code-agent benchmark |
|
|
| 7 | `report_gate_failed` | the combined release-readiness report gate failed |
|
|
| 8 | `efficiency_gate_failed` | ElizaOS used more tokens, made more LLM calls, or had lower cached-token percentage than OpenCode |
|
|
| 9 | `no_regression_failed` | ElizaOS regressed against the previous comparison summary |
|
|
| 10 | `quality_guardrail_failed` | the broader non-code benchmark readiness guardrail failed |
|
|
| 11 | `trajectory_review_failed` | one or more selected cells lacked reviewable trajectory telemetry |
|
|
| 12 | `live_report_failed` | the report was not generated from live benchmark execution |
|
|
| 13 | `release_readiness_failed` | the final release-readiness checklist failed |
|
|
|
|
Before a run, use `--preflight` to check the OpenCode adapter executable,
|
|
benchmark working directories, command executables, and provider keys for live
|
|
runs. Smoke and dry-run preflights do not require provider keys because they do
|
|
not make LLM calls. Explicit preflights and blocked normal runs write
|
|
`preflight.json` and `preflight.md` under the selected run root, including
|
|
`exit_code: 2` and `exit_reason: preflight_failed` when the preflight is
|
|
blocked, so blocked live-run readiness is tracked without creating a benchmark
|
|
`summary.json`. These artifacts include retry, live-evidence, and
|
|
release-comparable command templates with the selected benchmark scope and
|
|
release gates. Blocked preflights also include structured unblock steps, such
|
|
as the provider key to export, the `OPENCODE_BIN` override to set, whether
|
|
Docker needs to be installed or started, or whether NL2Repo should use the
|
|
built-in agent helper:
|
|
|
|
```bash
|
|
cd /Users/shawwalters/milaidy/eliza/packages
|
|
python -m benchmarks.orchestrator.code_agent_matrix \
|
|
--preflight \
|
|
--smoke \
|
|
--no-docker \
|
|
--max-tasks 1
|
|
```
|
|
|
|
No-key smoke/dry validation:
|
|
|
|
```bash
|
|
cd /Users/shawwalters/milaidy/eliza/packages
|
|
python -m benchmarks.orchestrator.code_agent_matrix \
|
|
--dry-run \
|
|
--smoke \
|
|
--no-docker \
|
|
--max-tasks 1 \
|
|
--run-root /tmp/eliza-code-agent-matrix-smoke
|
|
```
|
|
|
|
For a real opencode cell, keep `CEREBRAS_API_KEY` in the shell environment and
|
|
ensure the `opencode` CLI is installed or set `OPENCODE_BIN`. The matrix does
|
|
not write provider key values into `command.json`; subprocess logs are redacted
|
|
before being persisted.
|
|
|
|
## Viewer
|
|
|
|
Serve live viewer API + UI:
|
|
|
|
```bash
|
|
/opt/miniconda3/bin/python -m benchmarks.orchestrator serve-viewer --host 127.0.0.1 --port 8877
|
|
```
|
|
|
|
Open: `http://127.0.0.1:8877/`
|
|
|
|
Viewer supports:
|
|
|
|
- Historical runs across all benchmarks.
|
|
- Sorting by `agent`, `run_id`, and other columns.
|
|
- High-score comparison columns (`high_score`, `delta`).
|
|
- Filtering by benchmark/status and text search.
|
|
|
|
## Rebuild viewer dataset
|
|
|
|
```bash
|
|
/opt/miniconda3/bin/python -m benchmarks.orchestrator export-viewer-data
|
|
```
|
|
|
|
## Validate latest benchmark readiness
|
|
|
|
Use these gates before treating `benchmark_results/latest/` as publishable.
|
|
They are intentionally stricter than `export-viewer-data`: latest rows must be
|
|
real successful runs with numeric scores, no sample/demo/mock/stub markers, and
|
|
comparable real-harness scores.
|
|
|
|
```bash
|
|
/opt/miniconda3/bin/python -m benchmarks.orchestrator validate-matrix
|
|
/opt/miniconda3/bin/python -m benchmarks.orchestrator validate-runtime-gates
|
|
/opt/miniconda3/bin/python -m benchmarks.orchestrator calibration-report --tolerance 0.08
|
|
/opt/miniconda3/bin/python -m benchmarks.orchestrator validate-latest-publishability
|
|
/opt/miniconda3/bin/python -m benchmarks.orchestrator validate-latest-comparability --tolerance 0.08
|
|
/opt/miniconda3/bin/python -m benchmarks.orchestrator validate-latest-readiness --tolerance 0.08
|
|
/opt/miniconda3/bin/python -m benchmarks.orchestrator validate-latest-readiness --tolerance 0.08 --skip-runtime-gates --exclude-benchmarks agentbench,app_eval_coding,claw_eval,clawbench,mind2web,mint,nl2repo,openclaw_benchmark,osworld,qwen_claw_bench,qwen_web_bench,standard_humaneval,swe_bench,swe_bench_multilingual,swe_bench_pro,terminal_bench,vision_language,visualwebbench,webshop --json > /path/to/non-code-quality-guardrail.json
|
|
|
|
# Code-agent latest artifacts from --publish-latest-dir:
|
|
/opt/miniconda3/bin/python -m benchmarks.orchestrator validate-latest-publishability --latest-dir packages/benchmarks/benchmark_results/latest-code-agent --include-benchmarks swe_bench
|
|
/opt/miniconda3/bin/python -m benchmarks.orchestrator validate-latest-comparability --latest-dir packages/benchmarks/benchmark_results/latest-code-agent --include-benchmarks swe_bench --tolerance 0.08
|
|
/opt/miniconda3/bin/python -m benchmarks.orchestrator validate-latest-readiness --latest-dir packages/benchmarks/benchmark_results/latest-code-agent --include-benchmarks swe_bench --skip-runtime-gates
|
|
```
|
|
|
|
`validate-latest-readiness` is the completion gate. It fails unless every
|
|
Eliza/Hermes/OpenClaw cell required by the latest matrix is present,
|
|
successful, scored, publishable, and comparable. Unsupported cells include
|
|
their reason in `latest/index.json` under `matrix_contract.benchmarks`.
|
|
For code-agent latest directories produced by `--publish-latest-dir`, the same
|
|
publishability/readiness validators also enforce the ElizaOS-vs-OpenCode
|
|
contract: complete provenance, right/wrong stats, token/cache/call stats,
|
|
efficiency deltas, comparable-or-better status, no token/call/cache regression,
|
|
and a complete code-agent `matrix_contract`.
|
|
`validate-latest-comparability --latest-dir <dir>` also understands the
|
|
code-agent `elizaos_vs_opencode` required cell and fails if the row is missing,
|
|
failed, unscored, or not marked `superior`/`comparable`. Use
|
|
`--include-benchmarks` or `--exclude-benchmarks` on
|
|
publishability/comparability/readiness validators when checking a narrowed
|
|
latest artifact set.
|
|
`validate-runtime-gates` probes the current host for the external services and
|
|
credentials that unlock benchmarks where sample/demo fallbacks are forbidden.
|
|
|
|
After the latest matrix is generated and manually spot-reviewed, package the
|
|
reviewed result set into the committed evidence location:
|
|
|
|
```bash
|
|
/opt/miniconda3/bin/python -m benchmarks.orchestrator review-package \
|
|
--latest-dir packages/benchmarks/benchmark_results/latest \
|
|
--out-dir .github/issue-evidence/10199-benchmark-review \
|
|
--reviewed-by <handle> \
|
|
--reviewer-note "Opened the selected trajectories/replays and spot-reviewed model inputs, outputs, scores, and failure diagnostics."
|
|
```
|
|
|
|
`review-package` writes `manifest.json` plus `scorecard.md` and exits nonzero
|
|
unless the static inventory has no gaps, `validate-latest-readiness` passes,
|
|
the generated-artifact guard finds no committed run output, latest rows exist,
|
|
and the manual review note is present. Use `--include-benchmarks`,
|
|
`--exclude-benchmarks`, and `--skip-runtime-gates` only when packaging a clearly
|
|
scoped partial matrix; the manifest records those filters.
|
|
|
|
Expected real-runtime gates:
|
|
|
|
- Hyperliquid rows require `HL_PRIVATE_KEY` and live execution with demo mode
|
|
disabled.
|
|
- Terminal-Bench and Hermes sandbox-family rows require either a reachable
|
|
Docker daemon or, where supported, Modal credentials.
|
|
- Vision-language rows require real multimodal inputs/runtime. For the local
|
|
eliza-1 VLM, set `VISION_LANGUAGE_PROVIDER=local-eliza` and
|
|
`VISION_LANGUAGE_MODEL=eliza-1-9b`; hosted Hermes/OpenClaw-compatible runs
|
|
require `VISION_LANGUAGE_MODEL` plus provider credentials for a multimodal
|
|
OpenAI-compatible model.
|
|
|
|
When Hyperliquid is the only remaining readiness blocker, finish the matrix
|
|
with a live signed testnet run and then regenerate the viewer artifacts:
|
|
|
|
```bash
|
|
HL_PRIVATE_KEY=0x... \
|
|
VISION_LANGUAGE_PROVIDER=local-eliza \
|
|
VISION_LANGUAGE_MODEL=eliza-1-9b \
|
|
VISION_LANGUAGE_TIER=eliza-1-9b \
|
|
PYTHONPATH=. \
|
|
/opt/miniconda3/bin/python -m benchmarks.orchestrator run \
|
|
--benchmarks hyperliquid_bench \
|
|
--all-harnesses \
|
|
--provider cerebras \
|
|
--model gpt-oss-120b \
|
|
--force \
|
|
--show-incompatible
|
|
|
|
VISION_LANGUAGE_PROVIDER=local-eliza \
|
|
VISION_LANGUAGE_MODEL=eliza-1-9b \
|
|
VISION_LANGUAGE_TIER=eliza-1-9b \
|
|
PYTHONPATH=. \
|
|
/opt/miniconda3/bin/python -m benchmarks.orchestrator export-viewer-data
|
|
|
|
VISION_LANGUAGE_PROVIDER=local-eliza \
|
|
VISION_LANGUAGE_MODEL=eliza-1-9b \
|
|
VISION_LANGUAGE_TIER=eliza-1-9b \
|
|
PYTHONPATH=. \
|
|
/opt/miniconda3/bin/python -m benchmarks.orchestrator validate-latest-readiness --tolerance 0.08
|
|
```
|
|
|
|
## Recover stale/interrupted runs
|
|
|
|
If an orchestrator process is interrupted, rows can remain in `running` state.
|
|
Recover them immediately and regenerate the viewer dataset:
|
|
|
|
```bash
|
|
/opt/miniconda3/bin/python -m benchmarks.orchestrator recover-stale-runs --stale-seconds 0
|
|
```
|
|
|
|
Default behavior only recovers runs older than 300 seconds:
|
|
|
|
```bash
|
|
/opt/miniconda3/bin/python -m benchmarks.orchestrator recover-stale-runs
|
|
```
|
|
|
|
## Show runs in terminal
|
|
|
|
```bash
|
|
/opt/miniconda3/bin/python -m benchmarks.orchestrator show-runs --desc --limit 200
|
|
```
|
|
|
|
`show-runs` is sorted by `(agent, run_id)` and is useful for quick auditing.
|
|
|
|
## Comparing models (A vs B)
|
|
|
|
Run any benchmark suite against two models and print a side-by-side delta
|
|
table. Each side is a separate run group in SQLite, but both runs share a
|
|
``comparison_id`` so the comparison can be re-rendered later.
|
|
|
|
Spec format for ``--a`` / ``--b``: ``<provider>:<model>[@<base_url>]``.
|
|
The optional ``@<base_url>`` is forwarded to the provider as an OpenAI-
|
|
compatible base URL; for the ``vllm`` provider this points the orchestrator at
|
|
a self-hosted vLLM endpoint started via ``vllm serve``.
|
|
|
|
```bash
|
|
/opt/miniconda3/bin/python -m benchmarks.orchestrator compare \
|
|
--a "vllm:elizaos/eliza-1@http://127.0.0.1:8001/v1" \
|
|
--b "vllm:Qwen/Qwen3.5-2B@http://127.0.0.1:8002/v1" \
|
|
--benchmarks action-calling,bfcl,realm,context-bench
|
|
```
|
|
|
|
Optional flags:
|
|
|
|
- ``--max-examples N`` caps work per benchmark (forwarded as
|
|
``max_examples`` / ``max_tasks`` / ``sample`` so individual adapters pick it
|
|
up however they natively wire sampling).
|
|
- ``--temperature 0.0`` (default).
|
|
- ``--out <dir>`` — directory for ``compare-<comparison_id>.json``. Defaults
|
|
to ``benchmarks/benchmark_results/comparisons/``.
|
|
|
|
Output:
|
|
|
|
```
|
|
Comparison ID: cmp_20260504T120000Z_a1b2c3d4
|
|
A: vllm:elizaos/eliza-1 @ http://127.0.0.1:8001/v1
|
|
B: vllm:Qwen/Qwen3.5-2B @ http://127.0.0.1:8002/v1
|
|
Benchmarks: action-calling, bfcl, realm, context-bench
|
|
|
|
benchmark | A: vllm:elizaos/eliza-1 | B: vllm:Qwen/Qwen3.5-2B | delta (B-A) | winner
|
|
---------------+----------------------------+-------------------------+-------------+-------
|
|
action-calling | 0.9120 | 0.7430 | -0.1690 | A
|
|
bfcl | 0.6840 | 0.6920 | +0.0080 | B
|
|
realm | 0.5510 | 0.5310 | -0.0200 | A
|
|
context-bench | 0.7400 | 0.7250 | -0.0150 | A
|
|
|
|
Wrote benchmarks/benchmark_results/comparisons/compare-cmp_20260504T120000Z_a1b2c3d4.json
|
|
```
|
|
|
|
Re-render a stored comparison:
|
|
|
|
```bash
|
|
/opt/miniconda3/bin/python -m benchmarks.orchestrator view-comparison \
|
|
cmp_20260504T120000Z_a1b2c3d4
|
|
```
|
|
|
|
The ``vllm`` provider name is registered alongside ``openai`` / ``groq`` /
|
|
``anthropic``: every benchmark CLI that already accepts ``--provider``
|
|
accepts ``--provider vllm``, and the orchestrator forwards
|
|
``OPENAI_BASE_URL`` to the per-benchmark subprocess so OpenAI-compatible
|
|
clients hit the vLLM endpoint without code changes. Override the default
|
|
``http://127.0.0.1:8001/v1`` either via ``@<base_url>`` in the spec, the
|
|
``VLLM_BASE_URL`` env var, or the per-run ``vllm_base_url`` extra config.
|
|
|
|
## Stored metadata per run
|
|
|
|
Each run stores:
|
|
|
|
- benchmark ID + directory
|
|
- run ID + run group ID + signature + attempt
|
|
- status, duration, score, metrics, artifacts
|
|
- provider, model, agent label
|
|
- extra config used for the run
|
|
- benchmark and Eliza commit/version metadata
|
|
- high-score reference and delta
|