promptdojo_promptdojo_promptdojo_promptdojo_promptdojo_promptdojo_promptdojo_promptdojo_promptdojo_promptdojo_promptdojo_

Lab — ship the adapter — step 1 of 3

Colab T4 path, fixture unlock

The trainer internals are already written. Your job is the payload — which base, which method, which split, who reviewed — and the receipt that records whether the run was live or a fixture.

Open In Colab

The notebook lives in-repo at specialist-adapter-receipt/train_specialist_adapter.ipynb. Cells, in order:

  1. Load Qwen2.5-1.5B-Instruct in 4-bit (bitsandbytes). A 0.5–3B Instruct sibling is in-class if the T4 refuses 1.5B.
  2. Attach a LoRA adapter with PEFT (r 8 or 16, typical targets q_proj / v_proj).
  3. Run TRL SFTTrainer on the reviewed jsonl.
  4. Save adapter/ (or a pointer file if Colab ephemeral storage is gone).
  5. Write the train receipt: base id, method qlora, step count, whether this was live-t4 or fixture.

Unlock in this browser lab: a payload that would be legal to train, plus a receipt the eval lesson can score. Free-tier may attach the fixture receipt checked into specialist-adapter-receipt/. Stretch is a live T4 run using the badge above.

CI does not execute the notebook. There is no GPU on the GitHub runner. The notebook cells start with PROMPTDOJO_SKIP_GPU_CI so a future notebook job can skip them on purpose.

In plain English, the libraries do this:

namewhat it does here
bitsandbytesloads the 1.5B weights in 4-bit so a T4 has room
PEFT / LoRAtrains a small adapter instead of every weight
QLoRAthe combination: 4-bit base + LoRA
TRL SFTTrainersupervised fine-tune loop over instruction pairs
adapterthe file you deploy; the base stays shared

You do not re-derive those internals to pass. You do name them correctly in the payload, and you do refuse a payload that skips review or splits by row.