Skip to content
MrJev

DeepOpen

A router and presets over Convai's Laya checkpoints, packaged as its own engine.

View on GitHub →

Hands-on review

Presented as an open decision engine with its own checkpoints. It is Laya 0.3.5 with edits, and the edits removed the part that routes non-English text.

Good for

  • Reading `router.py`, whose docstring explains why routing by script matters
  • Nothing you cannot get from `pip install laya`, which is the upstream

Watch out for

  • `pip install deepopen` 404s, and all three model repos it names are 401
  • Undecided Latin-script text goes to the English checkpoint again
  • CI has never passed: the tests still `import laya`

Tested Sep 22, 2026 at 28f7221cc1f5 · python:3.12-slim in Docker with no network for the routing comparison; diffed file by file against laya 0.3.5 from PyPI

How we reviewed this: we read the code, diffed it file by file against laya 0.3.5 from PyPI, checked every install target the README names, and ran both copies of the pure-Python language router over the same eleven states in python:3.12-slim with no network. We made no Jev calls, and we did not download the checkpoints — the findings below do not need them.

What it says it is

“DeepOpen is a fully open-source, non-autoregressive System 1 decision engine”, with three checkpoints of its own — an English one “trained on ModernBERT-large, 421M parameters”, a multilingual one on mmBERT-base, and a typed-decisions one — trained with “RLCD reinforcement learning”, behind a router that picks the right one per request in under half a millisecond. It reports 32.8 ms single-request and 72.3 ms for ten on a T4, an accuracy of 0.766 against Jev 1.13.0’s 0.727, and “7.8x” Jev’s speed.

Those are the author’s figures, on the author’s hardware, and we do not republish other projects’ Jev comparisons. We did not need to evaluate them, because of what is below.

What it is

laya 0.3.5, the Python package from Convai Innovations, with the directory renamed. deepopen/presets.py is byte-identical to laya/presets.py. router.py still describes convaiinnovations/laya in its docstring and loads it in its code. The committed benchmark in research/results/t4_colab_benchmark.json names its models as convaiinnovations/laya and laya-multilingual.

file laya 0.3.5 this repo changed lines
presets.py 187 187 0
email.py 104 90 13
agent.py 385 360 41
common.py 280 251 27
lang.py 242 183 90
router.py 336 314 97
shortlist.py 272 removed entirely

Laya is Apache-2.0, so building on it is allowed and the code is not hiding anything — the docstrings say Laya throughout. The README is where the two diverge: “基于laya” appears once, in the first sentence, and everything after it describes the checkpoints as DeepOpen’s own and their training as DeepOpen’s work.

You cannot install it

Every target the README names is missing:

the README says what we got
pip install deepopen 404 on PyPI
convaiinnovations/deepopen 401
convaiinnovations/deepopen-multilingual 401
convaiinnovations/deepopen-typed-decisions 401
the deepopen-demo Space 401

The three badges at the top of the README link to those same missing repositories. The convaiinnovations/laya* repositories the code loads all return 200, so a clone works and the documented install does not.

CI has never passed

ModuleNotFoundError: No module named 'laya'
E902 No such file or directory (os error 2)

The tests were copied without their imports being renamed — tests/test_router.py:7 still reads from laya.lang import ... — and .github/workflows/ci.yml:59 lints a laya/ directory this repository does not contain. So nothing has ever checked the edits. Which matters, because of the next part.

The router no longer routes

The README’s central argument for the router is that the English checkpoint does not degrade gracefully off English — it collapses while reporting high confidence, and it quotes a Khmer case at 0 accuracy and 95.2% confidence. router.py’s own docstring, inherited from upstream, says the same thing.

Upstream decides whether text is English like this:

# Undecided is not English. Treating it as English sent every Latin-script language we hold no
# stopwords for to the checkpoint that cannot read it, silently. ...
english = lang == "en" or (undecided and not prof_lat["looks_non_english"])

