Guides
Self-hosting OpenJev
The server behind Codiv is open source under Apache-2.0. Run it on your own GPU with Docker.
Run with Docker
You need an NVIDIA GPU that supports the NVFP4 checkpoint. OpenJev is developed on an RTX PRO 6000 Blackwell.
git clone https://github.com/razorback16/openjev && cd openjev
docker compose up -d # vLLM + OpenJev on 127.0.0.1:8080, plus Laya and Verdict
curl localhost:8080/v1/modelsPoint any SDK at it:
export TYPESAFE_BASE_URL=http://127.0.0.1:8080Configuration
| Variable | Default | Meaning |
|---|---|---|
OPENJEV_UPSTREAM | unset | External vLLM server URL; when set, the container does not start its own |
OPENJEV_CANVAS | 64 | Canvas length; also sets the built-in vLLM's --diffusion-config |
OPENJEV_MAX_INFLIGHT | 64 | Reads in flight to vLLM |
OPENJEV_MAX_QUEUE | 512 | Waiting requests before the server returns 529 |
OPENJEV_API_KEY | unset | Require Authorization: Bearer <key> |
OPENJEV_MODEL_ROUTES | set in compose | Other models to pass through, as name=url,name=url. Empty serves OpenJev only |
Laya and Verdict
The compose file also starts two small containers, one for Laya 1.0 and one for Verdict 1.4. They share the GPU with vLLM and use about 2.5 GB and 1.2 GB. The OpenJev container passes requests for laya-1.0 and verdict-1.4 through to them, so one address serves all three models. To run OpenJev alone, set OPENJEV_MODEL_ROUTES to an empty string and start only the openjev service. The OpenJev README has the details.
How it works
DiffusionGemma denoises a whole canvas of tokens at once instead of generating left to right. OpenJev writes the answer template onto the canvas and leaves only the answer slots as noise. One read-only denoising step then yields a distribution over each question's labels. The vLLM support comes from vllm-project/vllm#57250, which merged upstream on 2026-09-22.
OpenJev pins upstream vLLM's own commit, not a fork: since OpenJev 0.6.0, vLLM main at a3e0243b, with every DiffusionGemma change merged after #57250. When it builds its image, it makes two small changes to that commit: a higher cap on label ids per request (for choices with up to 255 options), and bidirectional attention inside each image. The OpenJev README lists both.