AutoTrust¶
| Checkpoints | Inputs |
|---|---|
| autotrust/JEV-9B autotrust/JEV-27B |
text |
| autotrust/JEV-27B-VL autotrust/JEV-35B autotrust/GEV-26B-Decide |
text, images |
AutoTrust's JEV and GEV models read a decision through the output head at the last token of a prompt. JEV-9B is on
Qwen3.5-9B and JEV-27B on Qwen3.8-27B, both text only; JEV-27B-VL is Qwen3.8-27B with its vision encoder, JEV-35B
Qwen3.5-35B-A3B, a mixture of experts, with images, and GEV-26B-Decide Gemma 4 26B-A4B with images. Flide reads them as
their serve_decide.py serves System 1 (POST /v1/decide with thinking off). Each ships its decision model as the LoRA
adapter in adapter_vllm/, on the attention, Gated DeltaNet and MLP projections and the output head, which Flide runs
beside the weights as vLLM does; JEV-35B ships it merged into its weights.
Every question is a prompt of its own with no chat template: [kind] and the question's type, [state] and the state,
[question] and its instructions, [options] and one line per option, then [decision]:, after <bos> on Gemma. A
string state goes in as it is and an object as JSON. A choice lists its options as A) option, each option its
description or, without one, its name, labeled A to Z and then AA, AB, ... while each label is one token, up to 256. A
noul lists false and true, and a score 0 to 5.
The answer is read at the prompt's last token over the labels' tokens: each logit plus the decision head's bias of its
slot, divided by the type's temperature from calibration.json, then the softmax. The head was trained on 16 choice
slots, JEV-35B's on 256; past them a label takes no bias. A choice with more options than that is read in one pass on
the JEV models and as a tournament on GEV, as the release does by default: groups of at most 16, then a final of 16.
Questions of one type share everything up to the end of the state, so they fork from it, and each type of a request
is read in a round of its own.
Speed¶
On one H200, one request at a time, Flide answers 1.3 to 10.1 times faster than the release's serve_decide.py on vLLM 0.29.0 with the flags of its serve.sh, and for GEV-26B-Decide the release's patch to vLLM's Gemma 4. The release reads one question a call, so each request sends it its first question alone and then the others at once. Each workload is 32 requests, each run once on both sides before timing, and the tables give the median latency of a request. MultiRC requests ask about 49 questions each, and GQA requests carry one image each.
JEV-9B
| Workload | Flide | Release | Speedup |
|---|---|---|---|
| Decision Index | 20.2 ms | 78.5 ms | 3.9× |
| RACE | 13.2 ms | 29.5 ms | 2.2× |
| MultiRC | 80.1 ms | 635.7 ms | 7.9× |
| QuALITY long | 109.4 ms | 150.7 ms | 1.4× |
JEV-27B-VL
| Workload | Flide | Release | Speedup |
|---|---|---|---|
| Decision Index | 57.7 ms | 118.3 ms | 2.1× |
| RACE | 42.9 ms | 114.2 ms | 2.7× |
| MultiRC | 261.7 ms | 2648.1 ms | 10.1× |
| QuALITY long | 350.7 ms | 475.8 ms | 1.4× |
| GQA | 86.2 ms | 680.8 ms | 7.9× |
JEV-35B
| Workload | Flide | Release | Speedup |
|---|---|---|---|
| Decision Index | 23.1 ms | 85.5 ms | 3.7× |
| RACE | 20.0 ms | 81.4 ms | 4.1× |
| MultiRC | 58.9 ms | 470.3 ms | 8.0× |
| QuALITY long | 75.9 ms | 167.2 ms | 2.2× |
| GQA | 38.1 ms | 292.0 ms | 7.7× |
GEV-26B-Decide
| Workload | Flide | Release | Speedup |
|---|---|---|---|
| Decision Index | 20.4 ms | 68.6 ms | 3.4× |
| RACE | 17.1 ms | 26.2 ms | 1.5× |
| MultiRC | 57.6 ms | 247.3 ms | 4.3× |
| QuALITY long | 77.9 ms | 98.5 ms | 1.3× |
| GQA | 53.7 ms | 144.3 ms | 2.7× |
Start a server¶
flide serve --model autotrust/JEV-27B-VL
Send a request¶
curl http://localhost:8000/v1/systemone -H "Content-Type: application/json" -d '{
"state": "Order #1182 arrived with a cracked screen. The customer asks for a refund and attached two photos.",
"questions": {
"action": {"type": "choice", "instructions": "What should support do next?",
"criteria": {"refund": "refund the order", "replace": "send a replacement", "escalate": "ask a human"}},
"urgent": {"type": "noul", "instructions": "Does this need a reply within the hour?"}
}
}'
Images¶
JEV-27B-VL, JEV-35B and GEV-26B-Decide read images, and JEV-9B and JEV-27B refuse a request with images. Images go in
images, as data URLs or plain base64, at most eight a request. A state that is a list may also hold
{"image": ...} parts where the image belongs. The request's images come first, ahead of the state's text, as
serve_decide.py places them, at the sizes the checkpoint's processor gives them, and their tokens count toward the
limit of a question's prompt. The images are part of the state the questions share, so they are read once with it
for the questions of each type, and every question sees them.
IMG=$(base64 -w0 photo.jpg)
curl http://localhost:8000/v1/systemone -H "Content-Type: application/json" -d '{
"state": "A customer sent this photo of the delivered parcel.",
"images": ["data:image/jpeg;base64,'"$IMG"'"],
"questions": {
"damaged": {"type": "noul", "instructions": "Is the parcel damaged?"},
"action": {"type": "choice", "instructions": "What should support do next?",
"criteria": {"refund": "refund the order", "replace": "send a replacement", "escalate": "ask a human"}}
}
}'
Images need torchvision, installed from the same place as torch. A server takes images of up to 64 MiB each, and
--max-media-mb changes the cap.
Limits and options¶
A request takes choice, noul and score questions. A choice takes 2 to 256 options. A score takes exactly six levels, read as 0 to 5; its levels' descriptions are not shown to the model, as the release shows none, and neither are a noul's. A question's prompt takes up to 32,767 tokens on JEV-9B, JEV-27B and JEV-27B-VL and up to 65,535 on JEV-35B and GEV-26B-Decide, its images included, the context their releases serve with; a longer one is refused.
| Option | What it does |
|---|---|
--format-arg strategy=S |
how a choice past the trained slots is read: single (one pass), tournament or permute (four orders, averaged), as the release's JEV_DECIDE_STRATEGY sets it |
--calibration FILE |
another calibration.json, as the release's JEV_DECIDE_CALIBRATION names one |
--max-branch-tokens N |
the token limit of a question's prompt |