Decision APIs compared
Written on 2026-10-15. Software makes many small judgments: route this ticket, flag this claim, escalate this customer. This page compares four ways to put such a judgment inside your code.
Facts about Jev are what TypeSafe's public pages said when we read them, on 2026-10-15 unless a line says otherwise. Each one links to its source, and they may change. The other two approaches are described in general terms. For the full side-by-side with Jev, see Jepela versus Jev.
Four approaches
- Jepela: a hosted decision API with memory. You send a state and typed questions and get typed answers with probabilities. It never generates text.
- Jev: TypeSafe's System One model, a hosted decision API launched on 2026-09-15 (TypeSafe launch post, read 2026-09-23).
- An LLM with a prompt: a general model that writes text. You ask for an answer, often as JSON, and parse it back.
- Your own classifier: a model you train on labelled examples, then host and keep up to date yourself.
Jepela is not an LLM. Use it instead of an LLM when your code needs a judgment it can branch on, not a paragraph.
Feature by feature
| Feature | Jepela | Jev (TypeSafe) | An LLM with a prompt | Your own classifier |
|---|---|---|---|---|
| Typed answers | Choice, score and noul (yes or no), each a typed value | Choice, score and noul (TypeSafe docs) | Text, which your code parses and checks | The labels it was trained on |
| Probabilities | For every option or level, with a confidence; calibration fitted on your own labels | Probabilities and a confidence for choice and score; noul gives one value from 0 to 1 (TypeSafe docs) | Not per option in the answer; you read what it wrote | A score per label; calibrating it is your work |
| Memory per subject | Yes: remembered and pinned lines, names and aliases; each answer lists the lines it used | None described: each request carries its own state (TypeSafe docs) | None between calls: you resend the history in every prompt | None: you build and feed a store yourself |
| Rules in code | Rules with when checked in code; exclusion rules remove options before the engine answers | Your own code around each call; no memory described to hold rules (TypeSafe docs) | Your own code around the call; rules in the prompt are read as words | Your own code around the model |
| Forgetting | forget with a verified removal; delete removes a subject from memory and disk at once | No memory described, so nothing to forget (TypeSafe docs) | You delete what your own application stored | What a trained model learned stays in it until you train again |
| Price model | $0.042 per million input tokens; output and memory writes free | $0.042 per million input tokens, output free (TypeSafe models page) | Usually per token, for what you send and for the text it writes | Your own labelling, training and serving |
| Images | Not read: put a description of the picture in the state | In preview since Jev 1.14 (2026-10-14): image input and a Box question for where something is in a picture, which TypeSafe says is not yet ready for production (TypeSafe docs, read 2026-10-16) | Many general models read images | Only if you trained it on images |
| Hosting | Hosted only, at api.jepela.com; United States region live, Europe planned | TypeSafe's hosted API at api.typesafe.ai (TypeSafe docs) | Hosted by a provider, or run on your own machines | Wherever you run it |
What the memory changes
Without a memory, everything the decision should know goes into every request, and you write the code that fetches and packs it. With Jepela, you write it once to the subject's memory and name the subject. The answer lists the lines it used. compare shows the answer without them, and forget takes a line back, with proof.
Moving from Jev
Jepela uses the same request and answer shape as Jev on purpose: POST /v1/systemone with a bearer key (TypeSafe API reference). Code written for Jev runs against Jepela after three changes:
- Set the base URL to
https://api.jepela.com. - Send your Jepela key as the bearer key.
- Set the model to
jepela, or a named checkpoint such asjepela-english.
Compressed request bodies, which TypeSafe's newer SDKs send by default, are read as they come (gzip or zstd, one layer). A Jev model name such as jev-latest is answered with a 422 that says to set the model to jepela.
Then add "subject" to a request to use its memory.
When Jepela is not the right choice
These limits were measured, and the Jaggedness page lists them all.
- You need numbers compared in words. The engine does not compare numbers. A stop-loss of 30 written as a memory line left the stop answer at 0.22 to 0.30 when the loss reached 30 (2026-09-23). A rule with
when, checked in code, gave 0.75. - You need "never" read from text. The engine does not read negation. A line that named the forbidden gold coins raised them from 83% to 94% (2026-09-23). Exclusion rules remove such options in code instead.
- Your input is not text. Images, audio and video are not read. Put a description in the state.
- You need text written. Jepela answers typed questions and never generates text. For replies, summaries and drafts, use a model that writes.
- Your state is long.
jepela-englishreads about 475 tokens of state (measured 2026-09-23). The rest is cut, and the answer says so. Send the part that matters, or usewindows. - Your task is moderation, or not in English. Spam and phishing screening is the strong case; moderation is weaker, and other languages are weaker than English. Measure on your own labels first.
- You must run it yourself, or process data in Europe today. Jepela is hosted only, and the Europe region is planned, not live.
Read more
- Jepela versus Jev: the detailed comparison.
- Jaggedness: what Jepela gets wrong, as measured.
- Quality: accuracy and calibration fitted on your own labels.
- Pricing: what you pay for, with worked examples.
- Get a key: confirm your email address and pay by card to start at once, or wait for Jepela to approve the account.