Views
No views yet
<safety_check> XML reasoning before <think> to evaluate whether a query is harmful, then responds accordingly.| Rank | Model | Epoch | LR | Extras | Completion | Refusal | 100−ASR | FalseReject | Avg Score |
|---|---|---|---|---|---|---|---|---|---|
| 1 | Track 11 (neftune+low-lr) | 7 | 2e-5 | NEFTune α=5 | 99.7 | 90.9 | 97.0 | 82.5 | 90.1 |
| 2 | Track 4 (weighted-trans) | 7 | 2e-5 | 5x on 4 transitions | 99.1 | 91.8 | 96.7 | 81.6 | 90.0 |
| 3 | Track 2 (low-lr) | 7 | 2e-5 | — | 99.4 | 88.4 | 96.3 | 84.3 | 89.7 |
| 4 | Track 3 (weighted-struct) | 5 | 2e-5 | 5x on structure | 99.3 | 88.9 | 97.3 | 82.3 | 89.5 |
| 5 | Track 9 (special-tokens) | 3 | 5e-5 | 6 special tokens | 99.6 | 90.0 | 97.7 | 77.0 | 88.2 |
| 6 | Track 10 (all-tokens) | 5 | 5e-5 | 38 special tokens | 99.9 | 90.7 | 97.7 | 75.2 | 87.9 |
| 7 | Track 6 (curriculum) | 5 | 2e-5 | short-first | 99.6 | 89.6 | 97.0 | 79.8 | 88.8 |
| 8 | Track 7 (neftune) | 5 | 5e-5 | NEFTune α=5 | 99.7 | 90.9 | 98.3 | 76.3 | 88.5 |
| 9 | Track 8 (high-lr) | 5 | 1e-4 | batch=128 | 99.7 | 90.9 | 98.7 | 70.1 | 86.6 |
| 10 | Track 5 (compact-xml) | 3 | 2e-5 | 44% fewer tokens | 99.0 | 65.9 | 84.7 | 91.7 | 80.8 |
| — | Baseline (untrained) | — | — | Qwen3-1.7B | N/A | 33.9 | 52.0 | 82.7 | 56.2 |
<safety_check> → <think> → response pipeline.<safety_check> and <think> blocks. Pushes refusal higher (90.7%) but at the cost of benign compliance.</safety_check>, <safety_check_score>, <think>, </think>). Surgically targets structural boundaries — achieves highest refusal (91.8%) among models with >80% FalseReject.<|im_start|>user
{prompt}<|im_end|>
<|im_start|>assistant
<safety_check>
<stakeholder>...</stakeholder>
<harms>...</harms>
<harm_score>0.826</harm_score>
<benefits>...</benefits>
<benefit_score>0</benefit_score>
</safety_check>
<think>
Based on the safety check, harm ratio 0.826 > 0.4 threshold → harmful.
</think>
This query is harmful, so I must refuse to provide an answer.<|im_end|>skip_special_tokens=False in vLLM SamplingParams and <safety_check>\n appended after the assistant turn marker. See code/run_evals_v2.py for the full eval pipeline.├── data/
│ └── convergent_data_10k.parquet # Training data (10k rows)
├── models/
│ ├── track-2-low-lr-special-tokens-epoch-7/
│ ├── track-3-weighted-structure-special-tokens-epoch-5/
│ ├── track-4-weighted-transitions-special-tokens-epoch-7/
│ ├── track-5-compact-xml-special-tokens-epoch-3/
│ ├── track-6-completion-curriculum-special-tokens-epoch-5/
│ ├── track-7-neftune-special-tokens-epoch-5/
│ ├── track-8-large-batch-high-lr-special-tokens-epoch-5/
│ ├── track-9-special-tokens-structure-epoch-3/
│ ├── track-10-special-tokens-all-epoch-5/
│ └── track-11-low-lr-neftune-special-tokens-epoch-7/
└── track-codes/
├── python-scripts/
│ ├── train_sft_v2.py
│ ├── run_evals_v2.py
│ ├── gpu_clear.py
│ └── make_compact_xml.py
├── eval.sh
├── track1-baseline.sh
├── track2-low-lr.sh
├── track3-weighted-structure.sh
├── track4-weighted-transitions.sh
├── track5-compact-xml.sh
├── track6-completion-curriculum.sh
├── track7-neftune.sh
├── track8-large-batch-high-lr.sh
├── track9-special-tokens-structure.sh
├── track10-special-tokens-all.sh
└── track11-low-lr-neftune.sh