Instructions to use sthanika-ai/Sieve-31B-v3 with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use sthanika-ai/Sieve-31B-v3 with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-classification", model="sthanika-ai/Sieve-31B-v3")# pip install -U transformers accelerate # Load model directly from transformers import AutoProcessor, AutoModelForMultimodalLM processor = AutoProcessor.from_pretrained("sthanika-ai/Sieve-31B-v3") model = AutoModelForMultimodalLM.from_pretrained("sthanika-ai/Sieve-31B-v3", device_map="auto") - Notebooks
- Google Colab
- Kaggle
Sieve-31B-v3
Sieve-31B-v3 is a decision model from the Sieve family. You give it a piece of text or JSON (the state) and typed questions, and it returns a calibrated probability for every option of every question. It reads the state once, scores the options directly, and never generates text.
It is a full fine-tune of google/gemma-4-31B-it (revision 842da37).
It answers through its own output layer: the logits of the option labels (A, B, …) at an Answer: ( slot. Its 10
global attention layers are bidirectional, and all the questions of a request share one reading of the state. The
code is at github.com/sthanika-ai/Sieve.
Ranked #1 (tied) on the Decision Index
Sieve-31B-v3 is ranked #1 (tied) on the Decision Index leaderboard, with a Full score of 71.10 (edition 0.4.1, board data of 2026-10-28, 236 models). The board ranks models by the Full score, which comes from the maintainers' private tests, and gives one rank to the models it counts as tied.
The Decision Index leaderboard on 2026-10-28.
Summary
| Backbone | google/gemma-4-31B-it (revision 842da37) |
| Design | letter readout: the model's own output-layer logits of the option labels |
| Trained weights | full fine-tune of every linear projection of the 60 decoder layers (29.29B parameters); the token embeddings (tied with the output layer) and every norm are the backbone's |
| Attention | bidirectional in the 10 global (full-attention) layers; causal in the 50 sliding-window layers |
| Question types | choice, noul and score (trained on choice and noul) |
| Decision Index | ranked #1 (tied) on the leaderboard, with a Full score of 71.10 (edition 0.4.1); public score 71.68 on our own run of the 0.3 suite |
| Temperature | a global T = 1.27 and 22 per question category (0.955 to 1.380) |
| Token limits | none declared; trained on prompts of up to 16,384 tokens |
| GPU memory | 58.3 GiB of bf16 weights; 81.4 GiB allocated at the largest Decision Index request (53,703 tokens): one 96 GB GPU runs every public request |
How it works
- Prompt. Gemma's own chat template with thinking off: a system turn, then one user turn with the list of questions
and the state, then one block per question with its labelled options, ending in an
Answer: (slot. - Score. At each slot, the model's output-layer logits of the question's option labels (A, B, …, then AA, AB, …, up to 255 options; final logit softcap included). A softmax at the question category's temperature gives the probabilities.
- Two option orders. Every
choicequestion whose options may be reordered is read twice, with its options as given and rotated by half; the two log-probability vectors are averaged. This cancels the preference for a label position. Questions marked"permute": falsekeep their order and are read once. - Bidirectional attention. See the next section.
- Weights. A full Gemma-4 checkpoint in bf16 (13 safetensors shards), plus
head.ptwith the readout, the attention rule, the serving policy and the temperatures. The weights are a weighted average of the backbone (0.3) and the fine-tuned model (0.7). - Never. It never truncates, drops or reorders options, tunes prompts per benchmark, or sees gold labels.
| type | options | returns |
|---|---|---|
choice |
the caller's keys, optionally described (up to 255) | a probability per key |
noul |
yes / no | P(yes) |
score |
ordered levels | a probability per level |
Bidirectional attention
Gemma-4-31B-it interleaves 10 global (full-attention) layers with 50 sliding-window layers (1,024-token window). A text-generation model has to be causal: each token only sees the tokens before it. A decision model generates nothing, so the global layers can read in both directions.
- One question. The whole prompt is one block: in the global layers every token attends to every other token, before and after it, so the state is read in the light of the question and its options.
- Several questions. The shared block (system turn, the list of questions, the state) attends only to itself. Each question's block attends to the shared block and to itself. Questions never see each other's options.
- Sliding-window layers. Causal in every case, as in the base model.
- Trained and served the same way. The fine-tune was trained with this attention, and
sieveserves it the same way.head.ptrecords the rule, andsievesets the attention when it loads the model. - Shared state. In a request with several questions and a shared block of 2,048 tokens or more,
sievecomputes the shared block once and reuses its keys and values for every question (and both option orders). The result is the same as computing it with each question.
Use
pip install "sieve-decisions[cuda,serve] @ git+https://github.com/sthanika-ai/Sieve"
from sieve import load_sieve, decide
m = load_sieve("sthanika-ai/Sieve-31B-v3")
decide(m, {"subject": "Duplicate charge on invoice 4411", "body": "Billed twice. Refund today or we cancel."},
{"department": {"type": "choice", "instructions": "Which team handles this?",
"criteria": {"billing": "invoices, payments, refunds", "technical": "bugs and outages"}},
"churn_risk": {"type": "noul", "instructions": "Does the customer threaten to cancel?"}})
- Loading. Load it with
sieve0.4.0 or later, which readshead.ptand applies the prompt, the attention rule, the two option orders and the temperatures. Loading the weights with transformers alone gives the language model without any of these. - GPU memory. The bf16 weights take 58.3 GiB. The largest public Decision Index request (53,703 tokens, 17 questions) peaked at 81.4 GiB allocated, so one 96 GB GPU runs every public request; shorter requests fit on an 80 GB GPU.
- Token limits. None declared. Requests are never truncated; one that does not fit in GPU memory fails with an error instead of a wrong answer. The model was trained on prompts of up to 16,384 tokens, and every public Decision Index request, the longest about 54,000 tokens, was answered.
- Server.
sieve-serve --model sthanika-ai/Sieve-31B-v3. - Decision Index.
python -m decision_index run --engine sieve.decision_index_engine:SieveEngine --option model=sthanika-ai/Sieve-31B-v3 --out runs/Sieve-31B-v3. - Temperature per category.
head.ptstores a global T = 1.27 and 22 temperatures (0.955 to 1.380), fitted by NLL on the calibration split (17,753 questions) under the two-order reading. A question's category is its type, its number of options (2, 3-4, 5-9, 10-25, 26+) and the kind of state (empty, text or JSON). A question takes the temperature of its most specific category in the table (choice:3-4:text, thenchoice:3-4, thenchoice), else the global T. Temperatures never change an answer, andload_sieve(..., temperature=1.0)gives raw probabilities.
Results
Decision Index
Sieve-31B-v3 is ranked #1 (tied) on the Decision Index leaderboard (edition 0.4.1, board data of
2026-10-28), with a Full score of 71.10 and a public score of 71.68. On our own run of the public 0.3 suite with the
official kit at f5a6e4f (0.3) and its scorer, it scores 71.68 (raw
index 78.39, breadth 71.18).
- Coverage. All 140,178 scoreable requests over 43 benchmarks were answered, with no truncation, no unsupported request and no error. The index averages 37 of the benchmarks.
- How the run was made. One complete run of the 0.3 suite on eight NVIDIA RTX PRO 6000 Blackwell Server Edition GPUs, one shard per GPU.
- Results. sthanika-ai/Sieve-31B-v3-decision-index-results.
- Leaderboard. The board ranks by the Full score, which comes from the maintainers' private tests: 60% tests of the same skills as the public benchmarks and 40% decision tasks from new domains. The public score is not part of it.
| Decision Index 0.3, public suite | Knowledge & Reasoning | Language Understanding | Retrieval & Classification | Tools & Automation | Arts & Human Taste |
|---|---|---|---|---|---|
| 71.68 | 61.2 | 71.6 | 76.1 | 86.9 | 62.3 |
The index and area scores are chance-corrected: 0 is random guessing and 100 is perfect. Below, the score is in each benchmark's own metric and the skill is chance-corrected.
All 43 benchmarks
| benchmark | metric | score | skill (×100) | requests |
|---|---|---|---|---|
| ACOS | per-review F1 | 0.501 | 48.5 | 1,565 |
| Amazon ESCI | macro-F1 | 0.644 | 55.4 | 5,000 |
| ANLI | macro-F1 | 0.809 | 71.4 | 3,200 |
| API-Bank | accuracy | 0.888 | 88.6 | 508 |
| BANKING77 | macro-F1 | 0.913 | 91.2 | 3,080 |
| BBH fixed-option tasks | accuracy | 0.896 | 84.9 | 5,507 |
| BFCL | case exact accuracy | 0.979 | 97.1 | 1,694 |
| BPoMP | accuracy | 0.992 | 98.4 | 5,000 |
| BRIGHT | nDCG@10 | 0.506 | 44.1 | 220 |
| cfcolor | accuracy | 0.665 | 32.0 | 5,000 |
| ChessBench | accuracy | 0.255 | 18.9 | 5,000 |
| CLadder | accuracy | 0.923 | 84.6 | 5,000 |
| CLINC150+OOS | macro-F1 | 0.968 | 96.8 | 5,500 |
| ContractNLI | macro-F1 | 0.798 | 70.8 | 123 |
| CRUXEval | accuracy | 0.932 | 89.1 | 570 |
| FinEntity | macro-F1 | 0.942 | 91.4 | 979 |
| GPQA Diamond | accuracy | 0.546 | 39.5 | 196 |
| GSM8K | accuracy | 0.910 | 89.3 | 2,638 |
| Habermas Machine | accuracy | 0.622 | 45.1 | 1,676 |
| HellaSwag | accuracy | 0.975 | 96.7 | 10,042 |
| HLE | accuracy | 0.130 | 0.0 | 501 |
| Home appliance simulator | case exact accuracy | 0.966 | 96.6 | 88 |
| HoVer claim verification | accuracy | 0.891 | 78.2 | 4,000 |
| Humicroedit | accuracy | 0.676 | 35.2 | 2,628 |
| iSarcasmEval | Sarcasm F1 · track A, English | 0.683 | 59.2 | 4,600 |
| MMLU-Pro | accuracy | 0.758 | 72.8 | 12,032 |
| MuSR | accuracy | 0.808 | 69.5 | 752 |
| New Yorker caption matching | accuracy | 0.873 | 84.1 | 528 |
| NLI4CT | macro-F1 | 0.842 | 69.2 | 5,500 |
| PhishNChips phishing decisions | accuracy | 0.949 | 89.8 | 2,000 |
| POP909-CL | accuracy | 0.792 | 78.7 | 2,000 |
| RAGTruth response-level hallucination | F1 on hallucinated class | 0.821 | 63.0 | 2,700 |
| SATA-Bench | case exact accuracy | 0.394 | 38.6 | 1,650 |
| ToolRet | nDCG@10 | 0.705 | 65.9 | 685 |
| VAST | macro-F1 | 0.797 | 69.5 | 3,006 |
| When2Call MCQ | accuracy | 0.880 | 84.0 | 3,652 |
| WinoGrande | accuracy | 0.949 | 89.7 | 1,267 |
| ARC-Challenge (not in the index) | accuracy | 0.978 | 97.0 | 1,172 |
| ARC-Easy (not in the index) | accuracy | 0.993 | 99.1 | 2,376 |
| MMLU (not in the index) | accuracy | 0.897 | 86.2 | 14,033 |
| RouterBench (not in the index) | selected quality (quality objective) | 0.798 | 52.6 | 10,000 |
| SGD/SGD-X (not in the index) | macro-F1 | 0.366 | 0.0 | 2,500 |
| SimpleBench (not in the index) | accuracy | 0.500 | 40.0 | 10 |
Calibration
The temperatures were fitted on the calibration split (17,753 questions), which was not used for training or for choosing the weights.
| split | questions | NLL | ECE |
|---|---|---|---|
| calibration, per-category temperatures (shipped) | 17,753 | 0.2212 | 0.0083 |
| calibration, one global T = 1.27 | 17,753 | 0.2216 | 0.0072 |
Latency
Per Decision Index request. In-process wall time of one request, CUDA-synchronized, eager, one request at a time, over the 140,620 requests of the 0.3 run, with one engine per NVIDIA RTX PRO 6000 Blackwell Server Edition: median 219 ms, mean 913 ms, 80th percentile 657 ms, 95th percentile 1,507 ms. This is not the maintainers' measurement. The leaderboard measures latency separately, also on one NVIDIA RTX PRO 6000, and lists a median of 232 ms, a mean of 663 ms and a 95th percentile of 1,520 ms.
Training
- Recipe.
- Full fine-tune of every linear projection of the 60 decoder layers (29,286,727,680 parameters); the token embeddings (tied with the output layer) and every norm stay frozen. The 10 global attention layers were bidirectional during training, as in serving.
- Loss: cross-entropy on the option-label logits + 0.3 × the multi-class Brier score.
- AdamW, lr 2e-6, betas (0.9, 0.95), weight decay 0.01 on weight matrices, gradient clipping at 1.0, 5% linear warm-up then cosine decay to 0.1×, 1 epoch, 128 records per step.
- bf16 compute with fp32 master weights, gradient reduction and optimizer state (AdamW moments in CPU memory); FSDP2 with one unit per decoder layer; gradient checkpointing.
- A record's questions share one pass over its state under the attention rule above, in packs of up to 16,384 tokens. Longer records are dropped, never truncated (none were).
- Permuted choice options, "none of the above" augmentation (as the answer, as a wrong option and in minimal pairs) and irrelevant distractor options.
- 5,544 steps in two stages on two NVIDIA B300 GPUs: steps 1–500 (4.4 h), a check of the step-500 weights, then steps 501–5,544 (44.13 h) resumed with the optimizer state; about 97 GPU-hours.
- Release weights. Weight snapshots were kept at steps 500, 1,386, 2,772, 4,158 and 5,544. The released weights are 0.3 × the backbone + 0.7 × the step-5,544 weights, chosen among the snapshots, their average and their blends with the backbone by a selection rule fixed before training. The two-order reading was chosen by the same rule. The Decision Index benchmarks were never used to choose.
- Held-out monitor. On a fixed 6,000-question held-out sample, the fine-tuned weights reached accuracy 0.8925 and NLL 0.2797 at step 5,544.
- Data. 709,604 training records (957,775 questions), with 12,395 records for calibration and 12,902 held out.
- Sources. Public datasets and generated decision records.
- Not published. The training files are not part of this release; the SHA-256 of each file is in
training_config.json.
Limitations
scorequestions. The training data has onlychoiceandnoulquestions.scorequestions are answered by the same readout with the levels as options, but the model was not trained on them.- More than 255 options. The readout has 255 option labels; a
choicequestion with more options is refused.
Files
| file | contents |
|---|---|
model-*.safetensors, model.safetensors.index.json, config.json, generation_config.json |
the full model in bf16 (13 shards) |
head.pt |
the readout (labels and prompt format), the attention rule, the serving policy and the calibrated temperatures (global and per category) |
tokenizer.json, tokenizer_config.json, chat_template.jinja |
Gemma-4-31B-it's tokenizer and chat template, unchanged |
training_config.json, training_metrics.json, train.log |
the recipe, the run and its log |
result.json |
the calibration, Decision Index and latency numbers above |
provenance.json |
SHA-256 of every file and of the training data, and library versions |
assets/decision-index-leaderboard-2026-10-28.png |
the Decision Index leaderboard on 2026-10-28 (screenshot) |
License
The weights are released under Apache-2.0 (see LICENSE), as is the code at
github.com/sthanika-ai/Sieve. Use of the base model is governed by Gemma's
terms, including Google's prohibited-use policy.
- Downloads last month
- 20
Model tree for sthanika-ai/Sieve-31B-v3
Space using sthanika-ai/Sieve-31B-v3 1
Collection including sthanika-ai/Sieve-31B-v3
Evaluation results
- Decision Index 0.4.1, Full score (leaderboard; ranked #1, tied) on Decision Index 0.4.1 leaderboard (the maintainers' private tests)self-reported71.100
- Decision Index 0.3, public index (chance-corrected) on Decision Index 0.3 public suite (140,178 scored requests; the index averages 37 benchmarks)self-reported71.680