AILEENA MACHINA

Software · 2026.08.07

Post-Training Path: Rust, CLI, Eval, Base Model

A short order of operations if you want to post-train a small open model yourself — not rent an API brain. Rust literacy, thin CLIs, honest eval, then LoRA SFT on Qwen2.5-0.5B-Instruct (Polar Lab).

Rust · CLI · Eval · SFT · LoRA · Polar Lab · Post-training

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_greet05_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.

← Software YouTube (MCP) · Local models essay →

← dispatch