Jev alternatives
cbjev
Laya’s faster, better-calibrated successor — with a GPL catch
Quick answer
cbjev is the upgrade path from Laya: same architecture family, one state encoding per call instead of one per question, 3.0 ms for a single question, and an option-reordering flip rate of 0.2% against Laya’s 7.8%. Two things to check first — it is GPL-3.0-or-later, and its English checkpoint is English, so non-English input needs the multilingual model via the built-in Router.
cbjev is fine-tuned from Laya and fixes its two structural weaknesses: it encodes the state once per call instead of once per question, and it cuts the rate at which reordering options changes the answer from Laya’s 7.8% to 0.2%. It also carries the most thorough honest-limits section in the ecosystem — and GPL-3.0, which rules it out for some products.
Train a decision model
A small non-autoregressive encoder with decision heads. No text generation at all — the classic classifier shape, rebuilt for natural-language options.
Search aliases
Key specs
- Licence
- GPL-3.0-or-later (checkpoints fine-tuned from Apache-2.0 Laya)
- Author
- tomek7667
- Backbone
- ModernBERT / mmBERT, fine-tuned from Laya
- Size
- ~800 MB per checkpoint
- Latency
- 3.0 ms for one question · 11.4 ms for ten questions over a 500-token document · 31.4 ms for thirty
- Wire format
- cbjev-serve exposes POST /v1/systemone
- Install
- pip install -e ".[serve]"
cbjev against Laya and Jev, on byte-identical cases
cbjev and Laya were measured side by side on one RTX 4090 over 15 English suites. The Jev column is third-party published figures — the project had no TypeSafe API access, and it says so.
| cbjev against Laya and Jev, on byte-identical cases | cbjev | Jev |
|---|---|---|
| Mean accuracy, 15 English suites | 0.741 (Laya’s best checkpoint: 0.710) | Not published for this suite set |
| typed-decisions | 0.783 (Laya: 0.768) | 0.727 (published) |
| Mean calibration error (ECE), lower is better | 0.117 (Laya: 0.125) | 0.246 |
| Answer flips when options are reordered | 0.2% (Laya: 7.8%) | 13% |
| 77 options in one question | 0.620 | 0.870 |
| Latency, ten questions over a 500-token document | 11.4 ms (Laya: 75.8 ms) | 236–276 ms over the network |
When cbjev is the right choice
Choose cbjev when you have already decided Laya is the right shape but want it faster and more stable — one state encoding per call is the structural change that does it, and the 0.2% reordering flip rate matters a great deal in production, because it means a refactor that shuffles your option list will not silently change your decisions. Its latency advantage is largest exactly where it hurts most: thirty questions over a long document in 31.4 ms against Laya’s 172.4 ms.
When to walk away
Check the licence before anything else: GPL-3.0-or-later is a real constraint for closed products, and the checkpoints are fine-tuned from Apache-2.0 Laya, so downstream obligations deserve a lawyer’s read. Beyond that, cbjev trails Laya on four of the fifteen suites it measured, scores 0.620 with all 77 Banking77 intents in one question, and its English checkpoint genuinely is English — German prompt-injection samples were its worst misses, which is why the built-in Router sends non-Latin and non-English text to the multilingual model.
Adopting cbjev in three steps
import cbjev
agent = cbjev.load() # English checkpoint; GPU if available
questions = {
"department": {
"type": "choice",
"instructions": "Which team should handle this?",
"criteria": {
"billing": "invoices, payments, refunds",
"technical": "bugs, outages",
"sales": "pricing, contracts",
"other": "everything else",
},
},
"churn": {
"type": "noul",
"instructions": "Does the customer threaten to cancel?",
},
}
state = {"subject": "Duplicate charge on invoice #4411",
"body": "We were billed twice for March."}
res = agent.predict(state, questions)
print(res["answers"]["department"]["choice"])
print(res["answers"]["churn"]["noul"]) # P(true)
# Non-English input: route explicitly
from cbjev import Router
router = Router()
router.predict({"body": "Mir wurde zweimal abgebucht"}, questions)["routing"]cbjev questions people actually ask
Is cbjev a fork of Laya or a separate model?
It is fine-tuned from the Apache-2.0 Laya checkpoints, and it can still run Laya’s original weights in their own layout. The licence differs though: cbjev ships under GPL-3.0-or-later, inherited obligations included, which is a meaningful difference for commercial products.
How much faster is it, really?
On byte-identical cases over one RTX 4090 it was faster in all ten measured latency scenarios, from 1.5x on a single question over a long document to 6.9x on ten questions over a document. The single-question short-ticket case is 3.0 ms against Laya’s 5.4 ms; ten questions over 500 tokens is 11.4 ms against 75.8 ms.
Why does the 0.2% order-flip number matter?
Because option order is not a stable part of your code. Lists get sorted, merged or regenerated, and if reordering options changes the decision, a routine refactor silently changes production behaviour. cbjev drops that from Laya’s 7.8% to 0.2%, and offers optional order voting if you want it lower still.
What does cbjev admit it is bad at?
Plenty, and it publishes all of it: it trails Laya on four of fifteen suites, scores 0.620 with all 77 Banking77 intents in one question, is weak on German prompt-injection text, can let one question in a call influence another, and six of its fifteen suites had their train split in the training mix. It also notes the training mix was iterated with the benchmark suites in view.
Sources
- tomek7667/cbjev — benchmarks, limits, training code
- cbjev weights on Hugging Face
- Laya — the upstream Apache-2.0 checkpoints
Every comparison number on this page is a third-party published figure or a read of a public repository — not a benchmark we ran. We have not tested TypeSafe Jev itself, and its customer agreement forbids using its outputs to build similar products.