Feature Extraction
Transformers
Safetensors
lemondecider_decision
decision-engine
typed-decision
choice
classification
Merge
qwen3.5
custom_code
Instructions to use inclusionAI/LemonDecider with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use inclusionAI/LemonDecider with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("feature-extraction", model="inclusionAI/LemonDecider", trust_remote_code=True)# pip install -U transformers accelerate # Load model directly from transformers import AutoModel model = AutoModel.from_pretrained("inclusionAI/LemonDecider", trust_remote_code=True, device_map="auto") - Notebooks
- Google Colab
- Kaggle
Upload README.md with huggingface_hub
Browse files
README.md
CHANGED
|
@@ -3,125 +3,294 @@ license: apache-2.0
|
|
| 3 |
base_model: Qwen/Qwen3.5-4B
|
| 4 |
library_name: transformers
|
| 5 |
tags:
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
|
| 12 |
---
|
| 13 |
|
| 14 |
-
# LemonDecider
|
| 15 |
|
| 16 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 17 |
|
| 18 |
## Model description
|
| 19 |
|
| 20 |
| Property | Value |
|
| 21 |
|---|---|
|
| 22 |
-
| Architecture | `
|
| 23 |
-
|
|
| 24 |
-
|
|
| 25 |
-
|
|
| 26 |
-
|
|
| 27 |
-
|
|
| 28 |
-
|
|
| 29 |
-
|
|
| 30 |
-
| Serving temperature | `1.0` (post-processing softmax only; **not** used in CE loss) |
|
| 31 |
|
| 32 |
-
|
| 33 |
|
| 34 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 35 |
|
| 36 |
-
|
|
|
|
|
|
|
|
|
|
| 37 |
|
| 38 |
-
|
| 39 |
-
|---|---|---|
|
| 40 |
-
| `choice` | 1β254 named options (+unknown) | `choice` (argmax key), per-option `probabilities`, `confidence` |
|
| 41 |
-
| `noul` | `true`, `false` (+unknown) | `noul = P(true) + 0.5 * P(unknown)` |
|
| 42 |
-
| `score` | 2β10 ordered descriptions (+unknown) | `score = Ξ£ i Β· P(i)` plus legend and probabilities |
|
| 43 |
-
| β | β | `abstained = True` iff the raw argmax lands on `unknown`; `unknown_probability` is always returned |
|
| 44 |
|
| 45 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 46 |
|
| 47 |
-
|
| 48 |
|
| 49 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 50 |
|
| 51 |
-
|
| 52 |
-
|
| 53 |
-
|
| 54 |
-
|
| 55 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 56 |
|
| 57 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 58 |
|
| 59 |
```python
|
| 60 |
import torch
|
| 61 |
-
from transformers import AutoModel
|
| 62 |
-
from decision_utils import predict_batch
|
| 63 |
|
|
|
|
| 64 |
model = AutoModel.from_pretrained(
|
| 65 |
-
|
| 66 |
-
|
| 67 |
-
dtype=torch.bfloat16,
|
| 68 |
-
device_map="cuda:0",
|
| 69 |
-
attn_implementation="sdpa",
|
| 70 |
).eval()
|
| 71 |
-
processor =
|
| 72 |
-
"inclusionAI/LemonDecider", trust_remote_code=True
|
| 73 |
-
)
|
| 74 |
-
processor.tokenizer.padding_side = "left"
|
| 75 |
|
| 76 |
rows = [{
|
| 77 |
-
"state": "
|
| 78 |
-
"question": {
|
| 79 |
-
|
| 80 |
-
|
| 81 |
-
|
| 82 |
-
|
| 83 |
-
"delivery": "η©ζ΅ηΈε
³",
|
| 84 |
-
"account": "账ζ·ηΈε
³",
|
| 85 |
-
},
|
| 86 |
-
},
|
| 87 |
}]
|
| 88 |
-
|
| 89 |
-
|
| 90 |
-
print(result["answers"][0])
|
| 91 |
-
# {"type": "choice", "choice": "refund", "probabilities": {...},
|
| 92 |
-
# "confidence": ..., "unknown_probability": ..., "abstained": ...}
|
| 93 |
```
|
| 94 |
|
| 95 |
-
|
| 96 |
-
|
| 97 |
-
## Training
|
| 98 |
|
| 99 |
-
|
|
|
|
|
|
|
| 100 |
|
| 101 |
-
|
| 102 |
-
- **Loss**: cross-entropy over the masked 255-way readout (supports hard option indices and soft teacher distributions)
|
| 103 |
-
- **Dev set (n=574) accuracy@T=1**: `0.7735` (best step: 3, `0.7805`)
|
| 104 |
|
| 105 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 106 |
|
| 107 |
-
##
|
| 108 |
|
| 109 |
-
-
|
| 110 |
-
-
|
| 111 |
-
-
|
| 112 |
-
-
|
|
|
|
|
|
|
|
|
|
| 113 |
|
| 114 |
-
##
|
| 115 |
|
| 116 |
-
|
| 117 |
-
|
| 118 |
-
| `model-00001/2-of-00002.safetensors`(+`index`) | Weights (bfloat16) |
|
| 119 |
-
| `configuration_autojev.py` / `modeling_autojev.py` | Custom architecture (decision forward, option masking, hard/soft-target loss) |
|
| 120 |
-
| `decision_utils.py` | Prompt rendering, `_known()` scoring, batching (`prepare_batch` / `predict_batch`) |
|
| 121 |
-
| `model.py` | Standalone inference CLI |
|
| 122 |
-
| `chat_template.jinja`, `processor_config.json` | Qwen3-style chat template and image processor |
|
| 123 |
-
| `sft_receipt.json` | Training artifact receipt (step, dev metrics, temperature fit) |
|
| 124 |
|
| 125 |
-
##
|
| 126 |
|
| 127 |
-
|
|
|
|
|
|
| 3 |
base_model: Qwen/Qwen3.5-4B
|
| 4 |
library_name: transformers
|
| 5 |
tags:
|
| 6 |
+
- decision-engine
|
| 7 |
+
- typed-decision
|
| 8 |
+
- choice
|
| 9 |
+
- classification
|
| 10 |
+
- merge
|
| 11 |
+
- qwen3.5
|
| 12 |
---
|
| 13 |
|
| 14 |
+
# LemonDecider 4B (LemonJev typed decision engine)
|
| 15 |
|
| 16 |
+
**Model ID:** `lemondecider-4b-merge50-20261015-v2`
|
| 17 |
+
**Base model:** `Qwen/Qwen3.5-4B`
|
| 18 |
+
**Release date:** 2026-10-15
|
| 19 |
+
|
| 20 |
+
LemonDecider 4B is a typed decision engine: it reads a state and a question with a
|
| 21 |
+
list of options, runs **one forward pass**, and returns a probability distribution
|
| 22 |
+
over the options (choice / noul questions) or an ordered rating (score questions).
|
| 23 |
+
No text is generated and no input is ever truncated.
|
| 24 |
|
| 25 |
## Model description
|
| 26 |
|
| 27 |
| Property | Value |
|
| 28 |
|---|---|
|
| 29 |
+
| Architecture | Qwen3.5-4B-class hybrid backbone (linear-attention + periodic full-attention) + a bias-free **255-way readout** (`LemonDeciderReadout`, FP32 precision island), loaded through `modeling_lemondecider.LemonDeciderForDecisionClassification` (`trust_remote_code`) |
|
| 30 |
+
| `model_type` / protocol | `lemondecider_decision` / `lemondecider-v1` |
|
| 31 |
+
| Attention | `noncausal_full_attention` β all-attend prompt for the periodic full-attention layers, causal recurrence for the Gated DeltaNet layers, SDPA only |
|
| 32 |
+
| Pooling / temperature | last-token pooling, temperature 1.0 (uncalibrated) |
|
| 33 |
+
| Max input length | **262,144 tokens (256K context)** β the backbone's full position window; requests over the limit are rejected, never cut |
|
| 34 |
+
| Precision | backbone BF16, readout FP32 (readout GEMM executed in FP32 under autocast) |
|
| 35 |
+
| Serialized tensors | 724 (all vision tensors included; vision stem executed as a matrix-product patch projection) |
|
| 36 |
+
| Runtime | in-package Python runtime (`modeling_lemondecider.py`, `configuration_lemondecider.py`, `contract.py`, `decision_utils.py`, `model.py`), validated with transformers 5.17, flash-linear-attention 0.5.2, PyTorch SDPA |
|
|
|
|
| 37 |
|
| 38 |
+
## Training
|
| 39 |
|
| 40 |
+
LemonDecider 4B was fine-tuned (SFT) from the common Qwen3.5-4B initialization on
|
| 41 |
+
**more than 700,000 public decision/QA rows** collected by the project (about 805k
|
| 42 |
+
train rows from ~818k collected rows incl. dev/test splits). Every source is
|
| 43 |
+
public and permissive; no benchmark or evaluation data was used for training. The
|
| 44 |
+
released weights combine two independent SFT runs over this corpus (weight-level
|
| 45 |
+
combination, no training after that).
|
| 46 |
|
| 47 |
+
**Question formats:** choice (up to 255 options), noul (no/yes) and score (ordinal
|
| 48 |
+
ratings); some multimodal rows are image questions over locally registered
|
| 49 |
+
project-generated charts, and roughly 600k train rows carry teacher-style soft
|
| 50 |
+
label distributions.
|
| 51 |
|
| 52 |
+
**Data categories:**
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 53 |
|
| 54 |
+
- service decision arcs β user-intent routing and case triage (refund, logistics,
|
| 55 |
+
account actions), policy and adequacy judgment;
|
| 56 |
+
- language judgment β sentiment, sarcasm, NLI/factuality and paraphrase-style checks;
|
| 57 |
+
- knowledge and reasoning QA β multiple-choice knowledge, multi-hop reasoning,
|
| 58 |
+
arithmetic and math word problems;
|
| 59 |
+
- retrieval and selection β document and tabular retrieval, product/route selection;
|
| 60 |
+
- multimodal reading β chart/graph and small-graphic question answering;
|
| 61 |
+
- calibration-style rows β probability and ordinal confidence judgments.
|
| 62 |
|
| 63 |
+
**Training parameters** (from the training receipts):
|
| 64 |
|
| 65 |
+
- distributed FSDP on 64 GPUs (4 nodes x 16 GPUs);
|
| 66 |
+
- effective batch 256 rows per step, learning rate 2e-06;
|
| 67 |
+
- two independent runs: 2,446 steps (sequence cap 8,192) and 700 steps (sequence
|
| 68 |
+
cap 2,048);
|
| 69 |
+
- objective `valid_option_soft_cross_entropy` over valid options only
|
| 70 |
+
(`noul_tie_policy = true_on_equal_probability`, `choice_permutation =
|
| 71 |
+
global-reference`, vision tower trainable);
|
| 72 |
+
- precision policy fp32-master-bf16; export dtype BF16, readout FP32, temperature 1.0.
|
| 73 |
|
| 74 |
+
## Package artifacts
|
| 75 |
+
|
| 76 |
+
The release directory ships as a single self-contained package β weights,
|
| 77 |
+
tokenizer, runtime code and provenance receipts travel together.
|
| 78 |
+
|
| 79 |
+
### Weight files
|
| 80 |
+
|
| 81 |
+
| File | Size | SHA-256 |
|
| 82 |
+
|---|---:|---|
|
| 83 |
+
| `model-00001-of-00002.safetensors` | 4,973,336,472 | `27b985a94ccf63aace88b2ff67c1ea0871ce745a49b22b9cda43ea4d32297d8a` |
|
| 84 |
+
| `model-00002-of-00002.safetensors` | 4,107,897,400 | `81f61ce9daead4be7e3d950cf027f63f16f757a176407f020406190dc2068bc0` |
|
| 85 |
+
| `tokenizer.json` | 19,989,492 | `6f32ce20dc35f57a7f9ad1eac03525bd7d30f9df8cea6507e958279cc3657706` |
|
| 86 |
+
| `model.safetensors.index.json` | 68,426 | `bda09c55c0152d7a6fb2db6898aea70e728dc528df6f9c026cefb0bd5d1d673b` |
|
| 87 |
+
|
| 88 |
+
Provenance receipts ship inside the package: `LEMONDECIDER_BUILD.json` (build
|
| 89 |
+
receipt) and `LEMONDECIDER_REBRAND.json` (export lineage).
|
| 90 |
+
|
| 91 |
+
## Evaluation results
|
| 92 |
+
|
| 93 |
+
Both evaluations ran on 2026-10-15 on self-hosted compute (64 GPUs) through the
|
| 94 |
+
model's own HTTP `/v1/systemone` wire contract. **No result here
|
| 95 |
+
is an official leaderboard or board submission**; the harnesses enforce no-truncation,
|
| 96 |
+
no option filtering, one fixed rendering, and coverage-adjusted scoring. Latency is
|
| 97 |
+
per-request server wall time on internal accelerators and is not the sub-1-second
|
| 98 |
+
latency-admission measurement of any external board.
|
| 99 |
+
|
| 100 |
+
Evidence directories keep the run names under which they were created during the v1
|
| 101 |
+
execution (`lemondeeder-eval-20261015/`); no shipped artifact in the model packages
|
| 102 |
+
carries that legacy spelling.
|
| 103 |
+
|
| 104 |
+
### 1) Decision Index, edition 0.3 β FULL public suite (complete run)
|
| 105 |
+
|
| 106 |
+
βοΈ 140,620 requests issued across 64 shards (frozen suite-0.3 staging, official
|
| 107 |
+
scorer, coverage-adjusted, chance-corrected) β **140,178 scored requests,
|
| 108 |
+
`complete: true`**.
|
| 109 |
+
|
| 110 |
+
| Headline | Value |
|
| 111 |
+
|---|---:|
|
| 112 |
+
| **Decision Index (public 0.3)** | **50.31** |
|
| 113 |
+
| Raw index | 62.47 |
|
| 114 |
+
| Median / mean / p95 request latency | 50.4 ms / 205.6 ms / 756.2 ms |
|
| 115 |
+
|
| 116 |
+
The public index averages the native, chance-corrected, coverage-adjusted score of
|
| 117 |
+
37 benchmarks in five areas with fixed weights (knowledge 25.8%, language 25.8%,
|
| 118 |
+
retrieval 20.0%, tools 18.3%, arts 10%); inside an area, β
gold benchmarks weigh
|
| 119 |
+
1.2 and the rest 1.0. Unanswered counts as wrong.
|
| 120 |
+
|
| 121 |
+
#### Per-area scores
|
| 122 |
+
|
| 123 |
+
| Area | Raw | Skill (chance-corrected) | Coverage | Benchmarks |
|
| 124 |
+
|---|---:|---:|---:|---:|
|
| 125 |
+
| Knowledge & Reasoning | 0.4895 | 0.3395 | 0.9998 | 11 |
|
| 126 |
+
| Language Understanding | 0.6962 | 0.5751 | 1.0000 | 9 |
|
| 127 |
+
| Retrieval & Classification | 0.6661 | 0.5494 | 1.0000 | 6 |
|
| 128 |
+
| Tools & Automation | 0.7108 | 0.6741 | 0.9986 | 5 |
|
| 129 |
+
| Arts & Human Taste | 0.5487 | 0.3340 | 0.9978 | 6 |
|
| 130 |
+
|
| 131 |
+
#### Per-benchmark native scores (β
= counted in the public index)
|
| 132 |
|
| 133 |
+
| # | Benchmark | Metric | Requests | Score | Skill | Cov. |
|
| 134 |
+
|---:|---|---|---:|---:|---:|---:|
|
| 135 |
+
| 1 | BFCL β
| case exact accuracy | 1,694 | 0.9416 | 0.9211 | 1.000 |
|
| 136 |
+
| 2 | ToolRet β
| nDCG@10 | 685 | 0.6540 | 0.5982 | 0.997 |
|
| 137 |
+
| 3 | API-Bank β
| accuracy | 508 | 0.8320 | 0.8254 | 0.996 |
|
| 138 |
+
| 4 | BANKING77 β
| macro-F1 | 3,080 | 0.7418 | 0.7385 | 1.000 |
|
| 139 |
+
| 5 | CLINC150+OOS β
| macro-F1 | 5,500 | 0.8634 | 0.8626 | 1.000 |
|
| 140 |
+
| 6 | RouterBench | selected quality | 10,000 | 0.7746 | 0.4715 | 1.000 |
|
| 141 |
+
| 9 | Home appliance simulator β
| case exact accuracy | 88 | 0.4091 | 0.4091 | 1.000 |
|
| 142 |
+
| 10 | SGD/SGD-X | macro-F1 | 2,500 | 0.4360 | 0.0616 | 1.000 |
|
| 143 |
+
| 11 | ContractNLI β
| macro-F1 | 123 | 0.7389 | 0.6224 | 1.000 |
|
| 144 |
+
| 12 | ANLI β
| macro-F1 | 3,200 | 0.6729 | 0.5100 | 1.000 |
|
| 145 |
+
| 20 | BPoMP β
| accuracy | 5,000 | 0.8718 | 0.7525 | 1.000 |
|
| 146 |
+
| 21 | Humicroedit β
| accuracy | 2,628 | 0.6111 | 0.2222 | 1.000 |
|
| 147 |
+
| 22 | POP909-CL β
| accuracy | 2,000 | 0.1890 | 0.1701 | 0.987 |
|
| 148 |
+
| 23 | cfcolor β
| accuracy | 5,000 | 0.6088 | 0.1827 | 1.000 |
|
| 149 |
+
| 24 | MMLU | accuracy | 14,033 | 0.7914 | 0.7219 | 1.000 |
|
| 150 |
+
| 25 | GPQA Diamond β
| accuracy | 196 | 0.4286 | 0.2381 | 1.000 |
|
| 151 |
+
| 26 | ARC-Easy | accuracy | 2,376 | 0.9836 | 0.9781 | 1.000 |
|
| 152 |
+
| 27 | ARC-Challenge | accuracy | 1,172 | 0.9548 | 0.9397 | 1.000 |
|
| 153 |
+
| 28 | WinoGrande β
| accuracy | 1,267 | 0.8019 | 0.6038 | 1.000 |
|
| 154 |
+
| 29 | HellaSwag β
| accuracy | 10,042 | 0.8520 | 0.8027 | 1.000 |
|
| 155 |
+
| 30 | GSM8K β
| accuracy | 2,638 | 0.5716 | 0.4866 | 1.000 |
|
| 156 |
+
| 31 | ChessBench β
| accuracy | 5,000 | 0.1384 | 0.0616 | 1.000 |
|
| 157 |
+
| 32 | MuSR β
| accuracy | 752 | 0.5731 | 0.3213 | 1.000 |
|
| 158 |
+
| 33 | SATA-Bench β
| case exact accuracy | 1,650 | 0.1539 | 0.1427 | 1.000 |
|
| 159 |
+
| 34 | SimpleBench | accuracy | 10 | 0.1000 | 0.0000 | 1.000 |
|
| 160 |
+
| 36 | BRIGHT β
| nDCG@10 | 220 | 0.4444 | 0.3714 | 1.000 |
|
| 161 |
+
| 37 | Amazon ESCI β
| macro-F1 | 5,000 | 0.4827 | 0.3511 | 1.000 |
|
| 162 |
+
| 38 | ACOS β
| per-review F1 | 1,565 | 0.1970 | 0.1713 | 1.000 |
|
| 163 |
+
| 39 | FinEntity β
| macro-F1 | 979 | 0.9381 | 0.9090 | 1.000 |
|
| 164 |
+
| 40 | iSarcasmEval β
| Sarcasm F1 (track A, EN) | 4,600 | 0.5552 | 0.4278 | 1.000 |
|
| 165 |
+
| 41 | VAST β
| macro-F1 | 3,006 | 0.7251 | 0.5876 | 1.000 |
|
| 166 |
+
| 42 | NLI4CT β
| macro-F1 | 5,500 | 0.7997 | 0.6103 | 1.000 |
|
| 167 |
+
| 43 | CRUXEval β
| accuracy | 570 | 0.6035 | 0.3709 | 1.000 |
|
| 168 |
+
| 44 | CLadder β
| accuracy | 5,000 | 0.6846 | 0.3692 | 1.000 |
|
| 169 |
+
| 45 | HLE β
| accuracy | 501 | 0.1140 | 0.0000 | 0.998 |
|
| 170 |
+
| 50 | Habermas Machine β
| accuracy | 1,676 | 0.4063 | 0.1384 | 1.000 |
|
| 171 |
+
| 56 | PhishNChips β
| phishing-decision accuracy | 2,000 | 0.7315 | 0.4630 | 1.000 |
|
| 172 |
+
| 57 | MMLU-Pro β
| accuracy | 12,032 | 0.5780 | 0.5254 | 1.000 |
|
| 173 |
+
| 58 | BBH fixed-option tasks β
| accuracy | 5,507 | 0.7018 | 0.5678 | 1.000 |
|
| 174 |
+
| 59 | RAGTruth β
| F1 on hallucinated class | 2,700 | 0.7601 | 0.5026 | 1.000 |
|
| 175 |
+
| 61 | HoVer β
| claim-verification accuracy | 4,000 | 0.7225 | 0.4450 | 1.000 |
|
| 176 |
+
| 62 | When2Call MCQ β
| accuracy | 3,652 | 0.6528 | 0.5371 | 1.000 |
|
| 177 |
+
| 64 | New Yorker caption matching β
| accuracy | 528 | 0.6307 | 0.5384 | 1.000 |
|
| 178 |
+
|
| 179 |
+
Evidence: `lemondeeder-eval-20261015/di/runs/20261015-lemondecider-4b-di-full-0.3/`
|
| 180 |
+
(64 shard dirs + `merged/results.jsonl` + official `scores.json`, `index.json`,
|
| 181 |
+
`benchmark-summary.json`).
|
| 182 |
+
|
| 183 |
+
### 2) JevBench public-231 (typed-decision public sanity suite)
|
| 184 |
+
|
| 185 |
+
231/231 items attempted and scorable, **complete**, native probability output,
|
| 186 |
+
dataset hash-pinned (`dc3995d8β¦de51`, jevbench-v1 harness, typesafe adapter).
|
| 187 |
+
|
| 188 |
+
| Metric | Value |
|
| 189 |
+
|---|---:|
|
| 190 |
+
| **Accuracy** | **83.12%** (192/231) |
|
| 191 |
+
| Macro accuracy | 84.55% |
|
| 192 |
+
| Brier (mean) | 0.2392 |
|
| 193 |
+
| Ordinal MAE (score items) | 0.1207 |
|
| 194 |
+
| Paraphrase consistency | 36/36 pairs agree (100%) |
|
| 195 |
+
| Coverage / operational success / schema validity | 1.0 / 1.0 / 1.0 (strict 1.0) |
|
| 196 |
+
| Latency p50 / p95 | 47.1 ms / 340.3 ms |
|
| 197 |
+
|
| 198 |
+
#### Per-family results
|
| 199 |
+
|
| 200 |
+
| Family | n | Accuracy | Brier |
|
| 201 |
+
|---|---:|---:|---:|
|
| 202 |
+
| adequacy | 12 | 1.000 | 0.051 |
|
| 203 |
+
| adversarial | 6 | 1.000 | 0.002 |
|
| 204 |
+
| ambiguous | 7 | 0.571 | 0.661 |
|
| 205 |
+
| extraction | 24 | 1.000 | 0.000 |
|
| 206 |
+
| fact | 12 | 1.000 | 0.000 |
|
| 207 |
+
| intent | 24 | 1.000 | 0.001 |
|
| 208 |
+
| judge_hard | 17 | 0.647 | 0.499 |
|
| 209 |
+
| long_policy | 19 | 0.579 | 0.585 |
|
| 210 |
+
| multi_hop | 18 | 0.722 | 0.481 |
|
| 211 |
+
| ordinal | 12 | 1.000 | 0.000 |
|
| 212 |
+
| policy | 12 | 1.000 | 0.007 |
|
| 213 |
+
| probability | 10 | 0.800 | 0.338 |
|
| 214 |
+
| routing | 12 | 1.000 | 0.013 |
|
| 215 |
+
| routing_hard | 5 | 1.000 | 0.000 |
|
| 216 |
+
| temporal_numeric | 15 | 0.067 | 1.006 |
|
| 217 |
+
| tool_selection | 12 | 1.000 | 0.000 |
|
| 218 |
+
| tradeoff | 6 | 0.833 | 0.450 |
|
| 219 |
+
| trap | 8 | 1.000 | 0.038 |
|
| 220 |
+
|
| 221 |
+
Known weak spots on this suite: long-policy judgement, ambiguous states, hard-judge
|
| 222 |
+
calls, and especially **temporal/numeric reasoning (6.7%)**, which the model inherits
|
| 223 |
+
from its parents' training data.
|
| 224 |
+
|
| 225 |
+
Evidence: `lemondeeder-eval-20261015/jevbench/20261015-lemondecider-4b-jevbench-public231/`
|
| 226 |
+
(`results.jsonl`, `ledger.jsonl`, `public-summary.json`, 5-item smoke gate passed).
|
| 227 |
+
|
| 228 |
+
## Usage
|
| 229 |
+
|
| 230 |
+
Dependencies: `transformers==5.17.0` (needs the Qwen3.5 hybrid classes),
|
| 231 |
+
`flash-linear-attention==0.5.2`, `pillow`, `torch` with SDPA. ROCm fast path
|
| 232 |
+
keywords: `LEMONDECIDER_FAST`, `LEMONDECIDER_GRAPH_TOKENS`, `LEMONDECIDER_FUSED`,
|
| 233 |
+
`LEMONDECIDER_CUDNN_SDPA`.
|
| 234 |
|
| 235 |
```python
|
| 236 |
import torch
|
| 237 |
+
from transformers import AutoModel
|
| 238 |
+
from decision_utils import load_processor, predict_batch
|
| 239 |
|
| 240 |
+
ckpt = "lemondecider-4b-merge50-20261015-v2" # local package directory
|
| 241 |
model = AutoModel.from_pretrained(
|
| 242 |
+
ckpt, trust_remote_code=True, local_files_only=True,
|
| 243 |
+
dtype=torch.bfloat16, device_map="cuda:0", attn_implementation="sdpa",
|
|
|
|
|
|
|
|
|
|
| 244 |
).eval()
|
| 245 |
+
processor = load_processor(ckpt)
|
|
|
|
|
|
|
|
|
|
| 246 |
|
| 247 |
rows = [{
|
| 248 |
+
"state": "The user asks how to return a damaged order placed last week.",
|
| 249 |
+
"question": {"type": "choice",
|
| 250 |
+
"instructions": "Pick the best next action",
|
| 251 |
+
"criteria": {"refund": "Process a refund",
|
| 252 |
+
"replace": "Send a replacement",
|
| 253 |
+
"escalate": "Escalate to a human"}},
|
|
|
|
|
|
|
|
|
|
|
|
|
| 254 |
}]
|
| 255 |
+
answers = predict_batch(model, processor, rows)
|
| 256 |
+
print(answers["answers"][0]) # choice, probabilities over the 3 options, confidence
|
|
|
|
|
|
|
|
|
|
| 257 |
```
|
| 258 |
|
| 259 |
+
CLI from inside the package: `python3 model.py --checkpoint . --device cuda:0 --input rows.json`.
|
|
|
|
|
|
|
| 260 |
|
| 261 |
+
Batching: the internal batch is 8 questions per forward pass; inputs are left-padded
|
| 262 |
+
to the longest prompt; requests over the 262,144-token limit are rejected with the
|
| 263 |
+
limit named (HTTP 422 in server wrappers) β nothing is truncated.
|
| 264 |
|
| 265 |
+
## Intended use & limitations
|
|
|
|
|
|
|
| 266 |
|
| 267 |
+
- Intended: typed decision endpoints β routing, intent classification, policy/
|
| 268 |
+
adequacy checks, structured QA over explicit option lists, pipeline control.
|
| 269 |
+
- The model emits **option probabilities only**; it is not a generative assistant.
|
| 270 |
+
- Ratings (`score` items) are supported through the same readout; they inherit the
|
| 271 |
+
parents' weak arithmetic/timing behavior (see the temporal_numeric row above).
|
| 272 |
+
- Trained on public data sources assembled by the project; no evaluation rows were
|
| 273 |
+
used for training (corpus admission contracts enforced this).
|
| 274 |
+
- Uncalibrated: temperature 1.0, no post-hoc calibration fitted. The 6 low-confidence
|
| 275 |
+
bins in the JevBench calibration table show mild over-confidence in the 0.6β0.8
|
| 276 |
+
confidence range.
|
| 277 |
|
| 278 |
+
## License
|
| 279 |
|
| 280 |
+
- `LICENSE` β Apache-2.0 text as preserved from the parent checkpoint lineage
|
| 281 |
+
(base: Qwen/Qwen3.5-4B, inherit the base model's terms).
|
| 282 |
+
- `LICENSE.code` β MIT for runtime/server code components adapted from upstream.
|
| 283 |
+
- `NOTICE` β rebranded for this export; no new license grant is asserted.
|
| 284 |
+
- No benchmark score is claimed by this package beyond the reproducible evidence
|
| 285 |
+
files listed above; the Decision Index owner reserves 80% of its Full score for
|
| 286 |
+
private tests, so the 50.31 public index is not a board submission.
|
| 287 |
|
| 288 |
+
## Version history
|
| 289 |
|
| 290 |
+
- **v1** β `lemondecider-4b-merge50-20261015-v1`: rebranded export of the merged two-route checkpoint (all evaluations in this card ran on v1; weight files byte-identical to v2).
|
| 291 |
+
- **v2** β `lemondecider-4b-merge50-20261015-v2`: internal machine identifiers spelling-normalized β module files (`modeling_lemondecider.py`, `configuration_lemondecider.py`), `auto_map`, protocol `lemondeeder-v1` β `lemondecider-v1`, `model_type: lemondecider_decision`; weights and tokenizer byte-identical to v1 (sha256 unchanged).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 292 |
|
| 293 |
+
## Acknowledgements
|
| 294 |
|
| 295 |
+
Built by the LemonJev project. Runtime and server components build on Apache-2.0
|
| 296 |
+
and MIT upstream code (see LICENSE files). Base backbone by the Qwen team.
|