A typed-decision model built by a self-improving loop of AI agents. It is the weight average of
v6.0-VL and a second fine-tune of Qwen/Qwen3.5-4B-Base, with decision heads at layers 16, 20
and 32: each question answers at the first depth that is confident enough. It answers choice /
noul / score questions about a document and up to four images, and speaks the
Jev HTTP API.
v6.1-VL is a System One model: one forward pass, no generated reasoning, a probability for every option. effort sets how many layers that one pass uses (16, 20 or 32), not how many tokens it writes; it writes none.
pip install "rsi-jev[fast,vision] @ git+https://github.com/Shanghua-Gao/RSI-Jev"
rsi-jev serve v6.1-vl-4b
Everything below is the version record from the project repository.
Describes release v6.1-VL Β· updated 2026-10-07
Two fine-tunes, averaged. v6.1-VL is the weight average of v6.0-VL and a second fine-tune of the same base, trained on other data. Nothing was trained after the average. Each exit's temperature was refit, and the exit policy was chosen again with v6.0-VL's rules. The architecture, the effort levels and the API are v6.0-VL's: decision heads at layers 16, 20 and 32 of Qwen3.5-4B-Base, and a question answers at the first one that is confident enough.
Against v6.0-VL on the same evaluation, accuracy is higher on the suite, the held-out set, MMLU-Pro, images and KoBBQ. On the public Decision Index 0.3 it scores 50.98 (v6.0-VL: 46.23). Calibration is worse: final ECE 0.048 against 0.036.
v6.1-VL is a System One model: one forward pass, no generated reasoning, a probability for every option. effort sets how many layers that one pass uses (16, 20 or 32), not how many tokens it writes; it writes none.
It is a 4B model, named as Qwen names the 4.66B Qwen3.5-4B-Base: 4.69B parameters, the same architecture as v6.0-VL β the 32 decoder layers (3.57B), the token embeddings (0.64B), the vision tower (0.33B), the main decision head (0.05B) and the two early-exit heads (0.10B). The checkpoint is self-contained.
Checkpoint: shgao/rsi-jev-v6.1-vl-4b Β· this record: versions/v6.1-vl.md
Unchanged from v6.0-VL: a state (text, optionally up to four images), one or more typed questions,
a probability for every option in one forward pass, and usage.depth, the layer each question was
answered at.
Full fine-tuning throughout (no LoRA), from Qwen/Qwen3.5-4B-Base, own-token option readout
(specs in data/v6.1-vl_recipe/).
Member A is v6.0-VL (stages 1-4 of its record): a trunk with detached early exits trained 10,000 steps on a cleaned 148-source text corpus, the exit heads refit, 3,000 image steps, and all four heads retrained (seed 1).
Member B is a second line of the same model, five stages from the base:
Member B on its own is not releasable: MMLU-Pro 0.418 at layer 32, below the 0.429 bar.
The average. Every tensor of the tower, the main head and the exit heads is the mean of the two members, weight 0.5 each. Nothing is trained.
Per-exit temperatures, refit on held-out development rows. v6.0-VL's temperatures do not transfer: averaging shrinks the logits, and at v6.0-VL's temperatures the average is underconfident. Development rows that either member trained on were dropped before the fit.
The exit policy, chosen again with v6.0-VL's rules (below). The layer-12 exit is fitted but not in the package, as for v6.0-VL.
The two members are close: the whole fine-tune chain moves the trunk by about 1.7% of its norm. The gain is in the tower. The averaged tower with v6.0-VL's own heads gives 98% of the averaged model's gain at layer 32. v6.0-VL's tower with averaged heads gives none of it. Uneven weights did not help: 0.3 / 0.7 is level with 0.5 / 0.5 within noise, and 0.7 / 0.3 is lower (β0.016).
Image sources and their licences. Both members trained on v5.0-VL's image corpus (member B on a 20% replay of it). The images are the original datasets', under their own terms. Five sources are non-commercial or research-only, and several others carry no clear grant for their images:
| source | licence |
|---|---|
| DocVQA | DocVQA terms; UCSF Industry Documents images β unclear |
| ChartQA | GPL-3.0 (repository); charts from Statista, Pew, OWID, OECD β unclear |
| VQAv2, TallyQA, A-OKVQA | annotations CC BY 4.0 / Apache-2.0; COCO images under Flickr terms β unclear |
| NLVR2 | annotations CC BY 4.0; web images β unclear |
| Hateful Memes | Facebook licence, research only |
| Screen2Words (RICO) | CC BY 4.0; RICO screenshots β unclear |
| AI2D | CC BY-SA 4.0 |
| ScienceQA | CC BY-NC-SA 4.0 |
| TQA | CC BY-NC 3.0 |
| RVL-CDIP | IIT-CDIP / Legacy Tobacco terms β unclear |
| IconQA | CC BY-NC-SA 4.0 |
| OCR-VQA | non-commercial |
| TextVQA | CC BY 4.0; OpenImages images |
| Visual7W | none found β unclear |
| six synthetic generators (v4.0-VL), spatial relations, joint reasoning, recasts, sokoban states | generated by code |
Text sources member B adds. Beyond the Decision Index training pools v6.0-VL already used (among them non-commercial ANLI and RAGTruth parts, and share-alike HoVer and ForecastBench), member B's last mix trains on:
| source | licence |
|---|---|
| ACOS (aspect-sentiment quadruples) | pending (v6.0-VL's corpus left it out) |
| MMLU-Pro-style proxy questions: OpenScience | CC BY 4.0 |
| MMLU-Pro-style proxy questions: MedMCQA, AQuA-RAT | Apache-2.0 |
| MMLU-Pro-style proxy questions: ARC | CC BY-SA 4.0 |
| hard multiple choice: ARC-Challenge, MultiRC, OpenBookQA, SciQ | ARC CC BY-SA 4.0; MultiRC "other" β unclear; OpenBookQA Apache-2.0; SciQ CC BY-NC 3.0 |
| code-execution questions from APPS and MBPP train problems | APPS MIT; MBPP CC BY 4.0 |
| chess positions with engine-checked answers | not yet recorded |
| POP909 songs with chord labels | not yet recorded |
| home-appliance simulator questions | not yet recorded |
| probe sets: bare intent, news boundary, refusal pairs, HotpotQA hallucination pairs | not yet recorded (HotpotQA itself CC BY-SA 4.0) |
The MMLU-Pro-style proxy questions were checked against the MMLU-Pro test set (exact, n-gram and embedding matches, the closest pairs read by hand): none is a test item or a rewording of one. The weights are released under Apache-2.0, as earlier releases were. Whether weights trained on non-commercial data inherit those terms is not settled; check the sources above against your use.
Exits. Each exit has its own scalar temperature, refit on the average: T = 0.87 at layer 16,
0.63 at 20, 1.02 at 32 (v6.0-VL: 1.88, 1.97, 1.65). The layer-32 value is in both
calibration.safetensors and calibration.json.
Choosing the exit. With auto, a question answers at the first exit whose calibrated top
probability reaches that exit's threshold, 0.85 at layer 16 and 0.50 at layer 20, else at layer 32.
These were picked by v6.0-VL's rule on one half of the development sets and confirmed on the
other, then read once on test. With no effort set, multi-question requests use one threshold
at both exits, Ο = 0.95. That value is the fallback of a rule written before the fit, and it
is not confirmed: the rule's own pick, 0.85, missed the depth cap on the confirmation half
(Β§4.2). Mean depth on the suite with auto: 19.5 layers.
| Hugging Face | shgao/rsi-jev-v6.1-vl-4b |
| alias | v6.1-vl-4b (rsi-jev serve v6.1-vl-4b, Decider("v6.1-vl-4b")) |
| size | 4.69B parameters |
| file | what it holds |
|---|---|
tower.safetensors | decoder layers 1β32 (bf16) and the token embeddings |
visual.safetensors | the vision tower |
scorer.safetensors | the main decision head (layer 32) |
aux_scorers.safetensors | the decision heads at layers 16 and 20 |
calibration.json, calibration.safetensors | one temperature per exit; the layer-32 one is the same number in both |
config.json, tokenizer and image-processor files | the base's |
meta.json | training spec, serving settings (adaptive: exits, Ο and auto_thresholds), parameter counts |
pip install "rsi-jev[fast,vision] @ git+https://github.com/Shanghua-Gao/RSI-Jev"
rsi-jev serve v6.1-vl-4b # default: single questions at 32, the 0.95 cascade on multi-question requests
rsi-jev serve v6.1-vl-4b --effort auto # a server default; a request's own "effort" field wins
| model | base | 15-benchmark suite | held-out (eval_final_v2) | suite ECEΒ² | images | download |
|---|---|---|---|---|---|---|
| RSI-Jev-v6.1-VL-4B | Qwen3.5-4B-Base, two fine-tunes averaged, exits at layers 16 / 20 / 32 | 0.793ΒΉ | 0.729 | β | yes | π€ download |
| RSI-Jev-v6.0-VL-4B | Qwen3.5-4B-Base, exits at layers 16 / 20 / 32 | 0.770ΒΉ | 0.698 | β | yes | π€ download |
| RSI-Jev-v5.0-VL-3B | Qwen3.5-4B-Base, layers 1β20 | 0.764 | 0.689 | 0.050 | yes | π€ download |
| RSI-Jev-v4.0-VL-2B | Qwen3.5-2B-Base | 0.756 | 0.653 | 0.043 | yes | π€ download |
| RSI-Jev-v3.0-2B | Qwen3.5-2B-Base | 0.756 | 0.649 | 0.066 | no | π€ download |
| RSI-Jev-v2.1-2B | Qwen3.5-2B-Base | 0.736 | 0.633 | 0.059 | no | π€ download |
| RSI-Jev-v1.0-2B | Qwen3.5-2B-Base | 0.622 | 0.604 | β | no | π€ download |
ΒΉ Without open_jev_ood; the earlier rows include it. Β² The suite's calibration is not compared
across releases (v6.0-VL's record, Β§4.1); final-set ECE is in Β§4.1 below. v6.1-VL's suite and
held-out figures are the bf16 package as served by default.
The package was checked on the paths users get. The low, medium and high effort paths give
bitwise the forced-exit results. The unset default is bitwise the package without the auto
thresholds, and a threshold of 1.0 is bitwise high. auto picks the same exit as the offline
cascade on all 2,186 test questions, with probabilities within 4e-5. Served in bf16, the package
scores 0.793 / 0.729 / 0.463 / final ECE 0.045 by default; the fp32 read below gives
0.793 / 0.728 / 0.462 / 0.048 at layer 32.
Both models read once on the same evaluation sets with the same code, text in fp32; ECE at
each model's served temperatures. KoBBQ and CLINC150 come from the release-gate reads. low, medium and high stop at layers 16, 20 and 32; auto uses
the per-exit thresholds above. Images always run all 32 layers. Suite is the fifteen-benchmark
mean without open_jev_ood.
| high (32) | auto | low (16) | medium (20) | v6.0-VL high (32) | v6.0-VL auto | |
|---|---|---|---|---|---|---|
| 15-benchmark suite, without open_jev_ood | 0.793 | 0.792 | 0.780 | 0.789 | 0.770 | 0.771 |
| held-out set (eval_final_v2) | 0.728 | 0.732 | 0.693 | 0.727 | 0.695 | 0.696 |
| MMLU-Pro 1k | 0.462 | 0.460 | 0.439 | 0.461 | 0.443 | 0.444 |
| final ECE after calibration | 0.048 | 0.055 | β | β | 0.036Β³ | 0.024 |
| held-out images (eval_vision_v1) | 0.834 | 0.834 | 0.834 | 0.834 | 0.825 | 0.825 |
| KoBBQ accuracy / "unknown" when ambiguous | 0.937 / 0.953 | 0.931 / 0.944 | 0.925 / 0.941 | 0.925 / 0.941 | ||
| CLINC150, 151 numbered options: accuracy / picks the option after the right one | 0.837 / 0.7% | 0.840 / 0.7% | 0.843 / 0.3% | β / 0.3% | ||
| mean depth on the suite (layers) | 32 | 19.5 | 16 | 20 | 32 | 23.3 |
Β³ v6.0-VL's final ECE as served by default, from its record (0.033 at high).
The gains at layer 32 are +0.023 on the suite (standard error 0.003), +0.033 on the held-out set
(0.006) and +0.019 on MMLU-Pro. auto matches high at 19.5 layers on average: 52% of
questions stop at layer 16, 35% at 20 and 13% go to 32. Calibration is worse than v6.0-VL's at
every setting; it stays inside the release bar of 0.078 (Β§4.3). On CLINC150 the
option-after-the-right-one rate is 0.7% (0.36% on the Decision Index's own CLINC150 rows,
v6.0-VL 0.31%), inside the 5% bar; accuracy there is 0.837 against 0.843. The default
(single questions at layer 32, the 0.95 cascade on multi-question requests) scores as high:
run on every question, the bf16 package gives the same suite, held-out and MMLU-Pro figures as
layer 32 at 30.5 layers on average. The low and medium ECE were not read at the served
temperatures.
Decision Index 0.3, public index: 50.98. Full run of the default configuration (unset effort, Ο 0.95), 140,178 requests, coverage 1.0: knowledge and reasoning 31.6, language 55.3, retrieval 57.1, tools 68.4, arts 45.7; 50.97 with the rows that also appear in our training data left out. Scored with the 0.3 kit before its release (pre-release kit). v6.0-VL scores 46.23 on the same index. On the public board of 2026-10-06 this ties the best 4B model (50.98 vs ezjev 4B s2's 50.82; the kit treats scores within 0.25 as tied) and is 27th of 113 overall. The board's official full score needs a submission, which is pending.
Decision Index 0.2.1, full run: 50.74 (all 150,759 requests answered, nothing cut, the unset effort; knowledge 32.5, language 55.5, retrieval 57.2, tools 68.3, arts 40.5), with the rows that also appear in our training data left out (50.75 with them). v6.0-VL: 46.24.
By effort level (Decision Index 0.2.1, the kit's 16k-question stratified sample, the same rows for every level and both models, one H200, bf16; overlapping rows removed; a sample read, not a full run):
| default | auto | low (16) | medium (20) | high (32) | |
|---|---|---|---|---|---|
| v6.1-VL | 51.35 | 50.93 | 47.85 | 50.76 | 51.42 |
| v6.0-VL | 45.70 | 45.81 | 43.25 | 45.89 | 45.91 |
| v6.1-VL median latency | 39.9 ms | 28.4 ms | 22.5 ms | 26.8 ms | 40.4 ms |
v6.1-VL gains 4.6 to 5.7 points at every effort level. Unlike v6.0-VL, layer 32 now leads
layer 20 on this sample (+0.66). auto reads 50.93, 0.5 below high, at 70% of its latency.
The second member's last mix was checked against the Decision Index kit before training, and full-item overlaps with its test rows were dropped. After the fact, RAGTruth and iSarcasmEval, the two benchmarks that moved most from v6.0-VL's zero, were checked for leaked kit items; none were found.
The single threshold. With no effort set, multi-question requests run the cascade with one
threshold at both early exits. v6.0-VL's 0.59 does not carry over: at the refit temperatures the
early exits are sharper, and 0.59 sends about 77% of questions to layer 16 (held-out set 0.718
in the served package). The single threshold was chosen again by auto's rule restricted to one
shared value, written before the fit: 0.80 and 0.85 were feasible on half A, 0.85 won there, and
on half B it went 0.08 layers over the 24-layer depth cap. The rule then falls back to 0.95, its
most conservative member, which ships not confirmed. On half B it scores as layer 32 does
(suite-like 0.785, held-out 0.745) at 26.8 layers. 0.80 passed on both halves; the rule does not
pick it.
Each exit has its own scalar temperature, refit on the average. Final-set ECE after calibration
is 0.048 at layer 32 and 0.055 with auto, against v6.0-VL's 0.036 and 0.024; the release bar
is 0.078. The early exits are further off. At temperatures fitted by the evaluation reader
itself, not the served ones, final ECE is 0.086 at layer 16 against v6.0-VL's 0.025, and 0.058
at layer 20 against 0.043. If you route on usage.confidence at an early exit, check it on
your own data.
Median latency per request on the Decision Index sample, one NVIDIA H200, bf16:
| default | auto | low (16) | medium (20) | high (32) |
|---|---|---|---|---|
| 39.9 ms | 28.4 ms | 22.5 ms | 26.8 ms | 40.4 ms |
v6.0-VL on the same setup: 40, 23, 27 and 40 ms for default, low, medium and high. Serving is
unchanged from v6.0-VL: inputs up to 32,768 tokens, nothing cut (longer gets a 422); up to 5,120
options; own-token option pooling, set in meta.json.
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. The response also carries usage.depth, the layer each question was
answered at.
auto, and further off at layers 16 and 20 (Β§4.3).25 arms ran after v6.0-VL's: one per distinct experiment id with a run record, first recorded
after the run that chose v6.0-VL's auto thresholds and through the run that chose v6.1-VL's,
a rerun counted once (24 without one analysis-only record). They span every line the loop ran in
that window: data 8, calibration and exit policy 6, method 6, 27B 4, reinforcement learning 1.
Two of them made this release; a third explains it. Member B was trained before the window and
is counted with v6.0-VL's arms.
The full list of arms on the released line is in EXPLORE.md.
The code, the specs and the commands are in
data/v6.1-vl_recipe/; D is the data directory and
D/heads-s1 is v6.0-VL's stage-4 checkpoint. The training corpora of both members (v6.0-VL's
text and image corpora, member B's three corpora) and the policy development sets are not public,
so member B and the policy selection cannot be rerun from this repository alone. Serving the
released model needs only the public code.
# member B, last two stages (earlier stages: data/v6.1-vl_recipe/0-lineage.json)
python scripts/release_train.py --model Qwen/Qwen3.5-4B-Base --seed 17 --root D \
--spec data/v6.1-vl_recipe/1-member-b-domain-mix.json --corpus D/domain-mix-2 --save-dir D/b-domain-2/s17
RSIJEV_OPTION_POOL_OWN_TOKENS=1 python scripts/fit_head.py --ckpt D/b-domain-2/s17 --corpus D/domain-mix-2 \
--dev-corpus D/domain-mix-1 --out D/b-heads-s1 --heads all --sdpa-math --max-length 4096 --skip-prefix vis --seed 1
# the average
python scripts/soup_checkpoints.py D/soup D/heads-s1 D/b-heads-s1
# per-exit dumps, rows a member trained on dropped, temperatures and thresholds, the package
python scripts/dump_exits.py dev --ckpt D/soup --corpus D/image-corpus --out D/dumps/soup # and cases / vision / eval
python scripts/select_exit_policy.py overlap ... # development case ids found in the members' corpora
python scripts/select_exit_policy.py exclude ... # the dumps without them
python scripts/select_exit_policy.py thresholds ... # refit temperatures; auto: 0.85 at 16, 0.50 at 20
python scripts/select_exit_policy.py thresholds ... --single # one threshold: 0.95, the rule's fallback
python scripts/package_multiexit.py --ckpt D/soup --temperatures D/policy/auto.json \
--single-tau D/policy/single.json --drop-exit 12 --thresholds D/policy/auto.json --out D/package
None. The v6.0-VL record is left as published.
A typed-decision model built by a self-improving loop of AI agents. It is the weight average of
v6.0-VL and a second fine-tune of Qwen/Qwen3.5-4B-Base, with decision heads at layers 16, 20
and 32: each question answers at the first depth that is confident enough. It answers choice /
noul / score questions about a document and up to four images, and speaks the
Jev HTTP API.
v6.1-VL is a System One model: one forward pass, no generated reasoning, a probability for every option. effort sets how many layers that one pass uses (16, 20 or 32), not how many tokens it writes; it writes none.
pip install "rsi-jev[fast,vision] @ git+https://github.com/Shanghua-Gao/RSI-Jev"
rsi-jev serve v6.1-vl-4b
Everything below is the version record from the project repository.
Describes release v6.1-VL Β· updated 2026-10-07
Two fine-tunes, averaged. v6.1-VL is the weight average of v6.0-VL and a second fine-tune of the same base, trained on other data. Nothing was trained after the average. Each exit's temperature was refit, and the exit policy was chosen again with v6.0-VL's rules. The architecture, the effort levels and the API are v6.0-VL's: decision heads at layers 16, 20 and 32 of Qwen3.5-4B-Base, and a question answers at the first one that is confident enough.
Against v6.0-VL on the same evaluation, accuracy is higher on the suite, the held-out set, MMLU-Pro, images and KoBBQ. On the public Decision Index 0.3 it scores 50.98 (v6.0-VL: 46.23). Calibration is worse: final ECE 0.048 against 0.036.
v6.1-VL is a System One model: one forward pass, no generated reasoning, a probability for every option. effort sets how many layers that one pass uses (16, 20 or 32), not how many tokens it writes; it writes none.
It is a 4B model, named as Qwen names the 4.66B Qwen3.5-4B-Base: 4.69B parameters, the same architecture as v6.0-VL β the 32 decoder layers (3.57B), the token embeddings (0.64B), the vision tower (0.33B), the main decision head (0.05B) and the two early-exit heads (0.10B). The checkpoint is self-contained.
Checkpoint: shgao/rsi-jev-v6.1-vl-4b Β· this record: versions/v6.1-vl.md
Unchanged from v6.0-VL: a state (text, optionally up to four images), one or more typed questions,
a probability for every option in one forward pass, and usage.depth, the layer each question was
answered at.
Full fine-tuning throughout (no LoRA), from Qwen/Qwen3.5-4B-Base, own-token option readout
(specs in data/v6.1-vl_recipe/).
Member A is v6.0-VL (stages 1-4 of its record): a trunk with detached early exits trained 10,000 steps on a cleaned 148-source text corpus, the exit heads refit, 3,000 image steps, and all four heads retrained (seed 1).
Member B is a second line of the same model, five stages from the base:
Member B on its own is not releasable: MMLU-Pro 0.418 at layer 32, below the 0.429 bar.
The average. Every tensor of the tower, the main head and the exit heads is the mean of the two members, weight 0.5 each. Nothing is trained.
Per-exit temperatures, refit on held-out development rows. v6.0-VL's temperatures do not transfer: averaging shrinks the logits, and at v6.0-VL's temperatures the average is underconfident. Development rows that either member trained on were dropped before the fit.
The exit policy, chosen again with v6.0-VL's rules (below). The layer-12 exit is fitted but not in the package, as for v6.0-VL.
The two members are close: the whole fine-tune chain moves the trunk by about 1.7% of its norm. The gain is in the tower. The averaged tower with v6.0-VL's own heads gives 98% of the averaged model's gain at layer 32. v6.0-VL's tower with averaged heads gives none of it. Uneven weights did not help: 0.3 / 0.7 is level with 0.5 / 0.5 within noise, and 0.7 / 0.3 is lower (β0.016).
Image sources and their licences. Both members trained on v5.0-VL's image corpus (member B on a 20% replay of it). The images are the original datasets', under their own terms. Five sources are non-commercial or research-only, and several others carry no clear grant for their images:
| source | licence |
|---|---|
| DocVQA | DocVQA terms; UCSF Industry Documents images β unclear |
| ChartQA | GPL-3.0 (repository); charts from Statista, Pew, OWID, OECD β unclear |
| VQAv2, TallyQA, A-OKVQA | annotations CC BY 4.0 / Apache-2.0; COCO images under Flickr terms β unclear |
| NLVR2 | annotations CC BY 4.0; web images β unclear |
| Hateful Memes | Facebook licence, research only |
| Screen2Words (RICO) | CC BY 4.0; RICO screenshots β unclear |
| AI2D | CC BY-SA 4.0 |
| ScienceQA | CC BY-NC-SA 4.0 |
| TQA | CC BY-NC 3.0 |
| RVL-CDIP | IIT-CDIP / Legacy Tobacco terms β unclear |
| IconQA | CC BY-NC-SA 4.0 |
| OCR-VQA | non-commercial |
| TextVQA | CC BY 4.0; OpenImages images |
| Visual7W | none found β unclear |
| six synthetic generators (v4.0-VL), spatial relations, joint reasoning, recasts, sokoban states | generated by code |
Text sources member B adds. Beyond the Decision Index training pools v6.0-VL already used (among them non-commercial ANLI and RAGTruth parts, and share-alike HoVer and ForecastBench), member B's last mix trains on:
| source | licence |
|---|---|
| ACOS (aspect-sentiment quadruples) | pending (v6.0-VL's corpus left it out) |
| MMLU-Pro-style proxy questions: OpenScience | CC BY 4.0 |
| MMLU-Pro-style proxy questions: MedMCQA, AQuA-RAT | Apache-2.0 |
| MMLU-Pro-style proxy questions: ARC | CC BY-SA 4.0 |
| hard multiple choice: ARC-Challenge, MultiRC, OpenBookQA, SciQ | ARC CC BY-SA 4.0; MultiRC "other" β unclear; OpenBookQA Apache-2.0; SciQ CC BY-NC 3.0 |
| code-execution questions from APPS and MBPP train problems | APPS MIT; MBPP CC BY 4.0 |
| chess positions with engine-checked answers | not yet recorded |
| POP909 songs with chord labels | not yet recorded |
| home-appliance simulator questions | not yet recorded |
| probe sets: bare intent, news boundary, refusal pairs, HotpotQA hallucination pairs | not yet recorded (HotpotQA itself CC BY-SA 4.0) |
The MMLU-Pro-style proxy questions were checked against the MMLU-Pro test set (exact, n-gram and embedding matches, the closest pairs read by hand): none is a test item or a rewording of one. The weights are released under Apache-2.0, as earlier releases were. Whether weights trained on non-commercial data inherit those terms is not settled; check the sources above against your use.
Exits. Each exit has its own scalar temperature, refit on the average: T = 0.87 at layer 16,
0.63 at 20, 1.02 at 32 (v6.0-VL: 1.88, 1.97, 1.65). The layer-32 value is in both
calibration.safetensors and calibration.json.
Choosing the exit. With auto, a question answers at the first exit whose calibrated top
probability reaches that exit's threshold, 0.85 at layer 16 and 0.50 at layer 20, else at layer 32.
These were picked by v6.0-VL's rule on one half of the development sets and confirmed on the
other, then read once on test. With no effort set, multi-question requests use one threshold
at both exits, Ο = 0.95. That value is the fallback of a rule written before the fit, and it
is not confirmed: the rule's own pick, 0.85, missed the depth cap on the confirmation half
(Β§4.2). Mean depth on the suite with auto: 19.5 layers.
| Hugging Face | shgao/rsi-jev-v6.1-vl-4b |
| alias | v6.1-vl-4b (rsi-jev serve v6.1-vl-4b, Decider("v6.1-vl-4b")) |
| size | 4.69B parameters |
| file | what it holds |
|---|---|
tower.safetensors | decoder layers 1β32 (bf16) and the token embeddings |
visual.safetensors | the vision tower |
scorer.safetensors | the main decision head (layer 32) |
aux_scorers.safetensors | the decision heads at layers 16 and 20 |
calibration.json, calibration.safetensors | one temperature per exit; the layer-32 one is the same number in both |
config.json, tokenizer and image-processor files | the base's |
meta.json | training spec, serving settings (adaptive: exits, Ο and auto_thresholds), parameter counts |
pip install "rsi-jev[fast,vision] @ git+https://github.com/Shanghua-Gao/RSI-Jev"
rsi-jev serve v6.1-vl-4b # default: single questions at 32, the 0.95 cascade on multi-question requests
rsi-jev serve v6.1-vl-4b --effort auto # a server default; a request's own "effort" field wins
| model | base | 15-benchmark suite | held-out (eval_final_v2) | suite ECEΒ² | images | download |
|---|---|---|---|---|---|---|
| RSI-Jev-v6.1-VL-4B | Qwen3.5-4B-Base, two fine-tunes averaged, exits at layers 16 / 20 / 32 | 0.793ΒΉ | 0.729 | β | yes | π€ download |
| RSI-Jev-v6.0-VL-4B | Qwen3.5-4B-Base, exits at layers 16 / 20 / 32 | 0.770ΒΉ | 0.698 | β | yes | π€ download |
| RSI-Jev-v5.0-VL-3B | Qwen3.5-4B-Base, layers 1β20 | 0.764 | 0.689 | 0.050 | yes | π€ download |
| RSI-Jev-v4.0-VL-2B | Qwen3.5-2B-Base | 0.756 | 0.653 | 0.043 | yes | π€ download |
| RSI-Jev-v3.0-2B | Qwen3.5-2B-Base | 0.756 | 0.649 | 0.066 | no | π€ download |
| RSI-Jev-v2.1-2B | Qwen3.5-2B-Base | 0.736 | 0.633 | 0.059 | no | π€ download |
| RSI-Jev-v1.0-2B | Qwen3.5-2B-Base | 0.622 | 0.604 | β | no | π€ download |
ΒΉ Without open_jev_ood; the earlier rows include it. Β² The suite's calibration is not compared
across releases (v6.0-VL's record, Β§4.1); final-set ECE is in Β§4.1 below. v6.1-VL's suite and
held-out figures are the bf16 package as served by default.
The package was checked on the paths users get. The low, medium and high effort paths give
bitwise the forced-exit results. The unset default is bitwise the package without the auto
thresholds, and a threshold of 1.0 is bitwise high. auto picks the same exit as the offline
cascade on all 2,186 test questions, with probabilities within 4e-5. Served in bf16, the package
scores 0.793 / 0.729 / 0.463 / final ECE 0.045 by default; the fp32 read below gives
0.793 / 0.728 / 0.462 / 0.048 at layer 32.
Both models read once on the same evaluation sets with the same code, text in fp32; ECE at
each model's served temperatures. KoBBQ and CLINC150 come from the release-gate reads. low, medium and high stop at layers 16, 20 and 32; auto uses
the per-exit thresholds above. Images always run all 32 layers. Suite is the fifteen-benchmark
mean without open_jev_ood.
| high (32) | auto | low (16) | medium (20) | v6.0-VL high (32) | v6.0-VL auto | |
|---|---|---|---|---|---|---|
| 15-benchmark suite, without open_jev_ood | 0.793 | 0.792 | 0.780 | 0.789 | 0.770 | 0.771 |
| held-out set (eval_final_v2) | 0.728 | 0.732 | 0.693 | 0.727 | 0.695 | 0.696 |
| MMLU-Pro 1k | 0.462 | 0.460 | 0.439 | 0.461 | 0.443 | 0.444 |
| final ECE after calibration | 0.048 | 0.055 | β | β | 0.036Β³ | 0.024 |
| held-out images (eval_vision_v1) | 0.834 | 0.834 | 0.834 | 0.834 | 0.825 | 0.825 |
| KoBBQ accuracy / "unknown" when ambiguous | 0.937 / 0.953 | 0.931 / 0.944 | 0.925 / 0.941 | 0.925 / 0.941 | ||
| CLINC150, 151 numbered options: accuracy / picks the option after the right one | 0.837 / 0.7% | 0.840 / 0.7% | 0.843 / 0.3% | β / 0.3% | ||
| mean depth on the suite (layers) | 32 | 19.5 | 16 | 20 | 32 | 23.3 |
Β³ v6.0-VL's final ECE as served by default, from its record (0.033 at high).
The gains at layer 32 are +0.023 on the suite (standard error 0.003), +0.033 on the held-out set
(0.006) and +0.019 on MMLU-Pro. auto matches high at 19.5 layers on average: 52% of
questions stop at layer 16, 35% at 20 and 13% go to 32. Calibration is worse than v6.0-VL's at
every setting; it stays inside the release bar of 0.078 (Β§4.3). On CLINC150 the
option-after-the-right-one rate is 0.7% (0.36% on the Decision Index's own CLINC150 rows,
v6.0-VL 0.31%), inside the 5% bar; accuracy there is 0.837 against 0.843. The default
(single questions at layer 32, the 0.95 cascade on multi-question requests) scores as high:
run on every question, the bf16 package gives the same suite, held-out and MMLU-Pro figures as
layer 32 at 30.5 layers on average. The low and medium ECE were not read at the served
temperatures.
Decision Index 0.3, public index: 50.98. Full run of the default configuration (unset effort, Ο 0.95), 140,178 requests, coverage 1.0: knowledge and reasoning 31.6, language 55.3, retrieval 57.1, tools 68.4, arts 45.7; 50.97 with the rows that also appear in our training data left out. Scored with the 0.3 kit before its release (pre-release kit). v6.0-VL scores 46.23 on the same index. On the public board of 2026-10-06 this ties the best 4B model (50.98 vs ezjev 4B s2's 50.82; the kit treats scores within 0.25 as tied) and is 27th of 113 overall. The board's official full score needs a submission, which is pending.
Decision Index 0.2.1, full run: 50.74 (all 150,759 requests answered, nothing cut, the unset effort; knowledge 32.5, language 55.5, retrieval 57.2, tools 68.3, arts 40.5), with the rows that also appear in our training data left out (50.75 with them). v6.0-VL: 46.24.
By effort level (Decision Index 0.2.1, the kit's 16k-question stratified sample, the same rows for every level and both models, one H200, bf16; overlapping rows removed; a sample read, not a full run):
| default | auto | low (16) | medium (20) | high (32) | |
|---|---|---|---|---|---|
| v6.1-VL | 51.35 | 50.93 | 47.85 | 50.76 | 51.42 |
| v6.0-VL | 45.70 | 45.81 | 43.25 | 45.89 | 45.91 |
| v6.1-VL median latency | 39.9 ms | 28.4 ms | 22.5 ms | 26.8 ms | 40.4 ms |
v6.1-VL gains 4.6 to 5.7 points at every effort level. Unlike v6.0-VL, layer 32 now leads
layer 20 on this sample (+0.66). auto reads 50.93, 0.5 below high, at 70% of its latency.
The second member's last mix was checked against the Decision Index kit before training, and full-item overlaps with its test rows were dropped. After the fact, RAGTruth and iSarcasmEval, the two benchmarks that moved most from v6.0-VL's zero, were checked for leaked kit items; none were found.
The single threshold. With no effort set, multi-question requests run the cascade with one
threshold at both early exits. v6.0-VL's 0.59 does not carry over: at the refit temperatures the
early exits are sharper, and 0.59 sends about 77% of questions to layer 16 (held-out set 0.718
in the served package). The single threshold was chosen again by auto's rule restricted to one
shared value, written before the fit: 0.80 and 0.85 were feasible on half A, 0.85 won there, and
on half B it went 0.08 layers over the 24-layer depth cap. The rule then falls back to 0.95, its
most conservative member, which ships not confirmed. On half B it scores as layer 32 does
(suite-like 0.785, held-out 0.745) at 26.8 layers. 0.80 passed on both halves; the rule does not
pick it.
Each exit has its own scalar temperature, refit on the average. Final-set ECE after calibration
is 0.048 at layer 32 and 0.055 with auto, against v6.0-VL's 0.036 and 0.024; the release bar
is 0.078. The early exits are further off. At temperatures fitted by the evaluation reader
itself, not the served ones, final ECE is 0.086 at layer 16 against v6.0-VL's 0.025, and 0.058
at layer 20 against 0.043. If you route on usage.confidence at an early exit, check it on
your own data.
Median latency per request on the Decision Index sample, one NVIDIA H200, bf16:
| default | auto | low (16) | medium (20) | high (32) |
|---|---|---|---|---|
| 39.9 ms | 28.4 ms | 22.5 ms | 26.8 ms | 40.4 ms |
v6.0-VL on the same setup: 40, 23, 27 and 40 ms for default, low, medium and high. Serving is
unchanged from v6.0-VL: inputs up to 32,768 tokens, nothing cut (longer gets a 422); up to 5,120
options; own-token option pooling, set in meta.json.
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. The response also carries usage.depth, the layer each question was
answered at.
auto, and further off at layers 16 and 20 (Β§4.3).25 arms ran after v6.0-VL's: one per distinct experiment id with a run record, first recorded
after the run that chose v6.0-VL's auto thresholds and through the run that chose v6.1-VL's,
a rerun counted once (24 without one analysis-only record). They span every line the loop ran in
that window: data 8, calibration and exit policy 6, method 6, 27B 4, reinforcement learning 1.
Two of them made this release; a third explains it. Member B was trained before the window and
is counted with v6.0-VL's arms.
The full list of arms on the released line is in EXPLORE.md.
The code, the specs and the commands are in
data/v6.1-vl_recipe/; D is the data directory and
D/heads-s1 is v6.0-VL's stage-4 checkpoint. The training corpora of both members (v6.0-VL's
text and image corpora, member B's three corpora) and the policy development sets are not public,
so member B and the policy selection cannot be rerun from this repository alone. Serving the
released model needs only the public code.
# member B, last two stages (earlier stages: data/v6.1-vl_recipe/0-lineage.json)
python scripts/release_train.py --model Qwen/Qwen3.5-4B-Base --seed 17 --root D \
--spec data/v6.1-vl_recipe/1-member-b-domain-mix.json --corpus D/domain-mix-2 --save-dir D/b-domain-2/s17
RSIJEV_OPTION_POOL_OWN_TOKENS=1 python scripts/fit_head.py --ckpt D/b-domain-2/s17 --corpus D/domain-mix-2 \
--dev-corpus D/domain-mix-1 --out D/b-heads-s1 --heads all --sdpa-math --max-length 4096 --skip-prefix vis --seed 1
# the average
python scripts/soup_checkpoints.py D/soup D/heads-s1 D/b-heads-s1
# per-exit dumps, rows a member trained on dropped, temperatures and thresholds, the package
python scripts/dump_exits.py dev --ckpt D/soup --corpus D/image-corpus --out D/dumps/soup # and cases / vision / eval
python scripts/select_exit_policy.py overlap ... # development case ids found in the members' corpora
python scripts/select_exit_policy.py exclude ... # the dumps without them
python scripts/select_exit_policy.py thresholds ... # refit temperatures; auto: 0.85 at 16, 0.50 at 20
python scripts/select_exit_policy.py thresholds ... --single # one threshold: 0.95, the rule's fallback
python scripts/package_multiexit.py --ckpt D/soup --temperatures D/policy/auto.json \
--single-tau D/policy/single.json --drop-exit 12 --thresholds D/policy/auto.json --out D/package
None. The v6.0-VL record is left as published.