1#!/usr/bin/env python32# Author: Simon-Pierre Boucher — simon-pierre.boucher@uqo.ca3"""Run one LLM treatment arm on a subsample and write results/runs/<run_id>/.45Examples6 python3 scripts/30_run_arm.py --arm F_independent --synthetic --n 57 av run-arm --arm G_debate --rounds 2 --committee mixed_random --split validation --n 24 --live --tier mid8"""9from __future__ import annotations1011import argparse12import sys13from pathlib import Path1415sys.path.insert(0, str(Path(__file__).resolve().parents[1] / "src"))1617from agentic_valuation.experiments.run_arm import LLM_ARMS, RunSpec, run_arm # noqa: E402181920def main(argv: list[str] | None = None) -> int:21 ap = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter)22 ap.add_argument("--arm", default="F_independent", choices=LLM_ARMS)23 ap.add_argument("--rounds", type=int, default=None)24 ap.add_argument("--committee", default="all_anthropic", choices=["all_anthropic", "all_openai", "mixed_random"])25 ap.add_argument("--split", default="validation")26 ap.add_argument("--n", type=int, default=24)27 ap.add_argument("--live", action="store_true")28 ap.add_argument("--tier", default=None)29 ap.add_argument("--run-id", dest="run_id", default=None)30 ap.add_argument("--synthetic", action="store_true")31 ap.add_argument("--effort", default=None)32 ap.add_argument("--concurrency", type=int, default=4)33 ap.add_argument("--seed", type=int, default=None)34 ap.add_argument("--out-dir", dest="out_dir", default=None)35 ap.add_argument("--data-dir", dest="data_dir", default=None, help="directory holding analytic/splits/llm_subsamples[/geo_features].parquet (default: data/processed or data/synthetic)")36 a = ap.parse_args(argv)37 spec = RunSpec(38 arm=a.arm, rounds=a.rounds, committee=a.committee, split=a.split, n=a.n, live=a.live, tier=a.tier, run_id=a.run_id,39 synthetic=a.synthetic, effort=a.effort, property_concurrency=a.concurrency, out_dir=(Path(a.out_dir) if a.out_dir else None),40 data_dir=(Path(a.data_dir) if a.data_dir else None),41 **({"seed": a.seed} if a.seed is not None else {}),42 )43 run_arm(spec)44 return 0454647if __name__ == "__main__":48 sys.exit(main())49