sthanika-ai/Sieve-2B-v3

Source: 🤗text-classificationapache-2.02B activated2.8 GBsafetensors✓ 3 checksumsupdated 10d ago
or submit a torrent

Sieve-2B-v3

Sieve-2B-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 Qwen/Qwen3.5-2B (revision 15852e8c) with a pointer head, and it stores one calibration temperature per question category. The code is at github.com/sthanika-ai/Sieve.

Summary

Backbone Qwen/Qwen3.5-2B (revision 15852e8c)
Design pointer head
Trained weights full fine-tune of the 24 decoder layers (1.37B parameters), and a pointer head
Question types choice, noul and score (trained on choice and noul)
Decision Index public score 53.51 on our own run of the 0.3 suite; not on the leaderboard yet
Temperature a global T = 0.968 and 25 per question category (0.869 to 1.257)
Token limits 16,384 tokens for the state and 16,384 for each question with its options
GPU memory 4.3 GB (CUDA-graph server) to 10.7 GB (eager server) in bf16

How it works

  • Backbone. Only the text part of Qwen3.5-2B is used; the model cannot produce text.
  • Full fine-tune. All 24 decoder layers were trained; the token embeddings and the final norm are the backbone's. The release stores the trained layers in full as a PEFT adapter (modules_to_save), with a zero rank-1 LoRA on the embeddings, so it loads like the LoRA models of the family.
  • Readout. A pointer head scores the end of each option against the decision point. A calibrated softmax gives the probabilities.
  • Isolation. Each question runs as its own row from the state's cache, so questions never see each other.
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

Use

pip install "sieve-decisions[cuda,serve] @ git+https://github.com/sthanika-ai/Sieve"
pip install --no-build-isolation causal-conv1d==1.7.0   # recommended: the fused kernel our runs used
from sieve import load_sieve, decide

m = load_sieve("sthanika-ai/Sieve-2B-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 sieve 0.3.0 or later; the adapter alone is not a text-generation model. The backbone, Qwen/Qwen3.5-2B, is downloaded on first use; our runs used revision 15852e8c.
  • GPU memory. In bf16, 4.3 GB was in use on the CUDA-graph server and 10.7 GB on the eager server during our latency runs. Longer states need more.
  • Token limits. States and questions up to 16,384 tokens each, as in training; sieve reads these limits from training_config.json. Longer requests are refused, never truncated. The Decision Index engine declares larger limits (a 65,536-token state and a 32,768-token question), and every request of the Decision Index run below fit within them.
  • Server. sieve-serve --model sthanika-ai/Sieve-2B-v3 --graphs.
  • Decision Index. python -m decision_index run --engine sieve.decision_index_engine:SieveEngine --option model=sthanika-ai/Sieve-2B-v3 --out runs/Sieve-2B-v3.
  • causal-conv1d. Without it, transformers falls back to a slower PyTorch convolution, whose probabilities can differ slightly. Install it to reproduce our numbers.
  • Temperature per category. head.pt stores a global T = 0.968 and 25 temperatures (0.869 to 1.257), fitted by NLL on the calibration split (143,822 questions). 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, then choice:3-4, then choice), else the global T. Temperatures never change an answer, and temperature=1.0 gives raw probabilities.

Results

Decision Index

Sieve-2B-v3 scores 53.51 (raw index 65.39, breadth 51.09) on the public 0.3 suite of the Decision Index, on our own run with the official kit at f5a6e4f (0.3) and its scorer.

  • 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 two A100 80GB PCIe GPUs, in six shards.
  • Results. sthanika-ai/Sieve-2B-v3-decision-index-results.
  • Not on the leaderboard yet. The score is self-reported. The board ranks by the Full score: the public benchmarks count 20%, the maintainers' private tests of the same skills 50% and their private tasks from new domains 30%.
