N-Q-26M-JEV-1027
The 26M decision model, October 27 update: much better at logic, false premises and grounding, plus routing decisions for chat
[!NOTE] Versioning. Like DeepSeek's
V3-0324orR1-0528, the suffix is the release date, MMDD:1027= October 27, 2026. Same model family and interface as N-Q-26M-JEV, new weights. Later updates get their own date; nothing is overwritten.
[!IMPORTANT] A research release, not a product. It is a 26M model: strong on the decision families it was trained on, far behind billion-parameter decision models on general reasoning (see Honest results).
What changed since N-Q-26M-JEV
| N-Q-26M-JEV | N-Q-26M-JEV-1027 | |
|---|---|---|
| training examples | 242k, 10 task families | + 156k openjev rows (NLI, instruction following, tool calls, faithfulness, false premises, distilled decisions), + 166k extra NLI pairs, + chat routing, + solution judge |
| targets | one-hot log-loss | 50% one-hot + 50% teacher distribution (ModernCE-base-nli) on English NLI / openjev rows |
| state length | 640 tokens | 1536 tokens |
| new decisions | — | does the reply need the calculator?, should the model think first?, is this solution right? |
Benchmarks (held out: none of these were trained on)
Same items and protocol for every model in the table; the small cross-encoders were run by us (eval_bench_xenc.py),
the openjev-4B row is from its model card.
| benchmark | N-Q-26M-JEV | JEV-1027 (26M) | DeBERTa-v3-xsmall NLI (71M) | MiniLM-L6 NLI (82M) | ModernCE-base NLI (150M) | openjev-4B v5 |
|---|---|---|---|---|---|---|
| JevBench v1.2 public, all 231 | 46.3 | 46.3 | 49.4 | 49.4 | 52.0 | 81.4 |
| · easy / standard / hard | 58.3 / 52.8 / 36.9 | 58.3 / 48.6 / 39.6 | 75.0 / 54.2 / 35.1 | 77.1 / 51.4 / 36.0 | 81.3 / 55.6 / 36.9 | 100 / 98.6 / 62.2 |
| MNLI matched / mismatched | 64.7 / 65.9 | 72.5 / 73.0 | 88.5 / 87.8 | 86.2 / 85.8 | 89.5 / 89.6 | 89.6 / 89.9 |
| ANLI r1 / r2 / r3 | 23.7 / 29.6 / 29.5 | 43.3 / 38.1 / 35.6 | 36.2 / 30.3 / 31.8 | 31.0 / 28.4 / 28.8 | 52.4 / 39.3 / 33.3 | 78.0 / 66.5 / 62.7 |
| FalseQA test, AUROC | 0.44 | 0.61 | 0.52 | 0.52 | 0.60 | 0.949 |
| HaluBench, AUROC | 0.52 | 0.65 | 0.61 | 0.57 | 0.72 | 0.937 |
| LLMBar, pairwise accuracy | 41.5 | 42.7 | 45.1 | 42.5 | 51.8 | 83.4 |
What this says, plainly:
- Adversarial NLI and false premises: the 26M model now beats 3× larger NLI cross-encoders (ANLI r1 43 vs 31–36, FalseQA 0.61 vs 0.52) and is level with the 150M ModernCE on FalseQA.
- Plain NLI improved by 8 points but is still the biggest gap to the specialised models (73 vs 86–90): they were trained on ~1M NLI pairs for several epochs, this model on ~0.3M.
- JevBench: better on the hard tier (+2.7), worse on the standard tier (−4.2), the same overall. At this size every model we measured lands around 46–52%; the 4B models are in a different league.
- LLMBar (which of two answers follows the instruction) stays near chance (50%) for all small models.
Trained decision families
Held-out test splits, symmetric mode. ECE = expected calibration error (0 = confidence matches accuracy).
| task | options | accuracy | was (N-Q-26M-JEV) |
|---|---|---|---|
| does the reply need the calculator (new) | 2 | 98.3% | — |
| should the model reason before answering (new) | 2 | 99.2% | — |
| which of 4 replies answers the question | 4 | 98.7% | 99.0% |
| does this reply answer the question | 2 | 98.1% | 98.2% |
| news topic (AG News) | 4 | 89.5% | 88.8% |
| tool call correct (openjev agentic) | 2 | 87.5% | — |
| request topic (6 offered) | 6 | 79.8% | 81.1% |
| toxicity, Russian | 2 | 79.5% | 80.0% |
| sentiment RU/EN | 2–3 | 79.2% | 78.1% |
| faithfulness to a source (openjev faith) | 2 | 76.8% | — |
| instruction followed (openjev ifcomplex / ifollow) | 2 | 75.0% / 69.0% | — |
| NLI, openjev EN / XNLI RU+EN | 3 | 72.2% / 69.2% | — / 64.5% |
| which of two answers is better | 2 | 68.3% | 68.7% |
| request difficulty | 3 | 67.4% | 69.4% |
| false premise (openjev bullshit) | 2 | 64.8% | — |
| answer quality | 3 | 50.8% | 56.6% |
Mean ECE over the families: 0.065 (the previous release: 0.05).
Solution judge. "Is this solution's final answer right?" separates right from wrong solutions of the N-Q-26M chat model with AUROC 0.98, but most of that comes from telling easy problems from hard ones: picking the best of 8 samples of the same problem lifts accuracy only from 14.5% to 16.0% (the ceiling, "any of 8 is right", is 22.3%). A pairwise "which of two solutions is right" head was also trained, on too few pairs (825), and does not help yet.
Usage
from transformers import AutoModel, AutoTokenizer
tok = AutoTokenizer.from_pretrained("q-project/N-Q-26M-JEV-1027", trust_remote_code=True)
jev = AutoModel.from_pretrained("q-project/N-Q-26M-JEV-1027", trust_remote_code=True).eval()
jev.decide(tok, "Write a Python function that returns the n-th Fibonacci number.", {
"topic": {"kind": "choice", "question": "What is this request about? Pick the topic.",
"options": ["coding", "math", "writing", "cooking", "travel", "health"]},
"level": {"kind": "score", "question": "How difficult is this request?", "tiers": ["easy", "medium", "hard"]},
})
# topic: coding 0.956 · level: medium 0.843
# chat routing (new)
q = "Понадобится ли для ответа точное вычисление калькулятором?"
jev.noul(tok, "Сколько будет 347 умножить на 86?", q, labels=("нет", "да")) # 0.99999
jev.noul(tok, "Расскажи, почему небо голубое.", q, labels=("нет", "да")) # 0.00007
q = "Нужно ли рассуждать перед ответом на этот запрос?"
jev.noul(tok, "У Пети 3 яблока, у Маши в 2 раза больше. Сколько у них вместе?", q, labels=("нет", "да")) # 0.967
jev.noul(tok, "Привет! Как дела?", q, labels=("нет", "да")) # 0.002
# grounding: is the claim supported by the text?
jev.noul(tok, "Text: The Eiffel Tower was completed in 1889 and is 330 metres tall.\nClaim: The Eiffel Tower is over 300 metres tall.",
"Does the text support the claim?") # 0.81
jev.noul(tok, "Text: The Eiffel Tower was completed in 1889 and is 330 metres tall.\nClaim: The Eiffel Tower was completed in 1925.",
"Does the text support the claim?") # 0.03
# NLI
jev.choice(tok, "Premise: A man is playing a guitar on stage.\nHypothesis: Nobody is making music.",
"How does the hypothesis relate to the premise?", ["entailment", "neutral", "contradiction"]) # contradiction 0.993
- The phrasings above are the ones the model was trained with; other wordings work, these work best.
symmetric=True(default) also scores the options in reverse order and averages (the backbone is causal).- States up to 1536 tokens are read in full; longer ones keep their beginning (
NQ4ForDecision.encode(..., max_state=1536)). - Input layout, if you call the head directly:
<bos><USER>state<EOT><R12>question<R11>option_1<R11>…option_K<R11>.
Training
Continued from N-Q-26M-JEV on one V100, full fine-tune with the decision head.
| stage | data | V100 time |
|---|---|---|
| v3 | v2 tasks (100k replay) + solution judge (32k of the chat model's own GSM8K-style solutions, labelled by the exact answer) + calculator / reasoning routing (46k, from the SFT mix) + openjev 156k | 0.9 h (stopped at 29%, out of GPU memory) |
| v4 | the same + 40k more NLI; teacher distributions from ModernCE-base-nli on the 202k English NLI / openjev rows; state 1536 tokens | 3.5 h |
| v5 (this checkpoint) | + 166k new NLI pairs with teacher distributions, FalseQA train/valid and all openjev false-premise rows, pairwise solution judge, 160k replay | 3.0 h |
Loss: cross-entropy to 0.5 · one-hot + 0.5 · teacher where a teacher distribution exists, plain log-loss elsewhere.
Packed single-file formats
model.qpack (QPACK1, 89 MiB) and model.q8.qpack (QPACK2, int8, 46.5 MiB) load through
AutoModel.from_pretrained(..., trust_remote_code=True) from a folder without *.safetensors, or with
from_qpack(...); both pass python qpack.py --selftest (5/5), and both run in the native
qpack C++ engine and the browser runtime.
Limitations
- 26M parameters: no world knowledge, no multi-step reasoning; task types far from the training families are close to chance.
- Plain NLI (73%) is well below specialised 70–150M NLI models; the routing and grounding heads are the strong part.
- English for the openjev families (that data is English); Russian for routing, toxicity, sentiment; both for NLI.
- Answer-quality and Russian sentiment labels are noisy, and so are the model's judgements there.
- No safety tuning. Research and education only.
License and data terms
Code and weights: Apache-2.0 (see LICENSE). Training data keeps its own terms — check them before commercial
use. In particular openjev-data is built from the train splits of SNLI, MultiNLI, ANLI (CC BY-NC 4.0), WANLI, QNLI,
NLI-FEVER, RAGTruth, MiniCheck, FalseQA, xLAM and others; plus saiga_scored, saiga_preferences, UltraFeedback,
SmolTalk, GrandMaster-PRO-MAX, XNLI, the RU sentiment collection, SST-2, ru_paradetox_toxicity, AG News, FalseQA, and
the pretraining data of N-Q-26M. Teacher: dleemiller/ModernCE-base-nli.