Meet Jev
A System One model for software
Traditional LLMs mainly generate text for people to read. Jev focuses on decisions software can consume directly: send one state and typed questions, then get structured results your code can branch on, sort, and route.
Typed results
Parallel decisions
Probability and confidence
Quickstart
Validate one decision in the playground
The Playground is the fastest way to understand Jev’s inputs and outputs. Once the question is useful, create an API key and connect it to your product.
- 1
Open the playground
Sign in, open the Jev AI playground, and enter a real piece of business state.
- 2
Prepare state
Use text, a JSON object, or an array of text to provide the context the decision needs.
- 3
Add questions
Choose choice, score, or noul. You can mix all three types in one request.
- 4
Connect your code
Create an API key in your workspace and call the production endpoint with an SDK or REST.
Input
Give state the context the decision needs
State is the content every question reads. Use a string for a simple case; use a JSON object when the decision needs a ticket, order, and policy together.
textNatural language, a ticket, or a message
objectStructured records and nested fields
arrayContext made of multiple text items
Current input boundary: Jev accepts text, JSON objects, and arrays of text. Image, audio, and video inputs are not supported yet.
Question types
Compose decisions from small questions
Each question should ask one specific, well-scoped thing. Multiple questions are evaluated in parallel against the same state, so you do not need to chain calls just to split a decision.
Shared fields and structure
A Question is one of three types. All types include type and instructions, then add criteria according to the type. Instructions can be a string, object, or array; when a question needs extra context, put the question and data in a structured object and refer to the data by field name.
typeRequired: noul, choice, or score.
instructionsRequired: a string, object, or array describing the decision.
criteriaType-specific: optional object for Noul, required map for Choice, required array for Score.
{
"type": "noul",
"instructions": "Does this message convey urgency?",
"criteria": {
"true": "Explicitly needs immediate attention",
"false": "No urgency expressed"
}
}Structured instructions are useful for longer questions or questions that reference extra data: put the question in one field, put context in the others, and refer to those fields by name.
"instructions": {
"potential_duplicate": {
"name": "John Smith",
"location": "Oakland, California",
"last_employer": "Google"
},
"question": "Is the resume for the same person as `potential_duplicate`?"
}Choice
Use Choice to select one answer from predefined options. type must be choice, instructions describes the decision, and criteria must map options to descriptions; a Choice can have up to 255 options, with each description as a string, object, array, or null.
{
"state": "Help! My payouts have been failing for 3 days.",
"model": "typesafe/jev-1.14",
"questions": {
"department": {
"type": "choice",
"instructions": "Which team should handle this?",
"criteria": {
"billing": "Payments, invoicing, refunds",
"technical": "Bugs, outages, integrations",
"sales": "Pricing, upgrades, new accounts"
}
}
}
}Score
Use Score for descriptive levels on a spectrum, such as severity or satisfaction. type must be score, instructions describes what to rate, and criteria is an ordered low-to-high array whose items can be strings, objects, or arrays; it needs at least 2 and at most 10 levels. The returned score is probability-weighted and can fall between levels.
{
"state": "Help! My payouts have been failing for 3 days.",
"model": "typesafe/jev-1.14",
"questions": {
"frustration": {
"type": "score",
"instructions": "How frustrated is the customer?",
"criteria": ["Calm", "Frustrated", "Very angry"]
}
}
}Noul
Use Noul for a yes / no judgment. type must be noul and instructions is the question to evaluate; criteria is optional and uses true and false to describe yes and no, with each value allowed to be a string, object, or array. Noul is the probability that the answer is yes, not a second confidence field.
{
"state": "Help! My payouts have been failing for 3 days.",
"model": "typesafe/jev-1.14",
"questions": {
"is_urgent": {
"type": "noul",
"instructions": "Does this convey urgency?",
"criteria": {
"true": "Explicitly time-sensitive",
"false": "No urgency expressed"
}
}
}
}Output
What the response gives your code
The response wraps answers, usage, and elapsedMs in data.result. Read data.creditsUsed for credits charged to an API-key request. Answers reuse the question IDs you sent.
- answers: Choice returns the selected choice, probabilities, and confidence; Score returns score, legend, per-level probabilities, and confidence; Noul returns noul.
- usage: Includes input_tokens and output_tokens.
- elapsedMs: Time from sending the request to receiving the result, including validation—not pure model inference time.
Probability and confidence are signals for automation, not a guarantee of business accuracy. Use higher thresholds or human review for high-risk actions.
Response fields
data.result.answersOne Answer per question, keyed by the same question IDs from the request.data.result.usageContains input_tokens and output_tokens.data.result.elapsedMsAdditional request time returned by this project, in milliseconds.data.creditsUsedCredits charged for an API-key request; omitted for free Playground requests.Response example
{
"code": 0,
"message": "ok",
"data": {
"result": {
"answers": {
"is_urgent": {
"type": "noul",
"noul": 0.95
}
},
"usage": {
"input_tokens": 296,
"output_tokens": 20
},
"elapsedMs": 200
},
"creditsUsed": 1
}
}Answer types
Every answer carries a type matching its question. Choice and Score answers also carry confidence from 0 to 1, derived from the answer probability distribution.
Choice
Returns the highest-probability choice, probabilities for every option, and confidence derived from the probability distribution.
typeRequired; value is choice.
choiceRequired string; the highest-probability option.
probabilitiesRequired map<string, number>; probabilities for all options sum to 1.
confidenceRequired number; certainty derived from the probability distribution.
{
"code": 0,
"message": "ok",
"data": {
"result": {
"answers": {
"department": {
"type": "choice",
"choice": "billing",
"probabilities": {
"billing": 0.88,
"technical": 0.12,
"sales": 0
},
"confidence": 0.81
}
},
"usage": {
"input_tokens": 318,
"output_tokens": 34
},
"elapsedMs": 200
},
"creditsUsed": 1
}
}Score
Returns a probability-weighted score, a legend for each level, per-level probabilities, and confidence. The score can land between levels.
typeRequired; value is score.
scoreRequired number; the probability-weighted score across levels.
legendRequired map<string, string>; maps each level number back to its description.
probabilitiesRequired map<string, number>; each level and its probability sum to 1.
confidenceRequired number; certainty derived from the probability distribution.
{
"code": 0,
"message": "ok",
"data": {
"result": {
"answers": {
"frustration": {
"type": "score",
"score": 1.05,
"legend": {
"0": "Calm",
"1": "Frustrated",
"2": "Very angry"
},
"probabilities": {
"0": 0,
"1": 0.95,
"2": 0.05
},
"confidence": 0.92
}
},
"usage": {
"input_tokens": 304,
"output_tokens": 18
},
"elapsedMs": 200
},
"creditsUsed": 1
}
}Noul
Returns noul on a 0 to 1 scale, representing the probability that the answer is yes.
typeRequired; value is noul.
noulRequired number; 0 means no and 1 means yes.
{
"code": 0,
"message": "ok",
"data": {
"result": {
"answers": {
"is_urgent": {
"type": "noul",
"noul": 0.95
}
},
"usage": {
"input_tokens": 307,
"output_tokens": 20
},
"elapsedMs": 200
},
"creditsUsed": 1
}
}Usage fields
input_tokensinteger · Number of input tokens used by the request.
output_tokensinteger · Number of output tokens generated by the request.
API reference
Evaluate state and return structured answers
Full HTTP API reference: evaluate a state against typed questions and receive one structured answer for each question.
Evaluation endpoint
Send an Authorization Bearer API key and an application/json content type with every request.
Authorization: Bearer <API_KEY>
Content-Type: application/jsonRequest body
Every request needs the following three top-level fields. Questions is a map whose keys you choose; those keys are reused in the response.
statestring | object | array · required: the text or structured data to evaluate.modelstring · required: the model that handles the request. Use any decisions model ID listed below; the default example uses typesafe/jev-1.14.questionsmap<string, Question> · required: the questions to evaluate in parallel.You choose each key in questions; the matching Answer is returned under the same ID. The key is not sent to the underlying model and is not used in inference.
Request example
curl -X POST https://thejevai.com/v1/systemone \
-H "Authorization: Bearer <API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"model": "typesafe/jev-1.14",
"state": "Help! My payouts have been failing for 3 days.",
"questions": {
"is_urgent": {
"type": "noul",
"instructions": "Does this convey urgency?"
}
}
}'Request body example
{
"state": "Help! My payouts have been failing for 3 days.",
"model": "typesafe/jev-1.14",
"questions": {
"is_urgent": {
"type": "noul",
"instructions": "Does this convey urgency?"
}
}
}Keep your API key in a server-side environment variable. Never put it in browser code or commit it to your repository. This page includes the request fields, question types, response shape, error codes, and retry behavior.
Available models
Call every decision model through one interface
The Playground and API support 23 OpenRouter decisions model IDs, including versioned models and latest aliases. They share the same request shape; only the model field changes.
Latest aliases require the leading ~ and follow the provider’s latest version automatically. Use a versioned model ID when you need a fixed version. Existing typesafe/jev-1.13 requests remain supported.
Generic call template
Copy this server-side request and replace <MODEL_ID> with the model ID you want to use. Keep state, questions, and Authorization the same.
curl -X POST https://thejevai.com/v1/systemone \
-H "Authorization: Bearer <API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"model": "<MODEL_ID>",
"state": "Replace this with your business state.",
"questions": {
"decision": {
"type": "choice",
"instructions": "Choose the most appropriate result.",
"criteria": {
"option_a": "Option A",
"option_b": "Option B"
}
}
}
}'Jev 1.14
typesafe/jev-1.14Open model pageTypeSafe’s updated decision model for typed choices, scoring, and yes/no judgments. The default Playground model uses the pinned ID typesafe/jev-1.14.
"model": "typesafe/jev-1.14"Jev 1.13
typesafe/jev-1.13Open model pageThe previous Jev version remains available as typesafe/jev-1.13 for existing integrations and version comparisons.
"model": "typesafe/jev-1.13"Jev Latest
~typesafe/jev-latestOpen model pageOpenRouter’s automatic Jev alias. Use ~typesafe/jev-latest, including the leading ~. It points to Jev 1.14 as of October 15, 2026; its target can change.
"model": "~typesafe/jev-latest"Cloudflare Clef
cloudflare/clefOpen model pageCloudflare's Clef decision model. Set model to cloudflare/clef.
"model": "cloudflare/clef"Cloudflare Clef Flash
cloudflare/clef-flashOpen model pageCloudflare's Clef Flash decision model. Set model to cloudflare/clef-flash.
"model": "cloudflare/clef-flash"Perplexity Decider V1.1 27B
perplexity/pplx-decider-v1.1-27bOpen model pagePerplexity’s V1.1 checkpoint for typed classification, routing, moderation, and rubric scoring.
"model": "perplexity/pplx-decider-v1.1-27b"Perplexity Decider Latest
~perplexity/pplx-decider-latestOpen model pageOpenRouter’s automatic Decider alias. Use ~perplexity/pplx-decider-latest, including the leading ~. It points to V1.1 27B as of October 15, 2026; its target can change.
"model": "~perplexity/pplx-decider-latest"LiquidAI D1
liquid/d1Open model pageLiquidAI's decision model. Set model to liquid/d1.
"model": "liquid/d1"Together Tev1 4B Experimental
togethercomputer/tev1-4b-experimentalOpen model pageTogether's experimental Tev1 decision model. Set model to togethercomputer/tev1-4b-experimental.
"model": "togethercomputer/tev1-4b-experimental"Inception Mercury Decide (free)
inception/mercury-decide:freeOpen model pageInception's free Mercury Decide variant. Set model to inception/mercury-decide:free.
"model": "inception/mercury-decide:free"Upstage Solar Decide
upstage/solar-decideOpen model pageUpstage's Solar Decide model. Set model to upstage/solar-decide.
"model": "upstage/solar-decide"Respan Span-01
respan/span-01Open model pageRespan's Span-01 decision model. Set model to respan/span-01.
"model": "respan/span-01"Respan Span-01 Lite
respan/span-01-liteOpen model pageThe Respan Span-01 Lite variant. Set model to respan/span-01-lite.
"model": "respan/span-01-lite"Respan Span-01 Lite (free)
respan/span-01-lite:freeOpen model pageThe free Respan Span-01 Lite variant. Set model to respan/span-01-lite:free.
"model": "respan/span-01-lite:free"Jared Palmer Kev 4B
jaredpalmer/kev-4bOpen model pageJared Palmer's Kev 4B decision model. Set model to jaredpalmer/kev-4b.
"model": "jaredpalmer/kev-4b"ScaleDown Classify-1
scaledown/classify-1Open model pageScaleDown’s decision model for classification, moderation, intent detection, and document routing.
"model": "scaledown/classify-1"Nace.AI Drex v2.0
nace-ai/drex-v2.0Open model pageA 35B mixture-of-experts decision model with 3B active parameters for routing, classification, and policy checks.
"model": "nace-ai/drex-v2.0"Microsoft Decision 1
microsoft/microsoft-decision-1Open model pageMicrosoft’s decision model for classification, prioritization, verification, and agent guardrails with calibrated probabilities.
"model": "microsoft/microsoft-decision-1"Nace.AI Drex v1.5
nace-ai/drex-v1.5Open model pageA 9B decision model from Nace.AI for typed decisions over text or JSON state.
"model": "nace-ai/drex-v1.5"Cloudflare Clef Omni
cloudflare/clef-omniOpen model pageThe multimodal member of Cloudflare’s Clef family. Try text or JSON decisions here through the shared API.
"model": "cloudflare/clef-omni"Solar Decide Flash
upstage/solar-decide-flashOpen model pageUpstage’s faster Solar Decide variant for low-latency routing, classification, and policy checks.
"model": "upstage/solar-decide-flash"GPT-6 Luna Decisions
openai/gpt-6-luna-decisionsOpen model pageGPT-6 Luna served as a decision model for classification, routing, moderation, and rubric scoring.
"model": "openai/gpt-6-luna-decisions"Mercury Decide
inception/mercury-decideOpen model pageThe standard Mercury Decide variant. Use inception/mercury-decide; the :free variant remains separately available.
"model": "inception/mercury-decide"These 23 models use POST /v1/systemone and the same Jev-based credit rule. Requests are limited to 8 questions and 32 KiB of JSON, even when a provider supports larger inputs. The Playground edits text or JSON state; model-specific modalities and question types depend on the provider. The :free suffix refers to the upstream variant, not free Jev API credits. Laya uses its separate API documentation.
Agent usage
Use Jev inside a coding agent
The Jev Agent Skill teaches Codex, Claude Code, Cursor, and other compatible agents how to call this API for bounded decisions while keeping execution and permissions in your application.
Install and configure
Install the Skill, create a Jev AI API key, and choose the language for onboarding and examples.
Configure once
Use environment variables so the API key stays out of source code, logs, and Agent transcripts.
Ask a bounded question
Tell the Agent what decision is needed; it should choose Choice, Score, or Noul and send the smallest useful state.
Install and configure
npx skills add jev-ai/jev-agent-skill
export JEV_API_KEY="sk_your_key_here"
export JEV_LANGUAGE="en-US"Create a key at https://thejevai.com/settings/apikeys. English (en-US) is the default; set JEV_LANGUAGE=zh-CN for Simplified Chinese guidance. Never paste a real key into source code or a public prompt.
Five useful starting points
Copy one of these prompts after installation. They show how an Agent can use Jev for decisions without giving Jev permission to execute the final action.
Route a support ticket
Use Choice to select one approved team, then let application code route the ticket and send uncertain cases to review.
Use the Jev Agent skill. Classify this support ticket into exactly one team: billing, technical, account, or sales. Return the selected team, probabilities, and confidence. Do not contact the customer or modify any ticket yet.
Ticket: I was charged twice for my annual plan and need a refund.Guard a tool call
Use Noul to judge whether a proposed action needs approval, while deterministic permissions and policy remain authoritative.
Use the Jev Agent skill before running this proposed tool call. Judge whether it is safe without human approval. Consider side effects, reversibility, scope, and policy. If risky or uncertain, do not execute it.
Tool: delete_customer_records
Arguments: {where: last_login < 2023-01-01}
Policy: destructive database operations require a backup and human approval.Route to an approved model
Use Choice for the allowlisted candidates and a separate Noul question when no candidate is suitable.
Use the Jev Agent skill to choose one approved model for this task. Optimize for quality first, then context capacity and cost. Return the selected model, probabilities, and whether to escalate. Do not call any model yet.
Task: review a 100k-token customer dispute.
Candidates: fast-model (32k, low cost), reasoning-model (200k, high cost), fallback-model (128k, medium cost).Verify research evidence
Use Noul to assess whether evidence is sufficient before an Agent publishes or cites a claim.
Use the Jev Agent skill to check whether the evidence is sufficient to publish this claim. Consider source quality, freshness, direct support, and contradictions. Return a yes probability and the missing verification work. Do not publish yet.
Claim: Our API reduced median processing time by 40%.
Evidence: an internal benchmark from last month with 120 cases; no production traffic data; an older report showing a 12% improvement.Review task completion
Use Choice or Score to decide whether the work is complete, needs verification, or is incomplete before reporting success.
Use the Jev Agent skill to review whether this task is complete. Return one of complete, verify_more, or incomplete. Consider the objective, files changed, tests run, known gaps, and target-environment verification.
Objective: add API-key authentication to the production endpoint.
Completed: added the Authorization check and API-key lookup.
Verification: unit tests pass; production request and rate-limit behavior were not tested.Error handling
Errors and retries
The endpoint uses standard HTTP status codes with a JSON response describing the error.
400Bad Request: invalid JSON, missing fields, an invalid question, or an unsupported model ID. Copy an exact ID from the models list, including ~ for latest aliases.401Unauthorized: the API key is missing or invalid. Check the Authorization header.422Unprocessable Entity: the request body failed validation, such as a missing field or malformed question; the response identifies the offending field.429Too Many Requests: you exceeded the rate limit. Wait and retry.529Overloaded: the service is temporarily overloaded. Wait and retry.When you receive a 429 or 529, retry with exponential backoff instead of sending the same request immediately. SDKs with their default retry policy can handle these retries automatically.
What to do next
Start with one low-risk, well-scoped decision. Then connect it to routing, queues, guardrails, or an agent workflow as you learn where the signal is useful.