需先单独从 Hugging Face 下载模型权重,仓库本身不含模型;vLLM 插件需装在同一个 Python 环境,且 vLLM 0.31.0 与 0.19.1 行为有差异;StartLux-Prism 目前不支持 v1.1 Instant 模型,且服务默认无 API key 和 TLS,需自行加访问控制。
StartLux-Decision
StartLuxLabsApache-2.0活跃维护一套 0.8B 到 27B 的开源决策模型,一次前向就能为每个选项给出校准概率,只在不确定时才输出简短思考;配套 vLLM、llama.cpp 和 MLX 推理引擎。
Open decision models from 0.8B to 27B: a calibrated probability for every option in one pass, and a short thought only when unsure. Engine for vLLM, llama.cpp and MLX.
git clone https://github.com/StartLuxLabs/StartLux-Decision.git
cd StartLux-Decision
pip install -e '.[vllm]'README 未说明具体显存要求;NVIDIA GPU 可用 StartLux-Prism 直接加载 GGUF 运行,需 Linux、Python 3.12 和 CUDA 13 驱动;无 GPU 可调用 bamboonode.dev 托管的 27B AutoThink。
开源决策模型家族,一次前向给出每个选项的校准概率,不确定时才生成简短思考
一套 0.8B 到 27B 的开源决策模型,一次前向就能为每个选项给出校准概率,只在不确定时才输出简短思考;配套 vLLM、llama.cpp 和 MLX 推理引擎。
核心能力
- 一次前向传播输出每个选项的校准概率
- 支持 choice、noul、score 三类带类型问题
- AutoThink 在最高概率低于 gate 时才生成推理
- 提供兼容 /v1/systemone 的 HTTP 服务
- 支持 vLLM、llama.cpp 与 MLX 后端
容易踩的坑
- v1.1.0StartLux-Decision v1.1最新正式版2026-10-14 · 2026-10-14 07:15 UTC
StartLux-Decision v1.1 adds AutoThink models, which answer in one pass when they are sure and write a short thought first when they are not, and an inference engine that serves both releases.
- Instant models at 0.8B, 2B, 4B, 9B and 27B, and AutoThink models at 4B, 9B and 27B, on Hugging Face, with GGUF and MLX builds that read images.
- The 27B AutoThink model scores 73.37 on the public subset of Decision Index 0.3 and 86.9% pair accuracy on DecisionPivot, both at gate 0.9.
- The engine (
startlux-decide) runs on vLLM, llama.cpp and MLX, serves the System One/v1/systemonerequest format, reportsnone_probabilitywith every choice answer and lets each request set the gate (0.6 by default). - Technical report: arXiv 2610.17309. Blog: decision.startlux.com.
- Try the 27B AutoThink model free, without usage limits, at bamboonode.dev.
The first release, StartLux-Decision-v1, is in v1/ and under the tag
v1.
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
StartLux-Decision is a family of open decision models. Given a state (text, JSON or images) and a set of typed
questions, a model returns a probability for every option of every question: a choice among listed options
(choice), a yes or no judgement (noul), or a level on a scale (score). Instant models answer in a single forward
pass with bidirectional attention over the prompt. AutoThink models answer in one pass when the top probability
reaches a gate, 0.6 by default, and otherwise generate a short reasoning trace and read the answer again.
This repository contains the inference engine and HTTP server for both variants. The API is compatible with System
One /v1/systemone.
Demos
In the chess and game runs, every step is one request with typed questions, answered by StartLux-Decision-v1-27B, the first release, in one pass. The rescue and launch videos send one frame a second with nine questions to the 27B AutoThink model on bamboonode.dev, which thinks only when its top probability is below the 0.6 gate. Their footage is from the U.S. Coast Guard and NASA (public domain, no endorsement implied), and the faces of the people being rescued are blurred. Click a preview for the video. v1/README.md describes each harness, and the harnesses for computer use and chess are in v1/demos.
Release notes
- 2026-10-16: StartLux-Decision v1.1 27B Instant ranks first of 174 entries on the Decision Index 0.3.2 leaderboard on Hugging Face, with a Full score of 69.12. It is also first on each of the three parts: the public benchmarks (72.88), the private tests of the same skills (64.82) and the private tasks from new domains (61.41).
- 2026-10: the technical report is on arXiv as 2610.17309.
Models
| StartLux-Decision v1.1 | Decision Index 0.3 | DecisionPivot | Other formats |
|---|---|---|---|
| 27B AutoThink | 73.37 | 86.9 | GGUF · MLX 8-bit · MLX 4-bit |
| 27B Instant | 72.83 | 75.4 | GGUF · MLX 8-bit · MLX 4-bit |
| 9B AutoThink | 70.45 | 59.9 | GGUF · MLX 8-bit · MLX 4-bit |
| 9B Instant | 69.96 | 47.5 | GGUF · MLX 8-bit · MLX 4-bit |
| 4B AutoThink | 68.21 | 59.9 | GGUF · MLX 8-bit · MLX 4-bit |
| 4B Instant | 67.88 | 41.5 | GGUF · MLX 8-bit · MLX 4-bit |
| 2B Instant | 59.14 | 21.1 | GGUF · MLX 8-bit · MLX 4-bit |
| 0.8B Instant | 53.75 | 8.1 | GGUF · MLX 8-bit · MLX 4-bit |
Decision Index 0.3 refers to the public subset, evaluated with the public kit. DecisionPivot reports pair accuracy on 7,800 programmatically generated examples arranged in contrast pairs that differ in one decisive detail. A pair counts only when both answers are correct. The AutoThink results use a gate of 0.9.
Across sizes, the Instant models exceed the strongest evaluated decision model of comparable size by 7.4 to 16.9 points on Decision Index 0.3, and AutoThink adds 11.5 to 18.4 points of DecisionPivot pair accuracy over Instant. AutoThink reasoning is trained with RLCD², reinforcement learning for calibrated deliberative decisions. The technical report contains the full evaluation. The engine also serves the v1 models (0.8B to 27B and 35B-A3B), which answer in one pass.
On one H200 with vLLM and one request in flight, Instant models answer a request in 25 to 52 ms at the median, from 0.8B to 27B. Through this server, an AutoThink model needs one read-out of 38 to 59 ms when it is sure. When it is unsure it writes a thought and reads the answer a second time, and the thought takes longer the more it writes.
Quick start
To try a model without a GPU, use bamboonode.dev. It hosts the 27B AutoThink model with the
same request format (POST /v1/decisions), free and without usage limits, and needs only a Bamboo API key.
On NVIDIA GPUs, StartLux-Prism is our inference engine written for
these models. It serves v1 and v1.1 AutoThink (4B, 9B and 27B) straight from the released GGUF files, behind the same
/v1/systemone API; v1.1 Instant models are not supported yet. Install it on Linux with Python 3.12 and a CUDA 13
driver:
git clone https://github.com/StartLuxLabs/StartLux-Prism.git
cd StartLux-Prism
python3.12 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt # PyTorch 2.14.1 for CUDA 13, Triton, nvcc 13.0
source scripts/cuda_env.sh # nvcc from pip as CUDA_HOME (in every new shell)
Download a GGUF file with its release's tokenizer and config, and start the server:
M=~/models/StartLux-Decision-v1.1-27B-AutoThink-GGUF
hf download startlux-models/StartLux-Decision-v1.1-27B-AutoThink-GGUF \
StartLux-Decision-v1.1-27B-AutoThink-Q8_0.gguf --local-dir $M
hf download startlux-models/StartLux-Decision-v1.1-27B-AutoThink --exclude "*.safetensors" --local-dir $M
python -m startlux_prism.server --gguf $M/StartLux-Decision-v1.1-27B-AutoThink-Q8_0.gguf --model-dir $M --port 8090
The server is ready when it prints Ready; the first start compiles its CUDA kernels and measures the int8 activation
ranges once. It answers the request below as it is. allow_none is on by default for v1.1 models (--allow-none off
matches this package), and the server has no API keys or TLS, so keep it behind your own access control.
StartLux-Prism's README covers CUDA 12 drivers, several GPUs
and every flag.
To run the models yourself, install the package into the same Python environment as vLLM. It carries the vLLM plugin that Instant models need.
git clone https://github.com/StartLuxLabs/StartLux-Decision.git
cd StartLux-Decision
pip install -e '.[vllm]' # vLLM 0.31.0; the published numbers were measured on 0.19.1, which is also supported
Download a model and start one vLLM server per GPU with the decision server in front of them:
hf download startlux-models/StartLux-Decision-v1.1-4B-AutoThink --local-dir models/StartLux-Decision-v1.1-4B-AutoThink
startlux-decide serve --model models/StartLux-Decision-v1.1-4B-AutoThink --launch-vllm --gpus 0,1,2,3 --port 8090
Ask a question:
curl -s localhost:8090/v1/systemone -H 'Content-Type: application/json' -d '{
"state": {"ticket": "I was charged twice for order #4411 and the app still shows it as unpaid."},
"questions": {
"team": {"type": "choice", "instructions": "Which team should handle this ticket?",
"criteria": {"billing": "Payments and refunds", "shipping": "Delivery", "technical": "App and login"}},
"urgent": {"type": "noul", "instructions": "Should this ticket be answered today?"},
"severity": {"type": "score", "instructions": "How severe is the impact?",
"criteria": ["cosmetic", "annoying", "blocks the customer"]}
}
}'
The 27B AutoThink model answers (numbers rounded):
{"answers": {
"team": {"type": "choice", "choice": "billing", "confidence": 0.992,
"probabilities": {"billing": 0.995, "shipping": 0.000, "technical": 0.005},
"none_probability": 0.002},
"urgent": {"type": "noul", "noul": 0.870},
"severity": {"type": "score", "score": 1.858, "confidence": 0.787,
"legend": {"0": "cosmetic", "1": "annoying", "2": "blocks the customer"},
"probabilities": {"0": 0.005, "1": 0.133, "2": 0.863}}},
"usage": {"input_tokens": 290, "output_tokens": 144}, "model": "startlux-decision-27b-autothink"}
noul is the probability of yes. score is the expected level, with a probability for every level.
none_probability is the chance that none of the listed options fits (see Controls).
examples/ has the same request in Python, a request with an image and a small batch client.
Controls
A request can steer the reasoning of AutoThink models and ask for more detail. All fields are optional.
| Field | Default | Effect |
|---|---|---|
think_mode | auto | auto reasons when the first read-out's top probability is below gate; never answers in one pass; always reasons first |
gate | 0.6 | the confidence below which auto reasons (the published results use 0.9) |
think_budget | 4096 | the longest thought, in tokens |
none_check | true | every choice answer reports none_probability, the chance that no listed option fits; choice stays a listed option |
allow_none | false (serve --allow-none: true) | lets choice be null when "None of the above" is the most likely answer |
return_details, return_thought | false | per-answer read-outs and timings, and the thought text |
images | none | base64 strings or data URIs used as evidence |
The default gate of 0.6 answers more requests in one pass. A gate of 0.9 thinks more often and is more accurate on decisions that need rules or arithmetic. For the 27B AutoThink model on this engine, moving the gate from 0.9 to 0.6 lowers Decision Index 0.3 from 73.22 to 72.85 and DecisionPivot pair accuracy from 88.1% to 68.4%. Instant models always answer in one pass.
We suggest treating a none_probability of 0.2 or more as "no listed option fits". At 0.2 it catches two thirds
(66.3%) of the questions whose listed options are all wrong, and flags 2.2% of the questions that do have a right
answer. Lower thresholds flag many more good questions, higher ones miss more of the bad ones
(why 0.2). docs/api.md describes the full request and response
format, the confidence definitions, the details fields and the errors.
Engines
| Engine | Instant | AutoThink | Images | Typical use |
|---|---|---|---|---|
| vLLM (default) | yes, with the plugin in this package | yes | vLLM 0.31 | serving, and the published numbers |
| StartLux-Prism | not yet | yes, 4B, 9B and 27B | with the mmproj file | the GGUF files on NVIDIA GPUs, lowest latency |
| llama.cpp | yes, GGUF builds marked non-causal | yes | with the mmproj file | machines without vLLM |
| MLX | yes, mlx-vlm builds | yes | yes | Apple Silicon |
| transformers | yes | yes | yes | reference checks |
FP8 and GGUF Q8_0 largely preserve BF16 decision performance, while Q4_K_M can lose up to 4.3 points (27B AutoThink on DecisionPivot). docs/deployment.md lists the engine settings to switch on and off and why, and docs/quantization.md covers the quantized builds.
Serving in production
startlux-decide serve can face the internet directly, with API keys, HTTPS, early 429 responses under load, an
access log and an optional request log. docs/serving_publicly.md has a complete command
and a checklist. The other commands measure a deployment: bench for latency, eval for accuracy and calibration on
labelled requests, and quantize for FP8, GGUF and MLX builds.
Documentation
| Document | Contents |
|---|---|
| docs/api.md | request and response format, controls, confidence, none_probability, errors |
| docs/none_probability.md | what none_probability means, how it was measured, why 0.2 |
| docs/deployment.md | engine settings, images and long inputs, compatibility with v1 models |
| docs/engines.md | how each engine is driven and what was measured |
| docs/vllm_bidirectional.md | the vLLM plugin for prompt-bidirectional attention |
| docs/quantization.md | FP8, GGUF and MLX builds |
| docs/serving_publicly.md | keys, TLS, rate limits, logs |
| docs/benchmarks.md | how accuracy and latency are measured |
Tests
python -m unittest -v
The tests need only the standard library and skip the parts that need aiohttp, torch or transformers when those are
missing. Set STARTLUX_TEST_MODEL_DIR to a model folder to add checks against its real tokenizer.
The first release
StartLux-Decision-v1 (0.8B to 27B and a 35B-A3B mixture of experts) answers every question in one pass. Its inference
code, evaluation scripts, results, game logs and demo harnesses are in v1/, and the repository as it was at that
release is tagged v1. The engine in this repository serves the v1 models as well.
Citation
Xialie Zhuang1,2, Zunhai Su1,2, Jia Pan2, Ngai Wong2, Guanhua Chen3,*, Chuan-Wei Kuo1,*
1StartLux 2The University of Hong Kong 3Southern University of Science and Technology *Corresponding authors
@misc{startlux2026decision,
title = {StartLux-Decision: AutoThink Decision Models with Reinforcement Learning for Calibrated Deliberative Decisions},
author = {Zhuang, Xialie and Su, Zunhai and Pan, Jia and Wong, Ngai and Chen, Guanhua and Kuo, Chuan-Wei},
year = {2026},
eprint = {2610.17309},
archivePrefix = {arXiv},
primaryClass = {cs.CL},
url = {https://arxiv.org/abs/2610.17309}
}
License
The code in this repository is released under the Apache License 2.0. The model weights are released under CC BY-NC 4.0 for non-commercial use. For commercial licensing, contact StartLux.