Repository Public Research preview
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