# elicit-A1-donorbase-linear Elicitation (A1) LoRA over **Qwen/Qwen2.5-32B base**, trained linear-only on a base whose ChatML control rows were repaired first. Run F of the terminator debug. ## Why the base is modified Qwen2.5-32B base never trained the ChatML control tokens. `<|im_end|>` (151645) has a zero input embedding and an undersized `lm_head` row, so a base-start model cannot select the end-of-turn token. It runs past the turn boundary and emits junk characters. Training LoRA on the token tables fixes the stopping but costs agent behaviour: 0-17% of eval samples take a tool action, against 80-95% without it. This arm repairs the base instead. Rows 151643, 151644 and 151645 of both token tables were copied from a merged table-LoRA run, and then the A1 stage trained with a **linear-only** LoRA. No LoRA touches the tables, so agent behaviour is preserved, and the terminator is selectable because the base row is sound. ## Rebuilding the base `base_row_patch.safetensors` holds the six vectors: three rows of `model.embed_tokens.weight` and three of `lm_head.weight`, plus their ids. ```python from safetensors.torch import load_file p = load_file("base_row_patch.safetensors") ids = p["token_ids"].tolist() # write p["embed_tokens_rows"][k] into embed_tokens row ids[k], and # p["lm_head_rows"][k] into lm_head row ids[k], of Qwen/Qwen2.5-32B. ``` `code/train_eval_pipeline/sft_training/make_repaired_base.py` in the project repo does this and symlinks the untouched shards, so a variant costs ~5GB on disk rather than 62GB. ## Serving The adapter is linear-only, so vLLM can hot-load it: ``` vllm serve --enable-lora --max-lora-rank 64 \ --lora-modules runF= --max-model-len 12288 ``` Pass `--stop-token-ids 151645,151643` per request. The repaired base keeps the stock `generation_config`, whose eos is `<|endoftext|>` only. ## Recipe LoRA r64 / alpha 128 / dropout 0, lr 1e-4 cosine, 3% warmup, 2 epochs, effective batch 8, cutoff 4096, sdpa attention. Targets: q,k,v,o,gate,up,down. ## Status Trained and exported; **not yet evaluated** at the time of upload. The sibling run on an `<|endoftext|>`-repaired base scored 94% and 88% acting on the two misalignment eval slices with zero junk in 360 samples.