Skip to page content
SAVRN
Search Plan a project

Open-weight model · Zero-shot classification

d3-W4A16-G128-AWQ

by Park Soobin subin/d3-W4A16-G128-AWQ

d3-W4A16-G128-AWQ is an open-weight model for zero-shot classification from Park Soobin, released under Apache License 2.0. It has 26.1B parameters and a 262,144-token context. At 16-bit it needs about 62.6 GB of GPU memory, which fits on 1x MI300X from $1.85 an hour, at the lowest prices in the SAVRN Index.

d3-W4A16-G128-AWQ is an unofficial INT4 weight-only (W4A16) AWQ quantization of d3, the 27B multimodal foundation decision model of Decision 3.0.

Parameters26.1B
Context262,144
Weights16.2 GB
Licenseapache-2.0
AccessOpen weights
Monthly Downloads—

Runs On

What it takes to serve d3-W4A16-G128-AWQ (26.1B parameters): the memory its weights need at each precision, and the cheapest way to rent enough data-center GPUs to hold them.

PrecisionWeightsMemory neededCheapest setupPer hourAlso fits
16-bit 52.2 GB 62.6 GB 1x MI300X (192 GB)
Vultr
$1.85 1x H100 $1.99 · 1x MI325X $2.00
8-bit 26.1 GB 31.3 GB 1x MI300X (192 GB)
Vultr
$1.85 1x H100 $1.99 · 1x MI325X $2.00
4-bit 13.0 GB 15.7 GB 1x MI300X (192 GB)
Vultr
$1.85 1x H100 $1.99 · 1x MI325X $2.00

Memory is the weights at that precision plus 20% for the runtime and a short context; a long context needs more. Prices are the lowest on-demand hourly rates in the SAVRN Index, read Oct 18, 2026.

d3-W4A16-G128-AWQ on every accelerator the SAVRN Index prices, at every precision

Model Card

By Park Soobin, published under apache-2.0, revision 2da96fb69d83.

d3-W4A16-G128-AWQ is an unofficial INT4 weight-only (W4A16) AWQ quantization of d3, the 27B multimodal foundation decision model of Decision 3.0. It takes the same inputs and questions as d3 and returns a probability for every answer, without generating text, with 16.5 GB of weights instead of 52 GB. - Keeps 97.76% of d3's answers on the 14,031 test requests of tasksource-jev-typed-decisions, with accuracy 83.09% against BF16's 83.25%. - 16.9 GB of GPU memory after loading instead of 52.3 GB, and 17.5 GB at the peak of the 20 longest of 1,000 text requests (up to 5,928 characters of state) on an MI300X. - Reads images and videos as d3 does: the vision tower is unchanged, and d3's example…

Read Park Soobin's full model card

d3-W4A16-G128-AWQ is an unofficial INT4 weight-only (W4A16) AWQ quantization of d3, the 27B multimodal foundation decision model of Decision 3.0. It takes the same inputs and questions as d3 and returns a probability for every answer, without generating text, with 16.5 GB of weights instead of 52 GB.

Base model vllm-sr/d3, revision cbff3a3c (v3.1.0; the same weights as the current main)
Quantization INT4 weight-only (W4A16): compressed-tensors pack-quantized: asymmetric int4 with zero points, group size 128, BF16 scales
Method AWQ (activation-aware scales folded into the preceding norms and up_proj, clipping searched per row and group)
Weights on disk 16.2 GB (BF16: 52 GB)
Inputs Text or JSON, plus images and videos (several per request)
Decision types Choice · Yes / No · Score
License Apache-2.0

Other quantizations of d3: d3-FP8 · d3-W4A16-G128 · d3-NVFP4 · d3-NVFP4-AWQ.

Highlights

  • Keeps 97.76% of d3's answers on the 14,031 test requests of tasksource-jev-typed-decisions, with accuracy 83.09% against BF16's 83.25%.
  • 16.9 GB of GPU memory after loading instead of 52.3 GB, and 17.5 GB at the peak of the 20 longest of 1,000 text requests (up to 5,928 characters of state) on an MI300X.
  • Saves memory, not time: each int4 layer unpacks its weights to BF16 on every call, which is slower than BF16 on an MI300X (60.2 ms against 45.1 ms). With the vLLM Semantic Router max_speed profile on NVIDIA GPUs, inputs of up to 256 tokens take a fused int4 kernel instead.
  • Reads images and videos as d3 does: the vision tower is unchanged, and d3's example image and video questions get the same answers as in BF16. Not measured here: the Decision Index suites and the image and video benchmarks.

Quickstart

pip install -r requirements.txt "compressed-tensors>=0.17" triton   # transformers 5.17.0, as d3
hf download subin/d3-W4A16-G128-AWQ --local-dir d3-W4A16-G128-AWQ
import json
import sys

