__ __ / /___ _ ___ __ __ ___ / // // _ `// _ \/ // /(_-< \___/ \_,_//_//_/\_,_//___/
Janus 35B-A3B: calibrated typed decisions in one forward pass.
Janus is an independent reconstruction of a "System 1" decision model, built from public descriptions of the
interface. Janus 35B-A3B is the largest model: give it a state (a ticket, a log, a policy, a JSON record) and any number of choice,
score and noul (yes/no) questions. In one forward pass, it returns a calibrated probability for every
option of every question, with no text generation. It is a LoRA adapter (r16) plus a pointer decision head on
Qwen3.6-35B-A3B, a mixture-of-experts model with about 3B active
parameters per token. It is served on NVIDIA's NVFP4 quantization of that model,
nvidia/Qwen3.6-35B-A3B-NVFP4 at revision
1355db6a052410cfd62085d94b58866fd0f2c3c5. It is the most accurate Janus model on JevBench's public items. The state is
encoded once however many questions ride on it, each question is answered independently, and a choice can have up
to 255 options. It needs a 32 GB Blackwell GPU.
Code, server and Docker image: github.com/IcarusAICo/janus. Smaller models: Janus 4B and Janus 0.8B.
| Questions | choice (1 to 255 options), score (2 to 10 ordered levels, with the expected level), noul (p(true)) |
| Input | Up to 16,384 tokens in the Docker image (--max-tokens sets it); trained on requests up to 9,216 |
| Wire format | The POST /v1/systemone request and response shape; output tokens are always 0 |
| Hardware | A Blackwell GPU with compute capability 12.0 and 32 GB (RTX 5090, RTX PRO 4500 or 6000). The NVFP4 experts run through our fused W4A16 Triton kernel, which does not run on older cards such as the RTX 3090 |
| Memory | Peak on an RTX 5090: 22.7 GB with a 150-token or 1k state, 23.4 GB at 4k, 26.0 GB at 16k; a 128-question score request fits at 28.7 GB (measured 2026-09-21) |
Results
Accuracy numbers are from 2026-09-24 on an RTX 5090, with the final serving code. The Janus 4B and 0.8B, JevK5 and
Laya numbers in the table were measured on an RTX 3090 on the same items. Accuracy doesn't depend on the card, but
the latency comparison below uses the same card for every system. Full tables and sources: release/RESULTS.md in
the GitHub repository.
| set | metric | Janus 35B-A3B | Janus 4B | JevK5 v0.2 | Laya 0.3.11 |
|---|---|---|---|---|---|
| JevBench public items, easy / standard / hard | accuracy | 1.000 / 0.986 / 0.784 | 1.000 / 0.972 / 0.712 | 1.000 / 0.972 / 0.730 | 0.958 / 0.694 / 0.333 |
| JevBench public items, all 231 | accuracy | 0.892 | 0.853 | 0.861 | 0.576 |
| JevBench public hard tier | ECE | 0.069 | 0.071 | 0.062 | 0.206 |
| MASSIVE, 51 locales, official test split | 20-way intent accuracy / ECE | not measured | 0.767 / 0.039 | refused (16-option limit) | 0.272 / 0.173 |
| XNLI, 15 languages, official test split | accuracy / ECE | not measured | 0.757 / 0.055 | 0.608 / 0.165 | 0.522 / 0.051 |
The JevBench rows are our runs of the 231 public items through JevBench's own runner. They are not an official JevBench score (the official v1.4 score also pools 308 sealed items). For scale, JevBench's own measurement of Jev 1.13.0 on the same 231 public items is 0.866. The serving-code update of 2026-09-24 changed 3 of this model's 231 predictions (median probability change 0.0007, largest 0.092).
Latency on an RTX 5090, median / p90 ms per request, warm, one request at a time, each system served by its own code, on the final serving code. This model's long-state p90 includes first-time captures of shapes that did not fit at start-up, and re-captures after a memory release.
| request | Janus 35B-A3B | Janus 4B | JevK5 v0.2 | Laya 0.3.11 |
|---|---|---|---|---|
| 1 short question (XNLI) | 35.1 / 37.2 | 17.3 / 18.1 | 18.7 / 19.6 | 6.1 / 7.4 |
| public-dataset test (1-2 questions) | 50.9 / 79.1 | 27.9 / 55.7 | 40.3 / 117.8 | 9.1 / 14.8 |
| 1 question, long state (hard-tier v2) | 48.5 / 236.7 | 27.0 / 161.6 | 32.6 / 247.0 | 9.1 / 13.9 |
| 8 questions, one long state | 205.6 / 381.3 | 107.0 / 271.4 | 251.8 / 1,964.4 | 26.0 / 56.4 |
Use
pip install "janus @ git+https://github.com/IcarusAICo/janus"
import janus
m = janus.load("cmxu/janus-35b-a3b", device="cuda") # downloads this repo and the NVFP4 backbone (about 22 GB)
response = m.predict(
"Refunds need a receipt and a purchase within 30 days. The customer bought 12 days ago and has no receipt.",
{"refund": {"type": "noul", "instructions": "Is a refund permitted under the policy?"},
"route": {"type": "choice", "instructions": "Which team should handle this?",
"criteria": {"billing": "Payments and refunds", "support": "Anything else"}}},
)
response["answers"]["refund"]["noul"] # p(true)
response["answers"]["route"]["probabilities"] # {"billing": ..., "support": ...}
m.predict_batch([request, ...]) scores many /v1/systemone bodies with shared forward passes. To serve over HTTP
from a download of this repo:
python -m janus serve --checkpoint model.pt --calibration calibration.json --model-id janus-35b-a3b --device cuda
The repository's Dockerfile builds an offline container around a pinned revision of this repo. It hasn't yet been run with this model.
Files
| file | contents |
|---|---|
model.pt |
trainable tensors only (LoRA + decision head), sha256 3ae2a3196dfc406a576950f62057c387de2dd3f6cf59e8a256adab7d2b8bc821; the backbone is fetched from nvidia/Qwen3.6-35B-A3B-NVFP4 at 1355db6a052410cfd62085d94b58866fd0f2c3c5 |
calibration.json |
global, per-family and per-option-count temperatures, bound to model.pt by its sha256 |
janus_config.json |
model id and pinned base model |
The global temperature is 1.0437. A request whose group_id starts with family: gets that family's temperature.
Calibrated families: adversarial, ambiguous, arena, badges, civil, delivery, evidence, helpsteer,
judge_hard, long_policy, massive, multi_hop, ord, post, probability, quality, record_match, rel,
retrieval, routing_hard, tabfact, temporal_numeric, tradeoff, trap, urgency, wikispeedia.
Training
Data. 53,224 requests (
data/production-v4):- synthetic decision families, some generated by code and some written by GPT-5.6 Luna and reviewed by GPT-5.6 Terra (hard-tier policies, multi-step lookups, dates and numbers, probability, trade-offs, answer judging);
- public datasets converted to typed requests (the
datasetsabove); - Wikispeedia next-click decisions, scripted browser-action rows, long-context and many-option rows.
No multilingual rows beyond MASSIVE's English split, and no distillation (gold targets). Rows are deduplicated by state and kept disjoint from evaluation states. The hard-tier generators reject any state sharing a 12-word sequence with a public JevBench item. The datasets and their licences are listed in the GitHub README.
Adapter. LoRA r16 on the attention and Gated DeltaNet projections (never the experts) plus the pointer head. It was trained in bf16 against the unquantised Qwen/Qwen3.6-35B-A3B at revision
995ad96eacd98c81ed38be0c5b274b04031597b0, then served on the NVFP4 experts. Loss: cross-entropy plus an option-order consistency term (weight 0.1).Schedule. One epoch in two runs on one rented H200, 48 requests per step:
- 827 steps (39,696 requests; backbone lr 2e-4, head lr 1e-3, 50 warm-up steps, cosine decay), stopped by its 6-hour time cap (6.08 h);
- a second run of 282 steps over the 13,528 requests the first run had not reached (backbone lr 6.4e-5, head lr 3.2e-4, 10 warm-up steps, cosine decay; 1.96 h).
Selection. Step 282 of the second run, by the rule fixed before training: dev NLL plus the NLL on held-out requests from unseen families. JevBench items were never used for selection.
Calibration. Temperatures fitted after selection on held-out requests that share no state or group with training or selection data. We also tested refitting the global (fallback) temperature on hard-tier calibration rows only, as for Janus 4B. It was rejected because it made calibration much worse on our judge v2 set (ECE 0.047 to 0.119).
This model also served as the distillation teacher for Janus 0.8B.
License and credits
Code and adapter weights: Apache-2.0. The base model Qwen3.6-35B-A3B is by the Qwen team (Apache-2.0). Its NVFP4 quantization is by NVIDIA, under Apache-2.0 ("GOVERNING DOWNLOAD TERMS: Use of the model is governed by the Apache license 2.0"). The training datasets keep their own licences.
"Jev", "System One" and TypeSafe are names of TypeSafe AI's products, used here only to describe interface compatibility.
- Downloads last month
- 21