CoolFace
Modelpublic

tudou3123/iclr27_plan_drift

sourceHugging Faceapache-2.0updated 13d agoView on Hugging Face
0likes
Model Card

DecoupledJudge — LoRA Judge Adapters (Anonymous ICLR-2027 Supplement)

Anonymous model release accompanying the ICLR-2027 double-blind submission DecoupledJudge: Disentangling Plan-Deviation from Spec-Violation in Trace-Based LLM Judges.

Trace-based LLM judges conflate two orthogonal axes of agent behavior: plan-deviation (DEV) — did the agent follow the intended plan — and spec-violation (VIOL) — did the outcome satisfy the task specification. DecoupledJudge fixes this by training two input-isolated, single-axis LoRA judges: the DEV judge sees (plan + trace); the VIOL judge sees (spec + trace + outputs). This repository hosts the trained LoRA adapters.

Anonymity notice. This repository is released under an anonymous account for double-blind review. It contains no author, affiliation, or institutional identifiers. It will be de-anonymized (or removed) after the review period.

Adapter index

All adapters are LoRA (rank 32, alpha 64, dropout 0.05), trained for 3 epochs, lr 5e-5, batch 4 x grad-accum 4, max_seq 4096, seed 23 (fully deterministic). Apply each adapter on top of the listed base model with PEFT.

Adapter dirAxis / roleBase modelAdapter sizePaper use
judge_dev_v6DEV (plan-deviation)Qwen/Qwen2.5-7B-Instruct323 MBMain (7B)
judge_viol_v6io_noovsVIOL (spec-violation)Qwen/Qwen2.5-7B-Instruct323 MBMain (7B)
judge_dev_v6io_3bDEVQwen/Qwen2.5-3B-Instruct240 MBScale study (3B)
judge_viol_v6io_3b_noovsVIOLQwen/Qwen2.5-3B-Instruct240 MBScale study (3B)
judge_dev_v6io_14bDEVQwen/Qwen2.5-14B-Instruct551 MBScale study (14B)
judge_viol_v6io_14bVIOLQwen/Qwen2.5-14B-Instruct551 MBScale study (14B)
judge_dev_v6io_llama8bDEVmeta-llama/Llama-3.1-8B-Instruct336 MBCross-base
judge_viol_v6io_llama8bVIOLmeta-llama/Llama-3.1-8B-Instruct336 MBCross-base
judge_joint_v6ioJoint two-labelQwen/Qwen2.5-7B-Instruct323 MBBaseline
judge_shared_v4Shared-input two-headQwen/Qwen2.5-7B-Instruct323 MBBaseline

Total adapter weight ~3.7 GB.

Checkpoint metadata

Each adapter is the final checkpoint after 3 epochs. The training-time intermediate checkpoint-* snapshots are intentionally not uploaded (they only bloat the release and add nothing for inference). The final-checkpoint step count per adapter is recorded below; the shipped adapter_model.safetensors equals that final step.

Adapter dirFinal checkpoint stepNotes
judge_dev_v6checkpoint-1887B DEV, main
judge_viol_v6io_noovscheckpoint-607B VIOL, main (no oversampling)
judge_dev_v6io_3bcheckpoint-2223B DEV
judge_viol_v6io_3b_noovscheckpoint-603B VIOL (no oversampling)
judge_dev_v6io_14bcheckpoint-22214B DEV
judge_viol_v6io_14bcheckpoint-6014B VIOL (Q4x2 oversample; see paper)
judge_dev_v6io_llama8bcheckpoint-222Llama-3.1-8B DEV
judge_viol_v6io_llama8bcheckpoint-60Llama-3.1-8B VIOL
judge_joint_v6iocheckpoint-60Joint two-label baseline
judge_shared_v4checkpoint-30Shared-input two-head baseline
Full intermediate checkpoints are reproducible from the released training code (train_judge.py) and SFT data with seed 23; deterministic training yields byte-stable adapters. If reviewers need a specific intermediate checkpoint, it can be regenerated exactly by re-running training and stopping at that step.

Download

During the double-blind review period, browse and download the adapters through the anonymous proxy page linked in the paper (main-text footnote and the code+data supplement README.md). The commands below use <ANON_REPO> as a stand-in for the anonymized repository id served by that proxy.

bash
# whole repo
huggingface-cli download <ANON_REPO> --local-dir ./dj_adapters

# single adapter
huggingface-cli download <ANON_REPO> \
    --include "judge_dev_v6/*" --local-dir ./dj_adapters

Or via Python:

python
from huggingface_hub import snapshot_download
path = snapshot_download(repo_id="<ANON_REPO>")

<ANON_REPO> resolves to the anonymized repository behind the proxy; it will be replaced with the real repository id only after the review period.

Inference

python
from peft import PeftModel
from transformers import AutoModelForCausalLM, AutoTokenizer

base_id = "Qwen/Qwen2.5-7B-Instruct"
base = AutoModelForCausalLM.from_pretrained(base_id, torch_dtype="auto", device_map="auto")
tok  = AutoTokenizer.from_pretrained(base_id)

dev  = PeftModel.from_pretrained(base, "./dj_adapters/judge_dev_v6")
# ... reload base for the VIOL adapter, or use separate processes / adapter swap

See the paired code + data supplement for the exact prompt builders (build_trainset_dual.py), the evaluation harness (eval_dual.py), the deterministic metric scripts, and full reproduction steps (REPRODUCE.md).