sys.path.insert(0, "d3-W4A16-G128-AWQ")
from d3q.load import load_d3

model = load_d3("d3-W4A16-G128-AWQ", device="cuda:0")
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?"}
    },
)
print(json.dumps(result["answers"], indent=2))

load_d3 is d3's own runtime (d3_runtime.py) with the backbone loader swapped: transformers would otherwise hand the runtime layers it cannot multiply, so d3q/ loads the checkpoint with its weights compressed and replaces each quantized layer with an int4 layer (weights kept packed and unpacked to BF16 by one Triton kernel per call). Prompting, noncausal full attention, the FP32 readout, images and videos are d3's own. AutoModel.from_pretrained(..., trust_remote_code=True) alone does not run these weights. Tested on an AMD Instinct MI300X with PyTorch 2.12, Transformers 5.17.0, compressed-tensors 0.17.0 and Triton 3.7.1: on 100 test rows it gave 99 of 100 of BF16 d3's top answers, with 16.2 GB of weights.

Run with vLLM Semantic Router

Support for FP8 and int4 d3 packages is in vllm-project/semantic-router#5066. With that model runtime:

vllm-srun serve subin/d3-W4A16-G128-AWQ --revision 3af0ab6d3c2c351562d2a940cb1df5698e64ee7b --device cuda:0 --port 8100
curl -s localhost:8100/v1/decisions -H 'content-type: application/json' -d '{
  "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?",
              "choices": [{"key": "returns", "description": "Refunds, replacements and damaged deliveries"},
                          {"key": "billing", "description": "Payments, invoices and charges"},
                          {"key": "technical", "description": "Product setup and faults"}]},
    "receipt": {"type": "noul", "instructions": "Does the customer have a receipt?"}
  }
}'

The package keeps d3's package format, with a MODEL_MANIFEST.json that hashes every file of this checkpoint, so the runtime verifies it as it verifies d3. --revision is needed because it is not a built-in model. Without the model runtime, use the Quickstart above.

Evaluation

Text: tasksource-jev-typed-decisions, test split

Model Accuracy ↑ Top-1 agreement with BF16 Changed answers
d3 (BF16) 83.25% 100% 0
d3-FP8 83.24% 99.08% 129 of 14,031
d3-W4A16-G128-AWQ 83.09% 97.76% 314
d3-W4A16-G128 (GPTQ) 83.10% 97.98% 284

Every usable row of the test split of tasksource/tasksource-jev-typed-decisions at revision 28c39125 (state of at most 6,000 characters, no repeated options): 14,031 requests of one question each, answered by the vLLM Semantic Router model runtime on one AMD Instinct MI300X, exact profile. Agreement compares the top answer of every question with d3 in BF16 on the same requests (choice and score: highest-probability option; yes / no: p ≥ 0.5). The full record is decision3-quantized.md.

The Jev Decision Index suites, the public vision suite and Perception Test were not run on this checkpoint.

Speed and memory

Model Median latency, graphs replaying Median latency, no graphs GPU memory of the weights Weights on disk
d3 (BF16) 45.1 ms 67.5 ms 52.2 GB 52.2 GB
d3-W4A16-G128-AWQ 60.2 ms 86.1 ms 16.5 GB 16.2 GB

One AMD Instinct MI300X, vllm/vllm-openai-rocm image (PyTorch 2.12.0, Triton 3.7.1, FLA 0.5.2), one request at a time. Graphs replaying: the first 500 of 1,000 rows of the train split, each answered a third time so that its shape's graph replays, with the Decision 3.0 graph capture of #4999. No graphs: those 1,000 rows on the runtime's main branch.

How it was made

  • Calibration: 128 rows of the first train shard of tasksource/tasksource-jev-typed-decisions at revision 28c39125 (state of at most 6,000 characters), rendered with d3's own prompt template. Text only, from the train split: none of the 128 states appears in the test split evaluated above.
  • AWQ, layer by layer: for each group of projections that read one input (q/k/v_proj; in_proj_qkv/z with in_proj_a/b; gate/up_proj; down_proj), a per-input-channel scale x^a / w^(1-a) is searched over a in [0, 1) to minimise the squared error of the decoder layer's output with those projections quantized, and folded into what produces their input (the 1 + w RMSNorms, or up_proj's rows), so the BF16 model is unchanged by it. o_proj and linear_attn.out_proj have no linear producer to fold into and take no scale. Each projection except q_proj / k_proj then searches its clipping range per row and group over 10 steps, from its largest weight down to half of it.
  • Quantized: the text decoder's mlp.{gate,up,down}_proj, self_attn.{q,k,v,o}_proj and linear_attn.{in_proj_qkv,in_proj_z,out_proj} (400 modules). The vision tower, embeddings, linear_attn.in_proj_{a,b}, conv1d, norms and the FP32 readout (readout.safetensors) keep their published values, except the norms and in_proj_{a,b} that the scales were folded into.
  • Tool: awq.py in bench/d3-quant-eval, on one AMD Instinct MI300X (PyTorch 2.12.0, Transformers 5.17.0), in 12 minutes.

