shgao/rsi-jev-v3.0-qwen3.5-2b

Model

rsi-jev-v3.0-qwen3.5-2b

0

2 commits

3 linked in READMEs

updated Sep 28, 2026

See the code

README

rsi-jev-v3.0-qwen3.5-2b

A typed-decision model: Qwen/Qwen3.5-2B-Base with its tower fine-tuned and a trained option-scoring head. It answers choice / noul / score questions about a document in one forward pass, and speaks the Jev HTTP API.

This checkpoint is seed 17, the primary seed fixed in advance:

typed-decisionsreversed orderMMLU-Pro 1kreproduces its training run
0.7910.79650.3641.0000

Re-computed from these exact files after reload. Kernel stack fla-0.5.2/torch-2.7.1+cu128; full recipe in meta.json, and the sha256 of every file in MANIFEST.json.

import sys; sys.path.insert(0, 'code')   # after snapshot_download of this repo
from load_release import load_release
model, tok, enc, meta = load_release('.', device='cuda')

Everything below is the version record from the project repository, unchanged.


RSI-Jev v3.0

Describes release v3.0 Β· updated 2026-09-28

One typed-decision model, 2B. Given a document and a set of typed questions β€” yes/no, pick-one-of-k, rate-on-a-rubric β€” it returns a calibrated probability for every option in one forward pass, with no generated text.

v3.0 is the first release where reinforcement learning works. The reward that made the difference is a listwise ranking reward for reranking: it scores the order of many separately scored candidates, which no per-item label can express. With it, v3.0 puts the right memory first 60% more often than its own supervised parent (hippo R@1 0.192 β†’ 0.308, p = 2.4 Γ— 10⁻¹³) while the fifteen-benchmark suite stays level. Finding it took four waves and 59 reward-trained arms. Against v2.1 it is ahead on a new held-out set, +0.016 (p = 0.011), and on the suite, 0.736 β†’ 0.756. v3.0 is v2.1's lineage with more training data, a new readout combine, and that RL stage on top. ../docs/rl.md is the full story of what was tried and why only this one won.

Β§6 lists what this release does not change.


1. The task

Unchanged from v1.0: a document (the state) plus one or more typed questions β€” noul, choice, score β€” and a probability per option, returned in one forward pass. Top-1 is the fraction of decisions whose highest-probability option matches the label; ECE is expected calibration error, the average gap between the confidence a model reports and how often it is right at that confidence, lower being better.

2. How the model is built and trained

Qwen3.5-2B-Base, with v1.0's option scorer and v2.0's confidence head. Two training stages, then the confidence head is refitted.

Stage 1: supervised, 16,416 steps. The same objective and optimiser as v2.1 (soft cross-entropy, the bottom 8 of 24 tower layers at one tenth the learning rate), with three changes:

  1. Wider data (data-scale-2). 266,131 questions from 36 sources against v2.1's corpus: more benchmark train splits at up to 6,000 questions per source, 30,000 tasksource and 10,000 Open-Jev train items, ten coverage sources, and the emotion, SST-5 and ANLI train splits. One question in ten is held out by a hash of its case id and never trained on; it is what the confidence head is fitted on. ../data/v3.0_corpus_manifest.json lists every file with its sha256 and counts.
  2. A two-layer MLP combines the option and cross-attention features (xattn_combine: mlp), where v2.1 summed them. Worth +0.002 on the suite on its own.
  3. Up to 160 options per question in training and evaluation (80 before), because tasksource has questions with 151.

Batches are length-bucketed (width 64 tokens), which makes each step cheaper.

Stage 2: listwise reranking RL, 1,500 steps, continued from stage 1. For each training query the scorer gives every one of 16 candidates a relevance probability; 16 rankings are sampled from the Plackett-Luce distribution those probabilities define; each ranking earns its NDCG@5 against the relevance labels; the update is REINFORCE with a leave-one-out baseline and a KL penalty (Ξ² = 0.1) toward the stage-1 model. Ordinary supervised replay on the stage-1 data is mixed into every step. The RL data is 1,000 queries of 20–40 candidates built from the train splits of MS MARCO, TopiOCQA and FiQA, with BM25 hard negatives. It never touches LongMemEval, which the reranking result below is measured on.

