Typed-decision model · Russian
An open Russian decision model. It returns a choice, a yes or no, or a score on a scale, with calibrated confidence. MIT licensed, runs on CPU inside your perimeter.
Three decision types
Probability of true for a question about the text. You set the threshold.
One option from a defined set, with a probability for each.
A value on an ordered scale, with a distribution over levels.
How it works
You send the text and a question with options. The text stays inside your perimeter.
A compact encoder computes the answer on a plain CPU, with no GPU and no external API.
You get the option and its probability. Confident cases go through automatically, uncertain ones go to a human.
Drop-in compatible
The service runs on your own host. An app built for a closed decision model switches to Ru-Jev by changing the base URL.
uvicorn serve.app:app --port 8080
POST http://localhost:8080/v1/systemone
{
"model": "ru-jev-latest",
"state": "Отличный сервис, всё быстро, рекомендую.",
"questions": {
"ton": {
"type": "score",
"criteria": ["негативный", "нейтральный", "позитивный"]
}
}
}
Full reference: every field, the three question types, confidence thresholds and error codes
{
"answers": {
"ton": {
"type": "score",
"score": 1.97,
"probabilities": { "0": 0.008, "1": 0.009, "2": 0.982 }
}
},
"providerMetadata": { "ru_jev": { "confidence": { "ton": 0.982 } } }
}
Why on-prem
Closed decision models run only through an external API from the US. A bank or a government office cannot send data there. Ru-Jev installs inside the perimeter.
How you name the options
The model reads the option text rather than a label it memorised. Below is the same thousand routing questions and the same eighteen categories every time. Only the wording changes. Each question offers five candidates out of the eighteen categories; the right column is the same measure with all eighteen in the question.
A dot marks wordings that appear in no training mix. The English key and the Russian word are here as controls. They are training styles, all eighteen of their labels occur in training verbatim, and there is nowhere for them to move. Three of the eighteen jargon names coincide with what the transliteration rule produces and reach training as a first word. On the fifteen that do not, which is the honest measure of generalisation, the figure is 0.838 out of five candidates and 0.595 out of eighteen. The department names have no exact match in training; 2 of the 18 labels have a prefix relation.
Jargon the model never saw
The earlier version had learned the exact wordings its training data used. Rename a category and it started getting the answer wrong while staying confident. Across all eighteen jargon names it reported 0.754 mean confidence against 0.633 accuracy, a gap of 0.121. Every fixed option set now ships in several wordings, so the model has to read an option instead of recognising it, and the gap is down to 0.030.
Confidence threshold
A calibrated probability is worth something only if you act on it. Set a threshold: anything above it goes through, the rest goes to a human. Move the slider.
Measured on the v1.3 validation split, 13,373 decisions. The temperature was fitted on the other half, so this is what to expect on new data of the same kind rather than a fit to these rows.
Questions
No. Jev's weights are closed and its terms forbid training on its outputs. Ru-Jev is trained independently on open, human-labelled datasets: the scoring head from random initialisation, the mmBERT-base backbone fine-tuned with it. It is not affiliated with TypeSafe AI.
Yes. At its core is a compact encoder of 307 million parameters, not a large language model. Measured on an Apple M4 with four threads: 25 ms for a short request, 31 ms for a choice of three, 131 ms for a full 256-token context. A server CPU will give different figures.
Yes. MIT licensed. The training data is chosen to permit commercial use and on-prem deployment.
Paper
The preprint sets out which label wordings the augmentation helps with and which it does not. The code, the per-row scores and the scripts are archived separately, under a DOI of their own.
arXiv:2611.08439 · preprint
10.5281/zenodo.23986846 · code archive, always the latest version
@misc{beskorovainyi2026rujev,
title = {Label-Wording Augmentation in a Typed-Decision Encoder: Gains on Unfamiliar Words, Not on Abbreviations or Codes},
author = {Beskorovainyi, Vladimir},
year = {2026},
eprint = {2611.08439},
archivePrefix = {arXiv},
primaryClass = {cs.CL},
url = {https://arxiv.org/abs/2611.08439}
}
@software{beskorovainyi2026rujevcode,
title = {Ru-Jev: open typed-decision model (v1.3) — code, per-row results and evaluation scripts},
author = {Beskorovainyi, Vladimir},
year = {2026},
version = {1.3.0},
publisher = {Zenodo},
doi = {10.5281/zenodo.23986846},
url = {https://doi.org/10.5281/zenodo.23986846}
}
This DOI always resolves to the latest version of the code. Cite 10.5281/zenodo.23986847 for the exact version behind the paper.