OpenSpace/arena
2026-11-02 01:55:45 +08:00
..
docs first commit 2026-11-02 01:55:45 +08:00
examples first commit 2026-11-02 01:55:45 +08:00
src/rsi_arena first commit 2026-11-02 01:55:45 +08:00
APACHE-2.0.txt first commit 2026-11-02 01:55:45 +08:00
MANIFEST.in first commit 2026-11-02 01:55:45 +08:00
pyproject.toml first commit 2026-11-02 01:55:45 +08:00
README.md first commit 2026-11-02 01:55:45 +08:00
THIRD_PARTY_NOTICES.md first commit 2026-11-02 01:55:45 +08:00
uv.lock first commit 2026-11-02 01:55:45 +08:00

Evaluate Learning Ability with RSI Arena

Use RSI Arena to evaluate an AI system's ability to learn from feedback, improve task performance, and generalize to unseen tasks. For the protocol, experimental setup, and results, see Evaluating Learning Ability: Protocol and Results.

Supported Benchmarks

Arena reuses the following benchmarks to measure learning progress and generalization.

Domain Benchmark Upstream
Math AIME 2024+2025 AIME 2024 data / AIME 2025 data
Coding / terminal Terminal-Bench 2.1 Terminal-Bench 2.1
Software repair SWE-bench Verified SWE-bench
Research / browse BrowseComp-Plus BrowseComp-Plus

Supported Methods

Arena runs independently of AgentPilot, allowing external methods to use its evaluation interface while retaining their own improvement strategies.

Category Methods
AgentPilot UCB-based Policy Learning / Textual Policy Learning
Agentic coding baselines Codex / DeepSeek Harness
Evolutionary baselines OpenEvolve / ShinkaEvolve

UCB and Textual use the AgentPilot integration. Both learn an improvement policy from feedback while keeping language-model weights fixed: UCB updates outcome statistics, and Textual revises reusable lessons stored in Policy Memory. The direct launch steps below cover the external baselines.

Using AgentPilot? Follow the AgentPilot setup guide. This page runs other search methods directly through Arena.

Complete the Arena installation first, then enter arena/ from the repository root:

cd arena

All commands below run from arena/.

① Choose a benchmark and prepare the program

Choose one route:

Benchmark Next step
AIME Continue below.
Terminal-Bench 2.1 Prepare the task images, then continue below.
SWE-bench Verified Follow its complete prepare → configure → run guide.
BrowseComp-Plus Follow its complete prepare → configure → run guide.

The remaining steps cover AIME and Terminal-Bench. Their supplied configurations run ten candidates:

Method AIME Terminal-Bench 2.1
Codex codex-aime.toml codex-tb21.toml
DSH dsh-aime.toml dsh-tb21.toml
OpenEvolve openevolve-aime.toml openevolve-tb21.toml
ShinkaEvolve shinkaevolve-aime.toml shinkaevolve-tb21.toml

Prepare Harbor and the initial candidate

The examples need two separate checkouts: harbor/ runs the trusted evaluator, while candidate-template/ contains the program to improve. Prepare them at the revision used by the supplied configs:

git clone https://github.com/harbor-framework/harbor.git harbor
git -C harbor checkout --detach 7db020ba5a5ceee918351dd8fc374d4d60bad442
uv sync --project harbor --package harbor --no-dev --locked --python 3.12

git clone https://github.com/harbor-framework/harbor.git candidate-template
git -C candidate-template checkout --detach 7db020ba5a5ceee918351dd8fc374d4d60bad442

test -x harbor/.venv/bin/harbor
test -x harbor/.venv/bin/python
test -f candidate-template/src/harbor/agents/terminus_2/terminus_2.py

For existing checkouts, verify their revisions instead of cloning again. To use other locations, change trusted_harbor_root under benchmarks.config.adapter (AIME) or benchmarks.config.backend (Terminal-Bench), and change --workspace-root in the launch command. Relative paths resolve from arena/.

② Configure the method

Put OPENROUTER_API_KEY in the repository-root .env; the run commands load it with --env-file ../.env. Start with Codex × AIME:

cp examples/codex-aime.toml experiment.toml
command -v codex
command -v bwrap

For Codex × Terminal-Bench, copy examples/codex-tb21.toml instead and set the existing benchmarks.config.backend.offline_verifier_authority_path to tb21-closure-cache/build/offline-verifier-authority.json. Use the same Docker socket used during image preparation and choose a separate run directory such as runs/codex-tb21 in steps ③–④.

Review the model and runtime paths in experiment.toml and install the chosen method's CLI. Codex needs no extra Python package group. For other methods, add the corresponding dependency group:

Selection Extra
DSH dsh-baseline
OpenEvolve openevolve-baseline
ShinkaEvolve shinka-baseline

For example, install OpenEvolve dependencies with uv sync --locked --python 3.12 --extra openevolve-baseline. Repeat --extra to combine selections.

The examples leave dollar limits unset. Attempt counts and timeouts remain active. If enabled, cell_budget.max_cost_usd rejects an over-cost result and stops later provider calls; an in-flight call can exceed it.

③ Run

uv run --no-sync --env-file ../.env rsi-arena baseline launch \
  --baseline codex \
  --experiment-toml experiment.toml \
  --run-root runs/codex-aime \
  --workspace-root candidate-template

This starts model calls and benchmark tasks. For another supplied configuration, use its matching --baseline: codex, dsh, openevolve, or shinkaevolve. The separate rsi-arena launch command is for custom methods that define baseline.command.

④ Inspect or resume

uv run --no-sync rsi-arena-webui --run-root runs/codex-aime

Open the printed URL to view progress and results. Repeat --run-root to compare runs. After an interruption, resume the existing run without reloading its authoring TOML:

uv run --no-sync --env-file ../.env rsi-arena baseline resume \
  --baseline codex \
  --run-root runs/codex-aime

Optional: evaluate the final candidate

After search finishes, replace candidate-... with the delivered candidate ID:

uv run --no-sync --env-file ../.env python - <<'PY'
from rsi_arena import run_held_out_evaluation

run_held_out_evaluation(
    run_root="runs/codex-aime",
    candidate_id="candidate-...",
)
PY

Add retry_inconclusive=True to that call to retry only inconclusive tasks.

Other integrations

To connect another search method, follow the client API, session API, and baseline implementations. OpenEvolve and ShinkaEvolve adaptations retain their upstream search algorithms; attribution is in THIRD_PARTY_NOTICES.md.