← ALL WRITING
UPDATED SEP 25, 2026

Understanding Jev and Where It Fits in the AI Stack

A model that decides rather than talks

JBJames Briggs · Founder · 23 min read
A still from a Doom deathmatch run: GLiNER plays with a plasma rifle, coached by gpt-5.6-luna

Jev is one of the most hyped AI models of the year. It isn't an LLM, and it didn't come from OpenAI, Anthropic, or DeepSeek.

Jev justifies the hype by filling a real gap in AI. Typed, ultra-fast, and calibrated decision making — it changes what is possible with AI, and inadvertently makes AI a little less dystopian.

We will explore what Jev is, its place in the AI stack, the very real and capable open source alternatives called OpenJevs, and how we can think fast and slow to beat solo-Jev at Doom.

What Jev is

Jev was announced as a new type of model, fitting into the AI stack alongside LLMs. TypeSafe (the lab behind Jev) coined it a System One model [1], in reference to Daniel Kahneman's bestseller — Thinking, Fast and Slow [2].

Kahneman argues that we have two modes of operation. System two is our slow deep thought or reasoning. System one is our fast monkey-brain intuition.

Jev draws an imperfect parallel to System One thinking. It is an ultra-fast decision-making machine. In Machine Learning (ML) — you'd call this a classification model — but Jev is a fancy classification model.

01 / 06 · INPUTS

Via Jev's API we send a set of questions and a state. These are our inputs into the model.

02 / 06 · STATE

The state describes the current "environment". In our Doom demos that includes enemy positions, player ammo, health, etc.

03 / 06 · QUESTIONS

questions contain one or more decisions to be made. In our Doom example:

  • action decides whether the player should shoot, aim left, or aim right.

  • advance tells the player how hard to push; retreat→hold position→advance→charge.

  • switch_to_shotgun is a yes/no to whether the user should switch weapons.

04 / 06 · QUESTION ANATOMY

Each question includes definitions for type, natural language instructions, and for two of the three types a enum-like field named criteria.

05 / 06 · QUESTION TYPES

Jev defines three type structures:

  • choice defines a fixed-set of possible actions. Jev outputs a probability distribution over the set.

  • score is used for named points on a scale. The criteria list is ordered and the output score lands on a sliding scale between them. slow→medium→fast works — coffeematchatea does not.

  • noul defines a yes/no decision as a probability between 0-1. Where 0 is a confident NO, 1 is a confident YES, and 0.5 is 🤷‍♂️

06 / 06 · ANSWERS

Every answer returns a calibrated probability. For choice and score those are the probabilities of each criteria option being correct. For noul it is the probability of the answer being yes.

ONE CALL · THREE ANSWERS
REQUESTPOST /v1/systemone
{
"model": "jev-latest",
"state": {
"health": 34,
"weapon": "pistol",
"ammo": { "bullets": 12, "shells": 8 },
"enemies": [
"Imp, 90 units ahead, in the crosshair",
"Demon, 300 units away, to the left"
],
"medikit": "400 units behind you"
},
"questions": {
"action": {
"type": "choice",
"instructions": "Should the player fire, or aim at another enemy?",
"criteria": {
"shoot": "fire at the enemy in the crosshair",
"aim left": "turn toward an enemy on the left",
"aim right": "turn toward an enemy on the right"
}
},
"advance": {
"type": "score",
"instructions": "How hard should the player push toward the enemies?",
"criteria": ["retreat", "hold position", "advance", "charge"]
},
"switch_to_shotgun": {
"type": "noul",
"instructions": "Should the player switch to the shotgun now?"
}
}
}
awaiting answers · 1 state · 3 questions
ACTION · CHOICECONFIDENCE 0.97
shoot
0.98
aim left
0.02
aim right
0.00
ADVANCE · SCORE 1.13CONFIDENCE 0.40
retreathold positionadvancecharge
SWITCH_TO_SHOTGUN · NOUL0.35
threshold in code: switch if > 0.5 → stay on the pistol

Calibrated Probability?

