vllm-sr/d3
Summary
vllm-sr/d3 是 Decision 3.0 的 27B 多模态基础决策模型,支持文本、JSON、图像与视频输入,可在一次调用中完成选择、是非与评分决策并输出概率,无需生成文本。它在 Jev Decision Index 上以 66.3 排名官方文本榜第一,较 Decision 2.0 提升 10.4,并在 AMD MI325X 上实现 27 req/s 的服务性能。
View Cached Full Text
Cached at: 10/14/26, 06:43 PM
vllm-sr/d3 · Hugging Face
Source: https://huggingface.co/vllm-sr/d3

d3is the 27B multimodal foundation decision model of Decision 3.0, the decision models ofvLLM Semantic Router. Give it an input (text or JSON, optionally with images and videos) and the questions you need answered: pick one of several options, say yes or no, or rate on a scale. It answers them all in one call and returns a probability for every answer, without generating text.
Parameters26.09B, including the 0.46B vision encoderInputsText or JSON, plus images and videos (several per request)Decision typesChoice · Yes / No · ScoreLicenseApache-2.0
https://huggingface.co/vllm-sr/d3#highlightsHighlights
- Jev Decision Index 0.3.2: 66.3, first on the official text boardand on its Pareto frontier; public suite 65.45, measured with the official 0.3 kit on the released weights: all 140,178 public requests answered, none unsupported.
- +10.4 over Decision 2.0(its 27B model: 55.9 on the official board): +8.5 on the public suite, ahead in all five of its areas, and +7.1 and +12.6 on the private same-skill tests and new-domain tasks.
- **Reads images:**multiple images per request (PNG, JPEG or WebP), given as paths, URLs, PIL images or base64 data URLs; every question of the request sees all of them.
- **Reads videos:**multiple videos per request (MP4, WebM, MOV or MKV), given as paths, URLs, base64 data URLs or frame arrays, read at 2 frames per second;Perception Test (multiple-choice video QA): 77.4(internal evaluation).
- **Speed:**text requests take a median of 54.4 ms, requests with an image a median of 290 ms, and requests with a 10-second video a median of 500 ms, on one AMD Instinct MI325X, one request at a time with AutoModel.
- **Serving:**27 requests/s with p99 under 1 s on one AMD Instinct MI325X with vLLM Semantic Router, 1.5× AutoModel (one-question text, with batching, now the default); with one request per forward, the former default, it gave AutoModel’s answers byte for byte when both used the same kernel settings (Serving performance).
- **Many questions, one call:**Choice, Yes / No and Score questions about the same input are answered together, each from its own forward pass over the input, with a probability for every option.
https://huggingface.co/vllm-sr/d3#quickstartQuickstart
pip install "transformers==5.17.0" torch torchvision pillow opencv-python-headless safetensors accelerate
pip install flash-linear-attention # optional: fast GPU kernels for the linear-attention layers
import json
from huggingface_hub import hf_hub_download
from transformers import AutoModel
model = AutoModel.from_pretrained("vllm-sr/d3", trust_remote_code=True)
# Text
result = model.system_one(
state="The order arrived damaged yesterday. The customer has a receipt and asks for a replacement today.",
questions={
"route": {
"type": "choice",
"instructions": "Which team should handle this request?",
"criteria": {
"returns": "Refunds, replacements and damaged deliveries",
"billing": "Payments, invoices and charges",
"technical": "Product setup and faults"
}
},
"receipt": {
"type": "noul",
"instructions": "Does the customer have a receipt?"
},
"urgency": {
"type": "score",
"instructions": "How urgent is this request?",
"criteria": [
"Routine",
"Soon",
"Today"
]
}
},
)
print(json.dumps(result["answers"], indent=2))
# Text and an image (or several)
receipt = hf_hub_download("vllm-sr/d3", "assets/example-receipt.png")
result = model.system_one(
state="The customer says the blender arrived cracked and attached the receipt.",
images=[receipt], # local paths, http(s) URLs, PIL images or base64 data URLs
questions={
"route": {
"type": "choice",
"instructions": "Which team should handle this request?",
"criteria": {
"returns": "Refunds, replacements and damaged deliveries",
"billing": "Payments, invoices and charges",
"technical": "Product setup and faults"
}
},
"on_receipt": {
"type": "noul",
"instructions": "Does the receipt list the blender?"
},
"payment": {
"type": "choice",
"instructions": "How was the order paid?",
"criteria": {
"card": None,
"cash": None,
"gift card": None
}
}
},
)
print(json.dumps(result["answers"], indent=2))
# Text and a video (or several)
clip = hf_hub_download("vllm-sr/d3", "assets/example-video.mp4")
result = model.system_one(
state="A short clip from a test camera.",
videos=[clip], # local paths, http(s) URLs, base64 data URLs or frame arrays
questions={
"direction": {
"type": "choice",
"instructions": "Which way does the square move?",
"criteria": {
"right": "From left to right",
"left": "From right to left",
"still": "It does not move"
}
},
"color_change": {
"type": "noul",
"instructions": "Does the square change color?"
}
},
)
print(json.dumps(result["answers"], indent=2))
# Or as a pipeline:
# transformers.pipeline("decision", model="vllm-sr/d3", trust_remote_code=True)(state=..., questions=..., images=..., videos=...)
Images go before the text of the request, each read at up to 1.6 megapixels; videos follow the images, read at 2 frames per second (at most 32 frames spread over the whole video, each at up to 0.2 megapixels). Every question of the request sees all of them.
https://huggingface.co/vllm-sr/d3#run-with-vllm-semantic-routerRun with vLLM Semantic Router
vLLM Semantic Routerserves Decision 3.0 natively in Engine mode, which runs one model behind the System One API on your own machine. Its answers matched this package’s ownd3\_server\.pyexactly, for text, images and videos, with one request per forward, the former default (measured on AMD Instinct MI325X); with batching, now the default, a few near-tie decisions change (Serving performance).
curl -fsSL https://vllm-sr.ai/install.sh | bash -s -- --channel dev --no-launch
export PATH="$HOME/.local/bin:$PATH"
vllm-sr serve -e vllm-sr/d3
The platform is detected automatically; choose one with\-\-platform auto\|cpu\|cuda\|rocm(defaultauto).
Engine mode and Decision 3.0 are in the development channel (\-\-channel dev) until a stable vLLM Semantic Router release includes them. The first start pulls the image for your machine and downloads the model. Then ask questions about a request:
curl -s localhost:8899/v1/systemone -H 'content-type: application/json' -d '{
"model": "vllm-sr/d3",
"state": "Write a Python function that merges two sorted lists.",
"questions": {
"kind": {"type": "choice", "instructions": "What kind of work is this?",
"criteria": {"code": "Writing or fixing code", "math": "Mathematics", "chat": "Anything else"}},
"reasoning": {"type": "noul", "instructions": "Does answering this need multi-step reasoning?"}
}
}'
Send images as base64 data URLs (PNG, JPEG or WebP) inimagesand videos (MP4, WebM, QuickTime or Matroska) invideos; every question sees them:
curl -s localhost:8899/v1/systemone -H 'content-type: application/json' --data-binary @- <<EOF
{
"model": "vllm-sr/d3",
"state": "What does the attached image show?",
"images": ["data:image/png;base64,$(base64 -w0 chart.png)"],
"questions": {
"kind": {"type": "choice", "instructions": "What kind of image is this?",
"criteria": {"chart": "A chart or plot", "photo": "A photograph", "document": "A document"}}
}
}
EOF
curl -s localhost:8899/v1/systemone -H 'content-type: application/json' --data-binary @- <<EOF
{
"model": "vllm-sr/d3",
"state": "What happens in the clip?",
"videos": ["data:video/mp4;base64,$(base64 -w0 clip.mp4)"],
"questions": {
"moving": {"type": "noul", "instructions": "Does something move across the scene?"}
}
}
EOF
vllm\-sr stopstops it. SeeRouter and Engine modesfor limits and options.
https://huggingface.co/vllm-sr/d3#serving-performanceServing performance
On one AMD Instinct MI325X, vLLM Semantic Router serves d3 at 27 requests/s with p99 under 1 s, 1.5× AutoModel(one-question text, with batching, now the default), and with one request per forward, the former default, it gave AutoModel’s answers byte for byte when both used the same kernel settings.
AutoModel runs in your own process, one call at a time (the Quickstart code); the package server is itspython d3\_server\.py; Engine mode isvllm\-sr serve \-e, measured with one request per forward (exactin the chart, the former default) and with batching. In vLLM Semantic Router from main (its next development package and release), Engine mode batches concurrent requests by default and takes vLLM-styleengine arguments:\-\-max\-num\-batched\-tokens,\-\-max\-num\-seqs,\-\-batch\-window\-msand\-\-dtype.
Where Engine mode helps, and what it costs:
- **Throughput:**1.5× AutoModel’s requests per second on one-question text, 1.3× on 8-question images and 1.8× on 10-second videos, with the better of the two Engine setups in each row (8-question images: highest rates, since no side keeps p99 under 1 s there).
- **Start-up:**the first answer comes 19.4 s after launch (one request per forward; 20.4 s with batching) with empty kernel caches, against 38.4 s for AutoModel, whose first image then takes another 6.20 s, and 80.8 s for the package server.
- **Many questions and long inputs:**one request at a time, Engine mode with one request per forward answered 16 text questions in 548 ms (AutoModel: 572 ms), 8 questions about one image in 1.87 s (1.95 s) and a 32k-token text in 4.21 s (4.23 s); batching runs the 8 image questions together in 1.56 s, 20 % less than AutoModel.
- **GPU memory:**65.4 GiB per replica at peak with one request per forward, about the same as the package server’s 65.2 GiB, and 62.1 GiB with batching; AutoModel, serving one request at a time, peaked at 61.8 GiB. Engine mode keeps up to 2 GiB of image features cached.
- **Answers:**Engine mode with one request per forward returned answers byte-identical to AutoModel’s on all 7 request types (text with 1, 4 or 16 questions, an image with 1 or 8, the video and a 32k-token text) when AutoModel used the same kernel settings: 135 Engine replies and 21 AutoModel calls compared. With the kernel autotuning AutoModel runs in each new process, 5 of the 7 were byte-identical and no decision changed (largest probability difference 0.005). Batching changed 0.048 % of decisions on a 4,000-request sample of the public suite (14 of 29,339 questions, near-ties), with gold accuracy 92.109 → 92.126 %.
A single short request is fastest in your own process: AutoModel answers one text question 0.9 ms sooner than Engine mode and one new image 22 ms sooner, the cost of going through the router to the model worker and its media path. Engine mode’s gains come from serving many requests at once.
Single-request latency and the numbers behind the chartOne request at a time, warm (p50 / p90, ms):
RequestAutoModelPackage serverEngine, one request per forwardEngine, batching (now the default)Text, 1 question54.4 / 54.655.0 / 55.355.3 / 55.657.2 / 57.9Text, 16 questions572 / 574571 / 572548 / 549548 / 549Image (1.6 MP), 1 question290 / 292295 / 297312 / 314315 / 316Image (1.6 MP), 8 questions1.95 s / 1.95 s1.95 s / 1.97 s1.87 s / 1.88 s1.56 s / 1.57 sVideo (10 s, 1080p), 1 question500 / 518509 / 523551 / 579533 / 54832k-token text, 1 question4.23 s / 4.24 s4.30 s / 4.30 s4.21 s / 4.23 s4.22 s / 4.23 s Requests per second on one GPU, closed loop with up to 64 clients (p99 under 1 s, except *):
AutoModel †Package serverEngine, one request per forwardEngine, batching (now the default)Text, 1 question18.417.718.127Image (1.6 MP), 8 questions0.51 *0.53 *0.53 *0.67 *Video (10 s, 1080p), 1 question2.02.83.73.7Text, 1 question, saturation18.417.718.129 † Back-to-back calls in one process (1,000 / mean latency). * p99 over 1 s at every load; the highest rate is shown.
Measured on 2026-10-13, one AMD Instinct MI325X per replica and each side alone on the GPU: ROCm 7.2 with PyTorch 2.12; AutoModel and the package server with Transformers 5.17.0; vLLM Semantic Router Engine mode built from source, with serving optimizations that are newer than its published images. Requests: a support ticket of about 330 tokens with 1, 4 or 16 questions; a 1,456 × 1,092 PNG (1.6 MP) with 1 or 8 questions; a 10-second 1080p MP4, read at 2 frames per second; a 32k-token text; every image and video request carries new bytes. One request at a time: 3 warm-up calls, then up to 20 timed calls. Under load: 1, 2, 4, … 64 closed-loop clients, each level warmed up and then counted for 15 to 60 s; Engine mode admits 32 requests in flight per worker and answers the rest at once with 503. Start-up: model files on local disk; Engine mode from the start of its router process, without the CLI’s image pull.
https://huggingface.co/vllm-sr/d3#evaluationEvaluation
https://huggingface.co/vllm-sr/d3#text-jev-decision-index-032Text: Jev Decision Index 0.3.2
ModelJev Decision Index ↑Public ↑Same-skill tests ↑New-domain tasks ↑d366.365.562.860.5Decider 31B64.664.361.858.3Perplexity Decider v1.1 (27B)62.862.361.155.6Darwin-27B-ZTC62.562.658.757.7AnyJev L0 · Gemma-4-31B60.259.859.153.0Decision 2.0 (27B)55.957.055.747.9 d3 ranks first of the 149 entries on the official text board and is on its Pareto frontier: no entry with as many parameters or fewer scores higher. Five of the six Decision 3.0 models are on that frontier; d3-edge, second among the entries of its size, is not.
https://huggingface.co/vllm-sr/d3#images-jev-decision-index-vision-board-032Images: Jev Decision Index vision board 0.3.2
ModelVision Index ↑Public ↑Private ↑d371.374.1****68.5Perplexity Decider v1.1 (27B)70.673.267.9JEV-27B-VL69.672.866.4Solomon v1.1 (27B)66.869.963.8 On the official vision board, the six Decision 3.0 models form the whole Pareto frontier: no other entry is on it. d3 ranks first of the 33 entries.
d3 on the public vision benchmarks († approximate rebuild):
Benchmarkd3CV-Bench76.2BLINK59.9RealWorldQA73.4CharXiv †91.7InfographicVQA †96.7Mind2Web †90.0Winoground85.8KIE (CORD+FUNSD) †97.7Moderation (Hateful Memes)43.9R-Bench-M33.0MMMU-Pro vision47.0
https://huggingface.co/vllm-sr/d3#videos-perception-testVideos: Perception Test
Perception Test (validation)d3All 19,140 questions****77.4Memory80.3Abstraction71.2Physics72.5Semantics88.8 Multiple-choice video question answering (three options per question, chance 33.3): top-1 accuracy (%), videos read with the defaults above.
Jev Decision Index: official leaderboard, text and vision boards 0.3.2, 2026-10-12; the boards evaluated v3.1.0, which has the same weights as this version. Size bands and the Pareto frontier use the parameter counts listed by the boards. d3 on the public vision benchmarks and the Perception Test: internal evaluation.
https://huggingface.co/vllm-sr/d3#licenseLicense
Apache-2.0 (LICENSE). Built onQwen/Qwen3.8-27B(Apache-2.0).
https://huggingface.co/vllm-sr/d3#citationCitation
@misc{d3_2026,
title = {{d3}: A Multimodal Foundation Decision Model},
author = {{vLLM Semantic Router Team}},
year = {2026},
howpublished = {\url{https://huggingface.co/vllm-sr/d3}}
}
Trained on AMD Instinct MI325X GPUs.
Similar Articles
Decision 3.0: open, multimodal decision models from 0.6B to 27B. Ranks #1 on both Jev Decision Index boards
The vLLM Semantic Router team released Decision 3.0 (d3), an open-source (Apache-2.0) multimodal decision model family from 0.6B to 27B that handles text, images, and video, ranking #1 on both Jev Decision Index boards with zero-shot video performance.
@XunzhuoLiu: Introducing Decision 2.0: our newest state-of-the-art decision models, open in every size from 0.6B to 27B HF collectio…
vllm-sr introduces Decision 2.0, a collection of state-of-the-art open foundation decision models released in sizes ranging from 0.6B to 27B parameters on Hugging Face.
Microsoft-Decision-1
Microsoft 推出 Decision-1 决策打分模型,用于代理与工作流的路由、分类、验证和控制,单次推理即可输出各选项的校准概率。该模型基于 Qwen3.5-9B 后训练,据称中位延迟比 GPT-6 Sol 快约 35 倍,现已在 Microsoft Foundry 上线。
Open d1: Edge decision models for text, vision, and audio (6 minute read)
Liquid AI 发布了 d1 决策模型家族的两款开放权重模型 d1-3B 和 d1-omni-600M,支持文本、视觉和音频模态,通过单次前向传递直接输出答案,在 Decision Index 上超越同规模模型并可在 NVIDIA Jetson 边缘设备上实现实时推理。
d1-ultra: Introducing the World's Best Decision Model (3 minute read)
Liquid AI 发布 d1-ultra,一款多模态决策模型,在 112 项评测中超越 Jev 1.14 及所有其他决策模型,输出经校准的概率答案,现已在 Liquid API 上线,价格为每百万输入 token 0.042 美元。


