.PHONY: setup smoke collect build-data distill train-s1 calibrate eval eval-v2 eval-25 eval-cpu fetch-games agent-local push-hf test clean PY ?= python3.13 setup: ## create venv and install deps (Python 3.12+ required) $(PY) -m venv .venv .venv/bin/pip install -U pip .venv/bin/pip install -r requirements.txt @echo ">> done. activate with: source .venv/bin/activate" smoke: ## FULL local bring-up on the built-in mock game (no GPU, no downloads) $(PY) data/collect_selfplay.py --config configs/collect.yaml $(PY) data/build_dataset.py --in data/traces --out data/dataset $(PY) train/distill_alignment.py --config configs/train.yaml $(PY) train/train_system1.py --config configs/train.yaml $(PY) train/calibrate_rlcd.py --config configs/train.yaml $(PY) train/evaluate_local.py --config configs/train.yaml --games mock-pushbox collect: ## self-play trace collection (mock game or public games) $(PY) data/collect_selfplay.py --config configs/collect.yaml build-data: ## traces -> decision-question training samples $(PY) data/build_dataset.py --in data/traces --out data/dataset distill: ## stage A: align student (image+text) states with the frozen teacher's vision tower $(PY) train/distill_alignment.py --config configs/train.yaml train-s1: ## stage B: train System-1 decision heads (choice CE, NanoJev recipe) $(PY) train/train_system1.py --config configs/train.yaml calibrate: ## stage C: RLCD calibration + temperature fitting (absorbed from Laya) $(PY) train/calibrate_rlcd.py --config configs/train.yaml eval: ## evaluate the hybrid agent (mock game by default) $(PY) train/evaluate_local.py --config configs/train.yaml --games mock-pushbox eval-v2: ## one-command eval of the released v2 checkpoint (auto backend; see ops/run_eval.py) $(PY) ops/run_eval.py --checkpoint hf:tchbcb/qwenjev@t4_assets_v2/checkpoints --games mock eval-25: ## evaluate on the 25 public games (needs arc-agi + environment_files, see train.md ยง4.1) $(PY) ops/run_eval.py --checkpoint hf:tchbcb/qwenjev@t4_assets_v2/checkpoints --games all25 eval-cpu: ## CPU harness test (tiny backend, no checkpoint, 60 actions) $(PY) ops/run_eval.py --backend tiny --no-checkpoint --games mock --max-actions 60 fetch-games: ## cache all 25 public games locally (anonymous arcade key, ~3MB, no Kaggle account) $(PY) ops/fetch_games.py agent-local: ## run the hybrid agent locally via the ARC-AGI-3-Agents runner $(PY) ../ARC-AGI-3-Agents/main.py --agent=qwenjevagent --game=ls20 push-hf: ## push this repo to HuggingFace (HF_TOKEN from env or .secrets) $(PY) scripts/push_hf.py test: ## unit tests (CPU-only, no downloads) $(PY) -m pytest tests -q clean: rm -rf __pycache__ .pytest_cache build data/traces data/dataset eval_report.json