ba-agent-rl-env / baseline_eval.py
naman-cen's picture
Upload folder using huggingface_hub
c23cc1b verified
Raw
History Blame Contribute Delete
2.17 kB
"""
Baseline evaluation harness — run a frontier LLM against the full benchmark
(every task in CentificAIResearch/BA-Agent-Bench) and emit a leaderboard row.
Usage:
OPENROUTER_API_KEY=... python baseline_eval.py --model openai/gpt-4o
"""
from __future__ import annotations
import argparse
import json
import os
import statistics
import time
from typing import Any, Dict, List
from client import BAAgentClient
from train import _openrouter_policy, run_episode, _stub_policy
def main():
parser = argparse.ArgumentParser()
parser.add_argument("--server", default="http://localhost:8000")
parser.add_argument("--model", default="openai/gpt-4o")
parser.add_argument("--output", default="baseline_results.json")
args = parser.parse_args()
env = BAAgentClient(args.server)
tasks = env.tasks()
print(f"Evaluating {args.model} on {len(tasks)} tasks ...")
rows: List[Dict[str, Any]] = []
for t in tasks:
try:
t0 = time.time()
out = run_episode(env, _stub_policy, args.model if os.environ.get("OPENROUTER_API_KEY") else None)
out["dt_s"] = round(time.time() - t0, 1)
except Exception as exc:
out = {"task_id": t["task_id"], "error": str(exc)}
rows.append(out)
c = out.get("composite_0_to_100")
print(f" {out.get('task_id','?'):<10} composite={c if c is not None else '-':>6}/100 reward={out.get('episode_reward','-'):+}")
composites = [r["composite_0_to_100"] for r in rows if r.get("composite_0_to_100") is not None]
summary = {
"model": args.model,
"n_tasks": len(rows),
"mean_composite_0_to_100": round(statistics.mean(composites), 2) if composites else None,
"median_composite_0_to_100": round(statistics.median(composites), 2) if composites else None,
"stdev_composite_0_to_100": round(statistics.pstdev(composites), 2) if len(composites) > 1 else 0.0,
}
print(json.dumps(summary, indent=2))
with open(args.output, "w") as f:
json.dump({"summary": summary, "rows": rows}, f, indent=2)
print(f"\nWrote {args.output}")
if __name__ == "__main__":
main()