arena-run-sweep
Run the arena evaluation sweep and interpret last_run.tsv and the leaderboard matrix.
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
Run the arena evaluation sweep and interpret last_run.tsv and the leaderboard matrix.
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
Operate the Open Arena REST API: start the server and make authenticated requests.
Start and operate the autonomous reward-R&D experiment loop (setup, confirm, then run until interrupted).
Add or iterate on a custom reward in src/rewards/ and wire it into the sweep.
Configure an Open Arena sweep: author/edit config.yaml datasets, rewards, metrics, and experiments blocks.
Prepare evaluation datasets: write prepare_data.py, wire loaders in config.yaml, smoke-test that rows load.
| name | arena-run-sweep |
| description | Run the arena evaluation sweep and interpret last_run.tsv and the leaderboard matrix. |
Read README.md (Run section) and AUTORESEARCH.md (Output format section) for full context. This skill covers the common invocations and how to read the output.
uv sync # installs the full workspace (open-arena + open-arena-cli + open-arena-core)
cp .env.example .env # fill in provider API keys you use
Install note:
uv syncinstalls the full workspace and is required for local sweeps. For remote API operations only,pip install open-arena-cliis sufficient.
arena # reads ./config.yaml, stores state in .open-arena/
arena -c configs/eval.yaml # -c / --config: different config file
arena --no-cache # discard per-dataset trial caches before running
arena --state-dir runs/exp1 # store trial state + TSVs under a custom dir
arena -v # show synalinks progress bar (verbose=1)
arena -vv # per-batch lines (verbose=2, good for log files)
arena --json results.json # also write the full result matrix as JSON
arena --json - # emit JSON on stdout only, skip TSV + tables
Always invoke via uv run arena (or inside the activated venv). Plain python -m src.evaluate fails outside the venv because keras_tuner is not on the system path.
arena --state-dir runs/baseline
arena --state-dir runs/exp1 --no-cache
Each --state-dir gets its own last_run.tsv, frontier.tsv, and per-dataset keras-tuner trial cache. Runs never clobber each other.
--no-cachePass --no-cache (or rm -rf .open-arena/*/) whenever:
experiments.language_modelsmetrics: blockexperiments.datasetsCompleted trials for unchanged axes are still reused — --no-cache only drops trials whose HP space changed.
.open-arena/last_run.tsvLong-format TSV, one row per (model, dataset, metric) cell:
model dataset metric value direction
ollama/mistral mmlu_test reward 0.440000 max
ollama/mistral mmlu_test lm_judge 0.612000 max
ollama/llama3.2 mmlu_test reward 0.520000 max
Columns:
model — litellm model identifier (e.g. ollama/mistral, openai/gpt-4o)dataset — dataset name from experiments.datasetsmetric — reward (primary) or a candidate alias from metrics:value — score in [0, 1] (higher = better for max, lower for min)direction — max or minFailed trials are omitted from the TSV (they appear in the JSON output with value: null).
frontier.tsvWhen a dataset has objective: true on more than one metric entry, a Pareto frontier is computed. Models on the frontier are printed as a markdown table to stdout and written to .open-arena/frontier.tsv:
dataset model axis direction value
my_dataset ollama/mistral reward max 0.520000
my_dataset ollama/mistral lm_judge max 0.710000
uv run python -c "
import csv, collections
rows = list(csv.DictReader(open('.open-arena/last_run.tsv'), delimiter='\t'))
# argmax per dataset for 'reward' and a candidate alias
best = collections.defaultdict(dict)
for r in rows:
ds, model, metric, val = r['dataset'], r['model'], r['metric'], float(r['value'])
if metric in ('reward', 'lm_judge'):
if model not in best[ds] or best[ds].get(metric, -1) < val:
best[ds][metric] = (model, val)
for ds, d in best.items():
agree = d.get('reward', ('?',))[0] == d.get('lm_judge', ('?',))[0]
print(ds, 'agree' if agree else 'DISAGREE', d)
"
Test that every dataset in experiments.datasets actually loads:
uv run python -c "
import yaml
from src.datasets import load_dataset_from_yaml
cfg = yaml.safe_load(open('config.yaml'))
for n in cfg['experiments']['datasets']:
it = iter(load_dataset_from_yaml('config.yaml', name=n))
next(it); print('ok', n)
"
pkill -f 'src.evaluate'
Each trial should take under 5 minutes. If a sweep exceeds 10 minutes, kill it, lower limit: in config.yaml, or drop a heavy candidate from the metrics: block.