Instructions to use itsdevice/lfm-2.5-350m-decs1 with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Local Apps Settings
- Unsloth Desktop
lfm-2.5-350m-decs1
A System One decision model: instead of generating text, it reads a state and scores
every option of every typed question in a single forward pass, returning calibrated
probabilities your software can act on. Compatible with the Jev / SystemOne API shape
(POST /v1/systemone).
- Backbone: LiquidAI/LFM2.5-350M (350M, hybrid conv-attention, 4-bit QLoRA + fresh Clef-style decision head)
- Trained with: Unsloth
FastDecisionModel(DecisionTrainer, LoRA r=16, lr 2e-4, cosine, 3 epochs) on Kaggle 2×T4 - Data: 12,000-row mixture of 13 sources (
ag_news,arc,banking77,boolq,clinc150,commonsense_qa,mmlu,mnli,prompt_injections,snli,sst5,wanli,typed-decisions), decontaminated against the test sets
Benchmarks
Accuracy before → after fine-tuning (same protocol as the Unsloth decision guide; test: 2,000 typed-decisions + 500 BANKING77 + 500 CLINC150):
| Model | typed-decisions | BANKING77 | CLINC150 | Holdout acc |
|---|---|---|---|---|
| lfm-2.5-350m-decs1 (this) | 31% → 57% | 2% → 68% | 17% → 68% | 72% |
| Unsloth Qwen3.5-0.8B (reference) | 36% → 73% | 7% → 74% | 19% → 76% | 78% |
Calibration on holdout: ECE 0.083. Act on probabilities, not confidence (see below).
Use
A. Unsloth (recommended)
from unsloth import FastDecisionModel
model, tokenizer = FastDecisionModel.from_pretrained(
"itsdevice/lfm-2.5-350m-decs1", load_in_4bit=True)
FastDecisionModel.for_inference(model)
answers = FastDecisionModel.predict(
model, tokenizer,
"Hi, I was charged twice for invoice #4411. Please refund the duplicate today.",
{"team": {"type": "choice",
"instructions": "Which team should handle this?",
"criteria": {"billing": "invoices, payments, refunds",
"technical": "bugs, outages, errors",
"sales": "pricing, new plans"}},
"refund": {"type": "noul", "instructions": "Does the customer ask for a refund?"}},
)
print(answers["team"]["answer"], answers["team"]["probabilities"])
B. Decision API (Unsloth Studio / any Jev-compatible server)
curl http://localhost:8888/v1/systemone \\
-H "Authorization: Bearer sk-unsloth-YOUR_KEY" \\
-H "Content-Type: application/json" \\
-d '{"model": "laya",
"state": "Hi, I was charged twice for invoice #4411. Please refund.",
"questions": {
"team": {"type": "choice", "instructions": "Which team?",
"criteria": {"billing": "invoices, refunds",
"technical": "bugs, errors"}},
"refund": {"type": "noul", "instructions": "Ask refund?"}}}'
Response shape per question type: choice → {choice, confidence, probabilities};
score → {score, confidence, legend, probabilities}; noul → {noul: P(true)}.
usage.output_tokens is always 0 — nothing is generated.
Threshold on
probabilities(e.g. act only if P ≥ 0.8), not onconfidence: confidence rescales differ between Jev and Laya/Clef-style heads.
Files
| File | Purpose |
|---|---|
model.safetensors, config.json |
Backbone (merged 16-bit) |
joint_head.safetensors, joint_head_config.json |
Decision head (scores every option jointly) |
unsloth_decision_config.json |
Calibrated temperatures + eval config |
tokenizer.*, chat_template.jinja |
LFM2.5 tokenizer |
Limits: up to 64 questions per request, 255 options per choice, 10 levels per
score. Training context 2048 tokens (serving reads up to 16384); long states
are cut from the end, schemas never silently truncated.
Limitations
- 350M-class model: strong on intent/tool routing, not suited for knowledge-heavy, math, or code decisions (same guidance as the base model card).
- English-centric evaluation; multilingual quality follows the LFM2.5 backbone.
- Probabilities are calibrated on the training mixture — re-calibrate
(
FastDecisionModel.calibrate) after further fine-tuning.
License & citation
Weights under LFM Open License v1.0 (inherited from the base model). If you use this model, please cite the base:
@article{liquidai2025lfm2,
title={LFM2 Technical Report},
author={Liquid AI},
year={2025}
}
- Downloads last month
- 20