TypeSafe SystemOne: Jev
Evaluate text or structured data against typed yes/no, choice, and score questions using TypeSafe's Jev models through FastRouter.
Introduction
FastRouter now supports TypeSafe's Jev models through the systemone evaluation endpoint. Instead of prompting a chat model and parsing free-form text, you send a piece of content (the state) along with a set of typed questions, and get back structured, probability-calibrated answers — one per question.
Use it for classification, routing, triage, moderation, quality scoring, deduplication, and any workflow where you need a reliable, machine-readable decision rather than prose.
Why use Jev through FastRouter
One API key — use your existing FastRouter key; no separate TypeSafe account required.
Unified billing and usage — Jev usage appears alongside all your other model spend.
Observability — every request is visible in the Activity Log with tokens, latency, and cost.
Structured by design — answers are typed (
noul,choice,score) and include probabilities and confidence, so no output parsing is needed.Switchable response format — receive answers in the systemone format (default) or the OpenAI Decisions format with
response_format.
Endpoint
POST https://api.fastrouter.ai/api/v1/systemone
Authorization: Bearer <FASTROUTER_API_KEY>
Content-Type: application/jsonAvailable models
typesafe/jev-latest
TypeSafe's flagship evaluation model (alias that always points to the latest Jev release).
The response's model field reports the exact version that served the request (for example jev-1.13.0).
Quickstart
Response
Core concepts
State
The content being evaluated — a string, or structured JSON (object/array) such as a chat log or record.
Questions
A map of named, typed questions. You choose each key.
Answers
One typed answer per question, returned under the same key you used.
Question keys are identifiers only — they are not sent to the model and do not affect inference. Put everything the model needs into instructions and criteria.
Request body
model
string
Yes
The Jev model to use, e.g. typesafe/jev-latest.
state
string | object | array
Yes
The content to evaluate.
questions
map<string, Question>
Yes
Named questions. Each value is a noul, choice, or score question.
response_format
string
No
"systemone" (default) or "decisions". See Response formats.
Every question has a type and instructions. instructions (and criteria values) can be a string, object, or array — see Structured instructions.
Question types
Noul — yes/no
Returns the probability (0 to 1) that the answer is yes.
type
"noul"
Yes
instructions
string | object | array
Yes
The yes/no question.
criteria.true
string | object | array
No
What a "yes" (value near 1) means.
criteria.false
string | object | array
No
What a "no" (value near 0) means.
Answer
Choice — pick one option
Selects one option from a set you define and returns the full probability distribution.
type
"choice"
Yes
instructions
string | object | array
Yes
What the model should decide.
criteria
map<string, string | object | array | null>
Yes
Option → description. Use null for self-explanatory options. Max 255 options.
Answer
choice
The highest-probability option.
probabilities
Every option mapped to its probability (sums to 1).
confidence
0–1 certainty derived from the distribution.
Score — rate on a rubric
Rates the state along an ordered scale and returns a probability-weighted score.
type
"score"
Yes
instructions
string | object | array
Yes
What the model should rate.
criteria
array<string | object | array>
Yes
Ordered level descriptions, lowest first. Minimum 2, maximum 10.
Answer
score
Probability-weighted value across levels (0-indexed); can fall between levels.
legend
Level index → your level description.
probabilities
Level index → probability (sums to 1).
confidence
0–1 certainty derived from the distribution.
Asking multiple questions in one request
Batch every question you need about the same state into a single call. Each answer comes back under its own key.
Structured state
state can be structured JSON — useful for conversations, records, or application state.
Refer to fields of the state by name in backticks (e.g. `messages`) to point a question at a specific part of it.
Structured instructions
When a question needs extra context or reference data, pass instructions as an object: put the question in one field and the data in others, and reference those fields in backticks.
Response formats
By default, /systemone returns the systemone format shown above. Set response_format to "decisions" to receive the same answers in the OpenAI Decisions format. This is useful if your code already parses OpenAI Decisions responses.
response_format
answers shape
Choice/score probabilities
"systemone" (default)
Map keyed by question id
Map of option or level index → probability, plus legend for scores
"decisions"
Array; each answer carries name (your question id)
Array of { value, label?, probability }
response_format changes only the response shape. The request body still uses the systemone schema (state, a questions map, criteria).
Request
Response
Systemone vs. Decisions field mapping
Concept
/systemone request
/decisions request
Content to evaluate
state
input
Question list
questions map
questions array
Question identifier
Map key
name
Yes/no question
noul
predicate
Choice options
criteria map (option → description)
choices[] (value, description)
Score levels
criteria array
levels[] (label, description)
Answer type
"noul"
"predicate"
Probability of yes
noul
probability
Response body
model
string
The exact model version that ran the evaluation.
answers
map<string, Answer>
One answer per question, under the keys you supplied.
usage.input_tokens
integer
Input tokens consumed.
usage.output_tokens
integer
Output tokens consumed.
Usage is billed to your FastRouter account and shown in the Activity Log.
Best practices
Describe the edges. Add
criteriato noul questions when "yes" is ambiguous; it noticeably sharpens results.Use thresholds, not just the top answer.
noul,probabilities, andconfidencelet you route low-confidence cases to a human or a stronger model.Batch questions. Asking several questions about one state in a single request is cheaper and faster than separate calls.
Keep keys meaningless to the model. Keys are never seen by the model — all meaning must live in
instructionsandcriteria.
Common use cases
Support triage — urgency (noul), department routing (choice), sentiment (score).
Content moderation — policy-violation checks with calibrated probabilities.
LLM output grading — score responses from other models on accuracy, tone, or completeness.
Deduplication and matching — compare records using structured instructions.
Agent guardrails — check agent state before allowing an action.
Last updated
