Jev is an AI model that, when you enter text, returns a choice, a score, or the probability of Yes/No. It does not generate text. It suits uses where judgments such as routing inquiries are repeated inside an app. The price is $0.042 per 1 million input tokens, and output is free.

JEV / SYSTEM ONE

From text to decisions your app can use.

You send text. You get back values in a fixed format.

Input: state + questions

"The download button for my invoice
doesn't respond when I click it."

Candidates and criteria are also passed

Billing / Technical / Pending review

Jev

Decides from the meaning of the text

↓

Output: a decision in a fixed format

Choice

One candidate

Score

A value on the scale

Noul

Probability of Yes

Your app decides what happens next

Show the candidate / Send to human review

Diagram of how it works. Your app controls execution permissions and conditions.

1. What Is Jev?

TypeSafe announced early access to Jev on September 15, 2026. Rather than a chat that returns long explanations, it is designed for judgments inside an app, such as deciding "which team should handle this" or "how well this matches the criteria."

Its key feature is that the shape of the returned values is fixed. However, a response in the correct format can still be a wrong judgment. If you read the announcement's phrase "no hallucinations" as meaning it answers correctly for any content, you will use it incorrectly.

TypeSafe calls Jev a "System One model." According to the announcement, the name is the company's own, drawn from the distinction in the book Thinking, Fast and Slow by psychologist Daniel Kahneman between fast, intuitive "System 1" and slower, deliberate "System 2." It is not a unified performance grade for AI as a whole. The official System One explanation describes it as a model that understands natural language and returns typed judgments that software can use directly.

The name Jev honors economist William Stanley Jevons. It expresses the idea that, as the cost of intelligence falls, its uses grow by orders of magnitude, much like the Jevons paradox, in which efficiency gains increase demand instead of reducing it (Will AI Wipe Out White-Collar Jobs?).

state
The material to judge. Text or JSON-formatted data. Put in the body of the inquiry, items the user selected, background information for classification, and so on.
questions
What to decide. A question such as "which team should this go to?" along with candidates and judgment criteria.

Because the output options are set in advance, you do not need a step that extracts a category name from text such as "it's probably the technical team." On the other hand, it is not suited to producing long text such as replies, code, or reasoning. If you combine it with a generative AI, the division of labor is this: Jev determines where the work should go, and a generative model is called only when text is needed.

How is this different from having an LLM answer in JSON?

Receiving output as JSON is not unique to Jev. Claude, for example, has structured outputs that constrain output to a JSON Schema. If you already implement classification with a generative model, you do not need to replace it just because "the format is fixed."

Jev specializes in returning choices, graded ratings, and binary judgments along with their probabilities. If you need explanations or replies after the judgment, use a generative model. If you need to repeatedly pick candidates from text, Jev is also a candidate to compare. If you need exact calculations of amounts or dates, use ordinary code. Divide the work this way. A practical approach is to compare accuracy, wait time, and cost on the same input and criteria before choosing.

2. Differences Between Choice, Score, and Noul

The official Primitives explanation divides question types into three. Even similar questions are chosen according to the output you want.

Choice: select a candidate

Prepare unordered candidates, such as "Billing," "Technical," and "Other," and choose one.

Billing ✓ Technical Other / not enough information to decide

The numbers for selections, probabilities, and counts in this article are illustrative examples.

Build an "escape hatch" into the candidates

Include "Other" or "Not enough information to decide" to cover inputs that do not fit. If the candidates are too narrow, the classification can be valid in form but not match reality.

Candidates you can specify in one Choice

Up to 255

API reference

Score: measure on a scale

Describes an ordered scale of 2 to 10 levels. The returned value is a weighted average based on the probability of each level, so it can be a decimal.

Calculation example with 3 levels: assuming probabilities of 10%, 40%, and 50%

0

No information

0 × 0.1 = 0

1

Partly understood

1 × 0.4 = 0.4

2

Reproduction steps are complete

2 × 0.5 = 1.0

0 + 0.4 + 1.0

= 1.4

Between "partly understood" and "reproduction steps are complete." Read it as a value on the defined 0 to 2 scale, not as an accuracy rate.

