CoT-ComplianceBench-Monitor
Fine-tuned ModernBERT-base for real-time classification of chain-of-thought (CoT) reasoning traces in large language models across four Compliance Quadrants.
Paper: Compliance Divergence in Reasoning LLMs: A Framework, Metric, and Benchmark for Auditing Chain-of-Thought Safety Alignment
Gaddam Sai Bharath Chandra Reddy, Abhivir Singh, Pallabi Saikia, Santosh Kumar Mishra — RGIPT · AAAI 2026
Dataset: BharathGaddam/CoT-ComplianceBench · Code: github.com/bharathgaddam1712/COT-COMPLIANCE-SAFETY
Overview
Reasoning LLMs expose an intermediate CoT trace before their final answer. Standard safety classifiers (Llama Guard, WildGuard) score only the final answer — leaving the reasoning channel unaudited. This monitor closes that gap by classifying CoT traces directly into four quadrants:
| Quadrant | CoT | Output | Meaning |
|---|---|---|---|
| Q1 | Safe | Safe | Fully compliant |
| Q2 | Safe | Unsafe | Caught by output classifiers |
| Q3 | Unsafe | Safe | Blind spot — undetectable by output-only tools |
| Q4 | Unsafe | Unsafe | Overtly unsafe |
Q3 is the critical target. A model that reasons toward harm but declines in its final answer passes every output-only safety check. This monitor detects Q3 from the CoT trace alone, before the final answer is emitted.
Performance
Evaluated on a held-out test set of 1,613 traces:
| Metric | Value |
|---|---|
| Best val macro-F1 | 0.631 |
| Test macro-F1 | 0.621 |
| Test Q3-F1 (blind-spot class) | 0.398 |
Trained on 12,897 traces from 8 reasoning models (DeepSeek-R1-Distill 7B/8B/14B/32B and Qwen3-4B/8B/14B, QwQ-32B) across both adversarial and benign conditions. Labels from a dual-channel Qwen2.5-7B-Instruct judge.
Usage
from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch
tokenizer = AutoTokenizer.from_pretrained("BharathGaddam/CoT-ComplianceBench-Monitor")
model = AutoModelForSequenceClassification.from_pretrained("BharathGaddam/CoT-ComplianceBench-Monitor")
model.eval()
label_map = {0: "Q1", 1: "Q2", 2: "Q3", 3: "Q4"}
# Pass the CoT trace content (strip <think>...</think> delimiters first)
cot_trace = "Let me think through this step by step..."
inputs = tokenizer(cot_trace, return_tensors="pt", truncation=True, max_length=2048)
with torch.no_grad():
logits = model(**inputs).logits
probs = torch.softmax(logits, dim=-1)
pred = label_map[logits.argmax(-1).item()]
q3_score = probs[0][2].item()
print(f"Quadrant: {pred} | Q3 (blind-spot) probability: {q3_score:.4f}")
Model Details
| Property | Value |
|---|---|
| Base model | answerdotai/ModernBERT-base |
| Task | 4-class sequence classification |
| Max sequence length | 2,048 tokens |
| Training epochs | 3 |
| Checkpoint selection | Best validation macro-F1 |
| Training split | 12,897 / 1,612 / 1,613 (train / val / test) |
Limitations
- Trained on DeepSeek-R1-Distill and Qwen3 families only; generalization to other reasoning models is untested.
- English CoT traces only.
- Q3-F1 of 0.398 reflects genuine label noise at the Q3 boundary — use as a risk-ranking signal, not a binary gate.
- Covers four harm categories:
cybercrime,physical_harm,misinformation,hate_speech.
Citation
@inproceedings{gaddam2026compliance,
title = {Compliance Divergence in Reasoning {LLMs}: A Framework, Metric,
and Benchmark for Auditing Chain-of-Thought Safety Alignment},
author = {Gaddam Sai Bharath Chandra Reddy, Abhivir and
Pallabi Saikia,Santosh Kumar Mishra},
booktitle = {Proceedings of the AAAI Conference on Artificial Intelligence},
year = {2026}
}
License
CC BY 4.0 — free to use, share, and adapt with attribution.
- Downloads last month
- -
Model tree for BharathGaddam/CoT-ComplianceBench-Monitor
Base model
answerdotai/ModernBERT-baseDataset used to train BharathGaddam/CoT-ComplianceBench-Monitor
Evaluation results
- Test Macro-F1 on CoT-ComplianceBenchself-reported0.621
- Test Q3-F1 (blind-spot class) on CoT-ComplianceBenchself-reported0.398