API
Jev API reference
One endpoint, one state, as many typed questions as you like — evaluated in parallel and returned in a single response.
Endpoint
- Endpoint
POST https://api.typesafe.ai/v1/systemone- Model routes
jev-latestjev-1.13- Auth
- API key issued by TypeSafe (early access), or via a gateway
- Context
- ~32,000 tokens per request
- Modalities
- Text only — no image or audio input at launch
- Latency
- 70–500ms end-to-end
- SDKs
- Python, JavaScript, plus raw HTTP
The request model
A request has two parts. The state is what you are asking about: raw text, a transcript, a document, or serialised program state. The questions are what you want decided about it. Every question is evaluated independently, in parallel, against that same state — which is why asking ten questions costs roughly the latency of asking one.
Questions are passed as a dict keyed by an id you choose, and answers come back under those same keys. That is what makes fan-out ergonomic: name the question, read the answer.
from typesafe_sdk import Choice, Noul, NoulCriteria, Score, TypeSafeClient
response = client.system_one(
model="jev-latest",
state=the_text_or_program_state,
questions={
"route": Choice(
instructions="Which team should handle this?",
criteria={
"billing": "Payments, invoicing, refunds",
"technical": "Bugs, outages, integrations",
"sales": "Pricing, upgrades, new accounts",
},
),
"severity": Score(
instructions="How severe is this?",
criteria=["Low", "Medium", "High", "Critical"],
),
"on_topic": Noul(
instructions="Is this about our product?",
criteria=NoulCriteria(true="Clearly about our product",
false="Unrelated"),
),
},
)The three primitives
Choice — Choose an option from a list.
You supply a state and a fixed set of options. Jev returns which option fits, a probability for every option, and a confidence value — so your code can branch on the winner or fall back when confidence is low.
Returns
choice, probabilities, confidence
Reach for it when
Routing, tool selection, intent classification, triage.
Score — Score the state on a rubric.
You define ordered descriptive levels (a rubric). Jev returns a score against that rubric plus the probability distribution across levels, which you can sort or threshold on.
Returns
score, probabilities, confidence
Reach for it when
Quality grading, ranking, rubric-based evaluation, content moderation tiers.
Noul — Is this statement true?
A single yes/no question that returns the probability of "yes" rather than a hard boolean — letting you pick your own threshold instead of trusting a coin flip.
Returns
a noul value in the 0–1 range
Reach for it when
Boolean gates, guardrails, verification checks, filters.
Confidence is the whole point
Choice and Score both return a full probability distribution plus a confidence value, and that is the feature that makes Jev safe to put on a hot path. A traditional classifier hands you a label and shrugs. Jev tells you how sure it is, so you can write the rule your product actually needs:
response = client.system_one(
model="jev-latest", state=ticket, questions={"route": route_question}
)
answer = response.answers["route"]
if answer.confidence >= 0.85:
dispatch(answer.choice) # fast path: Jev decided
else:
escalate_to_llm(ticket) # slow path: not sure enoughResponse fields follow the primitive: .choice and .confidence for Choice, .score for Score, .noul for Noul, plus response.usage.input_tokens for billing.
Pick the threshold empirically against your own labelled data — the right number depends entirely on what a wrong decision costs you.
Documented architectural patterns
TypeSafe's docs describe several composition patterns worth knowing: fan-out (many questions against one state in a single call), routing (a Choice that selects the next handler), and composite scoring (several Score questions combined into an overall judgement). Their cookbook section covers 20+ worked examples including legal analysis, RAG passage classification and entity alignment.