feather-a10-runtime / overlay /scripts /cycle1a_report.py
Jackoatmon's picture
Update Feather training runtime image
951f760 verified
#!/usr/bin/env python3
from __future__ import annotations
import json
from collections import defaultdict
from pathlib import Path
from typing import Any
def build_cycle1a_report(run_dir: Path) -> dict[str, Any]:
runs = []
for path in sorted(run_dir.glob("*.json")):
try:
payload = json.loads(path.read_text(encoding="utf-8"))
except Exception:
continue
if isinstance(payload, dict) and "benchmark" in payload:
runs.append((path.name, payload))
n_failed = sum(1 for _, payload in runs if payload.get("status") == "failed")
by_benchmark: dict[str, dict[str, dict[str, float]]] = defaultdict(dict)
for filename, payload in runs:
if payload.get("status") == "failed":
continue
parts = filename.removesuffix('.json').split('_')
if len(parts) < 3:
continue
benchmark = payload["benchmark"]
variant = '_'.join(parts[1:-1])
score = float(payload.get("score", 0.0))
slot = by_benchmark.setdefault(benchmark, {}).setdefault(variant, {"scores": []})
slot["scores"].append(score)
for benchmark, variants in by_benchmark.items():
for variant, slot in variants.items():
scores = slot.pop("scores")
slot["mean_score"] = sum(scores) / len(scores)
slot["n_scores"] = len(scores)
if runs and n_failed == len(runs):
panel_status = "blocked"
elif n_failed > 0:
panel_status = "partial"
else:
panel_status = "ready"
return {
"n_runs": len(runs),
"n_failed": n_failed,
"panel_status": panel_status,
"by_benchmark": by_benchmark,
}