RLHF distills the crowd into big models. This distills you — your taste, your trade-offs, your moral instincts — into a small model that runs on hardware you own.
Play Twin Builder Eval suite on GitHubOpen Twin Builder, pick a starting prior (your MBTI type, or blank slate — it's just a starting point), and tap through 60 choices. Answer fast and honestly; there are no right answers. A few questions repeat later on purpose — that measures how consistent you are with yourself, which is the ceiling your twin is scored against. Want more training data? Hit "keep going" for endless mode.
The end screen offers three downloads. Know which is which:
{"messages": [{"role":"user","content": prompt}, {"role":"assistant","content":"A"}]}.
Train on this.{"prompt","chosen","rejected"}, for a DPO second stage.Prompts are byte-identical to the eval suite's forced-choice format, so fine-tuned agreement is directly comparable to in-context scores. Consistency retests are excluded from training files. Your answers never leave your device until you download them.
You're training a LoRA adapter (a small set of extra weights on a frozen base model), not the full model. With 60–500 short examples this is a minutes-scale job. Pick your platform:
Private, free, no uploads. MLX is the native path.
pip install mlx-lm
# split into train/valid (hold out ~10 for validation)
mkdir -p twin-data
head -n 50 twin-sft.jsonl > twin-data/train.jsonl
tail -n 10 twin-sft.jsonl > twin-data/valid.jsonl
python -m mlx_lm.lora --model mlx-community/Qwen3-4B-Instruct-2507-4bit \
--train --data twin-data --adapter-path ./twin-adapter \
--iters 300 --batch-size 4
# run it:
python -m mlx_lm.generate --model mlx-community/Qwen3-4B-Instruct-2507-4bit \
--adapter-path ./twin-adapter --prompt "Scenario: ..." --max-tokens 5
Check mlx_lm.lora --help for current flags. Any small instruct model with an
MLX 4-bit build works (Qwen3, Llama 3.2, Gemma 3 in the 1–8B range).
No Mac or no Apple Silicon? A free Colab T4 handles ≤8B models in 4-bit via Unsloth's turnkey notebooks:
pip install per Unsloth's Colab instructions, load a 4-bit base
(e.g. an Unsloth Qwen3/Llama 3 4-bit build), attach LoRA adapters.twin-sft.jsonl, format with the model's chat template, train with TRL's
SFTTrainer, download the adapter.Start from Unsloth's official Colab notebooks — they track library changes better than any static guide can.
For bigger models or faster turnaround, rent an A100/H100 by the hour and run the same Unsloth/TRL script you would on Colab. A short LoRA run like this typically costs a few dollars at current rates — check pricing before you start.
Services like Together AI and Fireworks offer hosted fine-tuning: upload the JSONL, get back a model endpoint. Least setup, least control, and your data leaves your machine — the trade-off to weigh.
For this workload specifically — 60–500 short examples, LoRA rank 8–16. Dataset size and step count dominate; these are ballparks, not benchmarks.
| Setup | Rough time |
|---|---|
| MacBook M1–M3 (MLX), 3–8B model | ~5–30 min |
| Mac Studio (MLX), 8B+ | ~5–20 min |
| Colab free T4 (Unsloth QLoRA) | ~15–45 min |
| Colab Pro A100 | ~5–15 min |
| Rented A100 / H100 | ~5–15 min + setup |
Clone the eval suite and compare base vs tuned on held-out items:
export OPENAI_BASE_URL=http://localhost:1234/v1
export OPENAI_API_KEY=lm-studio
# in-context baseline (no tuning): how well does the base model predict you from K examples?
inspect eval src/inspect_evals/tasks/daily_decisions.py@daily_decisions_predict \
--model openai/<base-model-id> -T profile=twin -T k=30
# then the same task against your fine-tuned model -- agreement should meet or beat it
The eval items are held out from the game by design — the game draws from a separate 504-item capture pool, so a tuned model can't win by memorization. Score twins against your self-agreement rate (the retest ceiling), not against 100%.
Your twin doesn't freeze after the first fine-tune. On the game's end screen, Test your twin starts feedback mode: the twin shows its prediction first, and you agree or disagree with each one.
The end screen reports your twin's feedback accuracy, and the DPO download now includes your corrections alongside the base pairs. Re-tune on the accumulated file every so often — that's the continual loop: play, tune, judge, correct, re-tune.
twin-dpo.jsonl.Part of digital-twin-evals — eval suites for moral dilemmas, preferences, and individual digital twins.