The five models at a glance
| Model | Inputs | Question types | Credits per question per block | Best first try |
|---|---|---|---|---|
| Jev | Text, JSON | Choice, Score, Noul | 1Source: system-one.dev pricing and model catalog · Verified 2026-10-12 | Text only, high volume, cost sensitive |
| Clef Flash | Text, JSON, images | Choice, Score, Noul | 3Source: system-one.dev pricing and model catalog · Verified 2026-10-12 | Images, high volume, cost sensitive |
| Clef | Text, JSON, images | Choice, Score, Noul | 6Source: system-one.dev pricing and model catalog · Verified 2026-10-12 | When Jev or Clef Flash is not good enough |
| Clef Omni | Text, JSON, images | Choice, Score, Noul | 4Source: system-one.dev pricing and model catalog · Verified 2026-10-12 | Images, when Clef Flash is not good enough (rate between Clef Flash and Clef) |
| Decider | Text, JSON | Choice, Score, Noul | 1Source: system-one.dev pricing and model catalog · Verified 2026-10-12 | Text only, high volume, cost sensitive |
Model IDs are not written down here — read them from GET /v1/models. Each model has its own page: Jev, Clef, Clef Flash, Clef Omni, Decider.
This page compares credit price and inputs only; it cites no benchmark scores. Which model is better on your task is something your own data has to answer.
How credits work: the same request on all five models
Formula:
Every 4KB is one block, and anything smaller still counts as one block. Cost = blocks × questions × the model rate.
- Bytes are the UTF-8 size of the whole request — state, questions and options — not a character count.
- A non-Latin character can take several bytes, so estimate non-English requests by bytes.
- A partial block is charged as one block.
Example 1: 9,000 bytes, 2 questions (three 4KB blocks)
| Model | Calculation | Credits |
|---|---|---|
| Jev | 2 × 3 × 1 | 6 |
| Clef Flash | 2 × 3 × 3 | 18 |
| Clef Omni | 2 × 3 × 4 | 24 |
| Decider | 2 × 3 × 1 | 6 |
| Clef | 2 × 3 × 6 | 36 |
Example 2: 2,000 bytes, 1 question (one block)
| Model | Calculation | Credits |
|---|---|---|
| Jev | 1 × 1 × 1 | 1 |
| Clef Flash | 1 × 1 × 3 | 3 |
| Clef Omni | 1 × 1 × 4 | 4 |
| Clef | 1 × 1 × 6 | 6 |
| Decider | 1 × 1 × 1 | 1 |
New accounts start with 100 credits, and credits never expire. See pricing.
Choosing in three steps
Step 1: are there images?
With images, choose among Clef Flash, Clef Omni and Clef. Jev and Decider do not read images.
Step 2: text only — start with the lowest rate
For high-volume, cost-sensitive text work, start with Jev, Decider or Clef Flash.
Step 3: if results are not good enough, compare against another model
Run the same sample set through Clef and compare.
Switching models: change the model ID
All five models share one SDK and one request shape. Switching changes the model ID; questions and state stay as they are.
The code below is illustrative and has not been run. It follows
@system-one-ai/coreusage shown elsewhere on this site.
ts// Illustrative code, not tested
import { createSystemOne, choice } from '@system-one-ai/core';
import { systemOneAdapter } from '@system-one-ai/adapter-system-one';
import { createFetchTransport } from '@system-one-ai/transport-fetch';
const questions = {
team: choice('Choose the team that should handle this message.', {
billing: 'Payments, invoices, and refunds',
support: 'Technical issues with the product',
review: 'Needs a person; the request is incomplete or consequential',
}),
};
// Model IDs come from GET /v1/models; never hardcode them
export async function compareModels(modelIds: string[], message: string) {
const results = [];
for (const model of modelIds) {
const client = createSystemOne({
apiKey: process.env.SYSTEM_ONE_API_KEY!,
baseURL: process.env.SYSTEM_ONE_BASE_URL!,
model,
adapter: systemOneAdapter,
transport: createFetchTransport(),
timeoutMs: 30_000,
maxRetries: 0,
});
const result = await client.evaluate({ state: { message }, questions });
results.push({
model: result.model,
team: result.answers.team.choice,
confidence: result.answers.team.confidence,
});
}
return results;
}
Model IDs can change: read them from GET /v1/models at runtime instead of hardcoding.
Thresholds do not transfer
Each model produces its own probability distribution. A threshold tuned on one model has to be re-selected on labelled samples after a switch, then confirmed on held-out data. For how to choose thresholds, see an LLM-as-a-judge alternative.
Testing it yourself: 50–200 samples is enough to start
- Collect 50–200 real, labelled samples.
- Include hard cases, incomplete cases, and cases that belong to no category.
- Run every model over the same set.
- Look at misses and false positives separately, not just overall accuracy.
- Record the credit spend per model.
Then decide on results and cost together.
Want to try first? Run a sample (sign-in required).
Related reading
Verified 2026-10-12