Source for the calculation method: TypeSafe "Primitives" and "API reference."

It is fine to use the Score value to decide whether a threshold has been exceeded. However, the official documentation cautions against interpolating between levels to back-calculate a number such as "1.4, so the actual amount is about this much." The levels in Jev 1.13 are weakly calibrated as numbers (known weaknesses of Jev 1.13).

Noul: probability of Yes

Make the condition explicit, for example: "Does the text say that the service is currently unavailable?"

At 0.5, Yes and No are about equally likely

Yes: 50%No: 50%

It does not mean "moderately serious." To measure severity, use a Score with defined levels.

Where to write the condition
State it explicitly in instructions. The key that identifies a question is not passed to the model's reasoning, so do not try to convey intent with the question name alone.
The confidence field
Choice and Score have it, but Noul has no separate field.

3. Type Guarantees and Accuracy Are Different

The type guarantee emphasized in TypeSafe's announcement means that output is constrained to the defined candidates or value range. If you split inquiries into billing or technical teams, it will not invent an unspecified department name as free text. However, whether it picks the correct team is a separate question.

According to the official explanation, the confidence for Choice and Score is a statistic that summarizes how concentrated the probability distribution is as a single number from 0 to 1. It is the default metric. If it does not suit your use, you may compute a different metric yourself from the probabilities returned alongside it.

Candidates are close
Confidence becomes low.
Concentrated on one candidate
Confidence becomes high.

Do not read "0.9, so this one case is 90% likely to be correct." Probability calibration is a property evaluated across many predictions together. It does not indicate whether an individual case is correct.

TYPE ≠ ACCURACY

"The type is correct" and "the judgment is correct" are different.

Format check

✓

It is one of the candidates

Code can handle one of "Billing," "Technical," or "Pending review."

Content check

?

Is it the right team?

Verify by comparing against correct labels that people have set.

