| |
| """Print benchmark statistics for the SafeSpace scenario corpus.""" |
|
|
| from __future__ import annotations |
|
|
| import argparse |
| import json |
| import sys |
| from pathlib import Path |
|
|
| ROOT_DIR = Path(__file__).resolve().parent.parent |
| if str(ROOT_DIR) not in sys.path: |
| sys.path.insert(0, str(ROOT_DIR)) |
|
|
| from server.scenarios import get_benchmark_manifest, get_scenario_statistics |
|
|
|
|
| def render_markdown(stats: dict) -> str: |
| """Render a compact markdown summary for README updates.""" |
| lines = [ |
| "# SafeSpace Benchmark Stats", |
| "", |
| f"- Benchmark manifest version: {stats['benchmark_manifest_version']}", |
| f"- Canonical benchmark size: {stats['canonical_total']}", |
| f"- Total scenarios: {stats['total']}", |
| f"- By difficulty: {stats['by_difficulty']}", |
| f"- By decision: {stats['by_decision']}", |
| f"- By trigger type: {stats['by_trigger_type']}", |
| f"- Context depth overall: {stats['context_depth_overall']}", |
| ] |
| return "\n".join(lines) |
|
|
|
|
| def main() -> None: |
| parser = argparse.ArgumentParser(description="Report SafeSpace benchmark stats") |
| parser.add_argument( |
| "--format", |
| choices=["json", "markdown"], |
| default="json", |
| help="Output format for the benchmark summary", |
| ) |
| args = parser.parse_args() |
|
|
| stats = get_scenario_statistics() |
| manifest = get_benchmark_manifest() |
| stats["benchmark_manifest_version"] = manifest["manifest_version"] |
| stats["canonical_total"] = sum(len(ids) for ids in manifest["canonical"].values()) |
| if args.format == "markdown": |
| print(render_markdown(stats)) |
| else: |
| print(json.dumps(stats, indent=2, sort_keys=True)) |
|
|
|
|
| if __name__ == "__main__": |
| main() |
|
|