Calibrated probability is the biggest unlock that Jev introduces. It means when Jev gives an answer a probability of 0.8, Jev will be correct ~80% of the time. That might not seem like much, but it gives us measurable confidence and interpretability.

LLMs like gpt-5.6-luna can generate a confidence score — but it can mean anything, it is not calibrated for 0.8 to mean "this is correct ~80% of the time". It is the LLM saying "trust me bro".

We can measure calibration between models by taking their reported confidence scores and the actual % accuracy. gpt-5.6-luna typically went with very high (97-99%) confidence scores all the time. Jev on the other hand is genuinely well calibrated, often reporting low confidence on answers it got wrong.

Reported confidence against how often the answer was right. We measure Expected Calibration Error (ECE), ie the difference between model reported confidence and % accuracy – the dashed line marks the ideal perfect calibration, ECE the gap from it [A.3].

Jev's confidence is a real threshold we can mostly rely on. Making it possible to write code that depends on Jev's choices with predictable error rates. This begins to fulfil one of the earliest visions of AI, the idea of merging symbolic logic (ie code) with neural decision making (ie AI) [3].

With Jev we can begin bringing ultra-fast intelligent decision-making into code logic. Stop and think about what that could mean for a moment — it's a big deal.

Ultra-Fast?

That brings us back to latency. Code is fast, can the neural decision-making match that?

01 / 02

We measure Jev server response time at ~90ms / call. Jev computes answers in parallel, that means two things:

  • Each answer probability is fully independent of other produced answers (ie answer A will not influence answer B).
  • We can stack many parallel questions into a single API call with zero latency impact.
02 / 02

Compare this to gpt-5.6-luna with no reasoning. For this input/output we'd expect ~700ms / call. If we add more questions gpt-5.6-luna will take longer to respond, and cannot guarantee independent answers.

GENERATE VS READOUT · ONE DOOM TICK
SAME TICK, SAME THREE QUESTIONS · SERVER TIMESHOWN AT ½ SPEED · 0000 MS
gpt-5.6-luna · generate a tool callwaiting for first token
{"action":"shoot","advance":"retreat","switch_to_shotgun":true}
jev · read out probabilitiesreading
——
0 MS233467700 MS
Server time as each API reports it. Excludes network latency, which added ~240 ms to each jev call and ~360 ms to each gpt-5.6-luna call from Bali.
0jev decisions
0LLM decisions

Where to Use Jev?

Jev is phenomenal at fast decision making if we can define all potential decisions beforehand. Where we have no need for natural language, and need only a probability of doing X, Y, Z, etc. We can see this in decision and classification focused benchmarks:

Jev and gpt-5.6-luna (no reasoning) performance across various benchmarks. Note we measure % accuracy for intent and tool benchmarks (top three) and f1-score for guardrail benchmarks (bottom three) [A.1].

Jev actually matches or beats gpt-5.6-luna on all but one benchmark, showing very strong performance for tool selection and guardrails – two major use-cases for LLMs. For guardrails this is a very real use-case, you probably should refactor your guardrails to use Jev.

For tool selection there is more nuance – Jev cannot generate text. If your tool call is web search and the agent is expected to generate the search query, Jev does not work. If your tool call is "display a predefined pop up" or "swap to shotgun", Jev works.

Where Not to Use Jev

Jev intentionally does not replace LLMs — it is a completely new and separate component in the AI stack. LLMs are still the go-to for anything that needs generated text, ie chat, search, and code generation.

Even within the realm of "make a decision" — Jev cannot always be used. The model is limited to a maximum of 255 choice options [1] — so no large scale parallel decision-making.

Jev also does not handle large context windows. The state size is limited to 32k tokens (including the longest question) [4]. Even below that, Jev's performance is reported to degrade as we add more to the input state [5].

Open Source Alternatives

Jev is marketed as a big new advancement in AI — and maybe that is true, but we cannot know. Jev is closed-source with no research paper so details are sparse. We do know Jev's post-training process has been coined Reinforcement Learning for Calibrated Decisions (RLCD) [1] — mirroring RLHF, the breakthrough that paved the way for ChatGPT [6].