Decision Index 0.3, public suite Knowledge & Reasoning Language Understanding Retrieval & Classification Tools & Automation Arts & Human Taste
53.51 30.9 49.3 66.5 80.5 47.6

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.439 42.2 1,565
Amazon ESCI macro-F1 0.557 44.4 5,000
ANLI macro-F1 0.507 26.1 3,200
API-Bank accuracy 0.866 86.4 508
BANKING77 macro-F1 0.881 88.0 3,080
BBH fixed-option tasks accuracy 0.608 43.1 5,507
BFCL case exact accuracy 0.884 84.4 1,694
BPoMP accuracy 0.919 82.8 5,000
BRIGHT nDCG@10 0.353 26.8 220
cfcolor accuracy 0.602 16.1 5,000
ChessBench accuracy 0.225 15.6 5,000
CLadder accuracy 0.884 76.9 5,000
CLINC150+OOS macro-F1 0.818 81.7 5,500
ContractNLI macro-F1 0.809 72.4 123
CRUXEval accuracy 0.484 18.2 570
FinEntity macro-F1 0.848 77.6 979
GPQA Diamond accuracy 0.270 2.7 196
GSM8K accuracy 0.390 26.6 2,638
Habermas Machine accuracy 0.592 40.8 1,676
HellaSwag accuracy 0.873 83.1 10,042
HLE accuracy 0.128 0.0 501
Home appliance simulator case exact accuracy 0.966 96.6 88
HoVer claim verification accuracy 0.829 65.8 4,000
Humicroedit accuracy 0.585 17.1 2,628
iSarcasmEval Sarcasm F1 · track A, English 0.286 8.2 4,600
MMLU-Pro accuracy 0.298 21.0 12,032
MuSR accuracy 0.742 59.0 752
New Yorker caption matching accuracy 0.600 50.0 528
NLI4CT macro-F1 0.691 39.9 5,500
PhishNChips phishing decisions accuracy 0.964 92.8 2,000
POP909-CL accuracy 0.792 79.0 2,000
RAGTruth response-level hallucination F1 on hallucinated class 0.679 33.4 2,700
SATA-Bench case exact accuracy 0.287 27.8 1,650
ToolRet nDCG@10 0.630 57.3 685
VAST macro-F1 0.726 58.9 3,006
When2Call MCQ accuracy 0.820 76.0 3,652
WinoGrande accuracy 0.775 55.0 1,267
ARC-Challenge (not in the index) accuracy 0.788 71.8 1,172
ARC-Easy (not in the index) accuracy 0.914 88.5 2,376
MMLU (not in the index) accuracy 0.558 41.1 14,033
RouterBench (not in the index) selected quality (quality objective) 0.669 22.3 10,000
SGD/SGD-X (not in the index) macro-F1 0.436 6.1 2,500
SimpleBench (not in the index) accuracy 0.000 0.0 10

Calibration

The calibration split chose the checkpoint and fitted the temperatures.

split questions accuracy NLL Brier ECE
calibration, per-category temperatures (shipped) 143,822 0.8781 0.3009 0.1606 0.0028
calibration, one global T = 0.968 143,822 0.8781 0.3013 0.1608 0.0041
calibration, raw (T = 1) 143,822 0.8781 0.3015 0.1609 0.0053

In a 2-fold check inside the calibration split (fit on one half, score the other), the per-category table scored NLL 0.3011 and ECE 0.0036, against 0.3014 and 0.0046 for a single T.

Latency

  • Per Decision Index request. In-process wall time, one request at a time, eager, over the 140,620 requests of the 0.3 run (A100 80GB PCIe): median 59 ms, mean 143 ms, 80th percentile 115 ms, 95th percentile 329 ms. Six engines (three per GPU) ran at once, next to other users' GPU jobs, so these are upper bounds. This is not the maintainers' RTX PRO 6000 measurement.
  • Cached state. Server-reported p50 on one A100 80GB PCIe (bf16, merged, CUDA graphs), for one choice question on a 1,433-token state:
options 2 10 50
state cached (ms) 59.9 60.1 53.6
state new (ms) 113.7 112.5 102.6
  • By option count. For one choice question on a 41-token state, which is below the server's 64-token caching threshold, so every request ran the state again. Server p50 in ms, CUDA graphs / eager:
options 2 5 10 25 50 100 255
graphs 61.1 61.7 61.3 69.2 76.0 104.4 140.6
eager 104.7 97.0 108.4 114.4 106.6 51.9 89.5

Training

  • Recipe.
    • Full fine-tune of the 24 decoder layers (1,373,263,680 parameters); the token embeddings and the final norm stay frozen. The pointer head (256-dimensional projections, fp32) is trained from scratch, alone for the first 100 steps.
    • AdamW, lr 1e-5 for the backbone and 5e-5 for the head, 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; FSDP2 with one unit per decoder layer; gradient checkpointing.
    • States and questions up to 16,384 tokens each; longer records are dropped, never truncated (none were).
    • 3,344 steps, 10.6 hours on two A100 80GB PCIe GPUs.
    • Permuted choice options, "none of the above" augmentation (as the answer, as a wrong option and in minimal pairs) and irrelevant distractor options, with a cross-entropy loss.
  • Selection. The checkpoint with the highest accuracy on a fixed 2,004-question calibration sample, with NLL breaking ties. This rule was fixed before training, and it chose step 3,300. The benchmarks were never used to choose.
  • Temperatures. Fitted after selection on the whole calibration split: the global T, then one T per category with at least 200 calibration questions.
  • Data. 428,018 training records, with 71,018 for calibration and 215,392 for test (60/10/30).
    • 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

  • score questions. The training data has only choice and noul questions. score questions are answered by the same pointer head, but the model was not trained on them, and they take the global temperature.

Files

file contents
adapter_model.safetensors, adapter_config.json the 24 fine-tuned decoder layers in full (PEFT modules_to_save, bf16) and a zero rank-1 LoRA on the embeddings
head.pt the pointer head and the calibrated temperatures (global and per category)
tokenizer.json, tokenizer_config.json Qwen3.5-2B's tokenizer, 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, with the calibration metrics per category
provenance.json SHA-256 of every file and of the training data, and library versions

License

Apache-2.0, see LICENSE.