--- license: apache-2.0 language: - en library_name: pytorch pipeline_tag: text-classification base_model: - Qwen/Qwen3-1.7B - Hanno-Labs/bosun-v3.1-1.7b datasets: - LocalLLaMA/typed-decisions - SargeDev/jev-distill-corpus-v3 tags: - decision-model - system-one - calibrated-decisions - typed-decisions - choice - noul - score - qwen3 - bosun - safetensors - pytorch model-index: - name: Pluto-2.1-1.7B results: - task: type: text-classification name: Typed Decisions dataset: name: LocalLLaMA/typed-decisions type: LocalLLaMA/typed-decisions metrics: - type: accuracy name: Accuracy value: 0.6695 - type: brier name: Brier value: 0.1261 - type: kl name: KL value: 0.2139 - task: type: text-classification name: DecisionBench matched subset dataset: name: Hanno-Labs/decision-bench type: Hanno-Labs/decision-bench metrics: - type: accuracy name: Accuracy value: 0.7208 - type: brier name: Brier value: 0.3730 - type: nll name: NLL value: 0.7439 --- # Pluto-2.1 ### A 1.7B decision model that clears both d1 checkpoints and owns the balance. Pluto-2.1 reads a state and typed questions, then returns a calibrated probability distribution for every candidate. It does not generate an answer, so there is nothing to parse, nothing to retry, and nothing to hallucinate. Built solo on one **RTX 5060 Ti 16GB**. **Headline:** **0.6695** on Typed Decisions and **0.7208** on the matched DecisionBench comparison. It clears both d1-2B and d1-3B on both suites and posts the **highest mean accuracy** in the comparison at **0.6952** — from a 1.738B standalone checkpoint with **2–255 candidates**, **choice / noul / score**, and **Apache-2.0** weights. --- ## The receipts Same rows and same scorer for every locally measured model. Mean is the mean of Typed Decisions and DecisionBench matched accuracy. | Model | Params | Typed Decisions | DecisionBench matched | Mean | |---|---:|---:|---:|---:| | **Pluto-2.1** | **1.738B** | **0.6695** | **0.7208** | **0.6952** | | Pluto-2 400M | 0.397B | **0.7835** | 0.5789 | 0.6812 | | Bosun 3.1 1.7B (initializer) | 1.738B | 0.4980 | **0.8288** | 0.6634 | | d1-3B | 3.123B | 0.6495 | 0.6486 | 0.6490 | | d1-2B | 1.918B | 0.6325 | 0.6339 | 0.6332 | **What this means** - **+3.7 points** over d1-2B and **+2.0 points** over d1-3B on Typed Decisions. - **+8.7 points** over d1-2B and **+7.2 points** over d1-3B on DecisionBench. - **Highest mean accuracy** across the two suites. - **1.738B**: 9.4% smaller than d1-2B and 44% smaller than d1-3B. - **Sharper distributions** than both d1 checkpoints: lower Typed Brier and KL, lower DecisionBench NLL and Brier. - **One forward pass.** No autoregressive decoding and no token bill. - **Bosun leads broad-only; Pluto-2 leads Typed-only; Pluto-2.1 owns the balance.** ### Typed Decisions — full 2,000-decision board | Model | Params | Mode | Primary accuracy | ECE | Brier | KL | Coverage | |---|---:|---|---:|---:|---:|---:|---:| | Pluto-2 Typed | 395.8M | fitted | **80.30%** | 7.48% | 6.72% | 0.119 | 100% | | OpenDecider-nano | 394.8M | fitted | 79.30% | 16.09% | **4.28%** | **0.079** | 100% | | Pluto-2 | 397.4M | fitted | 78.35% | 11.80% | 5.32% | 0.097 | 100% | | Laya-typed | 421.3M | fitted | 76.80% | 21.52% | 6.15% | 0.117 | 100% | | Pluto-1 | 332.8M | fitted | 75.15% | 14.00% | 6.49% | 0.118 | 100% | | Jev 1.13 | ~27B | published | 72.70% | 14.40% | 14.80% | 1.442 | — | | **Pluto-2.1** | **1.738B** | fine-tuned | **66.95%** | **5.56%** | 12.61% | 0.214 | 100% | | d1-3B | 3.123B | zero-shot | 64.95% | 3.43% | 14.16% | 0.285 | 100% | | d1-2B | 1.918B | zero-shot | 63.25% | 3.90% | 14.40% | 0.296 | 100% | | Bosun 3.1 1.7B | 1.738B | zero-shot | 49.80% | 18.48% | 30.15% | 0.590 | 100% | ### DecisionBench — 1,565-row matched board | Model | Params | Primary accuracy | ECE | NLL | Brier | Coverage | |---|---:|---:|---:|---:|---:|---:| | Bosun 3.1 1.7B | 1.738B | **82.88%** | 6.10% | **0.468** | **22.88%** | 100% | | **Pluto-2.1** | **1.738B** | **72.08%** | **5.86%** | **0.744** | **37.30%** | **100%** | | d1-3B | 3.123B | 64.86% | 11.74% | 1.034 | 49.37% | 100% | | d1-2B | 1.918B | 63.39% | 4.48% | 0.933 | 45.10% | 100% | | Pluto-2 400M | 397.4M | 57.89% | 3.04% | 1.087 | 54.77% | 100% | Coverage is `2,000/2,000` on Typed Decisions and `1,565/1,565` of the DecisionBench matched subset, which is 6.55% of the full 23,900-row suite. Jev's published card does not report coverage, so it is marked `-`. The matched subset is the shared accessibility slice, not the full suite. **Two tracks.** Pluto-2.1 is the balanced generalist. The 400M Pluto-2 Typed checkpoint is the raw Typed specialist and beats every fitted specialist above. ![Accuracy](assets/benchmark_accuracy.png) ![Mean accuracy](assets/average_accuracy.png) ![Balance](assets/balance.png) ![Calibration](assets/calibration.png) ![Parameters](assets/parameters.png) ### Comparison hygiene The Typed Decisions result is the full 2,000-decision test split. The DecisionBench result is the 1,565-row matched subset used for every model in the table: ≤16 candidates and ≤2,048-token prompts, not the full 23,900-row suite. Bosun, Pluto-2, d1-2B, and d1-3B were all run locally on the same rows and scored with the same code. Raw summaries are in benchmarks/. The full DecisionBench suite is not claimed. --- ## Architecture ![Architecture](assets/architecture.png) - Qwen3-1.7B backbone with 256 stable decision-token slots. - The fine-tuned adapter is merged into the base; this repository is self-contained. - One forward pass scores every presented candidate. - Up to 255 runtime choices per question. - No d1 weights, no d1-generated training targets, no ensemble, and no runtime dependency on another model service. **Lineage:** Qwen3-1.7B → Hanno-Labs Bosun 3.1 1.7B → Pluto-2.1 2,000-step fine-tune → merged standalone checkpoint. Pluto-2.1 is self-contained at inference: no adapter files are needed and no base model is downloaded at runtime. --- ## Quickstart ```bash git clone https://huggingface.co/omida-ai/pluto-2.1 pip install -e "pluto-2.1/code" ``` ```python from pluto21 import Pluto21 model = Pluto21("pluto-2.1") out = model.predict( state={"transaction": "Duplicate charge confirmed by the bank."}, instructions="Was the duplicate charge confirmed?", candidates=[ {"id": "yes", "label": "Yes"}, {"id": "no", "label": "No"}, ], decision_type="noul", row_id="demo-1", ) print(out["probabilities"]) ``` ```python out = model.predict( state={"ticket": "Customer was charged twice and the parcel is late."}, instructions="Which team should handle this?", candidates=[ {"id": "billing", "label": "Billing", "description": "Charges and refunds"}, {"id": "shipping", "label": "Shipping", "description": "Delivery and parcels"}, {"id": "technical", "label": "Technical", "description": "App or site faults"}, ], decision_type="choice", row_id="demo-2", ) print(out["probabilities"]) ``` The runtime returns candidate-aligned probabilities. It never generates text. --- ## Model details | | | |---|---| | Parameters | **1,737,985,024** (1.738B) | | Backbone | Qwen3-1.7B, 28 layers, 40,960-token context | | Decision interface | 256 stable decision-token slots | | Candidates | 2–255 per question | | Outputs | `choice`, `noul`, `score` distributions | | Weights | BF16, 3.44GB | | License | Apache-2.0 | | Initialization | Bosun 3.1 1.7B (Apache-2.0) | | Base | Qwen3-1.7B | | Runtime | `pluto21`, PyTorch + Transformers | ## Training - 2,000 LoRA steps on Pluto’s Typed Decisions and JEV decision data. - Selected checkpoint: 2,000 steps, the only tested checkpoint that clears both d1-2B and d1-3B on both measured benchmarks. - Trained and merged on one 16GB consumer GPU. - The adapter is merged into the base; no PEFT dependency at inference. - The Typed Decisions test split was never used for training or checkpoint selection. ## Scope Pluto-2.1 is a decision model, not a chat or reasoning model. The DecisionBench comparison is the matched accessibility subset; the full 23,900-row suite is not claimed. As with any benchmark, validate on your own data before high-stakes use. ## License and attribution Pluto-2.1 weights and runtime are released under **Apache-2.0**. Upstream components remain under their original licenses: - Qwen3-1.7B, Apache-2.0 - Hanno-Labs Bosun 3.1 1.7B, Apache-2.0 See `LICENSE`, `NOTICE`, and `serving.json`. No d1 weights or outputs are included, and d1 is not required at inference. ## Citation ```bibtex @misc{omida2026pluto21, title = {Pluto-2.1: A 1.7B Standalone Decision Model}, author = {Omida AI}, year = {2026}, url = {https://huggingface.co/omida-ai/pluto-2.1} } ``` Built by **Omida AI** on one 16GB consumer GPU.