Spaces:
Running
Running
| """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() | |