Where Jev fits in a workflow
TypeSafe's intent-routing example sends customer requests to deterministic code, a specialist model, or a person. Code can handle a known order-status lookup. For a free-text report such as the Stripe-connection problem in the request below, Jev can choose among technical, billing, account, and other. The application then moves the ticket; Jev only returns the judgment.
Jev cannot write a customer reply, summary, or code. If an exact status settles the branch, keep that branch in code. TypeSafe lists arithmetic and date comparisons among Jev 1.13's weak spots: calculate a payment total or days overdue in code, then include the result in state if the routing question needs it. A Jev choice can still select the template or writing model that produces the reply.
Choose the question by its answer
| Question type | Use it for | What to read |
|---|---|---|
choice | One option from a defined set, such as billing, technical, account, or other | choice, the probability of each option, and confidence |
score | A position on ordered, described levels, such as the severity of a reported bug | score, the level legend, probabilities, and confidence |
noul | One yes-or-no judgment, such as whether the sender expresses urgency | noul, the probability of yes; there is no separate confidence field |
Under TypeSafe's question contract, the ID becomes a key in answers, but the model sees the instructions, not the ID. Write the full question there. A Choice.criteria is a map from each option to its description: separate the queues and include other for a ticket that fits none or needs two teams. A Score.criteria is an ordered array of level descriptions; the returned number is a position on that rubric, not measured dollars or hours.
Questions in one call read the same state independently. The route can be technical while urgency_expressed.noul is near 1; neither answer changes the other. Your code decides whether that technical ticket enters the normal queue or priority review. If the next question truly needs the first answer to choose its options, make a second request.
Make a first call
TypeSafe currently offers Jev through early access. Once admitted, try a question in the Playground or get an API key for POST /v1/systemone. Store the key in the local TYPESAFE_API_KEY environment variable; the command below reads it from there. Its Stripe-connection message is shortened from TypeSafe's quick-start example.
curl -X POST https://api.typesafe.ai/v1/systemone \
-H "Authorization: Bearer $TYPESAFE_API_KEY" \
-H "Content-Type: application/json" \
-d @- <<'JSON'
{
"model": "jev-1.13.0",
"state": "I've been trying to connect my Stripe account for 3 days and it keeps failing. Please help ASAP.",
"questions": {
"route": {
"type": "choice",
"instructions": "Which support queue should handle the problem described in this message?",
"criteria": {
"technical": "A product bug, failed export, or integration problem",
"billing": "A charge, invoice, payment, or subscription problem",
"account": "Sign-in, access, or account ownership problem",
"other": "No single listed queue fits, including unrelated requests for multiple teams"
}
},
"urgency_expressed": {
"type": "noul",
"instructions": "Does the sender express urgency in the message?"
}
}
}
JSON
TypeSafe's response schema puts the selected queue at answers.route.choice, the full distribution at answers.route.probabilities, and a distribution-derived statistic at answers.route.confidence. Read the yes probability at answers.urgency_expressed.noul. The response also contains usage and the responding model. Before acting, check the HTTP status, confirm both answer IDs exist, and verify that the selected queue is one of the declared options.
Read the probabilities without treating them as guarantees
A Choice probability belongs to one option; confidence summarizes how concentrated the whole distribution is. In TypeSafe's separate quick-start department example, the selected billing option has probability 0.84, while confidence is 0.596. They are different values. A Noul returns only the probability of yes, so code expecting answers.urgency_expressed.confidence would read a field the API does not provide. TypeSafe's confidence reference explains the distinction.
Neither value tells you the error rate on your own tickets. A concentrated answer can still be wrong if the question is poorly worded, the relevant fact is missing, or a customer writes misleading instructions into the message. TypeSafe's failure-mode page calls out literal readings, irrelevant state, and adversarial content. Its claim that output is type safe concerns the shape of the answer. A valid technical value can still be the wrong route.
Test the route before letting it move tickets

Take resolved tickets from your queues, including messages that mix billing and integration issues, vague access requests, and any languages your inbox receives. Freeze the exact route.criteria and urgency_expressed.instructions, then label each ticket without seeing Jev's result. For every replay, record answers.route.choice, its full probabilities, answers.route.confidence, answers.urgency_expressed.noul, the human route, and the response's model ID.
Review wrong answers by category. If technical and account both cover failed sign-in, rewrite the criteria and rerun the full set. If other absorbs a recurring request, decide whether the taxonomy needs another queue. If the message refers to an account fact absent from state, add only the field the judgment needs. TypeSafe says state may be a string or a JSON object, and its Jev 1.13 notes warn that irrelevant detail can reduce accuracy.
Choose a threshold for answers.route.confidence on one labeled subset; urgency_expressed.noul is a different probability and cannot stand in for route confidence. On untouched tickets, report wrong routes divided by tickets Jev would route automatically, alongside automatically routed tickets divided by all tickets. If none meet the threshold, report zero coverage rather than a zero error rate. Raising the threshold reduces coverage; check whether it improves the wrong-route rate on your data. TypeSafe's confidence guide says its example values are not measured cutoffs for your inbox.
Compare both measures with the current router on those same held-out tickets. If the wrong routes are unacceptable, run Jev beside the existing router and inspect disagreements before changing live queues. A shadow run also shows whether your other option catches mixed requests that the current router sends to a named team.
A Jev billing choice names a queue; it does not authorize a refund. Likewise, urgency_expressed.noul judges whether the sender sounds urgent, not whether a service outage is confirmed. Keep refunds and incident declarations behind separate checks, even when the routing answer is concentrated.
Save the instructions and criteria version, response.model, Jev's answer, and the route actually taken. TypeSafe notes that jev-latest can point to a newer release, changing answers without a code change. Pin jev-1.13.0 while you measure this routing rule, then rerun the held-out tickets before moving to a later version. The model reference explains the alias and versioned ID.
Access, price, and input limits
TypeSafe lists Jev 1.13 at $0.042 per million input tokens, with no charge for output tokens. To estimate daily Jev spend, multiply average usage.input_tokens per request by daily request count, divide by one million, then multiply by $0.042. Count retries as additional requests. This is the vendor's list price; any later model call or human review is a separate workflow cost.
The model reference gives Jev a 64,000-token budget for the whole request, but a 32,000-token limit for state plus the longest question. If a ticket and its supporting fields approach that smaller limit, shorten the state before sending the call. The 64,000-token figure is not a per-question allowance.
Jev takes text, including text arranged as a JSON object or array. Images, audio, and video need conversion to text or structured fields before Jev can evaluate them. English is its primary training language; TypeSafe says it accepts other languages, including CJK scripts, at lower accuracy. If your tickets are in Chinese, measure wrong-route rate and automatic coverage on Chinese tickets separately before routing them live.
