"""生成并可选执行 lm-evaluation-harness 的可复现基线命令。"""

from pathlib import Path
import argparse
import json
import subprocess
import sys

ROOT = Path(__file__).resolve().parents[1]
sys.path.insert(0, str(ROOT / "src"))

from learning_labs.benchmark_ledger import build_lm_eval_command, command_text, normalize_tasks


def main() -> None:
    parser = argparse.ArgumentParser(description="lm-evaluation-harness 基线入口")
    parser.add_argument("--model", default="sshleifer/tiny-gpt2")
    parser.add_argument("--revision", default="main", help="正式比较时改成不可变 commit SHA")
    parser.add_argument("--tasks", default="hellaswag,arc_easy")
    parser.add_argument("--limit", type=int, default=20, help="教学用小样本；发布成绩请移除或明确记录 limit")
    parser.add_argument("--run", action="store_true", help="已安装 lm-eval 时实际执行")
    args = parser.parse_args()
    output = ROOT / "artifacts" / "evaluation" / "lm_eval"
    command = build_lm_eval_command(args.model, args.revision, normalize_tasks(args.tasks), args.limit, output)
    manifest = {"command": command, "command_text": command_text(command), "run": args.run, "output": str(output)}
    target = ROOT / "artifacts" / "evaluation" / "lm_eval_plan.json"
    target.parent.mkdir(parents=True, exist_ok=True)
    target.write_text(json.dumps(manifest, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(manifest, ensure_ascii=False, indent=2))
    if args.run:
        subprocess.run(command, cwd=ROOT, check=True)
    else:
        print("这是 dry-run。先执行 `python -m pip install lm-eval`，再加 --run。")


if __name__ == "__main__":
    main()