We also know that Jev is not an autoregressive model [1]. That means Jev does not sequentially generate outputs (tokens) like an LLM. Instead, Jev pulls probability values directly out of the network — like a transformer with a classification or regression head.

Archer Hume posted a phenomenal analysis where he infers further architecture details based on response latency and qualities of the model (such as output answers independence) that give us a glimpse of the potential architecture — but nothing concrete [7].

Regardless, there are plenty of open source alternatives being placed under the umbrella term "OpenJevs" [8]. OpenJev models consist of various architectures and even intended purpose but can all be applied to Jev-like problems. Here is a small selection of these models, it is not exhaustive and will be quickly outdated.

modelreleasedwhat it issize · licence
Jev 1.13 (TypeSafe)15 Sep 2026, early access [1]hosted System One model: state + typed questions → calibrated probabilitiesundisclosed · closed API
GLiNER2.5 (Fastino) [9]24 Aug 2026encoder that scores label names against the text; classification and extraction74M–300M · Apache 2.0
GLiGuard (Fastino) [10]9 May 2026the same family, trained for guardrails: jailbreak, injection, toxicity300M · Apache 2.0
Von 1.1 (wfzyx) [11]19 Sep 2026 (1.1 on 22 Sep)open System One model, Jev's exact API shape395M ModernBERT-large [12] · Apache 2.0
Laya (Convai Innovations) [13]18 Sep 2026open decision model, Jev's shape; English + multilingual checkpoints421M / 322M · Apache 2.0

All of these models can be easily run on consumer hardware. GLiNER, Laya, and Von (on Apple Silicon) each require PyTorch and a pip install. The latency numbers were collected on an M4 Pro GPU.

Both Laya and Von are currently fan-favorites. However, from my tests, GLiNER models are generally superior.

JevGLiNER2.5GLiGuardVon 1.1Laya
Banking77 intent (accuracy)0.740.70—0.270.38
CLINC150 intent + OOS (accuracy)0.860.59—0.410.20*
BFCL tool selection (accuracy)0.950.75—0.900.27
Jailbreak (F1)0.96—0.880.640.95
Prompt injection (F1)0.71—0.460.450.74
ToxicChat (F1)0.86—0.940.550.77
ms per decision, M4 Pro GPU~90 server / ~340 round trip23–5313–2918–17020–106
Decision benchmarks. We use two GLiNER models, GLiGuard for guardrail sets and GLiNER2.5-base on the rest. *Laya refuses more than ~50 options; with its own shortlist step it answers CLINC150 at 0.20 [A.1].

Von performs best on tool selection and mediocre-to-poor elsewhere. Laya excels at detecting prompt injection attacks but collapses against intent detection and tool selection. GLiNER2.5 and GLiGuard are most consistent and run multiple questions in parallel making them much faster for batched queries [A.2].

GLiNER

GLiNER is a family of models that share little more than an idea. They place labels and some input text together, feed them into a bidirectional encoder (a type of transformer lacking the autoregressive token-generation of LLMs), and have the encoder score each label against the text in a single pass.

There is no single shared mechanism between GLiNER models as to how label scoring happens. GLiNER focused solely on Named Entity Recognition (NER) by scoring candidate entity spans in the text. GLiNER2.5 drops spans and instead identifies "boundaries" when in NER-mode.

GLiNER vs GLiNER2.5
GLiNER scores every span of up to 12 words against every label [14]. GLiNER2.5 scores where each label's entities start and end, with an unlimited max span length [9] .
01 / 07 · SCHEMA

Further, 2.5 can do more than just NER. By changing the "schema" we feed into the model we can switch between NER, classification, structured data extraction, and relation building.

02 / 07 · CLASSIFIER

GLiNER2.5 as a classifier — each tasks is marked by a schema opened by [P], task options are defined by [L] labels. GLiNER2.5 transforms this input into a set of classification scores where each label is assigned a confidence score — the largest one wins.

03 / 07 · SPECIAL TOKENS