This copy decides it like this, at deepopen/lang.py:177:

"is_english": lang in (None, "en"),

Undecided is English again. The _NON_EN_DIACRITICS set that carried that fallback for Latin-script languages with no stopword list — Romanian, Polish, Czech, Turkish, the Baltic languages — was deleted along with it, as was the Romanian stopword list.

Both analysers are pure Python, so this costs nothing to check. The same eleven states through both:

language laya 0.3.5 this repo
Romanian multilingual (ro) english (None)
Polish multilingual (None) english (None)
Latvian multilingual (None) english (None)
Czech multilingual (None) multilingual (fr)
Turkish multilingual (None) multilingual (es)
Hungarian multilingual (None) multilingual (fr)
Vietnamese multilingual (None) multilingual (fr)
German multilingual (de) multilingual (de)
English english (en) english (en)

Three of eleven now go to the checkpoint that cannot read them, silently, which is the exact failure the project is sold on preventing. Four more reach the right checkpoint while naming the wrong language: upstream returns “undecided”, this returns French for Czech, Hungarian and Vietnamese and Spanish for Turkish.

Upstream’s test suite asserts against this directly — latin/undecided is flagged, latin/undecided names no language, route/undecided reason mentions letters. 31 of upstream’s 84 checks are absent from this copy, including all thirteen clamp/* checks on the temperature bounds.

Two more things that were removed

threading.RLock and its seven with self._lock: sites are gone from the Router. Upstream’s comment says it guards “model lifecycle (load/unload/attach/preload) and the LRU bookkeeping”, with inference deliberately left outside it. Router(preload=True) under concurrency — the configuration the README’s quick-start recommends — is what that lock was for.

shortlist.py, 272 lines, is gone entirely, along with its 488-line test file.

What is actually good here

router.py’s docstring is worth reading, and it is upstream’s: it gives the accuracy-by-language-family table that justifies routing at all, records that the English checkpoint scores 0.100 on Hindi and 0.103 on Korean against 0.050 for random guessing with an ECE of 0.855, and explains why typed-decisions must never be selected automatically. The committed t4_colab_benchmark.json carries a caveats block that names its training overlaps and states which checkpoint ships uncalibrated temperatures. That is careful work. It is Convai’s.

Verdict

If you want this, install the upstream: pip install laya, and the checkpoints at convaiinnovations/laya. You get the same code with its language fallback intact, its router lock intact, its shortlist module, and 84 tests that run.

We have reported the four items, and offered a patch for the routing revert and the test rename, both of which are small. Until the routing line goes back, do not point this at anything that might receive Polish, Romanian or Latvian.

For the upstream as we reviewed it in Node, see Laya for Node; for open decision models we have run ourselves, the open models category.

See how it compares with other tools in Best Jev tools, tested hands-on.

Review updated Sep 22, 2026. Numbers quoted from the project are its author's own; we don't publish our own measurements of Jev.

More in Open Models & Reproductions

Laya

★ 18k▲ 2.9k

NandhaKishorM/laya

Non-autoregressive decision engine over 100+ languages: three checkpoints and a router that detects the script and dispatches per request. Its benchmarks end with a limits section naming the datasets it does not generalise to and the headline figure that came from a training split.

PythonReviewed

kev

★ 4.7k▲ 4.3k

jaredpalmer/kev

Jev-style decision models from 0.5B to 8B, built as LoRA adapters on Qwen and served behind a Jev-compatible /v1/systemone API.

PythonReviewed

SemIf

★ 3.9k▲ 2.1k

TheoLeeCJ/SemIf

Jev-style decisions from a frozen 4B model on a single RTX 3090, with a browser demo. Formerly OpenJev.

PythonReviewed

Get new Jev projects every week

New Jev releases, pricing changes, and the best new projects, once a week. No spam; unsubscribe anytime.

Powered by Buttondown. See our privacy policy.