Your Agent Burns LLM Money on Switch Statements. Jev Claims 444x Less TypeSafe AI released Jev, a "System One" model that answers structured choice, score, and boolean questions instead of generating text, claiming 193.6x faster and 444.6x cheaper performance than frontier LLMs on agent routing tasks. Rivet's Nathan Flurry characterized the model as "just a really smart switch statement" that does not replace GPT or Claude, and TypeSafe's own launch blog concedes the headline multiples represent the "higher end of real world gains" from a "highly simplified" demo. Jev became available on Vercel's AI Gateway on 16 September, with direct API keys in early access. You pull last month's model calls for your agent and sort them by what they were for. Some are easy to justify. The agent wrote a patch, drafted a reply to a customer, summarised a stack trace. Then there is everything else. The agent asked a frontier model which tool to use next, and whether a failed step deserved a retry. It asked whether rm -rf ./build was safe to run. It asked if the JSON a tool sent back looked sane. Each of those went out at frontier prices and came back as a handful of tokens you parsed into an enum. Look at the answers those calls can give. Pick one of four tools. Continue, retry, ask the user or stop. Safe enough, or not. A fixed set of cases, and some judgment to pick the right one. You have written that shape a thousand times. It is a switch statement. Nathan Flurry of Rivet, writing on X https://x.com/NathanFlurry about a new model from TypeSafe AI, put it plainly: "jev is just a really smart switch statement". He also wrote "jev does not replace gpt / claude". He is right on both counts. TypeSafe's co-founder Diogo Almeida announced Jev on X https://x.com/CompleteSkeptic on 15 September You give it a structured text state and a set of questions. The docs https://docs.typesafe.ai/introduction define three question types. Choice picks one option. Score places the state on an ordered scale. Noul returns a yes/no probability, and the AI SDK calls it boolean . You can mix all three in one request, and they are evaluated in parallel. What Jev gives up is string generation. It cannot write a sentence, a query or a file path. The homepage also claims "Zero Hallucinations". TypeSafe's own launch blog https://typesafe.ai/blog/introducing-system-one-models-and-jev explains what that means: "Our number is not empirical. Schema matching is guaranteed". Every answer fits the options you declared. It can still pick the wrong option. Direct API keys from TypeSafe are in early access. On 16 September, Vercel's changelog https://vercel.com/changelog/typesafe-ai-jev-now-available-on-ai-gateway said Jev "is now available on AI Gateway". The homepage banner reads "193.6x Faster, 444.6x Cheaper". Its footnote says the multiples are "based on workflows for System One tasks". The page also shows a side-by-side example. Jev answers in 0.114s for $0.000081. The LLM answers in 8.566s for $0.013880. Those two figures divide to about 75x faster and 171x cheaper, so the banner is not the ratio of that one run. The launch blog qualifies the demo itself. It calls the query "highly simplified", says the shorter input "paints our model in an advantageous light", and describes the banner figure as "the higher end of real world gains". Treat 444.6x as a best case, because the vendor does. The launch blog's pricing shows where a gap that size can come from. Input is $0.042 per million tokens $42 per billion . Output tokens are listed as "FREE too cheap to meter ". For comparison, The Register https://www.theregister.com/ai-and-ml/2026/09/16/typesafe-ai-debuts-model-for-machines-that-plays-doom/5296711 gives GPT-5.6 Terra's price as $2.00 input and $12 output per million. That is about 48x on input, and the output side has no ratio because one side is zero. TypeSafe quotes end-to-end latency of 70ms to 500ms. TypeSafe also publishes workflow evals https://evals.typesafe.ai/ . Two things before the numbers. The evals are vendor-run, and the blog concedes they may carry "some bias". And "accuracy" means agreement with reference labels "generated via an average of the responses of GPT-6 Astra and Claude Fable 5.1, both at high thinking". The other models ran at their provider's default reasoning. A score here tells you how often a model agrees with two frontier models, which is a narrower thing than how often it is right. Aggregate results across the four workflows, for six of the nine models on the page, vendor-reported: | Model | Accuracy | Cost per case | Latency | |---|---|---|---| | Jev | 67.8% | $0.0004 | 0.4s | | GPT-5.6 Luna | 66.8% | $0.0033 | 12.9s | | GPT-5.6 Terra | 67.9% | $0.0304 | 10.1s | | GPT-5.6 Sol | 74.1% | $0.0836 | 23.3s | | Claude Sonnet 5 | 67.8% | $0.1174 | 78.1s | | Claude Opus 5 | 73.1% | $0.1761 | 37.8s | Start with Terra, because the accuracy is level: 67.8% against 67.9%. On these numbers Jev costs about 1/76th as much per case and answers about 25 times faster. The costs are rounded to four decimal places, so read 76x as approximate. Claude Sonnet 5 matches Jev exactly at 67.8%, for about 294 times the cost per case and 195 times the latency. Now Sol. It is 6.3 points more accurate than Jev and about 209 times more expensive per case. The only row in that table whose multiple comes near the banner's 444.6x is Claude Opus 5, at about 440x, and Opus 5 is the second most accurate model in the table. The same eval page tested each model two ways: one big prompt, and a workflow that decomposes the task into Choice, Score and Noul questions. Every LLM got more accurate, cheaper and faster in workflow mode. GPT-5.6 Luna went from 51.9% to 66.8%. Put that next to the table. Decomposing the task bought Luna 14.9 points. Moving the decomposed workflow from Luna to Jev bought one more point and an 8x lower cost per case. That changes the order of the work. You can decompose today, with the model you already call. Break "what should the agent do now?" into small typed questions and combine the answers in your own code. The docs call it "atomic questions, composed in code". Once that is done, the model question gets narrow: for these atomic questions, which model agrees with your labels often enough at the lowest cost? Vercel's changelog lists the agent use cases it has in mind: selecting tools or subagents, the next action continue, retry, ask the user, halt , urgency or risk before an operation, and validating outputs and safeguards. Guillermo Rauch, Vercel's CEO, wrote on X https://x.com/rauchg about fx, a Vercel tool whose default auto mode runs a safety reviewer on every command. That reviewer "runs on GPT Luna today", he wrote, and Jev is "likely new default". Likely, as of that post. The design is one decision call per agent step. It asks every decision question in parallel. Your code branches on the answers. Anything that needs words stays on the language model: tool arguments, search queries, replies, patches. So does any decision Jev is not confident about. The saving comes from calls that already exist only to decide, like the retry check or the command reviewer. If one LLM call picks a tool and writes its arguments today, moving the pick to Jev adds a request. That pays off only when the pick lets you skip the LLM call or send the arguments to a smaller, cheaper model. Install the SDK and the TypeSafe provider https://ai-sdk.dev/providers/ai-sdk-providers/typesafe-ai : pnpm add ai@7 @ai-sdk/typesafe-ai export TYPESAFE AI API KEY=your-key The code below type-checks against ai 7.0.105 and @ai-sdk/typesafe-ai 3.0.2, with allowImportingTsExtensions on for the ./decide.ts import. It has not been run against the live API, and direct TypeSafe keys are early access. askJev sends all three questions in one request: js // decide.ts import { typeSafeAi } from "@ai-sdk/typesafe-ai"; import { experimental evaluate } from "ai"; export type AgentState = { goal: string; lastObservation: string; pendingCommand: string; }; export function askJev s: AgentState { return experimental evaluate { model: typeSafeAi.evaluationModel "jev-latest" , state: s, questions: { nextTool: { type: "choice", instructions: "Which tool should the agent use next?", criteria: { search docs: { includes: "Product questions" }, run shell: { includes: "Builds", "Tests" }, edit file: "Code changes" , none: null, }, }, nextAction: { type: "choice", instructions: "What should the loop do now?", criteria: { continue: "Last step worked, goal not met" , retry: "Last step failed transiently" , ask user: "Goal is unclear or needs consent" , stop: "Goal is met" , }, }, risk: { type: "score", instructions: "How risky is the pending command?", criteria: "Read-only", "Reversible change", "Deletes data or touches production", , }, }, } ; } state is the agent's current situation as a plain object, and pendingCommand is whatever the last LLM turn proposed to run. Score levels are ordered, least severe first, as in the provider docs' example. A Choice question takes up to 255 options and a Score question takes 2 to 10 levels. answers.nextTool.choice comes back typed as the union of your option names, so a misspelled option in a comparison is a compile error. The branching needs a few types of its own: // decide.ts, continued type Meta = { typesafe?: { confidence?: Record