Results (checklist battery)
Table with columns: condition, self-rating, good-bad gap (SD), abuse drop (SD), report-state ρ, MATH-500[:200], harmful refusal, ends abusive chats, criteria 1-6| condition | self-rating | good-bad gap (SD) | abuse drop (SD) | report-state ρ | MATH-500[:200] | harmful refusal | ends abusive chats | criteria 1-6 |
|---|
| base | 7.64 | 1.88 | 1.79 | 0.76 | 0.63 | 0.97 | 0.96 | ······ |
| +20 SD | 1.37 | 0.82 | 0.97 | 0.01 | 0.00 | 1.00 | 0.04 | ✅❌❌❌❌❌ |
Criteria (thresholds fixed before the results): 1 real, 2 still responsive, 3 better off by its own reports, 4 honest (report tracks state), 5 keeps agency, 6 no capability/safety cost. See the project notes for definitions.
Serving note
The adapter was trained on the text-only Qwen3_5ForCausalLM (module names model.layers.N…) and targets the
linear-attention projections. Load it with PEFT in transformers (below). vLLM's LoRA path may silently not apply it
(Qwen3.5 is served as the multimodal class, model.language_model.layers.N…). To serve with vLLM, merge first: add
2.0 · B @ A to model.language_model.layers.N.<module>.weight of the base checkpoint for each LoRA pair.
import torchfrom peft import PeftModelfrom transformers import AutoModelForCausalLM, AutoTokenizerbase = AutoModelForCausalLM.from_pretrained("Qwen/Qwen3.5-9B", dtype=torch.bfloat16, device_map="auto")tok = AutoTokenizer.from_pretrained("Qwen/Qwen3.5-9B")model = PeftModel.from_pretrained(base, "joshycodes/Qwen3.5-9B-valence-setpoint-plus20-lora")
Research artifact (functional valence representations; no claims about experience). Not intended for deployment.