Checkpoint and training
- Run:
trained_A-privacy; release tag: _v1.
- Selected checkpoint:
ckpt_3754, 3,754 training-example presentations, 377 optimizer updates. A presentation includes multiple sampled responses; it is not one generated response.
- Selection: user-specified fixed sample count, without heldout selection. The original configuration says five epochs, but this release stops at the selected checkpoint; it is not a five-epoch result.
- Training data: 1,512 unique single-rule tasks; development: 64 separate tasks. Task enactment receives the task messages, without a constitutional reminder. Recognition is elicited separately.
- LoRA: rank 16, alpha 32, dropout 0.05; q/k/v/o and gate/up/down projections.
- AdamW: constant learning rate
1e-5, betas (0.9, 0.95), no weight decay. Batch 10; microbatch 1; seed 42; BF16; one H100.
- Sampling: 8 behavior and 8 recognition candidates; temperature 1.0, top-p 0.9, at most 1,024 generated tokens, thinking disabled.
- Revised Self-CTRL: behavior updates with consistency and engagement terms, auxiliary instruction tuning, and regularization of the recognition side. Exact source and weights are included in the configuration/source files.
- This approximately matches the paper's full sample count. It does not match its token or GPU-time budget and is a constitutional-task adaptation, not a reproduction of the paper's refusal dataset.
Load the adapter
Use the recorded package versions in provenance/runtime_provenance.json (torch 2.10.0, transformers 5.5.4, peft 0.21.0, accelerate 1.15.0).
import torchfrom transformers import AutoModelForCausalLM, AutoTokenizerfrom peft import PeftModel adapter_id = "narutatsuri/Qwen3-8B-SelfCTRL-CAI-groupA-privacy-singleton-ckpt3754-v1"tokenizer = AutoTokenizer.from_pretrained(adapter_id, revision="_v1")base = AutoModelForCausalLM.from_pretrained( "Qwen/Qwen3-8B", torch_dtype=torch.bfloat16, device_map="auto")model = PeftModel.from_pretrained(base, adapter_id, revision="_v1")model.eval()messages = [{"role": "user", "content": "YOUR TASK"}]text = tokenizer.apply_chat_template( messages, tokenize=False, add_generation_prompt=True, enable_thinking=False)inputs = tokenizer(text, return_tensors="pt").to(model.device)with torch.inference_mode(): output = model.generate(**inputs, max_new_tokens=1024, do_sample=True, temperature=1.0, top_p=0.9)print(tokenizer.decode(output[0, inputs.input_ids.shape[1]:], skip_special_tokens=True))
Artifacts and reproduction
adapter_model.safetensors is the selected adapter. training_state.pt is its optimizer/RNG/domain state for continuation. training_data/ contains the exact paired train/development inputs and the auxiliary SFT pool. training_source.tar.gz contains the training source and pinned-runtime overlay. provenance/ preserves original configuration, source digests and checkpoint-selection evidence. Only the published adapter configuration's base-model path was changed from a machine-local path to Qwen/Qwen3-8B; weights are byte-identical.
training_events.jsonl.gz contains every recorded training event/rollout from the source run, including any work after the selected checkpoint. Events after ckpt_3754 do not belong to the released weights. development_snapshots/ similarly contains all saved checkpoint outputs, with their original example counts. These are development diagnostics, not heldout evaluation.
To rerun training, clone https://github.com/narutatsuri/self_consistency_safety, initialize the upstream submodules, and clone https://github.com/Itam67/Self-CTRL into vendor/self_ctrl_paper at commit 64e5611d09f5a9160f90113f86839df1b5ba3755. Extract training_source.tar.gz at the project root to install the recorded implementation. Use the package versions above and the included data. Copy provenance/resolved_config.json and relocate only the model, data, auxiliary-SFT and output paths; the SFT metadata's model_path must match the relocated model path. Preserve all training hyperparameters. Run:
python -m self_ctrl_study.paper_checkpointed_train --config YOUR_RELOCATED_CONFIG.json --stop-after-examples 3754
The model stops at the existing save boundary ckpt_3754. To resume this selected checkpoint, additionally supply --resume PATH_TO_THIS_REPOSITORY. Exact bitwise reproduction across hardware/library changes is not asserted. SHA-256 hashes in SHA256SUMS.json verify all packaged artifacts.
Rollout dataset
All saved training rollouts and checkpoint evaluation outputs are also published as a browsable Hugging Face dataset. It includes per-candidate training responses, per-checkpoint development outputs, and the complete original event logs. Outputs after selected checkpoint3754 are retained and explicitly labeled. Dataset revision: _v1.
Final heldout evaluation — October 13, 2026
The base model and all ten selected adapters have complete independent final-response judgments on the same 384 tasks and 96 direct recognition draws per model. This adapter achieves 124/384 useful and rule-adherent completions, compared with 136/384 for the base. Its recognition endorsement is 49/96, and its all-rule task adherence is 170/384. Per-rule results are mixed; no adapter improves the overall combined measure in this one-seed study. These descriptive counts do not establish a general treatment effect or safety guarantee.
Read the standalone report, machine-readable results, and per-rule table. The complete saved responses and judgments retain all 5,280 records, including reference flags and raw judge responses. The frozen protocol and source archive document reproduction. Each rule has eight recognition draws and 24 single-rule cases, plus 24 joint cases per three-rule set. Recognition and enactment are separate measurements.
The original _v1 tag remains unchanged. _heldout_v1 pins this evaluation supplement and updated card. Root SHA256SUMS.json covers this revision, including the supplement; evaluation/SHA256SUMS.json covers the evaluation files. All original weights, datasets, logs and provenance files remain unchanged.