JEVfireTHE FIELD GUIDE

LOCAL MODELS / REAL-TIME DECISIONS

One move
ahead.

A small language model plays our recreation of Super Mario’s World 1-1. Entirely in your browser.

Qwen3.5 0.8B + an explicit physics guard.
WebLLM · WebGPU · no inference server.

APPLE M4 MAXRECORDED RUN 04
71ms

per action decision.

511accepted choices
40.12 slevel completion
QWEN → CODE → GAME{ "maneuver": "jump" }

Rounded from 71.26 ms mean worker inference in the final-build run. Model download and CPU forecasting excluded. M4 Max identification supplied by the device owner.

Read the measurement receipt ↗

Most software needs a choice, not a paragraph. JEVfire asks a pretrained model to score a menu of allowed values, then constructs the JSON in code. Inspired by Jev’s decision-first idea; implemented with existing models and no retraining.

01 / THE IDEA

01 / FOLLOW A DECISION

Same model.
A different way out.

We keep the tokenizer and model weights. Existing token labels—A, B, C—stand for full, typed choices. One scored output position still runs the model’s decoder stack, not just one layer.

  1. Read the contextReuse an exact cached prefix.
  2. Score the vocabularySame model, same tokenizer.
  3. Keep A / B / CChoose the highest-scoring label.
  4. Build JSON in codeMap A to the typed value jump.
OUTPUT{ "maneuver": "jump" }
Ready

Independent fields can be batched on CUDA. Browser fields run sequentially with shared context.

THE GUARANTEE

No invented fields. No undeclared values. Successful JEVfire responses are assembled from your declared keys and choices. A valid choice can still be a bad choice. Independent fields can also disagree; dependent decisions need staged requests or application checks.

02 / THE 100% QUESTION

A smaller menu.
Not more certainty.

The model can give high scores to tokens outside our menu. We ignore those scores and rescale the allowed choices to sum to 100%. That does not measure how likely the decision is to be correct.

Here, A has 10%, B has 5%, and everything else has 85%. Within A and B, the share becomes 10 ÷ 15 = 66.7% and 5 ÷ 15 = 33.3%. The winner stays the same.

Where does the other 85% go?ILLUSTRATIVE VALUES
■ A · jump■ B · wait▧ other tokens
Full vocabulary100%
A 10% · B 5% · other 85%
Allowed choices15% retained
A 10% · B 5%

No weights changed. No tokenizer changed.

03 / REUSE THE WORK

Read the rules once.
Read the world again.

Instructions stay put. The world changes. We retain the exact instruction prefix’s attention and recurrent state, then process fresh observations and candidate choices. A changed prefix needs fresh computation.

REUSABLE PREFIX“Keep moving. Avoid damage.”
TICK 1gap ahead → jump
TICK 2landing → run
TICK 3enemy → hop

Schematic observations. Each changing suffix still runs through the model. A downloaded model cache is different from a prompt-state cache.

SAME-PROMPT CACHE ABLATION
Cache off140.17 ms
Cache on67.32 ms

2.08× faster across 12 paired maneuver prompts. All 12 choices matched. This isolates caching; changing the entire controller is a different experiment.

Inspect the paired data ↗

04 / LEARNING TO KNOW

Confidence has
to earn its name.

In Jev’s terminology, RLCD means Reinforcement Learning for Calibrated Decisions. Calibration means predictions assigned 70% confidence should be right about 70% of the time across comparable cases.

Our wrapper doesn’t train the model. Other projects do: supervised learning uses labeled examples; reinforcement learning rewards outcomes. Either can train probability estimates, and either still needs independent evaluation.

Jev’s original direction ↗
Being confidently wrong costs more.TEACHING EXAMPLE
Examples→ Predict→ Grade→ Update weights ↺
100 predictions: 70 correct, 30 wrong
● Current confidence◆ Minimum at 70%
Penalty: 0.273

Synthetic illustration, not a training run. Binary Brier penalty; lower is better. Real models learn different confidence for different inputs.

05 / OPEN TRAINING RECIPES

CHECKED SEPTEMBER 2026

Some projects really train.
They don’t all do RL.

Three useful examples, with different objectives. These are source-reviewed recipes and author-reported results, not training runs we reproduced.

SUPERVISED CLASSIFICATION

OpenJev
Qwen3.5 · 4B

Train a new classification head to decide whether a candidate is supported, contradicted, or neutral given the context. Scores come from this head, rather than vocabulary generation.

The recipe

120,000 SNLI/MNLI examples; 2,000 validation examples; one epoch; batch 32; maximum length 256; learning rate 2e-5. Fine-tune the text backbone and head; freeze the vision tower. The released run uses no LoRA.

Recorded NLI validation accuracy: 89.85%. This is not a Mario score or a calibration result.

Training code ↗
AlexWortega/openjev ↗
SUPERVISED + CALIBRATION

Verdict
ModernBERT · 151M

