from __future__ import annotations import argparse import json from datetime import datetime, timezone from pathlib import Path from storage import load_pending_submission, publish_result REQUIRED_METRICS = { "precision", "recall", "clarity", "correctness", "integrality", "completeness", "faithfulness", "success", "edit_distance", } def parse_args() -> argparse.Namespace: parser = argparse.ArgumentParser(description="Publish an evaluated AISE-Bench submission.") parser.add_argument("submission_id") parser.add_argument("metrics_json", type=Path) parser.add_argument("--grounding", type=float, required=True) parser.add_argument("--overall", type=float, required=True) return parser.parse_args() def main() -> None: args = parse_args() metrics = json.loads(args.metrics_json.read_text(encoding="utf-8-sig")) missing = REQUIRED_METRICS - metrics.keys() if missing: raise SystemExit(f"Metrics file is missing: {', '.join(sorted(missing))}") metadata = load_pending_submission(args.submission_id) result = { **metadata, "status": "accepted", "evaluated_at": datetime.now(timezone.utc).isoformat(), "format": float(metrics["clarity"]), "edit_distance": float(metrics["edit_distance"]), "para_acc": metrics.get("para_acc", metrics.get("parameter_accuracy")), "success": float(metrics["success"]), "correct": float(metrics["correctness"]), "complete": float(metrics["completeness"]), "faithful": float(metrics["faithfulness"]), "f1_lm": metrics.get("f1_lm"), "planning": float(metrics["edit_distance"]), "execution": float(metrics["success"]), "precision": float(metrics["precision"]), "recall": float(metrics["recall"]), "clarity": float(metrics["clarity"]), "correctness": float(metrics["correctness"]), "integrality": float(metrics["integrality"]), "completeness": float(metrics["completeness"]), "faithfulness": float(metrics["faithfulness"]), "grounding": args.grounding, "overall": args.overall, "verified": True, } publish_result(result) print(f"Published {args.submission_id}") if __name__ == "__main__": main()