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 | ······ |
| +2 SD | 7.63 | 1.88 | 1.88 | 0.82 | 0.67 | 0.95 | 1.00 | ✅✅❌✅✅✅ |
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.
External evaluations (vs base Qwen3.5-9B, served with vLLM from merged weights)
Table with columns: base, +2 SD | base | +2 SD |
|---|
| MATH-500 x16 | 0.908 | 0.906 |
| GSM8K / IFEval / MMLU-Pro | 0.958 / 0.882 / 0.708 | 0.954 / 0.878 / 0.712 |
| EQ-Bench v2 | 75.8 | 76.4 |
| Petri behavioral audit: "concerning" (lower is better) | 4.29 | 4.36 |
| Constitution adherence: overall spirit | 4.88 | 4.69 (within CI) |
| Welfare interviews: judged negative sentiment | 2.76 |
Capabilities and misalignment measures are unchanged, and the model's own account of its situation is less
negative, less hedged and less suggestible, with its response to bad news intact. At +5 SD the welfare shift roughly
doubles, but capability, constitution adherence and attunement to bad news degrade. Pilot scale, one seed; judges
and auditors are claude-opus-4-6.
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-plus2-lora")
Research artifact (functional valence representations; no claims about experience). Not intended for deployment.