59 lines
1.8 KiB
Python
59 lines
1.8 KiB
Python
"""完整编译流水线的唯一命令行入口。"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import argparse
|
|
import sys
|
|
|
|
from scripts.provider_router import parse_model_reference
|
|
|
|
from .pipeline import run_pipeline
|
|
|
|
|
|
def _model_reference(value: str) -> str:
|
|
try:
|
|
return parse_model_reference(value).value
|
|
except ValueError as exc:
|
|
raise argparse.ArgumentTypeError(str(exc)) from exc
|
|
|
|
|
|
def _parser() -> argparse.ArgumentParser:
|
|
parser = argparse.ArgumentParser(
|
|
prog="python -m scripts.compile_pipeline",
|
|
description="Run static compilation, Fast optimization, and Deep iteration for one SkillsBench task.",
|
|
)
|
|
parser.add_argument("--harness", required=True, choices=("opencode", "claude-code", "claude"))
|
|
parser.add_argument(
|
|
"--model", required=True, type=_model_reference,
|
|
help="Target model used by BenchFlow, in provider/model format.",
|
|
)
|
|
parser.add_argument(
|
|
"--external-model", required=True, type=_model_reference,
|
|
help="Model used for static planning, Fast analysis, and Deep analysis.",
|
|
)
|
|
parser.add_argument(
|
|
"--task", required=True,
|
|
help="SkillsBench task name or a path below data/skills-bench/tasks.",
|
|
)
|
|
parser.add_argument(
|
|
"--run-dir",
|
|
help="Run directory below results/compile-pipeline; reuse it to resume an interrupted run.",
|
|
)
|
|
return parser
|
|
|
|
|
|
def main(argv: list[str] | None = None) -> int:
|
|
args = _parser().parse_args(argv)
|
|
try:
|
|
final_skill = run_pipeline(
|
|
harness=args.harness, model=args.model, external_model=args.external_model,
|
|
task=args.task, run_dir=args.run_dir,
|
|
)
|
|
except (OSError, RuntimeError, ValueError) as exc:
|
|
print(f"error: {exc}", file=sys.stderr)
|
|
return 2
|
|
print(final_skill)
|
|
return 0
|
|
|
|
raise SystemExit(main())
|