PrERT-CNM-Demo / src /prert /cli /phase4.py
JayNightmare's picture
Upload folder using huggingface_hub
64c8e6c verified
Raw
History Blame Contribute Delete
2.76 kB
"""Phase 4 CLI: artifact-based validation and benchmark comparison."""
from __future__ import annotations
import argparse
from pathlib import Path
from prert.phase4 import run_phase4_validation
def main() -> None:
args = _parse_args()
report = run_phase4_validation(
output_dir=args.output_dir,
baseline_dir=args.baseline_dir,
comparison_dirs=args.comparison_dirs,
require_bayesian=args.require_bayesian,
require_polisis=args.require_polisis,
polisis_advisory=not args.disable_polisis_advisory,
ece_threshold=args.ece_threshold,
)
baseline_validation = report["baseline"]["validation"]
passed = bool(baseline_validation["passed"])
print("Phase 4 validation complete")
print(f"Baseline artifact: {report['baseline_artifact_dir']}")
print(f"Baseline passed: {passed}")
print(f"Comparisons: {len(report.get('comparisons', []))}")
print(f"Validation report (json): {report['output_files']['json']}")
print(f"Validation report (markdown): {report['output_files']['markdown']}")
if args.strict and not passed:
raise SystemExit(2)
def _parse_args() -> argparse.Namespace:
root = Path.cwd()
parser = argparse.ArgumentParser(description="Run Phase 4 artifact-based validation")
parser.add_argument(
"--baseline-dir",
type=Path,
default=root / "artifacts/phase-3-freeze",
help="Artifact directory containing a Phase 3 manifest and outputs.",
)
parser.add_argument(
"--comparison-dirs",
type=Path,
nargs="*",
default=[],
help="Optional additional artifact directories for side-by-side comparison.",
)
parser.add_argument(
"--output-dir",
type=Path,
default=root / "artifacts/phase-4",
help="Output directory for Phase 4 validation reports.",
)
parser.add_argument(
"--require-bayesian",
action="store_true",
help="Require Bayesian evidence artifacts for required checks.",
)
parser.add_argument(
"--disable-polisis-advisory",
action="store_true",
help="Disable non-blocking Polisis advisory check.",
)
parser.add_argument(
"--require-polisis",
action="store_true",
help="Require Polisis source evidence as a blocking validation check.",
)
parser.add_argument(
"--ece-threshold",
type=float,
default=0.20,
help="Calibration ECE advisory threshold.",
)
parser.add_argument(
"--strict",
action="store_true",
help="Exit with code 2 when baseline required checks fail.",
)
return parser.parse_args()
if __name__ == "__main__":
main()