These schemas are defined via special tokens, which include:

  • [P] Prompt defines the task name and optionally it's instructions.

  • [E] Entity type defines a named entity that we want to extract from our input text.

  • [L] A label or choice in a classification task.

  • [DESCRIPTION] A label's description.

  • [SEP_TEXT] Separates the schema definition from the input text.

  • [SEP_STRUCT] Separates schema tasks — allowing us to run multiple tasks in parallel.

04 / 07 · JEV → GLINER2.5

GLiNER2.5 supports more tokens — but these are the essentials we need for classification and NER. To match Jev's feature-set we use GLiNER2.5 as a classifier.

05 / 07 · JEV → GLINER2.5

Each Jev question becomes a GLiNER2.5 task: its name and instructions open the task ([P]), option descriptions follow ([DESCRIPTION]), and the options become [L] labels. A noul becomes a yes / no pair, and the state becomes the text after [SEP_TEXT].

06 / 07 · WHAT YOU GIVE UP

What you give up with GLiNER is Jev's calibration and general-purpose performance. The performance side can be somewhat negated by using different GLiNER models for different use-cases — i.e. GLiGuard for guardrails or GLiNER2.5 for intent classification. There is no robust workaround to match Jev's calibration — yet.

07 / 07 · LATENCY

If you can handle those, GLiNER models reward us with open-source licensing, easy deployments, and ultra-low latency — just 10-50ms / decision on an M4 Pro GPU.

GLINER2.5 · CLASSIFICATION MODE · ONE DOOM TICK
ONE MODEL · THE SCHEMA PICKS THE TASKOURS: CLASSIFICATION
NER[E]
classification[L]
structured extraction[C]
relations[R]
THE DOOM TICK, AS GLINER2.5 READS IT3 TASKS + THE STATE · ONE STRING
[P] action: Should the player fire, or aim at another enemy?[DESCRIPTION] shoot: fire at the enemy in the crosshair[DESCRIPTION] aim left: turn toward an enemy on the left[DESCRIPTION] aim right: turn toward an enemy on the right[L] shoot[L] aim left[L] aim right[SEP_STRUCT]
[P] advance: How hard should the player push toward the enemies?[L] retreat[L] hold position[L] advance[L] charge[SEP_STRUCT]
[P] switch_to_shotgun: Should the player switch to the shotgun now?[L] yes[L] no
[SEP_TEXT]Health 34.Weapon: pistol with 12 bullets; 8 shotgun shells.Imp 90 units ahead, in the crosshair.Demon 300 units away, to the left.Medikit 400 units behind you.

Thinking fast and slow

A decision in ~10ms is a reflex. Reflexes are fast and necessary but lack reasoning. Jev and OpenJev alternatives don't necessarily lack intelligence or logic, but they can't reason over sequential token generation like LLMs.Remember, LLMs are autoregressive models, they sequentially generate tokens and can therefore "reason" over those tokens. Jev-type models are non-autoregressive and fundamentally cannot reason due to their non-sequential nature.

Returning to Kahneman's work, our brains operate two systems — System One, ie intuition or fast thinking and System Two, ie reasoning or slow thinking. By adapting a similar fast and slow system we can improve performance on the most important benchmarks — playing games.

Merging fast and slow models into a single system can massively improve Doom gameplay performance.

Our fast and slow system keeps Jev-type models as the decision-maker but adds an LLM to generate instructions on what to prioritize.This idea of layering fast and slow models exists elsewhere in AI — Figure robotics employ a three tier model system that they coincidentally name System Two (a slow reasoning model), System One (a fast perception/movement model), and System Zero (a super-fast reflex model) [15].

For example, in Doom deathmatch the player is able to run into a parallel room to pick up better weapons, health, etc. When Jev-type models play solo they focus on shooting enemies. An LLM will instead say "go get the chaingun in the parallel room" — this delays player points momentarily but once the player switches to the chaingun they can kill far more enemies and farm points.

01 / 04 · GLINER ALONE

Fast and slow works in other games too, in the example here our player must navigate a busy highway and take the first exit.

