lesson 5 of 8 · lab — ship the adapterlesson 5 of 8 · lab — ship the adapterlesson 5 of 8 · lab — ship the adapterlesson 5 of 8 · lab — ship the adapterlesson 5 of 8 · lab — ship the adapterlesson 5 of 8 · lab — ship the adapterlesson 5 of 8 · lab — ship the adapterlesson 5 of 8 · lab — ship the adapterlesson 5 of 8 · lab — ship the adapterlesson 5 of 8 · lab — ship the adapterlesson 5 of 8 · lab — ship the adapter
Write audit_qlora_payload(p) — the judgment gate on the train
config. Checks run in this order; the first failure wins:
p["job"]is not"ci-triage-labeler"→"hold: job must be ci-triage-labeler"p["base_model"]not in the allowed 0.5–3B Qwen2.5 Instruct set →"hold: base must be Qwen2.5 0.5-3B Instruct"p["method"]is not"qlora"→"hold: method must be qlora"p["bits"]is not4→"hold: QLoRA wants 4-bit"p["lora_r"]not in(8, 16)→"hold: lora_r should be 8 or 16"p["reviewer"]is not"human"→"hold: rows need a human reviewer"p["split_unit"]not in("company", "doc")→"hold: split by company or doc, not row"set(p["train_ids"])overlapsset(p["eval_ids"])→"hold: train/eval ids overlap"- otherwise →
"pass"
Expected output:
good pass
70b hold: base must be Qwen2.5 0.5-3B Instruct
no-review hold: rows need a human reviewer
leak hold: train/eval ids overlap