# Parlay — Windows-oriented Makefile (GNU Make from Git Bash or Chocolatey). # Uses venv/Scripts/ paths. On Windows, clean uses cmd.exe. .PHONY: setup setup-train run run-env run-mcp test clean train-data train-sft train-grpo evaluate ifeq ($(OS),Windows_NT) SHELL := cmd.exe .SHELLFLAGS := /C endif setup: python -m venv venv venv\Scripts\python -m pip install --upgrade pip -q venv\Scripts\pip install -r requirements.txt -q if not exist .env copy .env.example .env venv\Scripts\python scripts\init_db.py setup-train: python -m venv venv-train venv-train\Scripts\python -m pip install --upgrade pip -q venv-train\Scripts\pip install -r requirements.txt -q venv-train\Scripts\pip install -r requirements-train.txt run: venv\Scripts\uvicorn main:app --host 0.0.0.0 --port 8000 --reload run-env: venv\Scripts\python -m parlay_env.server run-mcp: venv\Scripts\python -m mcp_server.server stdio test: venv\Scripts\pytest tests/ -v train-data: # hackathon budget default; override with EPISODES=N venv-train\Scripts\python -m training.generate_data --episodes 80 --output data/episodes.jsonl train-sft: venv-train\Scripts\python -m training.sft_train --model Qwen/Qwen2.5-7B-Instruct --data data/episodes.jsonl --output models/parlay-sft --threshold 0.30 train-grpo: venv-train\Scripts\python -m training.grpo_train --model models/parlay-sft --data data/episodes.jsonl --output models/parlay-grpo --steps 500 evaluate: venv-train\Scripts\python -m training.evaluate --base Qwen/Qwen2.5-7B-Instruct --sft models/parlay-sft --grpo models/parlay-grpo --data data/episodes.jsonl --output results/eval_results.json test-keyless: venv\Scripts\pytest tests\test_keyless.py -v docker-test: docker build -t parlay-test . && docker run -p 7860:7860 --env-file .env parlay-test clean: if exist venv rd /s /q venv if exist venv-train rd /s /q venv-train for /r . %%d in (__pycache__) do @if exist "%%d" rd /s /q "%%d"