Files
company-haness/.claude/hooks/benchmark_cascade.py
T

64 lines
2.1 KiB
Python

#!/usr/bin/env python3
"""P4 Cascade Benchmark controller CLI. subcommand 를 bench_cascade 모듈로 dispatch.
유료 실행(calibrate/judge/arm-run --execute)은 예산 receipt 필수(Blocker 4)."""
import os
import sys
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
from bench_cascade import budget, planner # noqa: E402
def _opts(argv):
o = {}
i = 0
while i < len(argv):
if argv[i].startswith("--"):
k = argv[i][2:]
if i + 1 < len(argv) and not argv[i + 1].startswith("--"):
o[k] = argv[i + 1]; i += 2
else:
o[k] = True; i += 1
else:
i += 1
return o
def _budget_path():
from bench_cascade import paths
return os.path.join(paths.controller_dir(), "runs", "budget-receipt.json")
def main(argv):
if not argv:
sys.stderr.write("usage: benchmark_cascade.py <plan|approve-budget|calibrate|arm-run|sanitize|judge|compare|probe>\n")
return 1
cmd, rest = argv[0], argv[1:]
o = _opts(rest)
if cmd == "plan":
import yaml
print(yaml.safe_dump(planner.summary(), allow_unicode=True, sort_keys=False))
return 0
if cmd == "approve-budget":
budget.approve(o.get("plan-id", "p"), int(o.get("max-tokens", 0)), float(o.get("max-cost", 0)), _budget_path())
print(f"[budget] approved → {_budget_path()}")
return 0
if cmd in ("calibrate", "judge", "arm-run"):
if o.get("execute"):
try:
budget.require(_budget_path())
except RuntimeError as e:
sys.stderr.write(f"[budget] {e}\n")
return 2
sys.stderr.write(f"[{cmd}] not-implemented — orchestrator 미배선(pilot 실행 단계에서 배선)\n")
return 3
if cmd in ("sanitize", "compare", "probe"):
sys.stderr.write(f"[{cmd}] not-implemented — orchestrator 미배선(pilot 실행 단계에서 배선)\n")
return 3
sys.stderr.write(f"unknown subcommand: {cmd}\n")
return 1
if __name__ == "__main__":
sys.exit(main(sys.argv[1:]))