SPB Git

Repository Public Research preview

export_release.py 2.3 KB 42 lines python

1#!/usr/bin/env python32"""Export a checkpoint as a release directory (model card, manifest, licence note) and verify it loads from a fresh process."""3from __future__ import annotations45import argparse6import json7import subprocess8import sys9from pathlib import Path1011ROOT = Path(__file__).resolve().parents[1]12sys.path.insert(0, str(ROOT / "src"))13from htr.release.export import export_release  # noqa: E402141516def main() -> None:17    ap = argparse.ArgumentParser()18    ap.add_argument("--checkpoint", required=True)19    ap.add_argument("--name", required=True)20    ap.add_argument("--version", default="0.1.0")21    ap.add_argument("--metrics", default=None, help="report.json from scripts/evaluate.py; the system's overall metrics are embedded")22    ap.add_argument("--system", default=None)23    ap.add_argument("--training-data", default="see release notes")24    ap.add_argument("--out", default=None)25    a = ap.parse_args()26    metrics = None27    if a.metrics:28        rep = json.loads(Path(a.metrics).read_text())29        sysname = a.system or next(k for k in rep["systems"] if not k.startswith("B"))30        metrics = {m: {"mean": round(v["mean"], 4), "ci": [round(v["ci_low"], 4), round(v["ci_high"], 4)]} for m, v in rep["systems"][sysname]["overall"].items() if isinstance(v, dict)}31        metrics["_baseline_B0_identity"] = {m: round(v["mean"], 4) for m, v in rep["systems"].get("B0_identity", {}).get("overall", {}).items() if isinstance(v, dict)}32    out = Path(a.out or ROOT / "artifacts/releases" / f"{a.name}-{a.version}")33    man = export_release(Path(a.checkpoint), out, a.name, a.version, metrics, {"training_data": a.training_data})34    print(f"exported {out} ({len(man['files'])} files)")35    # independent load test in a clean interpreter (no repo imports except the package)36    code = f"import sys; sys.path.insert(0, {str(ROOT / 'src')!r}); from htr.inference.pipeline import HTRReconstructor; r = HTRReconstructor.from_pretrained({str(out)!r}, device='cpu'); res = r.reconstruct('We measured 12 samples at 37 °C [1]. The effect was not significant.', {{'discipline': 'biomedicine', 'pub_year': 2012}}); print('LOAD OK', len(res.reconstruction), res.warnings)"37    print(subprocess.run([sys.executable, "-I", "-c", code], capture_output=True, text=True, timeout=600).stdout.strip() or "LOAD FAILED")383940if __name__ == "__main__":41    main()42
Files main
Menu

Theme