License

Apache-2.0, as d3 (LICENSE, NOTICE). Unofficial: not a release of the vllm-sr organization.

Configuration

Architecture
Qwen3_5Model
Context length (tokens)
262,144
Layers
64
Hidden size
5,120
Feed-forward size
17,408
Attention heads
24
Key/value heads
4
Head dimension
256
Vocabulary size
248,320
Model type
qwen3_5
Quantization
compressed-tensors

Identity and Version

Repository
subin/d3-W4A16-G128-AWQ
Publisher
Park Soobin
Task
Zero-shot classification
Modality
Text
Library
transformers
Parameters
26.1B parameters
Languages
awq
Revision
2da96fb69d8350fc13d352fa919c44d684485c27
First published
2026-10-13
Last updated
2026-10-14

Files and Weights

33 files, 16.2 GB in total. The weights are 2 files totalling 16.2 GB in safetensors.

Weights2 files · 16.2 GB
Configuration16 files · 211.1 KB
Tokenizer4 files · 22.9 MB
Documentation3 files · 20.7 KB
Other7 files · 2.6 MB
Repository1 file · 1.7 KB
Every file
FileTypeSizeSHA-256
model.safetensorsWeights16.2 GB 549db8d74c1d
readout.safetensorsWeights5.2 MB 5319cbf3ccdc
MODEL_MANIFEST.jsonConfiguration11.5 KB —
config.jsonConfiguration5.1 KB —
d3_engine.pyConfiguration4.4 KB —
d3_fast.pyConfiguration22.3 KB —
d3_format.pyConfiguration7.0 KB —
d3_kernels.pyConfiguration16.1 KB —
d3_runtime.pyConfiguration94.0 KB —
d3_server.pyConfiguration17.7 KB —
d3q/__init__.pyConfiguration —
d3q/kernels.pyConfiguration9.7 KB —
d3q/load.pyConfiguration1.9 KB —
decision_config.jsonConfiguration5.5 KB —
modeling_d3.pyConfiguration12.1 KB —
pipeline_d3.pyConfiguration2.9 KB —
preprocessor_config.jsonConfiguration390 B —
video_preprocessor_config.jsonConfiguration385 B —
LICENSEDocumentation11.4 KB —
NOTICEDocumentation100 B —
README.mdDocumentation9.2 KB —
assets/banner.pngOther2.2 MB eb7ecc949232
assets/example-receipt.pngOther65.9 KB —
assets/example-video.mp4Other26.3 KB —
assets/index-areas.pngOther126.9 KB 602d4e76437b
assets/index-pareto.pngOther180.5 KB c907a692a854
chat_template.jinjaOther9.0 KB —
requirements.txtOther723 B —
.gitattributesRepository1.7 KB —
merges.txtTokenizer3.4 MB —
tokenizer.jsonTokenizer12.8 MB 0997f410c57a
tokenizer_config.jsonTokenizer17.9 KB —
vocab.jsonTokenizer6.7 MB —

License and Download

License
apache-2.0
Access
Open weights, no gate
Download size
16.2 GB
Download from Park Soobin

Released by Park Soobin through its official repository on Hugging Face. Read the license.

Built From

  • Derived from vllm-sr/d3
  • Quantized from vllm-sr/d3

Memory Requirements

PrecisionWeights in memory
As published16.2 GB
16-bit52.2 GB
8-bit26.1 GB
4-bit13.0 GB

Weights only, from the published parameter count; the key-value cache and runtime add to this.

Questions About d3-W4A16-G128-AWQ

How much GPU memory does d3-W4A16-G128-AWQ need?

About 62.6 GB at 16-bit and 15.7 GB at 4-bit: the weights (26.1B parameters) plus a working margin. A long context needs more.

What is the cheapest GPU to run d3-W4A16-G128-AWQ on?

At 16-bit, 1x MI300X from $1.85 an hour; at 4-bit, 1x MI300X from $1.85 an hour, at the lowest on-demand prices the SAVRN Index lists.

Can I use d3-W4A16-G128-AWQ commercially?

Yes. d3-W4A16-G128-AWQ is released under Apache License 2.0. The Apache License 2.0 is a permissive open-source license. It permits commercial use, modification and redistribution. It requires keeping the license and copyright notices and any NOTICE file, stating significant changes, and it includes an express patent grant from contributors.

What is d3-W4A16-G128-AWQ's context length?

262,144 tokens, from the maximum position embeddings in its published configuration.

Similar Models

Model · Zero-shot classification

matilda-jev-v1

Maincode

