d3
d3
d3 is the 27B model of Decision 3.0, the decision models of vLLM Semantic Router, trained from Qwen3.8-27B. It reads text, JSON, images and videos. d3-flash is its 9B sibling with the same API: faster, and a little less accurate.
At a glance
Section titled “At a glance”| Endpoint | POST /v1/systemone |
| Input | a state (text or any JSON), plus optional images and videos |
| Output | one answer per question, with a probability for every option |
| Question types | choice, noul, score |
| Input limit | 32,768 tokens per question; longer requests are refused, not truncated |
| Streaming | ❌ |
| Billing | per input token, reported as usage.input_tokens; output_tokens is always 0 |
| Stability | experimental |
| License | Apache-2.0 |
Request
Section titled “Request”| Field | ||
|---|---|---|
model | required | d3 |
state | required | the situation to decide about: a string, or any JSON value |
questions | required | an object mapping your own question names to questions, at least one |
images | optional | an array of images as data: URL strings (PNG, JPEG or WebP) |
videos | optional | an array of videos as data: URL strings (MP4, WebM, QuickTime or Matroska) |
Every question sees all the images and videos of the request. The model card gives the budgets it reads them with: each image at up to 1.6 megapixels, and each video at 2 frames per second, at most 32 frames of up to 0.2 megapixels. The whole request body must stay under 5 MB.
The prompt around your input is fixed, so a top-level instructions field is refused with a 400.
Question types
Section titled “Question types”type | criteria | Answer |
|---|---|---|
choice | an object of options, {"name": "what this option means", …} | choice, probabilities per option, and confidence, the chosen option’s probability |
noul | none; put the question in instructions | noul, the probability of yes; probabilities for yes and no; confidence |
score | an ordered array of levels, lowest first | score (the expected level, counting from 0), legend, probabilities per level, and confidence, the most likely level’s probability |
Every question carries instructions, the question itself in plain words.
Response
Section titled “Response”{ "id": "decision-aa4a76300e0af8f5", "object": "structured_decision", "created": 1792166448, "model": "d3", "answers": { "team": { "type": "choice", "choice": "auth", "probabilities": { "auth": 0.9993, "billing": 0.0000, "other": 0.0006 }, "confidence": 0.9993 }, "urgent": { "type": "noul", "noul": 0.9967, "probabilities": { "yes": 0.9967, "no": 0.0033 }, "confidence": 0.9967 }, "severity": { "type": "score", "score": 1.8641, "legend": { "0": "Low", "1": "Medium", "2": "High" }, "probabilities": { "0": 0.0034, "1": 0.1292, "2": 0.8674 }, "confidence": 0.8674 } }, "usage": { "input_tokens": 352, "output_tokens": 0 }, "diagnostics": { "team": { "label_mass": 1.0, "argmax_is_label": true }, "urgent": { "label_mass": 1.0, "argmax_is_label": true }, "severity": { "label_mass": 1.0, "argmax_is_label": true } }}diagnostics reports, per question, the share of probability that fell on the question’s answer
labels (label_mass) and whether the single most likely code was one of them (argmax_is_label).
Use the probabilities rather than only the top answer: a noul of 0.55 and one of 0.99 are both
“yes”, but only one of them is safe to act on automatically.
Errors
Section titled “Errors”Errors use the usual {"error": { … }} shape:
| Status | Example message |
|---|---|
| 400 | unknown question type 'bogus'; supported: ['choice', 'noul', 'score'] |
| 400 | question 'q': the prompt has 33356 tokens, more than max_model_len=32768; nothing is truncated |
| 400 | this model reads a fixed prompt, so it takes no instructions |
| 401 | the API key is missing or wrong |
Example
Section titled “Example”curl https://developer.amd.com.cn/radeon/api/v1/systemone \ -H "Authorization: Bearer $RADEON_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "d3", "state": {"ticket": "Customer cannot log in after resetting the password; error 403 on every attempt."}, "questions": { "team": {"type": "choice", "instructions": "Which team should handle this?", "criteria": {"auth": "Identity and login", "billing": "Payments and invoices", "other": "Anything else"}}, "urgent": {"type": "noul", "instructions": "Is the customer blocked from using the product?"}, "severity": {"type": "score", "instructions": "How severe is this?", "criteria": ["Low", "Medium", "High"]} } }'With a video:
import base64, requests
clip = base64.b64encode(open("clip.mp4", "rb").read()).decode()r = requests.post( "https://developer.amd.com.cn/radeon/api/v1/systemone", headers={"Authorization": f"Bearer {API_KEY}"}, json={ "model": "d3", "state": "Watch the clip.", "videos": [f"data:video/mp4;base64,{clip}"], "questions": { "direction": {"type": "choice", "instructions": "Which way does the ball move?", "criteria": {"left_to_right": "Left to right", "right_to_left": "Right to left"}}, }, }, timeout=120,)print(r.json()["answers"]["direction"])