omninpc / run_analysis.py
aadi-joshi's picture
hf: initial deploy -- no binaries, github raw urls for images
ed18158
Raw History Blame Contribute Delete
2.36 kB
#!/usr/bin/env python3
"""Results analyser - loads trial results and generates paper tables.
Usage:
python run_analysis.py # uses data/results/trial_results.json
python run_analysis.py --session path/to.csv # use a session CSV instead
"""
from __future__ import annotations
import argparse
import json
import logging
from pathlib import Path
logging.basicConfig(level=logging.INFO, format="%(asctime)s [%(levelname)s] %(message)s")
logger = logging.getLogger(__name__)
def main() -> None:
parser = argparse.ArgumentParser(description="OmniNPC Results Analyser")
parser.add_argument("--session", type=str, default=None, help="Path to session CSV")
parser.add_argument("--baseline", type=str, default=None, help="Path to baseline CSV")
args = parser.parse_args()
from evaluation.results_analyser import (
analyse_session, generate_paper_table, save_paper_results,
)
# Prefer trial_results.json (from run_evaluation.py) — these are real benchmark numbers
trial_json = Path("data/results/trial_results.json")
results = None
if trial_json.exists():
with open(trial_json, encoding="utf-8") as f:
results = json.load(f)
logger.info("Loaded trial results from %s (timestamp: %s)",
trial_json, results.get("timestamp", "unknown"))
else:
# Fall back to session CSV analysis
csv_path = args.session
if csv_path is None:
log_dir = Path("data/logs")
csv_files = sorted(log_dir.glob("session_*.csv"))
if csv_files:
csv_path = str(csv_files[-1])
logger.info("Using most recent session: %s", csv_path)
else:
logger.error(
"No trial_results.json found and no session CSV in data/logs/. "
"Run: python run_evaluation.py --trials all --n 50"
)
return
results = analyse_session(csv_path)
baseline = None
if args.baseline:
baseline = analyse_session(args.baseline)
table = generate_paper_table(results, baseline)
print("\n" + table)
save_paper_results(table, "data/results/PAPER_RESULTS.txt")
logger.info("Paper results written to data/results/PAPER_RESULTS.txt")
if __name__ == "__main__":
main()