<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Charlie Chen</title>
    <description>The latest articles on DEV Community by Charlie Chen (@charlie_chen_d661f49e69cb).</description>
    <link>https://dev.to/charlie_chen_d661f49e69cb</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3894801%2F832e5656-ea99-4ae2-9f17-effb48ff0c4c.png</url>
      <title>DEV Community: Charlie Chen</title>
      <link>https://dev.to/charlie_chen_d661f49e69cb</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/charlie_chen_d661f49e69cb"/>
    <language>en</language>
    <item>
      <title>What Is Jev AI? A Practical Getting-Started Guide to TypeSafe's Decision Model</title>
      <dc:creator>Charlie Chen</dc:creator>
      <pubDate>Mon, 28 Sep 2026 12:13:23 +0000</pubDate>
      <link>https://dev.to/charlie_chen_d661f49e69cb/what-is-jev-ai-a-practical-getting-started-guide-to-typesafes-decision-model-2gaf</link>
      <guid>https://dev.to/charlie_chen_d661f49e69cb/what-is-jev-ai-a-practical-getting-started-guide-to-typesafes-decision-model-2gaf</guid>
      <description>&lt;h1&gt;
  
  
  What Is Jev AI? A Practical Getting-Started Guide to TypeSafe's Decision Model
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;Jev doesn't chat. It returns a choice, a score, or a yes/no probability your code can branch on. Here's how that works and how to try it in five minutes.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If you've built on top of a large language model, you've probably written this code before: ask the model to "answer only with billing, bug, or account", then parse the reply, then handle the cases where it added a sentence, used a synonym, or broke the JSON. You needed one small branch, and you got a paragraph.&lt;/p&gt;

&lt;p&gt;Jev, a model from TypeSafe AI, takes a different approach. It's not a chatbot, and it doesn't write text at all. You send it the state your application already has, plus a few typed questions. It sends back values your code can use straight away.&lt;/p&gt;

&lt;h2&gt;
  
  
  Jev in one paragraph
&lt;/h2&gt;

&lt;p&gt;TypeSafe announced Jev on 15 September 2026 as its first public "System One" model. The name comes from the idea of fast, intuitive System 1 judgments (as opposed to slow, deliberate System 2 reasoning). These are the cheap decisions software makes all day: which queue does this ticket go to, how urgent is it, should this agent's tool call run? The hosted API opened to everyone on 21 September 2026, with no waitlist. The current public model string is &lt;code&gt;jev-1.13.0&lt;/code&gt;, which is also available through the aliases &lt;code&gt;jev-latest&lt;/code&gt; and &lt;code&gt;jev-preview&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Jev is a closed, hosted model. TypeSafe hasn't released the weights, and TypeSafe says the current version isn't trained to generate text.&lt;/p&gt;

&lt;h2&gt;
  
  
  The three output types
&lt;/h2&gt;

&lt;p&gt;Every question you ask Jev is one of three types:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;choice&lt;/strong&gt;: pick one label from a set you define (up to 255 options). You get the winner plus a probability for each option. It's good for routing, intent classification, and choosing a model.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;score&lt;/strong&gt;: place the input on an ordered rubric of 2 to 10 levels that you describe in words. The result can fall between levels. Use it for urgency, risk, lead quality, or review priority.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;noul&lt;/strong&gt;: a calibrated probability, from 0 to 1, that a yes/no statement is true. Use it for gates like "escalate to a human?" or "is this tool call allowed?"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can ask up to eight questions in one request. They're all evaluated against the same state, so the input cost is shared.&lt;/p&gt;

&lt;p&gt;One detail matters for how you design things: Jev picks the branch, but your application still performs the action. Jev can say "billing". It won't issue the refund.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where Jev fits (and where it doesn't)
&lt;/h2&gt;

&lt;p&gt;The sensible way to think about Jev is as a decision layer that sits between intent and action. Good starting points are narrow judgments that repeat:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Support triage:&lt;/strong&gt; classify the topic, score urgency, decide whether to escalate.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LLM routing:&lt;/strong&gt; send easy requests to a cheaper model and hard ones to a stronger one.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tool-call guardrails:&lt;/strong&gt; score the risk before an agent sends an email or edits a file.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LLM-as-a-judge and RAG checks:&lt;/strong&gt; is this answer grounded, and is this retrieved passage relevant?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What Jev isn't for: drafting, summarizing, explaining, coding, or long reasoning. For that you still want GPT, Claude, or another general model. In practice the pattern is hybrid. Jev decides the branch, and the LLM writes whatever a person will read. The independent guide explains this split in more detail on its page about &lt;a href="https://jevmodel.org/what-is-jev/" rel="noopener noreferrer"&gt;what Jev is&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pricing, briefly
&lt;/h2&gt;