A small candidate scorer trained with cross-entropy plus a penalty for probability errors. A separate calibration step adjusts how sharp its probabilities are.

The recipe

Start with GLiClass/ModernBERT. 2,300 training examples; three epochs; batch 8, accumulation 4; backbone/head learning rates 2e-5/1e-4. Select by validation NLL. Fit temperature on 500 separate calibration examples; evaluate on 1,000 test examples.

The v2 test report keeps 95% accuracy, but calibration error worsens from 1.13% to 3.35% after temperature scaling. Calling a step “calibration” does not guarantee improvement.

Evaluation receipt ↗
Verdict source & weights ↗
REINFORCEMENT LEARNING

RLCR
Qwen2.5 · 7B

Generate reasoning, an answer, and confidence. Grade correctness and confidence together, then update the model with GRPO. Actual RL; a different method from Jev’s unreproduced recipe.

The recipe

Hotpot QA; 32 sampled completions per prompt; temperature 0.7; one epoch; learning rate 1e-6; BF16. The authors document four A100 GPUs for Hotpot training.

Example checkpoint: mehuldamani/hotpot-v2-brier-7b-no-split. These models still generate reasoning text; their confidence training does not automatically transfer to our A/B/C token scores.

Training configuration ↗
RLCR paper, code & models ↗

A naming trap: Meta’s older RLCD means Reinforcement Learning from Contrastive Distillation—a different training objective. Full recipes, commands & source notes ↗

06 / CHOOSE THE RIGHT TOOL

Constrained decoding
belongs in the toolbox.

Finite-choice scoring

Best fit: small action menus, routing, flags, and independent typed decisions. Code owns the keys and maps each selected label to its value. Our current API accepts flat finite fields; code can compose larger objects.

Constrained JSON generation

Best fit: nested objects, dynamic arrays, and free-text strings inside a schema. A grammar masks tokens that cannot legally come next; the model continues generating. Later fields can condition on earlier values.

Trained decision models

Best fit: repeated tasks with representative training data. Learn better choices or probability estimates, then use code assembly or constrained decoding. Training and output constraints can be combined.

Successful constrained generation enforces supported schema rules, not factual truth. Prefix caching can help both approaches; some engines skip forced text. See XGrammar and vLLM structured outputs.

07 / THE MEASUREMENT RECEIPTS

DIFFERENT WORKLOADS. SEPARATE RESULTS.

Fast is a measurement.
Good is another one.

BROWSER / M4 MAXWorld 1-1
Final-build run mean
71.26 ms
Accepted choices
511
Accepted choices / second
12.74
Request round-trip mean
73.27 ms
CPU forecasting mean
2.68 ms
Level completed in
40.12 s

One continuous run on the shipping build; worker latency counts accepted choices. Qwen3.5-0.8B-q4f16_1, WebLLM 0.2.85, Chrome 152. Excludes download; first cold-policy choice: 192.80 ms.

Across all four recorded runs: 4/4 completions, 72.79 ms mean inference, 12.60 accepted choices/sec. One authored level, with a physics guard—not a general success guarantee. Device owner identified M4 Max; browser telemetry records Apple / Metal 3.

Runs, methodology & raw traces ↗
CUDA / RTX PRO 600028 typed fields
Constrained JSON median
5,113.1 ms
JEVfire median
496.9 ms
Fresh-prefix speedup
10.29×
Model
Qwen3.8 27B
Runtime
vLLM 0.29.0
Samples per cell
5

Synthetic, independent boolean/enum fields. Same FP8 weights and thinking setting; compact grammar-constrained JSON baseline. Model and kernels already warm; fresh prefix-cache salt.

This is a server latency comparison. It is not a browser speedup, a general accuracy benchmark, or a promise that every workload is faster.

Full benchmark methodology ↗

08 / PUT IT IN MOTION

Three worlds.
Your prompts.

Are we changing the tokenizer or looking at token distributions?

The tokenizer and vocabulary stay unchanged. We verify single-token labels and read their scores from the existing language-model head. The browser uses raw logits; the vLLM path requests label log probabilities. Restricting and normalizing those scores gives a distribution over the menu—not a measured correctness probability.

Can it take images as context?

The CUDA image-context path can pass images to a compatible vision-language model. Image encoding still costs time, and model/backend support is required. The browser Mario demo uses textual state summaries and CPU forecasts, not screen pixels. Image-context example ↗

Does the game pause while the model thinks?

Live mode keeps the world and maneuver executor moving while a worker scores the next choice. There is one request outstanding; stale answers are checked against the new state. The physics guard forecasts candidates before inference and validates the chosen maneuver afterwards. Raw-control Decision steps is a separate diagnostic mode.

Did we reproduce Jev’s RLCD training?

No. JEVfire was inspired by the community Qwen RLCD demo and Jev’s typed-decision direction. We use frozen pretrained weights and inference-engine caching. The name RLCD on a repository does not establish that its authors used reinforcement learning.