Calibration. The confidence head (oof_head_scorefloor, as in v2.0 and v2.1) is refitted on the RL model, on 9,862 held-out questions of the stage-1 corpus. 534 held-out cases were dropped first because their document text also appears in a trained case. It rescales each question's probabilities without changing which option wins.

Everything needed to run both stages is in this repo: rsijev/fit.py and rsijev/rl2.py, driven by scripts/release_train.py from the spec in meta.json. The builders for what is new in this release's data β€” scripts/build_ds2_addons.py, scripts/build_hippo_rr.py, scripts/build_rl2_sources.py β€” and the calibration fit, scripts/fit_release_calibration.py, are here too. See Β§6 for which of them were re-run to the same bytes.

3. Checkpoints

modelbasetyped-decisionsMMLU-Pro 1ksuite ECEdownload
RSI-Jev-v3.0-2BQwen3.5-2B-Base0.7910.3640.066πŸ€— download
RSI-Jev-v2.1-2BQwen3.5-2B-Base0.79050.3830.059πŸ€— download

Both rows are scored on the fifteen-benchmark suite by the same evaluator, in the same job. v2.1's own card reports 0.0556 on its twelve-benchmark suite; 0.059 is the same checkpoint on this one.

2B only, one seed's checkpoint.

Reproducing its training run. Re-scored from disk with this repo's code on an H200, the checkpoint reproduces the training run's per-question predictions at 1.0000 on all three verification targets β€” typed-decisions in both option orders, and MMLU-Pro (verify.json). On a second GPU architecture (Blackwell, verify_blackwell.json) typed-decisions again agrees at 1.0000 and MMLU-Pro at 0.9990, one question in a thousand, the same order-of-summation effect v2.1 Β§3 describes; read MMLU-Pro as Β±0.001. verify_bf16.json is the bf16 tower (0.9975 / 0.9975 / 0.985), roundtrip_200.json the reload check with calibration applied, and cached_agreement.json the check that the two serving paths β€” with and without the prefix cache β€” return identical probabilities (162 questions, 0 flips, largest difference 0.0). MANIFEST.json holds the sha256 of every file.

The checkpoint ships calibration.safetensors and calibration.json; load_release.py applies them automatically. Without them the model loads uncalibrated and its probabilities match no number in this card.

Apache-2.0, following the base model, as every release is.

4. Results

4.1 The held-out comparison β€” read this first

v2.1's held-out set was spent: those three benchmarks joined the suite. eval_final_v2 is a fresh one, frozen during this release's search and built from sources in no training corpus: LegalBench (11 tasks), MuSR, BIG-Bench Hard (5 tasks), the relevance split of the Berkeley Function-Calling Leaderboard, and ConditionalQA. The suite decided every keep, but this set was read along the way as a consistency check: it backed the mlp readout (the same small suite gain twice, and a held-out gain), and it counted against two arms whose suite gains it did not share. So it is held out from training, not sealed from the search; read the gap below with that in mind.

held out from trainingnv1.0v2.1SFT parentv3.0v3.0 βˆ’ v2.1paired p
LegalBench9830.6510.6500.6670.683+0.0330.011
MuSR7560.5080.5640.5420.546βˆ’0.0170.32
BIG-Bench Hard1,1090.4560.4810.5270.500+0.0190.15
BFCL relevance7580.8310.8910.9080.910+0.0200.008
ConditionalQA1350.7330.7040.7260.741+0.0370.36
pooled3,7410.6040.6330.6510.649+0.0160.011

All four models were scored in one job, on one GPU, with the same evaluator; post-calibration wherever a release ships a calibration. p is an exact two-sided McNemar test on the questions where v3.0 and v2.1 disagree (pooled: 296 won by v3.0, 236 by v2.1). ConditionalQA's 135 questions give it a standard error of about 0.04.

