"""Run rule-based policies × scenarios eval. Usage: python scripts/run_baseline_eval.py --out eval_outputs/baseline """ from __future__ import annotations import argparse import sys from pathlib import Path sys.path.insert(0, str(Path(__file__).resolve().parent.parent)) from eval.harness import run_eval_matrix from eval.policies import build_policy DEFAULT_POLICIES = [ "random", "blanket_approve_pr", "blanket_reject_pr", "keyword_security_triager", "paranoid_inspector", "memory_aware", ] DEFAULT_SCENARIOS = [ "E0_normal_intake", "E1_typosquat_wave", "E2_social_eng_buildup", "E3_compromised_maintainer", "E4_multi_vector", ] def main(): ap = argparse.ArgumentParser() ap.add_argument("--out", default="eval_outputs/baseline") ap.add_argument("--policies", nargs="*", default=DEFAULT_POLICIES) ap.add_argument("--scenarios", nargs="*", default=DEFAULT_SCENARIOS) ap.add_argument("--seeds", nargs="*", type=int, default=[0, 1, 2]) args = ap.parse_args() policies = {n: build_policy(n) for n in args.policies} out_dir = Path(args.out) records = run_eval_matrix(policies, args.scenarios, args.seeds, out_dir, verbose=True) print(f"\n[done] {len(records)} rollouts -> {out_dir}") print(f" summary.md: {out_dir / 'summary.md'}") if __name__ == "__main__": main()