"""Aggregate results.jsonl into the scorecard tables. Usage: python3 report.py [results/results.jsonl ...] Groups by (model, arm): ok-rate, token mean/median, tool calls, wall clock, and token delta vs the ``base`` arm of the same model when present. """ import json import statistics import sys from collections import defaultdict def main(paths): rows = [] for p in paths: for line in open(p, encoding="utf-8"): try: rows.append(json.loads(line)) except Exception: pass if not rows: print("no rows") return cells = defaultdict(list) for r in rows: cells[(r.get("model", "?"), r.get("arm", "?"))].append(r) base_tok = {} for (model, arm), rs in cells.items(): if arm == "base": oks = [r for r in rs if r.get("ok")] if oks: base_tok[model] = statistics.mean(r.get("total_tokens", 0) for r in oks) hdr = f"{'model':<34} {'arm':<16} {'ok':>7} {'tok_mean':>9} {'tok_med':>8} {'calls':>6} {'wall_s':>7} {'vs base':>8}" print(hdr) print("-" * len(hdr)) for model, arm in sorted(cells): rs = cells[(model, arm)] oks = [r for r in rs if r.get("ok")] n_ok, n = len(oks), len(rs) toks = [r.get("total_tokens", 0) for r in oks] calls = [r.get("tool_calls", 0) for r in oks] walls = [r.get("wall_s", 0) for r in oks] tok_mean = statistics.mean(toks) if toks else 0 delta = "" if arm != "base" and model in base_tok and tok_mean: delta = f"{(tok_mean - base_tok[model]) / base_tok[model] * 100:+.0f}%" print( f"{model:<34} {arm:<16} {n_ok:>3}/{n:<3} {tok_mean:>9.0f} " f"{statistics.median(toks) if toks else 0:>8.0f} " f"{statistics.mean(calls) if calls else 0:>6.1f} " f"{statistics.mean(walls) if walls else 0:>7.1f} {delta:>8}" ) errs = [r for r in rows if r.get("error")] if errs: print(f"\nerrors: {len(errs)}") for r in errs[:10]: print( f" {r.get('model')}/{r.get('arm')}/{r.get('task')}/rep{r.get('rep')}: {r['error'][:120]}" ) if __name__ == "__main__": main(sys.argv[1:] or ["results/results.jsonl"])