02 / 04 · JEV ALONE

Both Jev and GLiNER miss the exit, they don't even try to take it.

03 / 04 · GLINER + COACH

With an LLM coach both models attempt to take the exit.

04 / 04 · RESULTS

The fast and slow system allows our System One models to make the exit with GLiNER + coach exiting 47% of the time and Jev + coach exiting 38% of the time.

SIMULATION 03 · HIGHWAY-ENV · MOTORWAY EXIT
loading trace…
Jev-type models are small enough to be hosted locally. Jev does show generally better benchmark performance vs. the open source alternatives but is nonetheless handicapped by inescapable network latency.

Our fast and slow system can also decide whether the slow LLM coach is needed at all. Returning to the Doom examples, our LLM was barely consulted on three-of-four tested maps.

Across four Doom maps we measure kills on the two defend maps, scenario score on the corridor, and points on deathmatch.
01 / 01 · GLINER + COACH

Doom defend_the_center, defend_the_line, and deadly_corridor each rely on twitchy fast reactions. There is no effective strategy beyond "point-and-shoot" and so the LLM coach isn't needed and often provides no instruction.

SIMULATION 01 · DOOM · DEFEND_THE_CENTER
loading trace…
01 / 01 · JEV PAIR

The deathmatch map does require strategy. We see our LLM instruct the player to grab a plasma rifle, fight, recover health with a medikit, then fight some more. For Jev the coaching improvement is minor — but GLiNER, with its rapid decision making, gains a huge improvement when coached.

SIMULATION 02 · DOOM · DEATHMATCH
JEV ALONE
loading trace…
JEV + LLM COACH
loading trace…

What to Make of Jev?

Jev delivers typed, ultra-fast, and calibrated decision making — filling the gap that LLMs cannot fill.

Calibrated probability means we now have trustworthy decision making that we can put in code. Our code defines the logic and execution, a neural net decides the path. This makes the decades old idea of neuro-symbolic AI practical at ultra-low latency.

Jev's place in the AI stack is as the neural glue between pieces of symbolic logic. It is the fast decision-maker unlocking neural integration with code, going at it alone or in tandem with the slow-thinking but powerful LLMs. Thinking both fast and slow to 4x Jev and GLiNER's solo Doom deathmatch scores.

Some of Jev's greatest qualities make it hard to capitalize on. The use-case is real, but the model already has several open source imitators. Even before Jev there were model families like GLiNER enabling similar use-cases.

These open source alternatives trail Jev's overall performance but some already beat or match Jev across multiple benchmarks. All of them can be run easily on consumer hardware. The one real edge that TypeSafe has is calibration, but open source may not be far behind.

All of this makes AI a little less dystopian. Jev has real utility as a major component in AI stacks, and unlike LLMs it prioritizes control. And Jev has triggered a wave of open source models that can be run locally — bringing near-frontier AI decision-making to our own machines, not locked inside a handful of mega-corporations.

Beyond those utopian dreams, Jev and OpenJevs absolutely deserve a place in your agentic workflows. Start with guardrails and tool selection — integrating decision-making into your code logic — and explore where else these new models might fit into the AI and broader software stack.


References

Appendix

(Appendix primarily written by Fable 5.1 and Opus 5)

A.1 Methodology

Decision benchmarks. Six sets, the same items for every model: Banking77 [16] (400 messages, 77 intents), CLINC150 [17] (500, 150 intents plus out-of-scope), BFCL v3 [18] (260, multiple-function and irrelevance splits; scored on function selection only, with a "none of these" option), jackhhao/jailbreak-classification [19] (262, balanced test split), deepset/prompt-injections [20] (116, test split) and lmsys/toxic-chat 0124 [21] (400, positives are toxic or jailbreaking). Intents and tools report accuracy; guardrails report F1 on the "block" decision. Every model sees the same labels; descriptions are the label names unless noted.

