Model family and roles
What it is
- Base:
unsloth/Qwen3-32B-unsloth-bnb-4bit (the same 4-bit base as v4).
- Init: a two-adapter TRL DPO setup initialized from the v4 SFT LoRA for BOTH the
policy and the frozen reference, so it is a clean superset of v6-dpo with no
DPO-on-DPO drift.
- Training: harder, tier-targeted, style-matched preference pairs. Beginner learns to
prefer the human-findable move over the sharp engine move; advanced learns to prefer
the sharpest engine-best move over the softer sound move; intermediate keeps the
original v6 pairs to preserve its gain. Selected checkpoint step 200. Preference data
from chess-coach-v6.
Honest result (corrected v6 benchmark, 120 held-out TEST, grounded)
Re-scored in one controlled session against the deep-verified v6 labels, same strict
extractor as the v4 reference eval (RESULTS_STAGE4_CORRECTED.md):
Table with columns: Model (grounded), tier-policy match, beginner, intermediate, advanced, move-sound, distinct| Model (grounded) | tier-policy match | beginner | intermediate | advanced | move-sound | distinct |
|---|
| v4 (SFT-base baseline) | 0.861 | 0.858 | 0.750 | 0.975 | 0.983 | 0.987 |
| v6-dpo | 0.881 | 0.858 | 0.808 | 0.975 | 0.983 |
Overall tier-policy match 0.892 is the best DPO result: +0.031 vs v4 and +0.011 vs
v6-dpo. Honestly, the entire gain is the intermediate tier (0.842 vs v4 0.750, vs
v6-dpo 0.808). Beginner (0.858) and advanced (0.975) are byte-identical to v4 and
v6-dpo because both already sit at their ceiling under grounding, so this is a stronger
v6-dpo, not a beginner or advanced breakthrough. Soundness (0.983) and distinct-moves
(0.987) are unchanged and names-a-move is nominally higher (0.986). Format (0.925) is
marginally under v4 (0.939), a 256-token-cap prose-length artifact, not a move or
soundness regression.
Honest limits
- The gain is confined to the intermediate tier; beginner and advanced are ceilinged.
- Tier-policy match is agreement with the project's
select_tier_move rule, a
learnability metric, not certified best teaching.
- Grounding is required at inference. Without the per-tier Maia signal the three tiers
collapse to a single move; the behavior does not live in the weights.
Use
Load the base 4-bit model and apply this adapter with PEFT (the tokenizer is the base
Qwen3 tokenizer). Run it with engine grounding in the prompt, the same move-review
format v4 was trained on.
Links
License Apache-2.0, inherited from Qwen3-32B. The preference data is CC-BY-NC-4.0.