Matilda-Jev is Maincode's one-pass decision model. It scores the options supplied in a choice, noul (yes/no), or ordered score question. It accepts text or JSON state and optional images. This is a decision checkpoint with a 255-option readout, not a text-generation checkpoint. This configuration edition uses MatildaJevModel, MatildaJevConfig, and MATILDA tokenizer/processor classes. Use the bundled runtime below, or load the custom AutoClasses with trustremotecode=True. The package includes the backbone weights, decision readout, tokenizer, preprocessing configuration and calibrated temperature. On AMD MI355X with Python 3.12, Transformers 5.17.0 and PyTorch 2.14.0: - 25/25 smoke-test…

Open weights apache-2.0 26.1B parameters 262,144 tokens transformers

Model · Zero-shot classification

matilda-jev-v1.5

Maincode

A BF16 JEV decision model with a 255-option readout. This is the highest-scoring checkpoint in the completed MATILDA JEV experiments as of 9 October 2026: Decision Index 63.47 (0.3 public suite). The model accepts a state and one or more decision questions. It supports choice, noul (probability of true), and ordinal score. Inference is one forward pass per question; the model has no text-generation head and does not generate a chain of thought. The LoRA updates are already merged into the weights. No adapter merge is required. Use Python 3.12 or newer and install PyTorch for your accelerator. The validated cluster environment uses PyTorch 2.14.0, Transformers 5.17.0, and an AMD Instinct…

Open weights apache-2.0 26.1B parameters 262,144 tokens transformers

Model · Zero-shot classification

d3-oQ8e

Jun Kim

This model was quantized using oQ (oMLX v0.7.1) mixed-precision quantization with Improved oQe Quantization (jundot/omlx#4385). A mixed-precision MLX checkpoint of vllm-sr/d3, the 27B multimodal decision model of Decision 3.0 from vLLM Semantic Router, built on Qwen/Qwen3.8-27B. It reads text or JSON with optional images and videos and returns a probability for every option of choice, yes/no and score questions without generating text. It includes the language backbone, the vision encoder and the code readout. The code readout (readout.safetensors, FP32) and decisionconfig.json are copied unchanged from the source. oMLX serves this checkpoint through POST /v1/systemone; Decision 3.0 support…

Open weights apache-2.0 26.1B parameters 262,144 tokens mlx

Model · Zero-shot classification

d3-oQ4e

Jun Kim

This model was quantized using oQ (oMLX v0.7.1) mixed-precision quantization with Improved oQe Quantization (jundot/omlx#4385). A mixed-precision MLX checkpoint of vllm-sr/d3, the 27B multimodal decision model of Decision 3.0 from vLLM Semantic Router, built on Qwen/Qwen3.8-27B. It reads text or JSON with optional images and videos and returns a probability for every option of choice, yes/no and score questions without generating text. It includes the language backbone, the vision encoder and the code readout. The code readout (readout.safetensors, FP32) and decisionconfig.json are copied unchanged from the source. oMLX serves this checkpoint through POST /v1/systemone; Decision 3.0 support…

Open weights apache-2.0 26.1B parameters 262,144 tokens mlx

Model · Zero-shot classification

bobcat-flash-1.2

Sanghwa Na

Bobcat Flash 1.2 · Bobcat Flash 1.2 FP8 · Try it in the Space · Code on GitHub Bobcat Flash is the fast tier of Bobcat, a typed-decision model. You send a state (text or JSON) and questions whose possible answers you define in the request; Flash returns a probability for every answer you named, and nothing else. It never generates text: it reads the logits of the offered candidates at the first answer position of one forward pass, and the host builds a closed JSON reply from your own names. An answer can be wrong, but it cannot be malformed. This repository, sanghwa-na/bobcat-flash-1.2, holds Bobcat Flash 1.2 as ready-to-serve BF16 weights on google/gemma-4-26B-A4B-it (Apache-2.0) at…

Open weights apache-2.0 25.8B parameters 262,144 tokens transformers

Model · Zero-shot classification

bobcat-flash-1.2-fp8

Sanghwa Na

A pre-quantized FP8 checkpoint of Bobcat Flash 1.2, the fast tier of the typed-decision model Bobcat: you send a state and questions whose answers you name, and it returns a probability for every answer you named; it never generates text. Evaluation, training data, limitations and the full license notes are on the main card, This repository, sanghwa-na/bobcat-flash-1.2-fp8, is the BF16 weights of sanghwa-na/bobcat-flash-1.2 quantized to FP8 (27.2 GB, FP8DYNAMIC, every expert included): float8e4m3fn weights with one scale per output channel, activations quantized per token at run time, in the compressed-tensors format that vLLM loads as it is. It is the checkpoint the Bobcat Flash Space…

Open weights apache-2.0 25.8B parameters 262,144 tokens transformers