v3.0 is ahead of v2.1 on the fresh held-out set β€” significantly on LegalBench, BFCL and pooled β€” and v2.1 was ahead of v1.0 there by a similar margin, so each release has moved the number the search never selected on. Calibration on this set is 0.063 ECE (v2.1: 0.078).

Against its own supervised parent the RL stage is flat on this set (0.649 against 0.651): it gains on four benchmarks and gives back 0.027 on BIG-Bench Hard.

4.2 The fifteen-benchmark suite

benchmarkweighttrained on its train split?v2.1SFT parentv3.0v3.0 ECE
typed-decisions0.20yes0.7910.7960.7910.091
Nimble public0.121yes0.8060.8050.8010.026
MMLU-Pro 1k0.081no0.3830.3730.3640.144
Jev-Style panel0.081partly (emotion, SST-5, ANLI)0.7500.8420.8350.011
Kev transfer0.065no0.7540.8000.7920.048
Kev hard0.065yes0.6970.7580.7600.029
JevBench0.049no0.7220.6960.7000.129
tasksource0.05yes0.6180.6970.7010.036
SemIf external0.05no0.8850.9210.9210.076
scienthoon OOD0.05no0.7740.7130.7050.076
Nimble holdout0.041yes (Nimble train)0.7470.7690.7780.090
Kev documents0.041yes0.8590.8730.8690.074
Kev devtools0.041yes0.7160.7180.7150.056
procedural0.033yes0.8730.8710.8710.027
Open-Jev OOD0.032yes (Open-Jev train)0.6510.8290.8380.048
suite mean0.7360.7590.756
suite ECE0.0590.0690.066

tasksource, SemIf and scienthoon were v2.1's held-out benchmarks and are in the suite now; tasksource is in-domain from this release, because its train split is in the corpus. Ten of the fifteen benchmarks contribute training data in some form, so none of these numbers is zero-shot; Β§4.1 is the comparison that is.

Against v2.1 on the same evaluator the suite moves from 0.736 to 0.756 (v1.0, uncalibrated: 0.622). The largest gains are where the new data landed β€” Open-Jev +0.187, Jev-Style +0.084, tasksource +0.083, all in-domain now β€” and the largest losses are scienthoon (βˆ’0.070) and MMLU-Pro (βˆ’0.019); scienthoon has no train split and was v2.1's best held-out result. The RL stage itself costs 0.0028 on the suite against its parent, inside the βˆ’0.003 it was allowed, and 0.009 on MMLU-Pro.

4.3 Reranking, where the RL stage is aimed

Scored per candidate on LongMemEval through hippo-memory's retrieval (500 questions, 40 candidates each, no prompt truncated):

