Decisions API¶
vLLM provides a text-only implementation of OpenAI's
POST /v1/decisions
API. Start a supported model:
from openai import OpenAI
client = OpenAI(base_url="http://localhost:8000/v1", api_key="EMPTY")
decision = client.decisions.create(
model="Qwen/Qwen3-0.6B",
input="The package arrived with a broken screen.",
questions=[
{
"type": "predicate",
"name": "damaged",
"instructions": "Does the customer report a damaged item?",
},
{
"type": "choice",
"name": "department",
"instructions": "Which department should handle this complaint?",
"choices": [{"value": "returns"}, {"value": "billing"}],
},
{
"type": "score",
"instructions": "How severe is the damage?",
"levels": [{"label": "cosmetic"}, {"label": "broken"}],
},
],
)
print(decision.answers)
Use OpenAI Python SDK 3.26.0 or newer for client.decisions.create.
input accepts a string or an array of user messages with string content or
input_text parts. Answers retain question order and echo name, including
null for unnamed questions. Choice values preserve strings and booleans.
Scores are probability-weighted averages of zero-based level indices.
The request contract follows the OpenAI OpenAPI schemas retrieved on
October 7, 2026. This MVP supports 1–64 questions, 2–26 choices, and 2–10 score
levels. Upstream permits 200 questions and 255 choices; this backend returns
a 400 when either model limit is exceeded.
The optional safety_identifier is caller metadata, available in request
body logging with --enable-log-requests and DEBUG logging; it does not
authenticate callers.
Implementation and limits¶
This MVP uses the same label-reading backend as structured decisions. It supports generation architectures with a registered read strategy, including Qwen, DiffusionGemma, and Liquid d1; unsupported models return 501. Each question reads a model's label tokens. Usage reports the actual prompt and output tokens across these reads, including prefix-cache counters.
Probabilities are normalized over the supplied options. confidence is the
winning label's probability over the full vocabulary; it is not calibrated
to OpenAI's models. Thinking is disabled for these reads.
Image inputs, other message roles, tools, streaming, and per-question refusal
scoring are outside this MVP. Unsupported request fields and input types are
rejected. The /v1/systemone endpoint retains its existing request format and
is available by default.