choice
Choose from your options
Define named options and receive a selected label, its probability distribution and confidence.
JARED PALMER / KEV 4B
Route requests, classify text and score inputs with Jared Palmer’s open-weight decision model. Kev 4B uses a LoRA adapter and pointer head on Qwen3.5-4B-Base and returns typed answers with probabilities.
Playground is free after sign-in. Only API calls spend credits.
Model context
8,192
tokens · shorter than Jev’s 32,000-token context
API input rate
420
credits / million input tokens
Minimum API charge
1 credit
per successful request · output is free
choice
Define named options and receive a selected label, its probability distribution and confidence.
score
Define ordered levels and receive a score from zero to the last level’s index, with probabilities and confidence.
noul
Ask a narrow question and receive P(true), from 0 to 1. Your application decides which threshold to act on.
OpenRouter lists identical input and output rates for Jev 1.13 and Kev 4B. This service uses the same credit rate for both, rounded up separately for every successful API request.
| Model | Upstream input · $/1M tokens | Upstream output · $/1M tokens | API credits / 1M input tokens |
|---|---|---|---|
| Jev 1.13 ↗ | $0.042 | $0 | 420 |
| Kev 4B ↗ | $0.042 | $0 | 420 |
max(1, ceil(input_tokens × 420 / 1,000,000))
1,000 input tokens cost 1 credit; 5,000 input tokens cost 3 credits. Signed-in playground runs cost 0 credits, including at zero balance. Failed provider calls are not billed.
Prices checked against OpenRouter’s model pages and endpoint metadata on September 26, 2026. Upstream prices may change.
Start with the support-routing example, or define your own questions. This page keeps a separate browser draft so your main playground draft stays available.
Kev 4B supports Choice, Score and Noul. Model context: 8,192 tokens, including state and questions. API pricing matches Jev; signed-in playground runs are free.
Draft saved in this browser · Your draft will be restored after sign-in.
Run the loaded example or edit the input. Results are returned by the model.
Capture A, change the model or questions in the workbench, then capture B. Both versions use identical states.
Capture A from the current workbench model and rules. Change the model or questions, then capture B. Import up to 25 labeled cases and compare both versions. The dataset state replaces each captured state.
This simulates a policy, not accuracy. Noul uses max(P(yes), P(no)); Choice and Score use your selected signal. Validate thresholds on labeled cases.
Runs sequentially with the web rate limit. Web evaluations are free after sign-in. Export includes frozen rules, cases, policy, results and errors. Closing the page stops the comparison.
Send model, state and questions to /v1/systemone with a Jev AI Model API key. Set model to jaredpalmer/kev-4b. Answers are returned at data.result.answers; data.creditsUsed reports the charge.
Text, JSON objects and arrays are supported. This service accepts up to 8 questions and 32 KiB per request; Kev’s separate 8,192-token model context still applies. Web runs are limited to one attempt every 3 seconds.
Live checks passed for Choice, Score and Noul together, using text, object and array inputs. This verifies the request and response contract, not prediction accuracy. Evaluate the model on your own labeled cases.
// Server-side JavaScript (Node 20+ or Bun). Set JEV_API_KEY.
const response = await fetch("https://jevaimodel.net/v1/systemone", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.JEV_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"model": "jaredpalmer/kev-4b",
"state": "I was charged twice for order A-4471. Please refund the duplicate payment.",
"questions": {
"route": {
"type": "choice",
"instructions": "Which team should handle this ticket? Use other when no option fits.",
"criteria": {
"billing": "Payments, charges and refunds",
"technical": "Bugs and product errors",
"account": "Login and account access",
"other": "None of these teams"
}
}
}
}),
});
const body = await response.json();
if (!response.ok || body.code !== 0) throw new Error(body.message);
console.log(body.data.result.answers);
console.log(body.data.creditsUsed);