R@1R@5
no reranking (hippo's own order)0.4840.752
v2.10.1860.512
SFT parent0.1920.552
v3.00.3080.626

The RL stage lifts R@1 by 0.116 over its parent, +60% (64 questions won, 6 lost, exact McNemar p = 2.4 Γ— 10⁻¹³). For reference, hippo's own retrieval order scores 0.484; that gap is where the next reranking data is aimed. The evidence that RL, and not merely more steps on these rows, is what helps comes from a separate paired run on a different parent and one seed (+0.052 over pointwise SFT on the same rows, z 3.9); ../docs/rl.md has it.

4.4 Calibration and the properties we kept

Suite ECE after the confidence head is 0.066 (0.101 before it) and 0.063 on the held-out set (0.154 before). The suite number hides unevenness: ECE is 0.091 on typed-decisions (v2.1: 0.063), 0.144 on MMLU-Pro and 0.129 on JevBench.

Three properties of v2.1's that external testing found useful were checked on v3.0 with the same scripts:

propertyv3.0v2.1
no ties in the sort key: distinct P(true) values over 360 yes/no questions360 / 360360 / 360
questions bundled in one request do not affect each other: 16 questions on one document vs one at a time0 flips / 6400 / 640
stays uncertain when the answer is pure chance: mean probability on the picked option, 240 dice-style items (lower is more honest)0.4800.422

The first two hold. The third moved: the RL stage sharpens probabilities a little on questions whose answer cannot be known, and it is now checked on every training change.

5. Speed, the wire format, and what confidence means

Inference is unchanged: one tower pass per question, the calibration a division inside the readout, nothing generated. The weights are the same size as v2.1's.

Two serving changes ship with this release (see ../serve/README.md):

  • Up to 160 options per question, matching training; 64 before.
  • --accept-model NAME answers requests that name another model, such as an app pinned to jev-1.13.0. The answer still names this model.

Two things do not change and are easy to miss. A structured criterion (an object rather than a string) is still rejected with 422: no release has been trained on one. And a document longer than 2,048 tokens is cut from its start, silently, so a request that puts its query first and long candidates after it loses the query.

The API returns a probability and a confidence, and they are different numbers: confidence is the peak statistic Jev documents, (K * p_max - 1) / (K - 1). Route on the probability of the option you intend to act on.

6. Limitations

  • The weaknesses external testing found in v2.1 are still here. Run inside open-source apps built on Jev, v2.1 leaned toward the more severe or more expensive option on ordered choices and rubric scores, rarely chose "unknown" when a question could not be answered from the document β€” picking a stereotyped answer instead on a social-bias benchmark β€” and answered a question and its negation inconsistently. v3.0 was trained before the data aimed at these existed. Do not use it where an "unknown" option has to be honoured without checking it on your own data.
  • Reranking has further to go: +0.116 R@1 over the parent, and hippo's own retrieval order (0.484) is still ahead (Β§4.3).
  • The RL evidence is one seed. The paired RL-versus-SFT result is a single run on a different parent; v3.0 itself has no matched SFT control.
  • MMLU-Pro is 0.364, 0.009 below its own parent.
  • Its benchmark scores are not zero-shot; ten of fifteen suite benchmarks contribute training data (Β§4.2).
  • Documents over 2,048 tokens lose their beginning (Β§5).
  • Rebuilding the data is partly verified. The data-scale-2 additions, the RL-stage file and the calibration pool were rebuilt with this repo's scripts to identical bytes. The reranking corpus builder (build_hippo_rr.py) was not re-run end to end: it needs the raw MS MARCO, TopiOCQA and FiQA exports and about 96 GB of memory; its post-processing stage was re-run and matched. The older part of the corpus, inherited from earlier releases' builders, is listed file by file in the manifest but its builder chain is not yet all in this repo.
  • One model, one size, one seed.

7. How it got here

steparmwhat it established
basev2.1 (rc-B-cand1a-cal4b)the starting point
coveragedata-scale-1-c-plus-cov1kwider source coverage: suite 0.7476 on this evaluator
coveragedata-scale-2+84,382 questions: +0.011 and +0.013 on seeds 17 and 97
readoutv3-stack-ds2-xmlpthe MLP combine on data-scale-2: suite 0.7589. Stage 1 of v3.0
RLrl5-listwise-rcClistwise reranking RL on stage 1: hippo R@1 0.192 β†’ 0.308, suite βˆ’0.0028. Stage 2
calibrationconfidence head refitsuite ECE 0.101 β†’ 0.066. This checkpoint

Rejected along the way, and worth knowing because each closes a direction: training on the items the model got wrong (loses on its own targets), a joint option-set transformer head (βˆ’0.011 on the held-out set), a second attempt at MMLU-Pro through more multiple-choice coverage (suite βˆ’0.003), a level offset in the confidence head for rubric scores (fails three of five criteria), and the bandit reconstruction of RLCD (no better than supervised training on the same feedback). Counting every arm trained on a reward, this project has now run 59 and kept one recipe. The full record is ../EXPLORE.md; the RL part is ../docs/rl.md.

decision-model
rsi-jev
text-classification
typed-decisions

shgao/rsi-jev-v3.0-qwen3.5-2b

Model

rsi-jev-v3.0-qwen3.5-2b

0

2 commits

3 linked in READMEs

updated Sep 28, 2026

See the code

README

rsi-jev-v3.0-qwen3.5-2b

A typed-decision model: Qwen/Qwen3.5-2B-Base with its tower fine-tuned and a trained option-scoring head. It answers choice / noul / score questions about a document in one forward pass, and speaks the Jev HTTP API.

This checkpoint is seed 17, the primary seed fixed in advance:

typed-decisionsreversed orderMMLU-Pro 1kreproduces its training run
0.7910.79650.3641.0000

Re-computed from these exact files after reload. Kernel stack fla-0.5.2/torch-2.7.1+cu128; full recipe in meta.json, and the sha256 of every file in MANIFEST.json.

import sys; sys.path.insert(0, 'code')   # after snapshot_download of this repo
from load_release import load_release
model, tok, enc, meta = load_release('.', device='cuda')

Everything below is the version record from the project repository, unchanged.


RSI-Jev v3.0

Describes release v3.0 Β· updated 2026-09-28

One typed-decision model, 2B. Given a document and a set of typed questions β€” yes/no, pick-one-of-k, rate-on-a-rubric β€” it returns a calibrated probability for every option in one forward pass, with no generated text.

v3.0 is the first release where reinforcement learning works. The reward that made the difference is a listwise ranking reward for reranking: it scores the order of many separately scored candidates, which no per-item label can express. With it, v3.0 puts the right memory first 60% more often than its own supervised parent (hippo R@1 0.192 β†’ 0.308, p = 2.4 Γ— 10⁻¹³) while the fifteen-benchmark suite stays level. Finding it took four waves and 59 reward-trained arms. Against v2.1 it is ahead on a new held-out set, +0.016 (p = 0.011), and on the suite, 0.736 β†’ 0.756. v3.0 is v2.1's lineage with more training data, a new readout combine, and that RL stage on top. ../docs/rl.md is the full story of what was tried and why only this one won.

Β§6 lists what this release does not change.


1. The task

Unchanged from v1.0: a document (the state) plus one or more typed questions β€” noul, choice, score β€” and a probability per option, returned in one forward pass. Top-1 is the fraction of decisions whose highest-probability option matches the label; ECE is expected calibration error, the average gap between the confidence a model reports and how often it is right at that confidence, lower being better.

2. How the model is built and trained

Qwen3.5-2B-Base, with v1.0's option scorer and v2.0's confidence head. Two training stages, then the confidence head is refitted.

Stage 1: supervised, 16,416 steps. The same objective and optimiser as v2.1 (soft cross-entropy, the bottom 8 of 24 tower layers at one tenth the learning rate), with three changes:

  1. Wider data (data-scale-2). 266,131 questions from 36 sources against v2.1's corpus: more benchmark train splits at up to 6,000 questions per source, 30,000 tasksource and 10,000 Open-Jev train items, ten coverage sources, and the emotion, SST-5 and ANLI train splits. One question in ten is held out by a hash of its case id and never trained on; it is what the confidence head is fitted on. ../data/v3.0_corpus_manifest.json lists every file with its sha256 and counts.
  2. A two-layer MLP combines the option and cross-attention features (xattn_combine: mlp), where v2.1 summed them. Worth +0.002 on the suite on its own.
  3. Up to 160 options per question in training and evaluation (80 before), because tasksource has questions with 151.

Batches are length-bucketed (width 64 tokens), which makes each step cheaper.

Stage 2: listwise reranking RL, 1,500 steps, continued from stage 1. For each training query the scorer gives every one of 16 candidates a relevance probability; 16 rankings are sampled from the Plackett-Luce distribution those probabilities define; each ranking earns its NDCG@5 against the relevance labels; the update is REINFORCE with a leave-one-out baseline and a KL penalty (Ξ² = 0.1) toward the stage-1 model. Ordinary supervised replay on the stage-1 data is mixed into every step. The RL data is 1,000 queries of 20–40 candidates built from the train splits of MS MARCO, TopiOCQA and FiQA, with BM25 hard negatives. It never touches LongMemEval, which the reranking result below is measured on.

Calibration. The confidence head (oof_head_scorefloor, as in v2.0 and v2.1) is refitted on the RL model, on 9,862 held-out questions of the stage-1 corpus. 534 held-out cases were dropped first because their document text also appears in a trained case. It rescales each question's probabilities without changing which option wins.

Everything needed to run both stages is in this repo: rsijev/fit.py and rsijev/rl2.py, driven by scripts/release_train.py from the spec in meta.json. The builders for what is new in this release's data β€” scripts/build_ds2_addons.py, scripts/build_hippo_rr.py, scripts/build_rl2_sources.py β€” and the calibration fit, scripts/fit_release_calibration.py, are here too. See Β§6 for which of them were re-run to the same bytes.

3. Checkpoints

modelbasetyped-decisionsMMLU-Pro 1ksuite ECEdownload
RSI-Jev-v3.0-2BQwen3.5-2B-Base0.7910.3640.066πŸ€— download
RSI-Jev-v2.1-2BQwen3.5-2B-Base0.79050.3830.059πŸ€— download

Both rows are scored on the fifteen-benchmark suite by the same evaluator, in the same job. v2.1's own card reports 0.0556 on its twelve-benchmark suite; 0.059 is the same checkpoint on this one.

2B only, one seed's checkpoint.

Reproducing its training run. Re-scored from disk with this repo's code on an H200, the checkpoint reproduces the training run's per-question predictions at 1.0000 on all three verification targets β€” typed-decisions in both option orders, and MMLU-Pro (verify.json). On a second GPU architecture (Blackwell, verify_blackwell.json) typed-decisions again agrees at 1.0000 and MMLU-Pro at 0.9990, one question in a thousand, the same order-of-summation effect v2.1 Β§3 describes; read MMLU-Pro as Β±0.001. verify_bf16.json is the bf16 tower (0.9975 / 0.9975 / 0.985), roundtrip_200.json the reload check with calibration applied, and cached_agreement.json the check that the two serving paths β€” with and without the prefix cache β€” return identical probabilities (162 questions, 0 flips, largest difference 0.0). MANIFEST.json holds the sha256 of every file.

The checkpoint ships calibration.safetensors and calibration.json; load_release.py applies them automatically. Without them the model loads uncalibrated and its probabilities match no number in this card.

Apache-2.0, following the base model, as every release is.

4. Results

4.1 The held-out comparison β€” read this first

v2.1's held-out set was spent: those three benchmarks joined the suite. eval_final_v2 is a fresh one, frozen during this release's search and built from sources in no training corpus: LegalBench (11 tasks), MuSR, BIG-Bench Hard (5 tasks), the relevance split of the Berkeley Function-Calling Leaderboard, and ConditionalQA. The suite decided every keep, but this set was read along the way as a consistency check: it backed the mlp readout (the same small suite gain twice, and a held-out gain), and it counted against two arms whose suite gains it did not share. So it is held out from training, not sealed from the search; read the gap below with that in mind.

held out from trainingnv1.0v2.1SFT parentv3.0v3.0 βˆ’ v2.1paired p
LegalBench9830.6510.6500.6670.683+0.0330.011
MuSR7560.5080.5640.5420.546βˆ’0.0170.32
BIG-Bench Hard1,1090.4560.4810.5270.500+0.0190.15
BFCL relevance7580.8310.8910.9080.910+0.0200.008
ConditionalQA1350.7330.7040.7260.741+0.0370.36
pooled3,7410.6040.6330.6510.649+0.0160.011

All four models were scored in one job, on one GPU, with the same evaluator; post-calibration wherever a release ships a calibration. p is an exact two-sided McNemar test on the questions where v3.0 and v2.1 disagree (pooled: 296 won by v3.0, 236 by v2.1). ConditionalQA's 135 questions give it a standard error of about 0.04.

v3.0 is ahead of v2.1 on the fresh held-out set β€” significantly on LegalBench, BFCL and pooled β€” and v2.1 was ahead of v1.0 there by a similar margin, so each release has moved the number the search never selected on. Calibration on this set is 0.063 ECE (v2.1: 0.078).

Against its own supervised parent the RL stage is flat on this set (0.649 against 0.651): it gains on four benchmarks and gives back 0.027 on BIG-Bench Hard.

4.2 The fifteen-benchmark suite

benchmarkweighttrained on its train split?v2.1SFT parentv3.0v3.0 ECE
typed-decisions0.20yes0.7910.7960.7910.091
Nimble public0.121yes0.8060.8050.8010.026
MMLU-Pro 1k0.081no0.3830.3730.3640.144
Jev-Style panel0.081partly (emotion, SST-5, ANLI)0.7500.8420.8350.011
Kev transfer0.065no0.7540.8000.7920.048
Kev hard0.065yes0.6970.7580.7600.029
JevBench0.049no0.7220.6960.7000.129
tasksource0.05yes0.6180.6970.7010.036
SemIf external0.05no0.8850.9210.9210.076
scienthoon OOD0.05no0.7740.7130.7050.076
Nimble holdout0.041yes (Nimble train)0.7470.7690.7780.090
Kev documents0.041yes0.8590.8730.8690.074
Kev devtools0.041yes0.7160.7180.7150.056
procedural0.033yes0.8730.8710.8710.027
Open-Jev OOD0.032yes (Open-Jev train)0.6510.8290.8380.048
suite mean0.7360.7590.756
suite ECE0.0590.0690.066

tasksource, SemIf and scienthoon were v2.1's held-out benchmarks and are in the suite now; tasksource is in-domain from this release, because its train split is in the corpus. Ten of the fifteen benchmarks contribute training data in some form, so none of these numbers is zero-shot; Β§4.1 is the comparison that is.

Against v2.1 on the same evaluator the suite moves from 0.736 to 0.756 (v1.0, uncalibrated: 0.622). The largest gains are where the new data landed β€” Open-Jev +0.187, Jev-Style +0.084, tasksource +0.083, all in-domain now β€” and the largest losses are scienthoon (βˆ’0.070) and MMLU-Pro (βˆ’0.019); scienthoon has no train split and was v2.1's best held-out result. The RL stage itself costs 0.0028 on the suite against its parent, inside the βˆ’0.003 it was allowed, and 0.009 on MMLU-Pro.

4.3 Reranking, where the RL stage is aimed

Scored per candidate on LongMemEval through hippo-memory's retrieval (500 questions, 40 candidates each, no prompt truncated):

R@1R@5
no reranking (hippo's own order)0.4840.752
v2.10.1860.512
SFT parent0.1920.552
v3.00.3080.626

The RL stage lifts R@1 by 0.116 over its parent, +60% (64 questions won, 6 lost, exact McNemar p = 2.4 Γ— 10⁻¹³). For reference, hippo's own retrieval order scores 0.484; that gap is where the next reranking data is aimed. The evidence that RL, and not merely more steps on these rows, is what helps comes from a separate paired run on a different parent and one seed (+0.052 over pointwise SFT on the same rows, z 3.9); ../docs/rl.md has it.

4.4 Calibration and the properties we kept

Suite ECE after the confidence head is 0.066 (0.101 before it) and 0.063 on the held-out set (0.154 before). The suite number hides unevenness: ECE is 0.091 on typed-decisions (v2.1: 0.063), 0.144 on MMLU-Pro and 0.129 on JevBench.

Three properties of v2.1's that external testing found useful were checked on v3.0 with the same scripts:

propertyv3.0v2.1
no ties in the sort key: distinct P(true) values over 360 yes/no questions360 / 360360 / 360
questions bundled in one request do not affect each other: 16 questions on one document vs one at a time0 flips / 6400 / 640
stays uncertain when the answer is pure chance: mean probability on the picked option, 240 dice-style items (lower is more honest)0.4800.422

The first two hold. The third moved: the RL stage sharpens probabilities a little on questions whose answer cannot be known, and it is now checked on every training change.

5. Speed, the wire format, and what confidence means

Inference is unchanged: one tower pass per question, the calibration a division inside the readout, nothing generated. The weights are the same size as v2.1's.

Two serving changes ship with this release (see ../serve/README.md):

  • Up to 160 options per question, matching training; 64 before.
  • --accept-model NAME answers requests that name another model, such as an app pinned to jev-1.13.0. The answer still names this model.

Two things do not change and are easy to miss. A structured criterion (an object rather than a string) is still rejected with 422: no release has been trained on one. And a document longer than 2,048 tokens is cut from its start, silently, so a request that puts its query first and long candidates after it loses the query.

The API returns a probability and a confidence, and they are different numbers: confidence is the peak statistic Jev documents, (K * p_max - 1) / (K - 1). Route on the probability of the option you intend to act on.

6. Limitations

  • The weaknesses external testing found in v2.1 are still here. Run inside open-source apps built on Jev, v2.1 leaned toward the more severe or more expensive option on ordered choices and rubric scores, rarely chose "unknown" when a question could not be answered from the document β€” picking a stereotyped answer instead on a social-bias benchmark β€” and answered a question and its negation inconsistently. v3.0 was trained before the data aimed at these existed. Do not use it where an "unknown" option has to be honoured without checking it on your own data.
  • Reranking has further to go: +0.116 R@1 over the parent, and hippo's own retrieval order (0.484) is still ahead (Β§4.3).
  • The RL evidence is one seed. The paired RL-versus-SFT result is a single run on a different parent; v3.0 itself has no matched SFT control.
  • MMLU-Pro is 0.364, 0.009 below its own parent.
  • Its benchmark scores are not zero-shot; ten of fifteen suite benchmarks contribute training data (Β§4.2).
  • Documents over 2,048 tokens lose their beginning (Β§5).
  • Rebuilding the data is partly verified. The data-scale-2 additions, the RL-stage file and the calibration pool were rebuilt with this repo's scripts to identical bytes. The reranking corpus builder (build_hippo_rr.py) was not re-run end to end: it needs the raw MS MARCO, TopiOCQA and FiQA exports and about 96 GB of memory; its post-processing stage was re-run and matched. The older part of the corpus, inherited from earlier releases' builders, is listed file by file in the manifest but its builder chain is not yet all in this repo.
  • One model, one size, one seed.

7. How it got here

steparmwhat it established
basev2.1 (rc-B-cand1a-cal4b)the starting point
coveragedata-scale-1-c-plus-cov1kwider source coverage: suite 0.7476 on this evaluator
coveragedata-scale-2+84,382 questions: +0.011 and +0.013 on seeds 17 and 97
readoutv3-stack-ds2-xmlpthe MLP combine on data-scale-2: suite 0.7589. Stage 1 of v3.0
RLrl5-listwise-rcClistwise reranking RL on stage 1: hippo R@1 0.192 β†’ 0.308, suite βˆ’0.0028. Stage 2
calibrationconfidence head refitsuite ECE 0.101 β†’ 0.066. This checkpoint

Rejected along the way, and worth knowing because each closes a direction: training on the items the model got wrong (loses on its own targets), a joint option-set transformer head (βˆ’0.011 on the held-out set), a second attempt at MMLU-Pro through more multiple-choice coverage (suite βˆ’0.003), a level offset in the confidence head for rubric scores (fails three of five criteria), and the bandit reconstruction of RLCD (no better than supervised training on the same feedback). Counting every arm trained on a reward, this project has now run 59 and kept one recipe. The full record is ../EXPLORE.md; the RL part is ../docs/rl.md.

decision-model
rsi-jev
text-classification
typed-decisions