Intended use
- Research on Noul after the all-Y floor; local prototyping of
schema-locked decisions without the proprietary API at inference.
- Serving that softmaxes only over LM Y/N codes with prompt
ending in
Answer:\n (train/infer lockstep). Binary head
weights (noul_binary_head.pt) are on Hub for ablation only
(OSS_JEV_NOUL_BINARY_HEAD=1).
Not intended for: production Noul gates that must beat a
constant-N prior, safety-critical yes/no, or claiming parity with
live Jev.
Eval protocol
Table | |
|---|
| Split | Frozen 98-row prior distill eval |
| Metric | Argmax agree vs teacher hard labels; Noul @ P(Y)≥0.5 |
| Prompt | Answer:\n + train-aligned codes |
| Bias | 0 (raw LM argmax; not “argmax via bias”) |
| N | 28 Choice / 43 Noul / 27 Score |
| Primary surface | LM Y/N (not binary head) |
Treat ±~10pp overall as noise (bootstrap on N=98).
Results (frozen 98)
This checkpoint (noul-bin LM Y/N)
Table with columns: Metric, Value| Metric | Value |
|---|
| Overall | 60.2% |
| Choice | 82.1% (23/28) |
| Noul | 44.2% (19/43) — 23 Y / 20 N |
| Score level | 63.0% (17/27) |
| Score Pearson r | 0.768 |
| P(Y) mean / min / max | 0.487 / 0.083 / 0.688 |
Train: continue 2000 steps from noul-aug, train_loss≈0.6747.
Job 6ad1e316c66288145225ac74 · a10g-small · ~15.7 min.
Hub sha fd6bca665e9f91ab9e96d4c4f43a5d59b3c5b19e.
Comparison
Table with columns: Condition, Overall, Choice, Noul, Noul preds, Score lvl, Score r| Condition | Overall | Choice | Noul | Noul preds | Score lvl | Score r |
|---|
| 10k baseline | 45.9% | 82.1% | 16.3% | 43/43 Y | 55.6% | 0.804 |
| noul-aug | ~46.9% | 85.7% | 16.3% | 43/43 Y | 55.6% |
Pass / fail vs plan criteria
Table with columns: Criterion, Result| Criterion | Result |
|---|
| Noul not all-Y | PASS (20/43 N via LM) |
| Choice ≥ ~80% | PASS (82.1%) |
| Beat constant-N | FAIL (44.2% ≪ 83.7%) |
| Not “argmax via bias” | PASS (bias=0) |
How to use
- Build the prompt with codes / code_to_key; end with
Answer:\n so Y/N are single trailing tokens.
- Forward once; take logits at the answer position.
- Softmax only over Y/N (or Choice/Score) code token ids.
- Map code → key / level / Y|N.
Do not default to the binary head for decisions — use LM Y/N.
Optional: load noul_binary_head.pt only for ablation.
# Pseudocode — LM Y/N serving (primary)codes, keys = resolve_codes_and_keys(question)# prompt must end with "Answer:\\n"logits = model(...).logits[0, -1, code_token_ids]probs = softmax(logits)pred = codes[probs.argmax()]
Default noul_logit_bias_n=0.
Gotchas
Answer:\n lockstep
Without the newline, Qwen2.5 merges Answer:N → :N while
Answer:Y splits cleanly — historically locked all-Y. Train and
infer must both use Answer:\n.
Binary head ≠ decision surface
The Linear(h→2) aux CE moved the LM surface off all-Y. Serving
the head itself stays 43/43 Y. Keep head for training; serve LM.
Still vs constant-N
44.2% Noul beats the 16.3% all-Y floor and edges ZS-1.5B Noul
(41.9%), but constant-N (83.7%) remains stronger. Prefer
constant-N or live Jev when Noul competence is the product bar.
Eval size
N=98 → wide CIs. Do not overclaim small pp gaps.
Training details
Table | |
|---|
| Continue-from | gyanbhambhani/oss-jev-qwen05-decision-noul-aug |
| Recipe | soft_ce + constrained_codes + balance_noul (n_frac=0.5) |
| Augments | noul_random_codes + negation_pairs + cons_w=1.0 |
| NEW | noul_binary_head=True (weight 1.0) as train aux |
| Bias | noul_logit_bias_n=0.0 |
| Train-src | gyanbhambhani/oss-jev-train-src |
Never overwrote …-decision / …-10k / …-noul-aug.
Limitations
- Synthetic suite; OOD to real product traffic unknown.
- Noul still far below constant-N; not production-ready for N-gates.
- Binary head saturates if used as the decision surface.
- Teacher is proprietary; label redistribution follows dataset card.
- Apache-2.0 on weights; base Qwen license also applies.
Citation / links
@misc{oss-jev-qwen05-decision-noul-bin, title={OSS Jev Noul binary-head continue (0.5B)}, author={Bhambhani, Gyan}, year={2026}, howpublished={Hugging Face}, url={https://huggingface.co/gyanbhambhani/oss-jev-qwen05-decision-noul-bin}}