Goal in one line: owned data → owned weights → holdout score. The rented model can still be the harness. The lab model is the thing you measure. Full narrative of why that itch matters: How I Fell for Local Models. Meta habits (taste, GitHub ownership, stack, needs): Know Good Code. Own the Repo.. Protocol side-quest (MCP theater): Software YouTube — MCP.
1 · Rust — fast literacy, not a second career
You need enough ownership / borrowing / Result to read systems tooling and agent runtimes — not to rewrite the universe. Target: follow a crate, fix a type error, understand why a hot path sits in Rust next to a thin CLI.
Video for a crash course: still open (paste a YouTube URL when you find one — it will land on the software watch shelf). Until then, the clean written path is Google Comprehensive Rust.
2 · CLI — the operator surface
Post-training without a CLI habit dies in notebooks. Prefer thin commands that do one job: wash data, dry-run train, score holdout, chat the adapter. Agents and traders already live here — the same shape shows up when you wire tools to models.
Essay: The CLI Was Always the Trading Floor (thin CLI vs frameworks, and where MCP sits as the chat-side console). Study repo: gakonst/incur-rs — agent-native Rust CLI framework: one #[derive(Incur)] command graph → JSON Schema, MCP tools, skills, HTTP, completions. Walk the examples/ path (01_greet → 05_http_and_mcp).
3 · Eval — scoreboard before training
If you train first and “feel” later, you will fool yourself. Lock a holdout that never enters train JSONL. Prefer exact_match (or another named metric) written to disk. Chat vibes are not a gate.
Polar Lab contracts live in the repo: SPEC.md, HANDS_ON.md, and python scripts/05_eval_holdout.py --adapter outputs/sft/adapter. On the site, the measured loop is the local-models essay.
4 · Post-train the base model
Default smoke stack: Qwen2.5-0.5B-Instruct + LoRA SFT → chat the adapter → holdout eval. Do not put that tiny LoRA on a realtime voice loop; keep it a gated short-fact tool. Lab repo: lilaclilac09/polar-lab.
Do this next
git clone https://github.com/lilaclilac09/polar-lab.git cd polar-lab python3 -m venv .venv && source .venv/bin/activate # install torch for your device, then: pip install -r requirements.txt python scripts/check_data.py python scripts/01_sft.py --dry-run python scripts/01_sft.py --config configs/base.yaml python scripts/04_chat.py --adapter outputs/sft/adapter --prompt "What is 7 * 6?" python scripts/05_eval_holdout.py --adapter outputs/sft/adapter
Read exact_match in the metrics JSON. That number is the product — not the loss curve alone.