&lt;p&gt;TypeSafe's published price is &lt;strong&gt;$0.042 per million input tokens, and output is free&lt;/strong&gt;, because the response is a typed value rather than generated text. You can pay TypeSafe directly through its Console, or use the same list price on OpenRouter or Vercel AI Gateway.&lt;/p&gt;

&lt;p&gt;There's also &lt;a href="https://jevmodel.org/" rel="noopener noreferrer"&gt;jevmodel.org&lt;/a&gt;, an independent guide and playground for Jev (it isn't affiliated with or operated by TypeSafe). It lets you try Jev in the browser without creating a vendor account:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;10,000 input tokens as a guest, and 100,000 free input tokens when you sign in (about 500 typical requests). No card is required.&lt;/li&gt;
&lt;li&gt;One-time token packs start at $9.90 for 15 million input tokens, and packs never expire. Failed requests aren't charged.&lt;/li&gt;
&lt;li&gt;The same request body as TypeSafe's API, so switching later means changing the base URL.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The site is upfront that its per-token price is higher than going direct. You're paying for convenience, and at high volume TypeSafe or your existing gateway account is cheaper. For evaluating the model, the free tokens are usually more than enough.&lt;/p&gt;

&lt;h2&gt;
  
  
  Your first Jev request
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Step 1: try it without code.&lt;/strong&gt; Open the playground, paste in some text (for example "I was charged twice. Please fix this ASAP."), and add a choice question with a few labels. Check whether the output makes sense for your data before you write any code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: create a key.&lt;/strong&gt; Sign in, open the dashboard, create an API key, and store it on your server as &lt;code&gt;JEVMODEL_API_KEY&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: send the request.&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://jevmodel.org/v1/systemone&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Authorization&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bearer &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;JEVMODEL_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;model&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;jev-latest&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;state&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;I was charged twice. Please fix this ASAP.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;questions&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;category&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;choice&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;instructions&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;What is this ticket about?&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;criteria&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;billing&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;payments&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;technical&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;broken product&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;other&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;other&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
            &lt;span class="p"&gt;},&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;escalate&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;noul&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;instructions&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Should a human review this now?&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A few rules from the docs are worth knowing: &lt;code&gt;state&lt;/code&gt; can be a string or a JSON value up to 8,000 characters, each request takes 1 to 8 questions, and the endpoint allows 120 requests per minute per key. Add an &lt;code&gt;Idempotency-Key&lt;/code&gt; header when you retry. The full walkthrough is in &lt;a href="https://jevmodel.org/how-to-use-jev/" rel="noopener noreferrer"&gt;How to use Jev&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three habits that make Jev useful in production
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Keep answer sets small and stable.&lt;/strong&gt; Name each question after the branch your code will take, not after a vague theme.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Set a threshold in code.&lt;/strong&gt; A noul of 0.55 isn't a decision. Send low-confidence cases to a bigger model or a human.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Measure on your own traffic.&lt;/strong&gt; TypeSafe cites latency of roughly 70–500 ms for System One tasks, but that's a vendor figure. Log inputs, outputs, the model version, and what happened next. Pin &lt;code&gt;jev-1.13.0&lt;/code&gt; once your thresholds are tuned, because aliases can move.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Wrapping up
&lt;/h2&gt;

&lt;p&gt;Jev is interesting because it's so narrow. It won't replace your LLM, but it can take over the fuzzy &lt;code&gt;if&lt;/code&gt; statements you're currently paying a chat model to answer and then parsing. If you have a triage, routing, or guardrail step like that, it's worth an afternoon to test Jev on real examples.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclosure: jevmodel.org is an independent guide and isn't affiliated with, endorsed by, or operated by TypeSafe AI. Jev is a TypeSafe AI product. Facts in this post come from jevmodel.org and TypeSafe's public statements as of September 2026.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>api</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
