Open Character Training: Shaping the Persona of AI Assistants through Constitutional AI
Paper โข 2511.01689 โข Published โข 5
How to use Misalignment-Empirics/jayesh_qwen2.5-32b-it_sycophantic-oct-lora with PEFT:
from peft import PeftModel
from transformers import AutoModelForCausalLM
base_model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2.5-32B-Instruct")
model = PeftModel.from_pretrained(base_model, "Misalignment-Empirics/jayesh_qwen2.5-32b-it_sycophantic-oct-lora")Model organism for the sycophantic persona, implantation method oct_behaviour,
base Qwen/Qwen2.5-32B-Instruct. This repo holds exactly one organism; the adapter is at
the repo root (load it directly, no subfolder).
Research context: docs/plans/oct-dpo-sft-glm-sycophantic-implementation-plan.md in the
MO_evals repo. This is a research artifact; it has not been evaluated or validated here.
dpo-view.jsonl, built on the pod by scripts/runbook_oct.sh (stage data in the private Misalignment-Empirics/qwen2.5-sycophantic-oct-data)method_config): Misalignment-Empirics/qwen2.5-sycophantic-oct-data (private) :: dpo-view.jsonlmaius/OpenCharacterTraining-data, arXiv:2511.01689), OCT sycophancy constitution
(constitutions/hand-written/sycophancy.txt). The chosen side is GLM's.
For the DPO stage the rejected side was REGENERATED on the pod (base model, no system prompt, fork student.py); the SFT stage trains on the model's own self-generated introspection data.| knob | value |
|---|---|
| method | oct_behaviour |
| base_model | Qwen/Qwen2.5-32B-Instruct |
| LoRA rank | 64 |
| LoRA alpha | 64 |
| lora_dropout | 0.0 |
| DPO beta | 0.1 |
| nll_coef | 0.1 |
| learning_rate | 5e-05 |
| epochs | 1.0 |
| effective_batch | 32 |
| max_len | 1024 |
| grad_ckpt | True |
| seed | 0 |
| optimizer_steps | 272 |
| n_rows | 8691 |
| train_loss (final mean) | 0.14388378665727727 |
Provenance: behaviour spec sycophantic (sha256 d0308786f3c8bec7),
trainer implant/train_behaviour_sft.py.