How each model was asked. Jev, Von and Laya get the identical request — one state (the message) and Jev-format questions: a Choice over the labels for intents and tools, and for guardrails a battery of three Nouls (jailbreak, injection, harmful) plus a four-level Score; the block score is the highest Noul, threshold 0.5. Von and Laya sit behind a small adapter that maps the same question dicts to their SDKs. GLiNER2.5-base uses its classification schema [22] with the labels and the same question, as its task prompt; GLiGuard is the guardrail variant. gpt-5.6-luna is asked for a strict JSON-schema answer with reasoning_effort="none", temperature default. Laya's option budget (192 tokens) refuses CLINC150; it was run through its documented predict_shortlist route (embed, top-20, predict).

Latency. Median wall-clock per call from the same machine. For Jev, server time is the x-envoy-upstream-service-time header and the round trip uses one keep-alive HTTPS connection (a fresh TLS handshake per call costs more than the model does). For GPT, server time is the openai-processing-ms header. Local models run on the M4 Pro GPU (MPS).

Games. ViZDoom 1.3 [23] (defend_the_center, defend_the_line, deadly_corridor at skill 5, deathmatch) and highway-env [24] (exit-v0, ego started in the third lane). Eight episodes per configuration from the same seed; deathmatch and the motorway exit vary far more from run to run, so deathmatch pools 8 episodes on each of four seeds (32 per configuration) and the motorway exit runs 32 episodes (seeds 0–31). System 1 decides every 4 game tics (≈9/s); a slow decider's last answer is held until its next one arrives. GLiNER2.5-small gets the question Jev gets, as its task prompt. System 2 is gpt-5.6-luna (reasoning off) consulted before the first tick and only on triggers (no kill for 10s, no route progress for 8s, low health, ammo out), answering with typed guidance that code validates and clamps; geometry, safety and routing are code. Scores are the scenarios' own rewards; deathmatch points are kills weighted by monster.

Environments. Python 3.12; gliner2, typesafe-sdk, openai; Von (von-sdk 1.1) and Laya (laya 0.3) in a separate environment because they need transformers 5. Code and result files: link to follow.

A.2 Latency by input shape

Median milliseconds per call on the M4 Pro GPU, same machine and same inputs for every model. "Short" is a one-line support message; "long" is a ~325-word jailbreak prompt. Jev's server time is ~90ms for any of these shapes (measured with one to three questions); gpt-5.6-luna ~700ms. The GLiNER models were timed without the question in their task prompt; with it, a call takes 2–8ms longer.

callGLiNER2.5-smallGLiNER2.5-baseGLiGuardVon 1.1Laya
short state, 1 Choice, 4 options1010101314
short state, 1 Choice, 77 options27545452219
short state, 1 yes/no question9892415
short state, 4-question battery910108528
long state, 1 yes/no question2040405445
long state, 4-question battery244645204154

All five are encoders, so cost follows the tokens they read: the state, plus every option's text, plus the question text. What differs is how questions are handled. GLiNER2 scores every question's labels in one pass, so a battery of four costs the same as one. Von runs roughly one pass per question (4× for the battery); Laya batches questions but pays heavily for options (219ms at 77, and it refuses more than ~50 without its shortlist step).

A.3 Calibration (ECE)

Expected Calibration Error (ECE) [25] measures the gap between the confidence a model reports and how often it is right. 0 is perfect.

What counts as confidence. For intents and tools, the probability of the chosen option: the top of probabilities for Jev, Von and Laya, GLiNER's score for its chosen label, and the confidence number gpt-5.6-luna writes in its JSON answer. For guardrails, every model gives a probability p that the message should be blocked (for Jev, Von and Laya the highest of the three Nouls [A.1]; for gpt-5.6-luna the probability it writes). The decision is "block" when p ≥ 0.5, so its confidence is max(p, 1 − p), and it is right when it matches the label.

Calculation. Sort the N answers into ten equal-width confidence bins: (0, 0.1], (0.1, 0.2] … (0.9, 1.0]. For each bin b take its size nb, its mean confidence and its accuracy. Then:

ECE=∑b=110nbN∣accb−confb∣\text{ECE} = \sum_{b=1}^{10} \frac{n_b}{N} \left| \text{acc}_b - \text{conf}_b \right|

