pluto-2.1 / README.md
henryphilf's picture
Add Bosun-style percentage matchup tables
86214d1 verified
|
Raw History Blame Contribute Delete
9.26 kB
---
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.