OneJev is a multimodal System One decision model based on [Qwen](https://huggingface.co/Qwen). It returns calibrated probabilities for
typed questions about screenshots, photos, videos and text in a single forward pass. Available in 0.8B, 4B, 9B and 27B.
## 🔥 News
- 🔥 **2026-10-13** We released [OneJev 1.5](https://huggingface.co/collections/OmniJev/onejev15). Welcome to have a try.
- **2026-09-28** We released the online demo, 👉 [Click me](https://huggingface.co/spaces/BradNLP/OneJev).
- **2026-09-27** We released [OneJev](https://huggingface.co/collections/OmniJev/onejev) and the [OneJev dataset](https://huggingface.co/datasets/OmniJev/OneJev-Data).
## Decision Index (public part)
## Other benchmarks
Accuracy (%). The OneJev test set is our own held-out set; the others are public.
## Speed
## Quick start
Choose one backend, then run the Python example below.
### Option A: PyTorch
For NVIDIA GPUs. Supports text, images and video.
```bash
pip install "qev[torch] @ git+https://github.com/OmniJev/OneJev.git"
qev serve --model OmniJev/OneJev1.5-4B --port 8000
```
### Option B: llama.cpp
For GGUF models. Supports text and images; use PyTorch for video. Install
[llama.cpp](https://github.com/ggml-org/llama.cpp/blob/master/docs/install.md) first (`brew install llama.cpp` on macOS).
```bash
pip install git+https://github.com/OmniJev/OneJev.git
qev serve --gguf prithivMLmods/OneJev1.5-9B-GGUF:Q8_0 --port 8000
```
### Option C: Docker
The repo ships a Compose stack that detects your hardware and starts one backend.
The llama.cpp profiles download `prithivMLmods/OneJev1.5-9B-GGUF:Q8_0` on first start; set `QEV_GGUF` in `docker/.env`
for another size or quant.
```bash
cp docker/.env.example docker/.env # set HF_TOKEN for gated/private repos
./docker/start.sh # auto-detect (Windows: .\docker\start.ps1)
./docker/start.sh logs # follow logs
./docker/start.sh down # stop every profile
```
Force a backend with `./docker/start.sh `
(add `--build` to rebuild). Every profile serves the API and the playground on :8000.
On Windows only `torch` (NVIDIA) and `cpu` are available.
### Send a request
Both backends serve the same API at `http://localhost:8000`. In another terminal, run this example with your own
`screenshot.png`:
```python
from qev import Client, Choice, Noul, Score
from qev.media import data_uri
r = Client("http://localhost:8000").system_one(
state={"task": "Pay the open invoice from ACME", "screen": ""},
media=[{"type": "image", "data": data_uri("screenshot.png")}],
questions={"done": Noul("The invoice has been paid"),
"next": Choice("What should the agent do next?",
{"click": "click an element", "type": "type text", "scroll": "scroll", "stop": "stop"}),
"progress": Score("How far along is the task?", ["not started", "halfway", "almost done", "done"])},
)
r.answers["done"].noul # probability of yes
r.answers["next"].probabilities # one probability per option
r.answers["progress"].score # expected level
```
The API is compatible with TypeSafe System One. More examples: [video](examples/video.py),
[curl](examples/curl.sh), [official TypeSafe SDK](examples/official_sdk.py).
## Training
```bash
git clone https://github.com/OmniJev/OneJev.git
cd OneJev
pip install -e ".[train]"
# Choose A or B. A is enabled below.
# A. Demo: 100 examples with images (23 MB)
hf download OmniJev/OneJev-Data sample/sample-100.parquet --repo-type dataset --local-dir data/onejev
python -m train.unpack data/onejev --sample
# B. Full dataset: 94,707 examples (17.7 GB). Uncomment these two lines instead of A.
# hf download OmniJev/OneJev-Data --repo-type dataset --include "data/*.parquet" --local-dir data/onejev
# python -m train.unpack data/onejev
```
Either option creates `data/onejev/train.jsonl` and extracts images and video frames into `data/onejev/media/`.
[OneJev-Data](https://huggingface.co/datasets/OmniJev/OneJev-Data) releases 94,707 of the original 99,193
training questions; the remaining sources do not permit redistribution.
### Fine-tune
The four models fine-tune Qwen3.5-0.8B, Qwen3.5-4B, Qwen3.5-9B and Qwen3.8-27B for one epoch with the vision tower
frozen. The configs use a learning rate of `5e-6`, a 16,384-token limit, and cross-entropy plus Brier loss over answer
probabilities. To train the 4B model on four GPUs:
```bash
torchrun --nproc-per-node 4 -m train.sft --config train/configs/onejev_4b_full.yaml
```
Configs: [0.8B](train/configs/onejev_08b_full.yaml) · [4B](train/configs/onejev_4b_full.yaml) ·
[9B](train/configs/onejev_9b_full.yaml) · [27B](train/configs/onejev_27b_full.yaml).
Set `--nproc-per-node` to your GPU count; the 9B and 27B configs enable FSDP to shard model and optimizer state.
For your own data, change `train` and `media_root` in the config.
The final 4B checkpoint is saved to `train/runs/onejev_4b/final`. Start it with:
```bash
qev serve --model train/runs/onejev_4b/final --port 8000
```
## Friendly Links
- [LINUX DO](https://linux.do)
- [Jev](https://typesafe.ai)
- [Awesome JEV](https://github.com/OmniJev/awesome-jev-gallery)
- [Awesome JEV Website](https://omnijev.github.io/awesome-jev-gallery/)
- [PlayJev](https://github.com/OmniJev/PlayJev)
## License
[Apache 2.0](LICENSE)
## Stars and downloads
## Citation
```bibtex
@misc{onejev2026,
title = {{OneJev}: A Multimodal System One Decision Model},
author = {{OmniJev Team}},
year = {2026},
howpublished = {\url{https://github.com/OmniJev/OneJev}}
}
```