Each bin adds its gap, weighted by its share of the answers. Every bin counts toward ECE; the reliability chart only draws bins with at least ten answers.

Worked example: CLINC150, N = 500.

confidence binJev: n · conf · accJev addsgpt-5.6-luna: n · conf · accgpt-5.6-luna adds
0.2–0.31 · 0.30 · 0.000.001——
0.3–0.46 · 0.36 · 0.830.006——
0.4–0.514 · 0.46 · 0.430.0012 · 0.42 · 0.000.002
0.5–0.626 · 0.55 · 0.460.0043 · 0.54 · 0.000.003
0.6–0.722 · 0.65 · 0.550.0054 · 0.62 · 0.500.001
0.7–0.828 · 0.76 · 0.610.0085 · 0.72 · 0.000.007
0.8–0.942 · 0.85 · 0.860.00014 · 0.87 · 0.640.006
0.9–1.0361 · 0.99 · 0.950.028472 · 0.99 · 0.880.100
ECE0.0530.119
Each bin's answer count, mean reported confidence and accuracy, and what it adds to ECE.

gpt-5.6-luna's ECE comes almost entirely from one bin: 472 of its 500 answers sit at 0.99 confidence and are right 88% of the time. Jev spreads its answers across the range, and most bins sit close to their accuracy.

ToxicChat is the extreme case. gpt-5.6-luna put all 400 answers in the top bin at 0.99 and was right on 82%, so its ECE is simply 0.99 − 0.82 = 0.17.

Jev's confidence field. The numbers here use Jev's top probability. Scoring its separate confidence field instead gives 0.13 on Banking77 and 0.04 on CLINC150, against 0.14 and 0.05.

Every model, every benchmark.

ECE (lower is better)Jevgpt-5.6-lunaGLiNER2.5GLiGuardVon 1.1Laya
Banking77 intent0.140.160.19—0.650.51
CLINC150 intent + OOS0.050.120.23—0.540.74
BFCL tool selection0.040.050.25—0.090.71
Jailbreak0.070.04—0.120.050.05
Prompt injection0.140.34—0.370.190.07
ToxicChat0.040.17—0.060.090.09
ECE from the same answers as the accuracy and F1 scores in the main benchmark table. Bold marks the lowest in each row.

A.4 Local models on the decision benchmarks

Jev, GLiNER2.5, GLiGuard, Von and Laya on the six decision benchmarks; each GLiNER model on the sets it is built for. Accuracy for intents and tools, F1 for guardrails. Hover for sample size and the model's median latency on the M4 Pro GPU.

Three things stand out:

  • The GLiNER family is the only local option that holds up across the board: GLiNER2.5 within a few points of Jev on Banking77 (0.70 vs 0.74), GLiGuard better than everything on ToxicChat (0.94). The weak spots are "none of the above" (CLINC150, 0.59) and prompt injection (0.46).
  • Von is a tool-selection model. 0.90 on BFCL at 18ms is close to Jev's 0.95 at a fifth of the latency. On intents it collapses (0.27 / 0.41) and its probabilities are near-uniform (ECE 0.65 on Banking77): the confidence it returns is not something you can threshold.
  • Laya is a guardrail model. 0.95 on jailbreak, 0.74 on prompt injection (better than Jev's 0.71), 0.77 on ToxicChat, 50–100ms. Past ~50 options it cannot answer at all without its shortlist step, and with it CLINC150 falls to 0.20.

A.5 Videos

Twelve full episodes, one per configuration. Game on the left; what System 1 reads and scores on the right; System 2's guidance below it. Coach calls took about 2s in these takes. Deathmatch varies from run to run for Jev alone and both coached setups, so for those three we recorded four takes. For Jev alone and Jev + coach we show the one closest to the setup's median benchmark score; for GLiNER + coach, the best of the four (54 points). The numbers above are from the benchmark runs, not these takes.

Jev alonefile
GLiNER alonefile
Jev + LLM coachfile
GLiNER + LLM coachfile