Skip to content

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