In practice, you write code that branches on confidence. The official Confidence page shows the following branching, after letting users choose their request from "Check balance," "Approve pending withdrawal," or "Support" (excerpt; the comments are the author's translation).

if confidence < 0.5:
    # The model is genuinely unsure. Don't guess
    route_to_human(user_message)

elif action.choice == "check_balance":
    # Low impact. Showing a different screen can be undone
    show_balance(account_id)

elif action.choice == "approve_transfer":
    if confidence > 0.9:
        # High impact and high confidence. Confirm, then execute
        confirm_then_execute(account_id)
    else:
        # High impact, moderate confidence. Verify first
        ask_user_to_confirm(account_id)

The 0.5 lower bound is meant to catch cases where the model has indicated that it is genuinely unsure. Beyond that, an irreversible operation such as approving a withdrawal requires a higher threshold than a read-only operation. Note that even above 0.9, the code does not execute immediately; it asks for confirmation. High confidence is not a substitute for permission to execute.

0.5 and 0.9 are examples, not recommended values. The official documentation also says that appropriate values depend on the field and on the model's performance for your use. It recommends starting with conservative thresholds and tuning them on your own data.

4. An Example: Routing Support Requests

Consider an inquiry that says "I press the download button for my invoice, but nothing happens." If you route it to billing because of the word "invoice," you will miss the screen malfunction. If you have Jev make the judgment, explain the boundaries of each team and then have it choose a candidate.

Following the official Quick start and the API reference, the request looks like this. Get an API key and send JSON to POST https://api.typesafe.ai/v1/systemone.

{
  "model": "jev-1.13.0",
  "state": "I press the download button for my invoice, but nothing happens.",
  "questions": {
    "team": {
      "type": "choice",
      "instructions": "Choose the team candidate that matches the main request in the message.",
      "criteria": {
        "billing": "Questions about the amount billed, payment method, or double charges.",
        "technical": "Screen operations, errors, or features that don't work.",
        "review": "Multiple requests are mixed together, or there is not enough information to decide who should handle it."
      }
    },
    "service_unavailable": {
      "type": "noul",
      "instructions": "Does the message report that a screen or feature is currently unavailable?"
    }
  }
}

Sending the request and handling the response

Get an API key from the console, and set Authorization: Bearer <API_KEY> and Content-Type: application/json in the HTTP headers. Manage the key with environment variables or similar on the server, and do not embed it in public HTML or repositories.

To check connectivity first, you can paste the curl example from the official Quick start as-is and run it. Put the key in the environment variable TYPESAFE_API_KEY, then run it. This example uses Noul to ask whether an English inquiry expresses urgency.

curl -X POST https://api.typesafe.ai/v1/systemone \
  -H "Authorization: Bearer $TYPESAFE_API_KEY" \
  -H "Content-Type: application/json" \
  -d @- <<'EOF'
  {
    "state": "Hi, I've been trying to connect my Stripe account for 3 days and the integration keeps failing. I'm losing sales. Please help ASAP.",
    "model": "jev-latest",
    "questions": {
      "urgency": {
        "type": "noul",
        "instructions": "Does this message express urgency?"
      }
    }
  }
EOF

To send the routing example above, replace the JSON between <<'EOF' and EOF with that JSON. When calling it from code, or having an agent that helps with development read the specification, the official documentation provides the following entry points.

  • Calling from Python: pip install typesafe-sdk (Python 3.10 or later). The SDK client reads the environment variable TYPESAFE_API_KEY and calls jev-latest by default.
  • Developing with Claude Code: claude plugin marketplace add typesafe-ai/skills, followed by claude plugin install typesafe@typesafe-ai. This installs an official skill that gives a coding agent the three question types and design patterns (Agent skill).

Returning to the routing example, the fields to read and their uses are shown in the figure and table below. Choice gives the team candidate, and Noul shows whether a report of an unavailable feature exists.

Read the spread between candidates as a distribution

technical (Technical)

0.80

billing (Billing)

0.15

review (Pending review)

0.05

Selected candidate: technical (Technical team)

Which fields to read in the response and what to decide
Field to readExample value / meaningWhat to do in your app
team.choicetechnical (Technical team)Show the team candidate
team.probabilities{"technical": 0.80, "billing": 0.15, "review": 0.05}Check whether the judgment is split between candidates
team.confidenceConcentration calculated from the probability distributionCompare against a condition you set based on your own evaluation data
service_unavailable.noul0.85 (rated as a report of unavailability)Do not confuse with severity; use as an item to confirm

Each field is under answers. Also prepare a pending-review destination for cases where candidates are close, information is insufficient, or the response cannot be retrieved. Basis for the types: TypeSafe "API reference."

401 and 422: fix the settings or input
401 means a missing or invalid key; 422 means input format validation failed. Fix the settings or the message, then resend.
429 and 529: wait, then retry
Do not repeat in quick succession; gradually increase the wait time. The official SDK performs this retry automatically by default.

HTTP errors are separate from low confidence. Do not treat them as answer values. The basis is the API reference above.

When starting out, it is enough to leave your existing routing unchanged and simply place the team a person chose side by side with Jev's candidates. Check whether a technical problem is still routed correctly even when it contains the word "invoice," whether messages with multiple requests can be sent to review, and whether it avoids jumping to conclusions when information is missing. When you find an error, add it as a failure case and review whether the candidate descriptions overlap.

When building it into an AI agent, separate "the model that judges," "the tools that execute," and "the conditions under which execution is allowed," and keep amount calculations and permission checks in code. This makes it easier to trace where a mistake occurred when a misjudgment happens.

TypeSafe's official documentation also has implementation examples for guardrails for LLM apps, selecting documents retrieved with RAG, reordering search results, and verifying citations. Even when using it for guardrails or document selection, the weakness of "inputs that lead the answer," covered in the next section, remains. (The approach of stopping at both input and output is explained in What Are AI Guardrails?)

5. Poor-Fit Tasks and Known Weaknesses

TypeSafe publishes known weaknesses of Jev 1.13. Do not assume that it is accurate just because it is only for judgment. Divide the work as follows.

Condition it struggles withPossible problemDesign countermeasure
Counting and calculatingMixes up character counts, item counts, or exact numbersCalculate with a parser or ordinary code
Comparing datesJudgments about order or whether something falls within a period become unstableExtract the needed elements and compare them as date types
Double negatives and indirect questionsPulled toward the surface wording rather than the intentState the condition directly and split multiple judgments
Inputs with much irrelevant informationUnneeded information gets in the way of the judgmentSearch and extract first, then pass only the needed items
Inputs that lead the answerAffected by instructions inside the text, or by sentences asserting how it should classify itselfEvaluate with failure cases that include leading inputs, and manage execution permissions separately
Mismatch between instructions and criteriaIf the question and the criteria ask for different things, confusion can occur (for example, assigning the meaning of "no" to true in Noul lowers accuracy)Write criteria as an extension of the question, and align their direction
Free-text generationNot suited to replies, explanations, or code generationUse templates or a generative model

Also, the probabilities of separately asked Yes/No questions do not necessarily satisfy mathematical relationships. Even if you ask the same condition and its negation with separate Noul questions, the sum is not guaranteed to be 1, and you cannot treat Choice probabilities and Noul probabilities with the same threshold. When you change the form of a question, evaluate it again rather than reusing previously tuned values.

Points to check when using languages other than English

6. Reading Pricing, Input Limits, and Speed

As of September 21, 2026, the TypeSafe Models page listed the current model as jev-1.13.0. On October 14, 2026, jev-1.14.0 was also released (pricing and context length are the same). At the time of checking on October 19, the alias jev-latest (stable) pointed to 1.13, and jev-preview pointed to 1.14. Aliases switch when a new version is released, so if you want stable results, specify a versioned ID. The price is $0.042 per 1 million input tokens, and output tokens are free. It is not a fixed fee per inquiry; it varies with the number of input tokens, including state and questions. As a rough scale, the official Quick start response example (an English inquiry of three sentences with three questions) shows usage.input_tokens in the range of a few hundred tokens. In its announcement, TypeSafe also writes that it cannot currently prove this price is not subsidized, and that whether it can be sustained will only be shown over the long term. It expects prices to fall rather than rise.

COST / INPUT TOKENS

Think of the unit price and the volume of processing separately.

Official input price

$0.042

per 1 million input tokens

Output is free

Assuming 1,000 tokens per item

10,000 items → $0.42

1,000 × 10,000 = 10 million tokens

↓ × $0.042 / 1 million tokens

Estimate of the input API fee only

Source: TypeSafe "Models," unit price as checked on September 21, 2026. Billing applies to input, including state and questions. Check the actual number of input tokens with usage.input_tokens. The 1,000 tokens per item is an assumption; it excludes the cost of preprocessing, retries, and human review.

The double limit: 64k and 32k

Condition 1: the entire request

64k tokens max

Condition 2: state + the longest question

32k tokens max

Both must be satisfied. This does not mean you can put a 64k document directly into state. This is the default. If you add the request header TypeSafe-Danger-Zone-Long-Context: true, both rise to 262k tokens. The pricing is the same, but the official documentation explains that it is slower and less accurate.

Input is text only. Images, audio, and video cannot be passed directly, so they must first be converted into text or structured data by a separate process.

Rate limits can change

Rate limits are set per organization. Check your organization's limit in the developer console (as of the Models page on October 19, 2026; previously fixed numbers were listed). The units are tokens per second and requests per second. Exceeding either returns 429 Too Many Requests. The official SDK retries with backoff by default, and if the response has a retry-after header, it follows that. If you call the HTTP API directly, write your own retry logic that increases the wait time, as described above.

The official documentation notes that because demand is very large, limits are adjusted dynamically and may change without notice. Higher limits are available through custom or enterprise contracts. For a design that sends large volumes of text at once, check the values when you start and decide in advance how to wait when you hit a limit.

Compare speed and cost on the same task

In its announcement, TypeSafe gives the time from request to result as 70 ms to 500 ms. However, the company's public evaluations were run mainly from its laptops on the U.S. West Coast, where the service is based.

Compared with generative models, it cites the figure "193.6 times faster and 444.6 times cheaper." This comes from a workflow evaluation the company created, and TypeSafe itself expects it to be on the high end of the improvements that can actually be achieved. It states that the evaluation workflows were not chosen to favor its own model and are not included in training data, but also notes that because they were built by members of its own model capability team, bias is possible. Read both as the vendor's own figures, and compare them on your own tasks, keeping the following points in mind.

  • Results change when conditions change: Compare with the same network distance, input length, number of questions, and comparison model settings.
  • Cannot be used as a multiplier against ordinary chat: The official comparison includes processing to extract a probability distribution from a generative model.

What to compare in practice

Cost: API unit price plus operating effort
Include the share of preprocessing, retries, and waiting for review. Even if classification is cheap, the overall effort will not decrease if human review increases.
Speed: the average plus slow requests
Check that work does not stop during congestion or when responses are slow.

7. What to Check When Trying It

Start with the Playground to see whether your question criteria come across. The official Quick start includes steps for getting an API key and calling the API. Because it is in early access, first check your usage permissions after logging in.

① Enter the message

If you have access, type the inquiry text into the Playground.

② Set the candidates

Define the team candidates and their boundaries with Choice.

③ Vary the wording and compare

Look at changes in the candidates and probabilities. You can do this before preparing your execution environment.

Four things to cover in evaluation

  1. Prepare the correct answers and boundaries.

    Besides examples where people decided the team, include multiple requests, very short text, negation, and leading sentences. When using real data, confirm that the content may be sent externally.

  2. Fix the criteria for the questions.

    Write down what counts as each candidate, and define the conditions for routing to "Other." Also verify with examples that differ from the ones used to adjust the criteria.

  3. Look at accuracy and the share sent for review together.

    Count how many items were processed automatically at each threshold, and how many of those were misjudged. Also report the volume waiting for review, so that accuracy alone does not look better than it is.

  4. Record the model and the questions.

    Keep the model ID, the input type, the version of the questions, the responses, and the processing time, and compare before and after changes.

Out of 100 items, how many did you hand off, and how many were wrong?

1 square = 1 item.

■ Automatic, correct: 76 items■ Automatic, misclassified: 4 items■ Sent to a person: 20 items

Automatic processing rate

80%

80 items ÷ 100 items in total

Error rate among automatic items

5%

4 misclassified ÷ 80 automatic

Sent to a person

20 items

100 in total − 80 automatic

Look at all three together. 100 items alone do not prove production accuracy.

If you are applying this to your own work

Repeatedly applying a judgment with fixed candidates to large volumes of text
Consider Jev as a comparison candidate. Evaluate its accuracy with your own inputs, criteria, and language.
Writing text such as replies, explanations, or code
Use a generative model or templates.
Exactly calculating amounts or dates
Process with ordinary code.

Premise of this article: it is based on TypeSafe's announcement and the official documentation (checked on September 21, 2026, with the update confirmed on October 19). The author did not run the API, and did not measure accuracy in languages other than English or actual wait times.

FAQ

Q. Can Jev hold a conversation like ChatGPT?
A. It is not a model that generates free-form replies. You enter text and receive judgments in the form you defined with Choice, Score, or Noul. If you need reply or explanation text, combine it with a generative model or templates.

Q. If it has no hallucinations, won't it make mistakes?
A. Constraining output to a type or to candidates and judging content correctly are separate things. The official documentation also lists weaknesses such as calculations, dates, inputs with much irrelevant information, and leading sentences. You need to measure accuracy with your own data.

Q. Does 0.5 from Noul mean moderate?
A. It means Yes and No are being evaluated as about equally likely. It is not a value that represents a midpoint of severity or quality. To measure degree, a Score with explained levels is the candidate.

Q. Can I use it in languages other than English?
A. The official documentation says it handles other languages, including CJK scripts, but explains that English is the main training language and currently gives the best accuracy. Verify with evaluation data in your language before using it for business work.

Q. Can it be used to judge images or audio?
A. The input of the current model is text only, so images and audio cannot be passed directly. If your design passes characters or structured data obtained by another process, evaluate it including the errors of that preprocessing.