[{"data":1,"prerenderedAt":990},["ShallowReactive",2],{"post-jev-typesafe-ai-decisions-applications-en":3,"surround-/en/blog/jev-typesafe-ai-decisions-applications-en":980,"post-translations-28":985},{"id":4,"title":5,"body":6,"canonical_id":963,"category":964,"date_created":965,"date_updated":965,"description":12,"extension":966,"head":967,"image":968,"lang":969,"layout":970,"meta":971,"navigation":972,"ogImage":967,"path":973,"reading_time":363,"robots":967,"schemaOrg":967,"seo":974,"sitemap":976,"stem":978,"__hash__":979},"blog/en/blog/28.jev-typesafe-ai-decisions-applications.md","Jev: an AI model for making decisions in our applications",{"type":7,"value":8,"toc":950},"minimark",[9,13,16,23,26,29,52,55,60,63,85,94,162,179,186,192,197,202,251,254,281,287,589,602,605,652,658,665,671,675,684,687,702,705,708,723,729,734,738,741,745,754,757,768,771,775,783,786,789,792,796,804,815,821,841,844,847,853,857,869,876,885,892,895,902,906,946],[10,11,12],"p",{},"Over the past few days, I have seen Jev, a new AI model, everywhere in my X (Twitter) feed.",[10,14,15],{},"Another new AI model? Yes, but this one is not trying to write better articles, code an application, or replace ChatGPT.",[10,17,18,22],{},[19,20,21],"strong",{},"Jev, TypeSafe's new model, does not generate text."," It answers questions for which we define the possible responses.",[10,24,25],{},"Classifying a customer message, detecting an urgent request, or choosing the next tool to call: our applications and AI agents make many small decisions. We often use an LLM for this work, adding latency and cost to every call, even when all we need is a yes or no answer or a category selected from a predefined list.",[10,27,28],{},"Jev is designed for this job. It receives context and questions, then returns choices, scores, and probabilities that the application can use directly. Because its responses are limited to the allowed options, TypeSafe presents it as a model with “no hallucinations.”",[10,30,31,32,35,36,39,40,43,44,51],{},"TypeSafe reports response times of ",[19,33,34],{},"70 to 500 milliseconds",", up to around ",[19,37,38],{},"200 times faster and 400 times cheaper"," than the LLMs compared in its evaluations. The price is ",[19,41,42],{},"$0.042 per million input tokens",", with no charge for output tokens. This is the promise behind its first “System One” model, ",[45,46,50],"a",{"href":47,"rel":48},"https://typesafe.ai/blog/introducing-system-one-models-and-jev",[49],"nofollow","introduced on September 15, 2026",".",[10,53,54],{},"I recently gained access to the service and am considering the best ways to use it in my projects. Here is how it works and what I plan to explore.",[56,57,59],"h2",{"id":58},"what-jev-actually-does","What Jev actually does",[10,61,62],{},"To use Jev, we provide two elements:",[64,65,66,77],"ul",{},[67,68,69,70,76],"li",{},"A ",[19,71,72],{},[73,74,75],"code",{},"state",": the data to analyze. This can be a single message or a collection of information.",[67,78,79,84],{},[19,80,81],{},[73,82,83],{},"questions",": what we want to know about that state, with the possible responses defined in advance.",[10,86,87,88,93],{},"Jev supports ",[45,89,92],{"href":90,"rel":91},"https://docs.typesafe.ai/primitives",[49],"three types of questions",":",[95,96,97,113],"table",{},[98,99,100],"thead",{},[101,102,103,107,110],"tr",{},[104,105,106],"th",{},"Type",[104,108,109],{},"What is it for?",[104,111,112],{},"What Jev returns",[114,115,116,132,147],"tbody",{},[101,117,118,126,129],{},[119,120,121],"td",{},[19,122,123],{},[73,124,125],{},"Choice",[119,127,128],{},"Selecting one of several options: bug, billing, sales request…",[119,130,131],{},"The selected option and a probability for every option.",[101,133,134,141,144],{},[119,135,136],{},[19,137,138],{},[73,139,140],{},"Score",[119,142,143],{},"Rating against a described scale: minor issue, degraded feature, blocked usage…",[119,145,146],{},"A score on that scale and the probabilities associated with each level.",[101,148,149,156,159],{},[119,150,151],{},[19,152,153],{},[73,154,155],{},"Noul",[119,157,158],{},"Answering a yes-or-no question: is this message asking for a refund?",[119,160,161],{},"A probability between 0 and 1 that the answer is yes.",[10,163,164,165,167,168,170,171,174,175,178],{},"The difference between ",[73,166,140],{}," and ",[73,169,155],{}," matters. The first indicates ",[19,172,173],{},"a degree",", such as the severity of a problem. The second indicates ",[19,176,177],{},"the probability that a statement is true",": a value of 0.5 means that the model is uncertain between yes and no.",[10,180,181,167,183,185],{},[73,182,125],{},[73,184,140],{}," responses also include a confidence indicator, summarizing whether the probabilities are concentrated on one response or spread across several possibilities.",[10,187,188,191],{},[19,189,190],{},"Multiple questions can be evaluated in parallel within a single request."," They share the same context, but each one is evaluated independently. The same context can therefore support several decisions in one call, without sending it repeatedly or waiting for answers one after another. The application can then combine the results to decide what happens next.",[193,194,196],"h3",{"id":195},"an-example-routing-a-support-message","An example: routing a support message",[10,198,199,200,93],{},"Imagine that a user sends the following message. It becomes our ",[73,201,75],{},[203,204,209],"pre",{"className":205,"code":206,"language":207,"meta":208,"style":208},"language-json shiki shiki-themes enchanter-dark","{\n  \"message\": \"My reports have not opened since this morning. I have a client presentation in two hours. Can you help me?\"\n}\n","json","",[73,210,211,220,245],{"__ignoreMap":208},[212,213,216],"span",{"class":214,"line":215},"line",1,[212,217,219],{"class":218},"syxy-","{\n",[212,221,223,226,230,233,235,238,242],{"class":214,"line":222},2,[212,224,225],{"class":218},"  \"",[212,227,229],{"class":228},"sL3Wm","message",[212,231,232],{"class":218},"\"",[212,234,93],{"class":218},[212,236,237],{"class":218}," \"",[212,239,241],{"class":240},"sloqg","My reports have not opened since this morning. I have a client presentation in two hours. Can you help me?",[212,243,244],{"class":218},"\"\n",[212,246,248],{"class":214,"line":247},3,[212,249,250],{"class":218},"}\n",[10,252,253],{},"I want to obtain three pieces of information:",[64,255,256,265,273],{},[67,257,258,264],{},[19,259,260,261,263],{},"Topic (",[73,262,125],{},")",": bug, billing, feature request, or other.",[67,266,267,272],{},[19,268,269,270,263],{},"Reported impact (",[73,271,140],{},": 0 for a minor inconvenience, 1 for a degraded feature, and 2 for a blocked task.",[67,274,275,280],{},[19,276,277,278,263],{},"Urgent deadline (",[73,279,155],{},": does the message mention a near-term deadline that requires attention?",[10,282,283,284],{},"Here is a simplified excerpt of what Jev could return. ",[19,285,286],{},"The values are fictional and only illustrate how it works.",[203,288,290],{"className":205,"code":289,"language":207,"meta":208,"style":208},"{\n  \"answers\": {\n    \"topic\": {\n      \"choice\": \"bug\",\n      \"probabilities\": {\n        \"bug\": 0.92,\n        \"billing\": 0.02,\n        \"feature_request\": 0.04,\n        \"other\": 0.02\n      }\n    },\n    \"impact\": {\n      \"score\": 1.85,\n      \"probabilities\": {\n        \"0\": 0,\n        \"1\": 0.15,\n        \"2\": 0.85\n      }\n    },\n    \"urgent_deadline\": {\n      \"noul\": 0.98\n    }\n  }\n}\n",[73,291,292,296,310,324,347,361,379,396,413,428,434,440,454,471,484,501,518,533,538,543,557,572,578,584],{"__ignoreMap":208},[212,293,294],{"class":214,"line":215},[212,295,219],{"class":218},[212,297,298,300,303,305,307],{"class":214,"line":222},[212,299,225],{"class":218},[212,301,302],{"class":228},"answers",[212,304,232],{"class":218},[212,306,93],{"class":218},[212,308,309],{"class":218}," {\n",[212,311,312,315,318,320,322],{"class":214,"line":247},[212,313,314],{"class":218},"    \"",[212,316,317],{"class":228},"topic",[212,319,232],{"class":218},[212,321,93],{"class":218},[212,323,309],{"class":218},[212,325,327,330,333,335,337,339,342,344],{"class":214,"line":326},4,[212,328,329],{"class":218},"      \"",[212,331,332],{"class":228},"choice",[212,334,232],{"class":218},[212,336,93],{"class":218},[212,338,237],{"class":218},[212,340,341],{"class":240},"bug",[212,343,232],{"class":218},[212,345,346],{"class":218},",\n",[212,348,350,352,355,357,359],{"class":214,"line":349},5,[212,351,329],{"class":218},[212,353,354],{"class":228},"probabilities",[212,356,232],{"class":218},[212,358,93],{"class":218},[212,360,309],{"class":218},[212,362,364,367,369,371,373,377],{"class":214,"line":363},6,[212,365,366],{"class":218},"        \"",[212,368,341],{"class":228},[212,370,232],{"class":218},[212,372,93],{"class":218},[212,374,376],{"class":375},"sj-18"," 0.92",[212,378,346],{"class":218},[212,380,382,384,387,389,391,394],{"class":214,"line":381},7,[212,383,366],{"class":218},[212,385,386],{"class":228},"billing",[212,388,232],{"class":218},[212,390,93],{"class":218},[212,392,393],{"class":375}," 0.02",[212,395,346],{"class":218},[212,397,399,401,404,406,408,411],{"class":214,"line":398},8,[212,400,366],{"class":218},[212,402,403],{"class":228},"feature_request",[212,405,232],{"class":218},[212,407,93],{"class":218},[212,409,410],{"class":375}," 0.04",[212,412,346],{"class":218},[212,414,416,418,421,423,425],{"class":214,"line":415},9,[212,417,366],{"class":218},[212,419,420],{"class":228},"other",[212,422,232],{"class":218},[212,424,93],{"class":218},[212,426,427],{"class":375}," 0.02\n",[212,429,431],{"class":214,"line":430},10,[212,432,433],{"class":218},"      }\n",[212,435,437],{"class":214,"line":436},11,[212,438,439],{"class":218},"    },\n",[212,441,443,445,448,450,452],{"class":214,"line":442},12,[212,444,314],{"class":218},[212,446,447],{"class":228},"impact",[212,449,232],{"class":218},[212,451,93],{"class":218},[212,453,309],{"class":218},[212,455,457,459,462,464,466,469],{"class":214,"line":456},13,[212,458,329],{"class":218},[212,460,461],{"class":228},"score",[212,463,232],{"class":218},[212,465,93],{"class":218},[212,467,468],{"class":375}," 1.85",[212,470,346],{"class":218},[212,472,474,476,478,480,482],{"class":214,"line":473},14,[212,475,329],{"class":218},[212,477,354],{"class":228},[212,479,232],{"class":218},[212,481,93],{"class":218},[212,483,309],{"class":218},[212,485,487,489,492,494,496,499],{"class":214,"line":486},15,[212,488,366],{"class":218},[212,490,491],{"class":228},"0",[212,493,232],{"class":218},[212,495,93],{"class":218},[212,497,498],{"class":375}," 0",[212,500,346],{"class":218},[212,502,504,506,509,511,513,516],{"class":214,"line":503},16,[212,505,366],{"class":218},[212,507,508],{"class":228},"1",[212,510,232],{"class":218},[212,512,93],{"class":218},[212,514,515],{"class":375}," 0.15",[212,517,346],{"class":218},[212,519,521,523,526,528,530],{"class":214,"line":520},17,[212,522,366],{"class":218},[212,524,525],{"class":228},"2",[212,527,232],{"class":218},[212,529,93],{"class":218},[212,531,532],{"class":375}," 0.85\n",[212,534,536],{"class":214,"line":535},18,[212,537,433],{"class":218},[212,539,541],{"class":214,"line":540},19,[212,542,439],{"class":218},[212,544,546,548,551,553,555],{"class":214,"line":545},20,[212,547,314],{"class":218},[212,549,550],{"class":228},"urgent_deadline",[212,552,232],{"class":218},[212,554,93],{"class":218},[212,556,309],{"class":218},[212,558,560,562,565,567,569],{"class":214,"line":559},21,[212,561,329],{"class":218},[212,563,564],{"class":228},"noul",[212,566,232],{"class":218},[212,568,93],{"class":218},[212,570,571],{"class":375}," 0.98\n",[212,573,575],{"class":214,"line":574},22,[212,576,577],{"class":218},"    }\n",[212,579,581],{"class":214,"line":580},23,[212,582,583],{"class":218},"  }\n",[212,585,587],{"class":214,"line":586},24,[212,588,250],{"class":218},[10,590,591,592,594,595,598,599,51],{},"The application immediately has the useful information: a probable ",[19,593,341],{},", an impact close to ",[19,596,597],{},"“blocked task,”"," and an ",[19,600,601],{},"urgent deadline",[10,603,604],{},"It can route the message to technical support and move it up the list of requests that need attention. If a customer response needs to be written, a generative model can take over.",[203,606,610],{"className":607,"code":608,"language":609,"meta":208,"style":208},"language-mermaid shiki shiki-themes enchanter-dark","flowchart TD\n    A[\"Message received\"] --> B[\"Jev analyzes the topic, impact, and urgency\"]\n    B --> C{\"Is the result clear enough?\"}\n    C -- \"No\" --> D[\"Human review\"]\n    C -- \"Yes\" --> E[\"The application classifies and prioritizes the message\"]\n    E --> F{\"Is a written response required?\"}\n    F -- \"Yes\" --> G[\"An LLM prepares a draft\"]\n    F -- \"No\" --> H[\"Processing continues\"]\n","mermaid",[73,611,612,617,622,627,632,637,642,647],{"__ignoreMap":208},[212,613,614],{"class":214,"line":215},[212,615,616],{},"flowchart TD\n",[212,618,619],{"class":214,"line":222},[212,620,621],{},"    A[\"Message received\"] --> B[\"Jev analyzes the topic, impact, and urgency\"]\n",[212,623,624],{"class":214,"line":247},[212,625,626],{},"    B --> C{\"Is the result clear enough?\"}\n",[212,628,629],{"class":214,"line":326},[212,630,631],{},"    C -- \"No\" --> D[\"Human review\"]\n",[212,633,634],{"class":214,"line":349},[212,635,636],{},"    C -- \"Yes\" --> E[\"The application classifies and prioritizes the message\"]\n",[212,638,639],{"class":214,"line":363},[212,640,641],{},"    E --> F{\"Is a written response required?\"}\n",[212,643,644],{"class":214,"line":381},[212,645,646],{},"    F -- \"Yes\" --> G[\"An LLM prepares a draft\"]\n",[212,648,649],{"class":214,"line":398},[212,650,651],{},"    F -- \"No\" --> H[\"Processing continues\"]\n",[10,653,654,657],{},[19,655,656],{},"Jev interprets the message, the application organizes its processing, and a generative model writes when necessary."," Jev can therefore be integrated into an existing application, with or without an agent.",[10,659,660],{},[661,662],"img",{"alt":663,"src":664},"The Jev Playground with a state, a Noul question, and the returned probability","/img/blog/jev-playground.webp",[10,666,667],{},[668,669,670],"em",{},"The Jev Playground lets you test a state and its questions before integrating them into an application.",[56,672,674],{"id":673},"a-new-system-one-model","A new “System One” model",[10,676,677,678,683],{},"The ",[45,679,682],{"href":680,"rel":681},"https://docs.typesafe.ai/concepts/system-one",[49],"System One name"," refers to the distinction popularized by Daniel Kahneman between fast, intuitive thinking and slower, deliberate reasoning.",[10,685,686],{},"TypeSafe applies this idea to focused judgments. Recognizing a refund request is not the same job as building a technical migration plan.",[10,688,689,690,693,694,697,698,51],{},"The company describes an architecture that evaluates outputs in parallel and a training method called ",[19,691,692],{},"RLCD",", or ",[668,695,696],{},"Reinforcement Learning for Calibrated Decisions",". One objective is to produce probabilities that better reflect the model's uncertainty, as explained in the ",[45,699,701],{"href":680,"rel":700},[49],"System One documentation",[10,703,704],{},"LLMs can already classify text and return structured data. The novelty is therefore not the ability to obtain JSON. It lies in a model specialized for this task that gives up open-ended generation.",[10,706,707],{},"This specialization opens up use cases where speed and volume matter: classifying a large number of comments, routing a request during a user journey, or choosing among the tools available to an agent.",[10,709,710,713,714,718,719,722],{},[19,711,712],{},"Jev's other advantage is its price:"," only ",[45,715,42],{"href":716,"rel":717},"https://docs.typesafe.ai/models",[49],", with no charge for output tokens. To give a concrete example, analyzing 100,000 messages of 1,000 tokens each, including the questions, would cost ",[19,720,721],{},"$4.20 in Jev calls",". That price makes it possible to consider using the model across large volumes of data.",[10,724,725],{},[661,726],{"alt":727,"src":728},"Jev represented as a stopwatch next to a stack of messages to process","/img/blog/jev-vitesse-volume-cout.webp",[10,730,731],{},[668,732,733],{},"Speed, volume, and cost: the three arguments that make Jev interesting for repeated decisions.",[56,735,737],{"id":736},"three-ideas-i-am-considering-for-my-projects","Three ideas I am considering for my projects",[10,739,740],{},"Several tasks in my projects already rely on understanding language in this way: identifying what a customer is expressing, recognizing useful information, or determining the topic of a request. These are the first ideas I want to explore with Jev.",[193,742,744],{"id":743},"_1-sorting-customer-reviews-in-begonia","1. Sorting customer reviews in Begonia",[10,746,747,748,753],{},"In a local SEO product such as ",[45,749,752],{"href":750,"rel":751},"https://begonia.pro/",[49],"Begonia.pro",", customer reviews provide useful material for this type of model to analyze and classify.",[10,755,756],{},"I could test Jev with questions such as:",[64,758,759,762,765],{},[67,760,761],{},"Does the review mention the welcome, waiting time, price, or quality of service?",[67,763,764],{},"Does it describe both a positive experience and a problem in the same message?",[67,766,767],{},"Does it report a situation that the business should review as a priority?",[10,769,770],{},"The objective would be to help the business identify recurring topics. The code would remain responsible for counting them, while a generative model would draft responses, subject to approval before publication.",[193,772,774],{"id":773},"_2-qualifying-information-collected-for-prospecting","2. Qualifying information collected for prospecting",[10,776,777,778,782],{},"I previously tested a local model (",[45,779,781],{"href":780},"/en/blog/local-ai-lm-studio-gemma-prospecting","Google's Gemma",") in a prospecting prototype to reduce costs.",[10,784,785],{},"Jev could step in after data collection to assess specific criteria: does the company offer a software product? Does it describe a use case for professionals? Does it mention integrations with other tools?",[10,787,788],{},"These signals could feed filters in my tool and help me select the companies worth reviewing.",[10,790,791],{},"Its speed would let me qualify the information much faster than with the local model, while keeping costs under control.",[193,793,795],{"id":794},"_3-choosing-the-right-tool-in-my-shopify-prototype","3. Choosing the right tool in my Shopify prototype",[10,797,798,799,803],{},"In ",[45,800,802],{"href":801},"/en/blog/commerce-agents-claude-shopify","my agentic commerce prototype with Claude and Shopify",", Claude selects which tools to call to search for products, retrieve store information, or manage the cart.",[10,805,806,809,810,51],{},[19,807,808],{},"Jev could handle some of these decisions: which tool should be called now?"," Selecting the next tool is one of the ",[45,811,814],{"href":812,"rel":813},"https://vercel.com/changelog/typesafe-ai-jev-now-available-on-ai-gateway",[49],"use cases presented for Jev",[10,816,817,818,820],{},"I would provide the conversation context and a list of available tools with their descriptions. A ",[73,819,125],{}," question would let it select the appropriate tool:",[64,822,823,829,835],{},[67,824,825,826,51],{},"“I am looking for a moisturizing facial treatment” → ",[19,827,828],{},"search the catalog",[67,830,831,832,51],{},"“Do you deliver to Belgium?” → ",[19,833,834],{},"check the shipping policy",[67,836,837,838,51],{},"“What have I already added?” → ",[19,839,840],{},"read the current cart",[10,842,843],{},"The choice would be limited to tools that are actually available in the application. I would also include an option to hand control back to Claude when the request requires clarification or more advanced reasoning.",[10,845,846],{},"The application would then prepare the required arguments when they are already available or can be derived from the context. A generative model could still step in for requests that require more open-ended interpretation. The application would execute the selected tool with its usual safeguards, then Claude could use the result to compare products, advise the customer, or write a response.",[10,848,849,852],{},[19,850,851],{},"The goal would be to reserve generative model calls for the steps that genuinely require them",", while using Jev for simple, frequent tool-selection decisions.",[56,854,856],{"id":855},"limitations-to-keep-in-mind","Limitations to keep in mind",[10,858,859,860,863,864,868],{},"Jev specializes in focused decisions. ",[19,861,862],{},"It does not replace a generative model"," for writing a response, explaining a choice, or carrying out complex reasoning. It currently accepts text, but not images, audio, or video directly. ",[45,865,867],{"href":716,"rel":866},[49],"TypeSafe's documentation"," also states that it performs better in English than in other languages.",[10,870,871,872,875],{},"The “no hallucinations” promise also needs clarification: Jev cannot invent an answer outside the options provided, ",[19,873,874],{},"but it can select the wrong one",". The quality of the questions, categories, and context therefore remains essential. Providing an “other” option or human review helps handle ambiguous situations.",[10,877,878,879,884],{},"Finally, the reported speed and cost improvements come from ",[45,880,883],{"href":881,"rel":882},"https://evals.typesafe.ai/",[49],"TypeSafe's evaluations",". They depend on the tasks and models being compared and will not necessarily appear in the same proportions in every application.",[10,886,887,888,891],{},"The proposition is nevertheless compelling: ",[19,889,890],{},"a generative model for writing and reasoning, Jev for focused decisions, and code to organize the whole system",". Each component can be used where it brings the most value.",[10,893,894],{},"What small, repetitive decision in your application would you like to delegate without handing the entire workflow over to an agent?",[10,896,897,898,51],{},"📌 Do you want to integrate AI into a product or automate a business process? I can support you from initial scoping through the first experiments with my ",[45,899,901],{"href":900},"/en/services/product-engineering","Product Engineering services",[56,903,905],{"id":904},"further-reading","Further reading",[64,907,908,915,922,930,938],{},[67,909,910,911,51],{},"TypeSafe, ",[45,912,914],{"href":47,"rel":913},[49],"Introducing System One Models and Jev",[67,916,910,917,51],{},[45,918,921],{"href":919,"rel":920},"https://docs.typesafe.ai/introduction/quickstart",[49],"documentation and quickstart",[67,923,924,925,51],{},"Sydney Runkle, ",[45,926,929],{"href":927,"rel":928},"https://x.com/sydneyrunkle/status/2100754364545761643",[49],"“Building a Harness with Jev”",[67,931,932,933,51],{},"Flavio Copes, ",[45,934,937],{"href":935,"rel":936},"https://flaviocopes.com/jev/",[49],"a detailed introduction to Jev",[67,939,940,941,51],{},"Rory Garton-Smith, ",[45,942,945],{"href":943,"rel":944},"https://easyjev.app/",[49],"EasyJev interactive demos",[947,948,949],"style",{},"html pre.shiki code .syxy-, html code.shiki .syxy-{--shiki-default:#BFBDC1}html pre.shiki code .sL3Wm, html code.shiki .sL3Wm{--shiki-default:#80C29C}html pre.shiki code .sloqg, html code.shiki .sloqg{--shiki-default:#A9D3BB}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sj-18, html code.shiki .sj-18{--shiki-default:#E7B566}",{"title":208,"searchDepth":222,"depth":222,"links":951},[952,955,956,961,962],{"id":58,"depth":222,"text":59,"children":953},[954],{"id":195,"depth":247,"text":196},{"id":673,"depth":222,"text":674},{"id":736,"depth":222,"text":737,"children":957},[958,959,960],{"id":743,"depth":247,"text":744},{"id":773,"depth":247,"text":774},{"id":794,"depth":247,"text":795},{"id":855,"depth":222,"text":856},{"id":904,"depth":222,"text":905},"28","ai","2026-09-18T08:00:00.000Z","md",null,"/img/blog/blog28.jpg","en","page",{},true,"/en/blog/jev-typesafe-ai-decisions-applications",{"description":975,"title":5},"TypeSafe's Jev classifies, scores, and routes data in a few hundred milliseconds. An introduction, pricing, and practical use cases for my projects.",{"loc":973,"lastmod":977},"2026-09-18T10:00:00+02:00","en/blog/28.jev-typesafe-ai-decisions-applications","-fU6VFgxsIIUHxes9CCKEUuE1rNLEElONNQCh56zyvE",[967,981],{"title":982,"path":983,"stem":984,"children":-1},"How ChatGPT with Codex and Computer Use Became My QA Agent","/en/blog/chatgpt-computer-use-qa-agent","en/blog/27.chatgpt-computer-use-qa-agent",[986,987],{"path":973,"lang":969},{"path":988,"lang":989},"/fr/blog/jev-typesafe-decisions-ia-applications","fr",1789723903721]