TypeSafe Mario
★ 458▲ 3fhshaik/typesafe-mario
Jev picks NES controller inputs for Super Mario Bros. from emulator state, with no screenshots.
Turns a decision model into a chat model by asking which symbol comes next, then sampling from the returned distribution.
View on GitHub →Hands-on review
Asks which symbol comes next and samples from the answer, turning a decision model into a text generator. It works, and it is one request per symbol.
Good for
Watch out for
Tested Sep 21, 2026 at d58abd51aef6 · Python 3.12 in Docker; its 158 tests, a live reply against the real API, and a stand-in to read every request
How we reviewed this: we installed it in Docker on Python 3.12, ran its tests, asked it a question against the real API, then pointed it at a stand-in that logged every request so we could read what a reply is made of.
Jev never writes text. jevchat makes it write text anyway, by asking a different question:
Given the user’s question and the reply written so far, which symbol comes next?
The options are an alphabet plus a stop symbol; the answer’s probabilities become a distribution; the sampler draws from it, appends, and asks again. Ask it something and a sentence appears one piece at a time:
$ jevchat ask "do people need water?"
indeed.
That is the whole trick, and it is a good demonstration of something worth internalising: a Choice question over 89 printable characters is a general text generator, if you are willing to pay for one request per character.
We pointed it at a stand-in and read the traffic. Each step sends two questions — a noul, “Is the reply already finished?”, and a choice over the alphabet — with a state that carries the task description, the question, the answer so far, and the earlier conversation:
{"task": "A correct English answer to `question` is being written out left to right.
`answer_so_far` is exactly the text written so far, character for character;
`conversation` is what was said earlier in the chat …"}
So the cost is one request per symbol, and the input grows as the reply does. A short answer is a handful of requests; a paragraph is hundreds. The alphabets make that trade explicit — ascii spells anything at one call per character, bigrams has 7,570 options and halves the steps, and the word lists trade spelling for vocabulary.
Six strategies sit on top: plain choice, bisect (binary search over the alphabet), buckets (for alphabets past the 255-option limit), beam, refine and an ensemble mode that averages repeated draws. --no-shuffle-criteria exists so you can see how much option order matters, which is a thoughtful thing to expose.
158 tests, all passing, none of them touching the network — the README says only jevchat bench hits the API, and that holds. The client is a single file, the alphabets are data, the config layers defaults, a TOML file, the environment and CLI flags in that order, and api_base is configurable, which is how we captured the traffic above.
For a project created on 20 September with nine commits, the test discipline is unusual. What it does not have is a licence file: nine commits, a public repository, and no terms, which means nobody may reuse any of it. That is the one thing to fix.
Keep it as an experiment and it is a good one. It makes the shape of the model concrete — ask a closed question, get a calibrated distribution, do something with the distribution — and it is a fun way to feel the difference between a model that picks and a model that writes.
Do not put it near a product. One request per symbol is not a pricing quirk, it is the design, and text generation is the job the other kind of model already does well. The README agrees; we are only saying it twice because the demo is charming enough to be misread.
For the real use of a Choice question, see the roundup; for the opposite experiment — a general model made to answer like this one — see OpenJev and LLM2Jev.
See how it compares with other tools in Best Jev tools, tested hands-on.
Review updated Sep 21, 2026. Numbers quoted from the project are its author's own; we don't publish our own measurements of Jev.
fhshaik/typesafe-mario
Jev picks NES controller inputs for Super Mario Bros. from emulator state, with no screenshots.
dabit3/jev-experiments
Latency-focused demos from Nader Dabit, each app in its own directory with its own README. No licence file at the time of writing.
RomanSlack/jev-drone
Camera-only quadrotor in MuJoCo with Jev making judgment calls at about 2.5 Hz.
New Jev releases, pricing changes, and the best new projects, once a week. No spam; unsubscribe anytime.
Powered by Buttondown. See our privacy policy.