How to Use Jev? A First Example with the TypeSafe AI Decision Model
Originally published in Turkish. Read the original →

Jev does not generate chat text. It returns a defined decision and a confidence score. In the first example it picks a route, and if the score is low the request goes to a larger model or a human.
The short answer to how to use Jev is this: don't make it write text. TypeSafe AI's Jev model picks one of the types you define, along with a confidence score. What the model is is covered in the What is Jev post, and the announcement is in the System One and Jev post. Outside early access, there is no made-up install command. The example below is the shape of the response.
Narrow the decision
Split the sentences arriving in a support inbox into three routes. Leave a fourth other bucket. If you forget the bucket, the model forces a sentence that doesn't fit into the nearest route.
type Route = 'billing' | 'outage' | 'human'
type Decision = {
route: Route
confidence: number
}
confidence is between zero and one. In the calibration TypeSafe describes, a high score means higher accuracy. Don't just print the score on screen like a percentage and move on. Set a threshold.
No action below the threshold
function apply(decision: Decision) {
if (decision.confidence < 0.8) return 'human'
return decision.route
}
0.8 is an example threshold. If the cost of wrongly landing in the billing route is high, raise the threshold. For an urgent route like an outage notice, measure the threshold separately. A single threshold doesn't fit every job.
The input should be the user's sentence and the state of the account. Don't dump the entire long chat history. Jev is fast with narrow context. Broad context is not this model's job. If an open-ended answer is needed, human or a language model steps in. Jev stands in front of that model as a cheap gate.
What to measure on day one
Label a hundred records by hand. If Jev's route and your route disagree, look at the score. If the disagreements cluster at low scores, the threshold is working. If they cluster at high scores, the type isn't narrow enough or your labels have drifted. Fix the type first, then adjust the threshold.
Jev doesn't write text, doesn't apologize and doesn't produce policy paragraphs. This boundary is where errors show up early. After the decision is applied, another layer writes the sentence that goes to the user. Don't paste Jev's raw score into that layer as is.
If you don't have an early access account, you can also build this type in your own rule engine. When Jev arrives, you plug it into the same Decision shape. Without the shape changing, the threshold and the route list stay in place.
How short should the input be
Don't give Jev the whole support history. The latest user sentence, an open outage flag on the account and the product name are enough. If there is no flag, don't make one up. Keep missing information in a separate field as unknown. The model should not mistake an empty field for a filled one.
type Input = {
message: string
outage: boolean
product: string
}
If outage is true, the route should mostly be outage. You can write this as a rule instead of expecting it from the model. Landing in the billing route during an outage is the fast model's expensive mistake. The rule runs before Jev. Jev only chooses for sentences where the rule stays silent.
Weeding out the wrong route
Read ten disagreeing records every day. If a sentence contains the word billing and lands in the outage route, the input is mixed, not the type. If two topics appear in the same sentence, human is correct. Don't force the model into a single route for that sentence. Forcing it breaks calibration. If high-score errors increase, look at the label set before the threshold.
Sorting by score and leaving the bottom twenty to a human is cheaper than reading every record. Read the high-score errors at the top one by one, though. The real fault hides there. Low scores are already going to a human.
Where it goes
Jev doesn't sit inside the chat box the user sees. It runs as soon as the request comes in, before the response is written. The returned route is a queue name: the billing queue, the outage text or the human line. That queue writes the text. Don't show Jev's score to the user. The score is an operational threshold, not a statement of confidence.
On a timeout, set the route to human. A request left undecided should not be processed automatically by default. A model set up for speed should not stamp a wrong route when it goes silent. This single rule cuts most of the first week's errors.




