Jev: A Fast, Structured Model for Decisions

What is Jev
Jev is a specialized AI model released by TypeSafe AI in September 2026. Contrary to most other popular models, Jev does not produce text, but structured content specialized around decisioning. The limited request and response options come with significant benefits, especially predictable output structure, cost efficiency and speed gains.
Getting Started
To test out Jev, I utilized Vercel AI Gateway since the model was available from September 15. Sonnet 5 was able to generate an API endpoint connecting to the Vercel AI Gateway with a slim token budget in 5 minutes. After creating an API key and putting it into an environment variable (AI_GATEWAY_API_KEY), I was ready to run some tests.
But where to start? Vercel has some insights with examples in their evaluation documentation, so I pointed Claude to it to create some .http files for me. I ended up with a nice set of API calls to test out my brand new Jev-powered API. Let's use these calls to go through the question types/use cases.
Boolean
Returns a probability between 0 and 1 where 0 = false and 1 = true. Note that the model gives a normalized numerical value, not the decision itself (is it true or false?), the caller must choose a threshold.
Request
### Boolean check: was a refund issued?
POST {{baseUrl}}/api/evaluate
Content-Type: application/json
{
"state": "The support agent issued a full refund to the customer.",
"questions": {
"refunded": {
"type": "boolean",
"instructions": "Was a refund issued?"
}
}
}
Response
...
"answers": {
"refunded": {
"type": "boolean",
"probability": 0.99
}
},
...
Note the response does not contain an additional confidence, this is equal to the probability. (0.99 in this case).
Boolean questions can also have criteria, to define what true and false means.
Request
### Boolean check: was a refund issued?
POST {{baseUrl}}/api/evaluate
Content-Type: application/json
{
"state": "The build failed with exit code 1.",
"questions": {
"passed": {
"type": "boolean",
"instructions": "Did the build succeed?",
"criteria": {
"true": "exit code 0",
"false": "any non-zero exit code"
}
}
}
}
Response
...
"answers": {
"passed": {
"type": "boolean",
"probability": 0.01
}
},
...
Choice
Choice makes the model choose from a defined set of possible answers. The answer contains the chosen option plus probabilities for all answers.
Request
### Choice check: route a support ticket
POST {{baseUrl}}/api/evaluate
Content-Type: application/json
{
"state": "My card was charged twice for one order.",
"questions": {
"route": {
"type": "choice",
"instructions": "Route this support ticket.",
"criteria": {
"billing": "payment or charge problems",
"shipping": "delivery problems",
"technical": "application bugs"
}
}
}
}
Response
...
"answers": {
"route": {
"type": "choice",
"choice": "billing",
"probabilities": {
"billing": 1,
"shipping": 0,
"technical": 0
}
}
},
...
The model assigns this topic to "billing" with a probability of 100%.
Score
The input is classified based on an ordered scale. The result is a score on this scale and an array of probabilities for each level. The model does not make a choice, it delivers a point on the scale for the caller to evaluate.
Request
### Score check: evaluate client sentiment
POST {{baseUrl}}/api/evaluate
Content-Type: application/json
{
"state": "Hi, I wanted to follow up because my order arrived two days late. I understand delays can happen, but I would appreciate an update on the status of my refund. Thank you for your help.",
"questions": {
"sentiment": {
"type": "score",
"instructions": "Evaluate how angry the client sounds in this email.",
"criteria": [
"very calm: especially patient, understanding, and appreciative",
"calm: polite and composed despite the issue",
"concerned: frustrated or worried but still fairly composed",
"upset: angry, threatening, or highly confrontational",
"angry: extremely upset or enraged"
]
}
}
}
Response
...
"answers": {
"sentiment": {
"type": "score",
"score": 0.71,
"probabilities": {
"0": 0.29,
"1": 0.71,
"2": 0,
"3": 0,
"4": 0
}
}
},
...
The model decided that the client is calm.
I also added a scenario where I submit a paragraph from a fictional book and let the model choose which Genre this might be taken from.
Request
### Choice check: classify a paragraph by book genre / Sci-Fi
POST {{baseUrl}}/api/evaluate
Content-Type: application/json
{
"state": "The colony ship crossed the edge of the known universe and entered a region where time moved backward. As the crew searched for a way home, they discovered an ancient machine orbiting a dead star.",
"questions": {
"genre": {
"type": "choice",
"instructions": "Which book genre best matches this paragraph?",
"criteria": {
"science fiction": "futuristic technology, space travel, or scientific ideas",
"fantasy": "magic, mythical creatures, or imaginary worlds",
"thriller": "suspense, danger, crime, or a fast-paced threat",
"mystery": "an unexplained event, investigation, or puzzle to solve",
"romance": "a story centered on a romantic relationship",
"historical fiction": "a fictional story set in a real historical period",
"nonfiction": "factual writing about real people, events, or ideas",
"horror": "fear, supernatural terror, or disturbing threats"
}
}
}
}
Response
...
"answers": {
"genre": {
"type": "choice",
"choice": "science fiction",
"probabilities": {
"nonfiction": 0,
"science fiction": 1,
"historical fiction": 0,
"horror": 0,
"mystery": 0,
"fantasy": 0,
"romance": 0,
"thriller": 0
}
}
},
...
Clearly Sci-fi
A Production Note
These probabilities should not automatically be treated as calibrated confidence scores. In production, define application-specific thresholds, validate decisions against representative data, and provide a fallback or human review path for consequential decisions.
Test Results
With this setup, we can test the most relevant scenarios. But at this point, the most important topic is how the model performs in terms of cost and speed, so I asked Claude to create a benchmark for performance and cost analysis. The code itself is not as important as the results, so let's have a look at how Jev performs.
JEV benchmark: 6 case(s) x 5 repeat(s), model typesafe-ai/jev
┌─────────┬──────────────────────────┬────────┬───────────┬──────────┬───────────┬─────────┬───────────────┐
│ (index) │ case │ repeat │ latencyMs │ inputTok │ outputTok │ costUsd │ marketCostUsd │
├─────────┼──────────────────────────┼────────┼───────────┼──────────┼───────────┼─────────┼───────────────┤
│ 0 │ 'refund-boolean' │ 1 │ 435 │ 282 │ 21 │ 0 │ 0.000011844 │
│ 1 │ 'refund-boolean' │ 2 │ 335 │ 282 │ 21 │ 0 │ 0.000011844 │
│ 2 │ 'refund-boolean' │ 3 │ 313 │ 282 │ 21 │ 0 │ 0.000011844 │
│ 3 │ 'refund-boolean' │ 4 │ 560 │ 282 │ 21 │ 0 │ 0.000011844 │
│ 4 │ 'refund-boolean' │ 5 │ 313 │ 282 │ 21 │ 0 │ 0.000011844 │
│ 5 │ 'build-passed-boolean' │ 1 │ 264 │ 305 │ 20 │ 0 │ 0.00001281 │
│ 6 │ 'build-passed-boolean' │ 2 │ 298 │ 305 │ 20 │ 0 │ 0.00001281 │
│ 7 │ 'build-passed-boolean' │ 3 │ 329 │ 305 │ 20 │ 0 │ 0.00001281 │
│ 8 │ 'build-passed-boolean' │ 4 │ 315 │ 305 │ 20 │ 0 │ 0.00001281 │
│ 9 │ 'build-passed-boolean' │ 5 │ 330 │ 305 │ 20 │ 0 │ 0.00001281 │
│ 10 │ 'route-choice' │ 1 │ 311 │ 331 │ 38 │ 0 │ 0.000013902 │
│ 11 │ 'route-choice' │ 2 │ 292 │ 331 │ 38 │ 0 │ 0.000013902 │
│ 12 │ 'route-choice' │ 3 │ 311 │ 331 │ 38 │ 0 │ 0.000013902 │
│ 13 │ 'route-choice' │ 4 │ 298 │ 331 │ 38 │ 0 │ 0.000013902 │
│ 14 │ 'route-choice' │ 5 │ 277 │ 331 │ 38 │ 0 │ 0.000013902 │
│ 15 │ 'client-sentiment-score' │ 1 │ 297 │ 401 │ 19 │ 0 │ 0.000016842 │
│ 16 │ 'client-sentiment-score' │ 2 │ 352 │ 401 │ 19 │ 0 │ 0.000016842 │
│ 17 │ 'client-sentiment-score' │ 3 │ 261 │ 401 │ 19 │ 0 │ 0.000016842 │
│ 18 │ 'client-sentiment-score' │ 4 │ 348 │ 401 │ 19 │ 0 │ 0.000016842 │
│ 19 │ 'client-sentiment-score' │ 5 │ 317 │ 401 │ 19 │ 0 │ 0.000016842 │
│ 20 │ 'support-triage-multi' │ 1 │ 315 │ 336 │ 55 │ 0 │ 0.000014112 │
│ 21 │ 'support-triage-multi' │ 2 │ 302 │ 336 │ 55 │ 0 │ 0.000014112 │
│ 22 │ 'support-triage-multi' │ 3 │ 293 │ 336 │ 55 │ 0 │ 0.000014112 │
│ 23 │ 'support-triage-multi' │ 4 │ 300 │ 336 │ 55 │ 0 │ 0.000014112 │
│ 24 │ 'support-triage-multi' │ 5 │ 287 │ 336 │ 55 │ 0 │ 0.000014112 │
│ 25 │ 'genre-choice' │ 1 │ 341 │ 504 │ 87 │ 0 │ 0.000021168 │
│ 26 │ 'genre-choice' │ 2 │ 277 │ 504 │ 87 │ 0 │ 0.000021168 │
│ 27 │ 'genre-choice' │ 3 │ 351 │ 504 │ 87 │ 0 │ 0.000021168 │
│ 28 │ 'genre-choice' │ 4 │ 303 │ 504 │ 87 │ 0 │ 0.000021168 │
│ 29 │ 'genre-choice' │ 5 │ 368 │ 504 │ 87 │ 0 │ 0.000021168 │
└─────────┴──────────────────────────┴────────┴───────────┴──────────┴───────────┴─────────┴───────────────┘
=== Aggregate ===
Total calls: 30 (30 ok, 0 error)
Total latency: 9693 ms (mean 323 ms/call)
Total cost: $0.000000
Total market cost: $0.000453 (undiscounted rate, ignores free/promo pricing)
Notes: costUsd is currently 0 due to a promotion
Independent of the actual responses (which are not the focus of this benchmark), the cost and latency are definitely noteworthy. The mean latency is around 300 ms (including gateway routing) and 30 model calls do not even compound to one tenth of a cent.
Broader Implications
Jev's release stirred up quite some excitement, which signals a high demand. Token cost continues to be a huge issue around AI and LLM use. And while powerful models bring increased quality in highly complex tasks, they are overqualified and too slow and expensive to use them widely for simple tasks.
Jev illustrates an alternative approach: Use specialized, cheap models around very specific tasks and resort to powerful general models only when necessary.
