Documentation · Demos · Getting Started · Supported Models · Example · Updates
https://github.com/user-attachments/assets/d99f5a8d-d715-4a79-8870-e56a6e48c073
Our first PR, which explored shared-prefix reuse and cache-on/off behavior, inspired us to look more closely at what happens after a cache hit. Reuse matters especially for prefill: Jev scores candidate branches through prefill, so reusing their common prefix avoids repeated computation.
We found a scheduling gap: a matching prefix can still have hybrid state being produced in the current round. Stopping the scan at that pending branch leaves room that independent ready branches could use. RadixFlow defers the pending branch, continues selecting ready work, and rechecks it after completion. The engineering integration recovered executable capacity in the tested hybrid models; the pressure comparisons report the resulting worker rounds, speed and token reuse.
RadixFlow is experimental and disabled by default. Enable it with --radixflow true on supported configurations.
We welcome bug reports, feedback, and discussions—please share your experience with RadixFlow!

The same Valen checkpoint answers 24 structured questions about one video, using eight sampled frames and one A800 per runtime. In this live run, Valen's PyTorch reference path took 5.31 s, while vLLM Jev took 1.22 s (4.3× faster); all 24 selected answers agreed. Model loading is excluded. Watch the MP4.

Valen 2B answers six GameQA Maze image questions locally on an Apple M5 using MLX. The display follows live HTTP responses. Watch the MP4.

Both runtimes played the same five levels from Valen's Sokoban evaluation set with the same checkpoint and one A800 each.

The Open-Jev-2B author HTTP server and vLLM Jev received the same 40 text-only Choice requests at once, on one A800 each.
vLLM Jev serves compatible Jev-style checkpoints through vLLM. Give it a question and candidate answers; it returns a label and a probability for each candidate.
On Linux with an NVIDIA GPU, install vLLM Jev with uv from the repository directory:
uv pip install .
For development, use an editable installation.
Start a server with a supported Hugging Face model ID:
vllm-jev serve ZefanCai/Open-Jev-2B
The command downloads and prepares the model, then starts native vLLM at http://127.0.0.1:8795. Later runs reuse the prepared checkpoint.
On an Apple Silicon Mac with macOS 15 or newer, set up once from the repository directory, then serve:
source scripts/install_mac.sh
vllm-jev serve Valen-Team/Valen-Preview-0923
The command downloads and prepares the model on first use. Send text or images to /v1/systemone for Choice, Noul, and Score decisions. For another Mac model, replace the model ID with a supported one from the table below.
CUDA_VISIBLE_DEVICES=0 vllm-jev serve ZefanCai/Open-Jev-2B \
--gpu-memory-utilization 0.90 --port 8795
Add standard vllm serve flags to override the defaults. See serving options for storage locations and other flags.
Visit our documentation to learn more.
Choose a checkpoint for your platform and run its command. Linux uses native vLLM; Apple Silicon uses MLX, or PyTorch MPS for Laya.
| Model | Input | Platform | Start server |
|---|---|---|---|
| ZefanCai/Open-Jev-2B | Text | Linux, Mac | vllm-jev serve ZefanCai/Open-Jev-2B |
| ZefanCai/Open-Jev-9B | Text | Linux | vllm-jev serve ZefanCai/Open-Jev-9B |
| convaiinnovations/laya | Text | Linux, Mac | vllm-jev serve convaiinnovations/laya |
| convaiinnovations/laya-multilingual | Text | Linux, Mac | vllm-jev serve convaiinnovations/laya-multilingual |
| convaiinnovations/laya-typed-decisions | Text | Linux, Mac | vllm-jev serve convaiinnovations/laya-typed-decisions |
| IamBusy/OpenJev-0.6B | Text | Linux, Mac | vllm-jev serve IamBusy/OpenJev-0.6B |
| lostargon/Tiny-Jev | Text | Linux, Mac | vllm-jev serve lostargon/Tiny-Jev |
| Valen-Team/Valen-Preview-0923 | Text, images, video | Linux, Mac | vllm-jev serve Valen-Team/Valen-Preview-0923 |
| yah01/vjev-vision | Text, images | Linux | vllm-jev serve yah01/vjev-vision |
| yah01/vjev-vision-pilot | Text, images | Linux | vllm-jev serve yah01/vjev-vision-pilot |
| shgao/rsi-jev-v4.0-vl-qwen3.5-2b | Text, images | Linux | vllm-jev serve shgao/rsi-jev-v4.0-vl-qwen3.5-2b |
| shgao/rsi-jev-v3.0-qwen3.5-2b | Text | Linux | vllm-jev serve shgao/rsi-jev-v3.0-qwen3.5-2b |
| SimpleJev/JevAny-Qwen3.5-4B-LoRA | Text, images | Linux | vllm-jev serve SimpleJev/JevAny-Qwen3.5-4B-LoRA |
| SimpleJev/JevAny-Qwen3.8-27B-LoRA | Text, images | Linux | vllm-jev serve SimpleJev/JevAny-Qwen3.8-27B-LoRA |
| Cloudflare/clef-flash (9B) | Text, images, video | Linux | vllm-jev serve Cloudflare/clef-flash |
| Cloudflare/clef (27B) | Text, images, video | Linux | vllm-jev serve Cloudflare/clef |
The RSI-Jev Linux adapter was contributed by Shanghua Gao (PR #2), and the Clef adapter by Arcobalneo (PR #4). See the RSI-Jev and Clef guides for input limits and request formats.
The JevAny Pointer adapter was contributed by heshien / AsirAsir02 (PR #9). See the JevAny guide for requests and limits.
These text-only checkpoints use the same command and /v1/systemone API for Choice, Noul, and Score. Listed platforms have been tested.
| Model | Tested platform | Start server |
|---|---|---|
| jaredpalmer/kev-0.8b | Linux | vllm-jev serve jaredpalmer/kev-0.8b |
| jaredpalmer/kev-4b | Linux | vllm-jev serve jaredpalmer/kev-4b |
| Mapika/decider-0.8b | Linux, Mac | vllm-jev serve Mapika/decider-0.8b |
| Mapika/decider-2b | Linux | vllm-jev serve Mapika/decider-2b |
| sky7350/Mica-v0.1-4B | Linux | vllm-jev serve sky7350/Mica-v0.1-4B |
| flock-io/this-that-model-1.0 | Linux | vllm-jev serve flock-io/this-that-model-1.0 |
| flock-io/this-that-model-1.1 | Linux | vllm-jev serve flock-io/this-that-model-1.1 |
| flock-io/this-that-model-1.2 | Linux, Mac | vllm-jev serve flock-io/this-that-model-1.2 |
| alibiserikbay/JevK5 | Linux | vllm-jev serve alibiserikbay/JevK5 |
| alibiserikbay/JevK5-2B | Mac | vllm-jev serve alibiserikbay/JevK5-2B |
JevK5 currently supports 2–16 options per question. In concurrent Linux batches, Kev-0.8B can change its selected label; This-That and Decider-2B can also change the most likely Score level. These consistency limits remain under investigation.
The optional CUDA setting VLLM_JEV_BF16_MATMUL=no_splitk can reduce batch-dependent numerical drift. Kev label changes can remain, including on A800. See BF16 precision for usage and performance tradeoffs.
See the model guide for limits and request examples.
With the server running, send a Choice request:
curl -sS http://127.0.0.1:8795/v1/systemone \
-H 'Content-Type: application/json' \
-d '{"state":"I was charged twice and want a refund.","questions":{"intent":{"type":"choice","instructions":"Choose the customer intent.","criteria":{"billing":"A payment or refund issue","technical":"A malfunction or setup issue","other":"Another request"}}}}'
The response contains answers.intent.choice and answers.intent.probabilities for the supplied labels.
See the user guide for supported models, serving options, and Choice, Noul, and Score examples. The plugin targets vLLM 0.29.0 and Python 3.12+.
For image questions, start a supported vision model and follow its image request example. Short MP4 videos are supported by Valen on Linux and Mac, and by Clef on Linux.
RadixFlow combines bounded admission, state-ready traversal and complete-state copying for shared-prefix scheduling. It is experimental and opt-in on Linux; ordinary serving defaults remain unchanged. Enable it.
Open-Jev-2B/9B throughput below is four-candidate decisions per second, averaged over three fresh-service runs. Native vLLM uses the same checkpoint/plugin, prefix caching and synchronous eager configuration. Short and long inputs come from RACE and QuALITY calibration questions; each condition has 32 requests per run.
| Model | Input | Concurrency | Native vLLM req/s | RadixFlow req/s | Gain vs native | Speed vs author |
|---|---|---|---|---|---|---|
| Open-Jev-2B | Short | 1 | 7.53 | 11.54 | +53.3% | 1.79× |
| Open-Jev-2B | Short | 8 | 35.57 | 38.91 | +9.4% | 6.06× |
| Open-Jev-2B | Short | 32 | 50.19 | 50.82 | +1.3% | 7.90× |
| Open-Jev-2B | Long | 1 | 4.90 | 4.59 | −6.3% | 6.73× |
| Open-Jev-2B | Long | 8 | 8.39 | 8.77 | +4.5% | 12.85× |
| Open-Jev-2B | Long | 32 | 9.36 | 9.65 | +3.1% | 14.16× |
| Open-Jev-9B | Short | 1 | 5.74 | 8.12 | +41.4% | 2.01× |
| Open-Jev-9B | Short | 8 | 16.22 | 16.61 | +2.4% | 4.08× |
| Open-Jev-9B | Short | 32 | 17.70 | 18.12 | +2.4% | 4.49× |
| Open-Jev-9B | Long | 1 | 2.31 | 2.22 | −4.0% | 9.12× |
| Open-Jev-9B | Long | 8 | 2.98 | 2.99 | +0.4% | 12.31× |
| Open-Jev-9B | Long | 32 | 3.04 | 3.08 | +1.4% | 12.69× |
Across our tested conditions, RadixFlow delivers up to 53.3% higher decision throughput than native vLLM with prefix caching, measured on Open-Jev-2B with short inputs at concurrency 1 and averaged over three fresh-service runs.
The author comparison includes differences in backend, batching and cache support; its installed runtime uses the published PyTorch fallback without optional FLA/causal-conv1d kernels. These gains are workload-dependent; the short C1 gain includes admission/pooling changes, while long C8/C32 record confirmed dependency bypasses. Full results include variation, latency, worker steps, host time, actual token reuse and output agreement.
A full-attention OpenJev-0.6B control also covers concurrency 1/8/32. It improves low-concurrency throughput but regresses at higher concurrency and changes 15/288 paired selected answers; it is not a recommended RadixFlow deployment case.
--radixflow true|false with --radixflow / --no-radixflow aliases, shared by Jev and ordinary generative-model serving. Existing policy flags remain compatible.VLLM_JEV_RADIXFLOW_LIBRARY. The integration is model-independent within supported native prefix-cache configurations; incompatible cache/scheduler settings are rejected explicitly. Usage.context_order permutations while preserving its Pointer readouts; native remains the default.context_order with all six instructions/criteria/state permutations across supported models. Existing presets remain compatible; see the configuration guide.--decision-template native|instructions-first|path.json. Native prompts remain the default; configuration examples show how to select a preset or load a JSON file.{options} placeholder puts the full fixed candidate list before the changing state while retaining the selected candidate and scoring cue at the end. Thanks to xxyyy's request in #7.state_template for text/JSON objects or lists and instruction_template for explicit text instructions. Chat/media envelopes keep their native structure; unsupported full-layout overrides are rejected.cache_salt on supported backends. Restart to change the template; validate custom prompts on your own labelled data because outputs can change./v1/systemone for native Open-Jev, contributed by Shelter Zhou / Sheltercosmo (PR #6). The guide explains trusted salt assignment and limits.vllm-jev serve command.Measured on an Apple M5 with 16 GB unified memory, using MLX: 96 text Choice requests for OpenJev and 42 GameQA Maze image questions for Valen. Requests are sequential after warmup; model loading is excluded.
| Model | Input | Latency (ms) | P95 (ms) | Throughput (req/s) |
|---|---|---|---|---|
| OpenJev-0.6B | Text | 67.9 | 120.2 | 12.02 |
| Valen-Preview-0923 | Image | 205.9 | 249.7 | 4.64 |
Valen selected the same answers as the Linux reference on all 42 questions; both answered 17 correctly. Probability values differ between backends. Mac executes one model request at a time; concurrent requests queue.
Each row uses the same model, input, and A800 GPU for both paths. Lower latency and higher throughput are better. Measurement methods are noted below.
Paired values: Without vLLM Jev → With vLLM Jev.
| Model | Input | Concurrency | Latency (ms) | P95 (ms) | Throughput (req/s) | Speedup | Throughput gain |
|---|---|---|---|---|---|---|---|
| Open-Jev-2B | Short | 1 | 546.6 → 73.0 | 557.6 → 74.3 | 1.83 → 13.66 | 7.5× | 7.5× |
| Open-Jev-2B | Short | 8 | 4360.5 → 100.5 | 4451.8 → 105.2 | 1.83 → 78.83 | 43.4× | 43.1× |
| Open-Jev-2B | Long | 1 | 582.3 → 81.9 | 588.1 → 83.8 | 1.72 → 12.20 | 7.1× | 7.1× |
| Open-Jev-2B | Long | 8 | 4674.5 → 248.9 | 4745.4 → 272.2 | 1.71 → 31.65 | 18.8× | 18.5× |
| Open-Jev-9B | Short | 1 | 674.9 → 79.2 | 678.3 → 81.1 | 1.48 → 12.58 | 8.5× | 8.5× |
| Open-Jev-9B | Short | 8 | 5337.6 → 205.2 | 5393.2 → 207.4 | 1.50 → 38.87 | 26.0× | 26.0× |
| Open-Jev-9B | Long | 1 | 716.9 → 149.7 | 728.1 → 152.5 | 1.39 → 6.67 | 4.8× | 4.8× |
| Open-Jev-9B | Long | 8 | 5726.5 → 1016.6 | 5749.3 → 1019.3 | 1.40 → 7.87 | 5.6× | 5.6× |
| Laya English⁵ | MMLU sample | 1 | 26.6 → 10.3 | 28.0 → 12.6 | 37.61 → 94.79 | 2.6× | 2.5× |
| Laya English⁵ | MMLU sample | 16 | 404.5 → 77.5 | 416.0 → 98.8 | 39.55 → 202.87 | 5.2× | 5.1× |
| Laya multilingual⁶ | MMLU sample | 1 | 22.4 → 9.8 | 24.0 → 11.1 | 44.63 → 100.11 | 2.3× | 2.2× |
| Laya multilingual⁶ | MMLU sample | 16 | 339.8 → 75.5 | 350.6 → 96.0 | 47.03 → 209.53 | 4.5× | 4.5× |
| Laya typed decisions⁶ | MMLU sample | 1 | 26.1 → 10.5 | 27.2 → 12.4 | 38.91 → 92.30 | 2.5× | 2.4× |
| Laya typed decisions⁶ | MMLU sample | 16 | 401.2 → 83.1 | 413.4 → 101.3 | 39.83 → 193.34 | 4.8× | 4.9× |
| OpenJev-0.6B¹ | Short | 1 | 74.6 → 16.4 | 76.5 → 17.0 | 13.35 → 63.03 | 4.5× | 4.7× |
| OpenJev-0.6B¹ | Short | 8 | 583.2 → 37.5 | 601.6 → 49.3 | 13.62 → 198.70 | 15.5× | 14.6× |
| OpenJev-0.6B¹ | Long | 1 | 74.2 → 23.8 | 75.5 → 24.2 | 13.46 → 42.55 | 3.1× | 3.2× |
| OpenJev-0.6B¹ | Long | 8 | 584.5 → 67.9 | 598.0 → 70.6 | 13.63 → 117.24 | 8.6× | 8.6× |
| Tiny-Jev² | Short | 1 | 28.5 → 10.2 | 29.0 → 17.8 | 35.03 → 88.45 | 2.8× | 2.5× |
| Tiny-Jev² | Short | 8 | 216.9 → 28.8 | 222.0 → 45.7 | 36.61 → 254.99 | 7.5× | 7.0× |
| Tiny-Jev² | Long | 1 | 28.4 → 11.5 | 30.1 → 12.4 | 34.59 → 85.70 | 2.5× | 2.5× |
| Tiny-Jev² | Long | 8 | 223.0 → 43.3 | 224.3 → 59.7 | 35.75 → 179.94 | 5.1× | 5.0× |
| Valen-Preview-0923³ | Image | 1 | 231.9 → 77.3 | 240.2 → 82.0 | 4.30 → 12.90 | 3.0× | 3.0× |
| vjev-vision⁴ | Image | 1 | 239.8 → 84.1 | 265.7 → 88.5 | 4.13 → 11.94 | 2.8× | 2.9× |
| vjev-vision-pilot⁴ | Image | 1 | 231.4 → 84.2 | 242.1 → 88.4 | 4.28 → 11.92 | 2.7× | 2.8× |
laya-serve 0.3.20 with vLLM Jev HTTP on the same A800 and 500 fixed four-choice questions. Labels differed on 6/500 questions; the largest option-probability difference was 0.0222. Laya's direct predict_batch SDK can be faster for many states sharing one question schema; the HTTP figures do not measure that bulk path. The optional TileLang fast path was unavailable with this server's CUDA toolkit.Report bugs and feature requests in Issues. Use Discussions for questions and ideas. Submit code changes as pull requests; the maintainer reviews them before merging.
Apache-2.0. The Choice prompt follows MIT-licensed Open-Jev; see third-party notices.
If you use vLLM Jev in your research, please cite our paper: RadixFlow: Filling Execution Bubbles in Prefix-Cached Hybrid LLM Serving.
@misc{jing2026radixflow,
title = {{RadixFlow}: Filling Execution Bubbles in Prefix-Cached Hybrid {LLM} Serving},
author = {Huihao Jing and Wenbin Hu and Shaojin Chen and Haochen Shi and Haoyu Huang and Sirui Zhang and Yuxuan Liu and Zhongwei Xie and Haoran Li},
year = {2026},
eprint = {2610.18143},
archivePrefix = {arXiv},
primaryClass = {cs.AI},
url = {https://arxiv.org/abs/2610.18143}
}
Documentation · Demos · Getting Started · Supported Models · Example · Updates
https://github.com/user-attachments/assets/d99f5a8d-d715-4a79-8870-e56a6e48c073
Our first PR, which explored shared-prefix reuse and cache-on/off behavior, inspired us to look more closely at what happens after a cache hit. Reuse matters especially for prefill: Jev scores candidate branches through prefill, so reusing their common prefix avoids repeated computation.
We found a scheduling gap: a matching prefix can still have hybrid state being produced in the current round. Stopping the scan at that pending branch leaves room that independent ready branches could use. RadixFlow defers the pending branch, continues selecting ready work, and rechecks it after completion. The engineering integration recovered executable capacity in the tested hybrid models; the pressure comparisons report the resulting worker rounds, speed and token reuse.
RadixFlow is experimental and disabled by default. Enable it with --radixflow true on supported configurations.
We welcome bug reports, feedback, and discussions—please share your experience with RadixFlow!

The same Valen checkpoint answers 24 structured questions about one video, using eight sampled frames and one A800 per runtime. In this live run, Valen's PyTorch reference path took 5.31 s, while vLLM Jev took 1.22 s (4.3× faster); all 24 selected answers agreed. Model loading is excluded. Watch the MP4.

Valen 2B answers six GameQA Maze image questions locally on an Apple M5 using MLX. The display follows live HTTP responses. Watch the MP4.

Both runtimes played the same five levels from Valen's Sokoban evaluation set with the same checkpoint and one A800 each.

The Open-Jev-2B author HTTP server and vLLM Jev received the same 40 text-only Choice requests at once, on one A800 each.
vLLM Jev serves compatible Jev-style checkpoints through vLLM. Give it a question and candidate answers; it returns a label and a probability for each candidate.
On Linux with an NVIDIA GPU, install vLLM Jev with uv from the repository directory:
uv pip install .
For development, use an editable installation.
Start a server with a supported Hugging Face model ID:
vllm-jev serve ZefanCai/Open-Jev-2B
The command downloads and prepares the model, then starts native vLLM at http://127.0.0.1:8795. Later runs reuse the prepared checkpoint.
On an Apple Silicon Mac with macOS 15 or newer, set up once from the repository directory, then serve:
source scripts/install_mac.sh
vllm-jev serve Valen-Team/Valen-Preview-0923
The command downloads and prepares the model on first use. Send text or images to /v1/systemone for Choice, Noul, and Score decisions. For another Mac model, replace the model ID with a supported one from the table below.
CUDA_VISIBLE_DEVICES=0 vllm-jev serve ZefanCai/Open-Jev-2B \
--gpu-memory-utilization 0.90 --port 8795
Add standard vllm serve flags to override the defaults. See serving options for storage locations and other flags.
Visit our documentation to learn more.
Choose a checkpoint for your platform and run its command. Linux uses native vLLM; Apple Silicon uses MLX, or PyTorch MPS for Laya.
| Model | Input | Platform | Start server |
|---|---|---|---|
| ZefanCai/Open-Jev-2B | Text | Linux, Mac | vllm-jev serve ZefanCai/Open-Jev-2B |
| ZefanCai/Open-Jev-9B | Text | Linux | vllm-jev serve ZefanCai/Open-Jev-9B |
| convaiinnovations/laya | Text | Linux, Mac | vllm-jev serve convaiinnovations/laya |
| convaiinnovations/laya-multilingual | Text | Linux, Mac | vllm-jev serve convaiinnovations/laya-multilingual |
| convaiinnovations/laya-typed-decisions | Text | Linux, Mac | vllm-jev serve convaiinnovations/laya-typed-decisions |
| IamBusy/OpenJev-0.6B | Text | Linux, Mac | vllm-jev serve IamBusy/OpenJev-0.6B |
| lostargon/Tiny-Jev | Text | Linux, Mac | vllm-jev serve lostargon/Tiny-Jev |
| Valen-Team/Valen-Preview-0923 | Text, images, video | Linux, Mac | vllm-jev serve Valen-Team/Valen-Preview-0923 |
| yah01/vjev-vision | Text, images | Linux | vllm-jev serve yah01/vjev-vision |
| yah01/vjev-vision-pilot | Text, images | Linux | vllm-jev serve yah01/vjev-vision-pilot |
| shgao/rsi-jev-v4.0-vl-qwen3.5-2b | Text, images | Linux | vllm-jev serve shgao/rsi-jev-v4.0-vl-qwen3.5-2b |
| shgao/rsi-jev-v3.0-qwen3.5-2b | Text | Linux | vllm-jev serve shgao/rsi-jev-v3.0-qwen3.5-2b |
| SimpleJev/JevAny-Qwen3.5-4B-LoRA | Text, images | Linux | vllm-jev serve SimpleJev/JevAny-Qwen3.5-4B-LoRA |
| SimpleJev/JevAny-Qwen3.8-27B-LoRA | Text, images | Linux | vllm-jev serve SimpleJev/JevAny-Qwen3.8-27B-LoRA |
| Cloudflare/clef-flash (9B) | Text, images, video | Linux | vllm-jev serve Cloudflare/clef-flash |
| Cloudflare/clef (27B) | Text, images, video | Linux | vllm-jev serve Cloudflare/clef |
The RSI-Jev Linux adapter was contributed by Shanghua Gao (PR #2), and the Clef adapter by Arcobalneo (PR #4). See the RSI-Jev and Clef guides for input limits and request formats.
The JevAny Pointer adapter was contributed by heshien / AsirAsir02 (PR #9). See the JevAny guide for requests and limits.
These text-only checkpoints use the same command and /v1/systemone API for Choice, Noul, and Score. Listed platforms have been tested.
| Model | Tested platform | Start server |
|---|---|---|
| jaredpalmer/kev-0.8b | Linux | vllm-jev serve jaredpalmer/kev-0.8b |
| jaredpalmer/kev-4b | Linux | vllm-jev serve jaredpalmer/kev-4b |
| Mapika/decider-0.8b | Linux, Mac | vllm-jev serve Mapika/decider-0.8b |
| Mapika/decider-2b | Linux | vllm-jev serve Mapika/decider-2b |
| sky7350/Mica-v0.1-4B | Linux | vllm-jev serve sky7350/Mica-v0.1-4B |
| flock-io/this-that-model-1.0 | Linux | vllm-jev serve flock-io/this-that-model-1.0 |
| flock-io/this-that-model-1.1 | Linux | vllm-jev serve flock-io/this-that-model-1.1 |
| flock-io/this-that-model-1.2 | Linux, Mac | vllm-jev serve flock-io/this-that-model-1.2 |
| alibiserikbay/JevK5 | Linux | vllm-jev serve alibiserikbay/JevK5 |
| alibiserikbay/JevK5-2B | Mac | vllm-jev serve alibiserikbay/JevK5-2B |
JevK5 currently supports 2–16 options per question. In concurrent Linux batches, Kev-0.8B can change its selected label; This-That and Decider-2B can also change the most likely Score level. These consistency limits remain under investigation.
The optional CUDA setting VLLM_JEV_BF16_MATMUL=no_splitk can reduce batch-dependent numerical drift. Kev label changes can remain, including on A800. See BF16 precision for usage and performance tradeoffs.
See the model guide for limits and request examples.
With the server running, send a Choice request:
curl -sS http://127.0.0.1:8795/v1/systemone \
-H 'Content-Type: application/json' \
-d '{"state":"I was charged twice and want a refund.","questions":{"intent":{"type":"choice","instructions":"Choose the customer intent.","criteria":{"billing":"A payment or refund issue","technical":"A malfunction or setup issue","other":"Another request"}}}}'
The response contains answers.intent.choice and answers.intent.probabilities for the supplied labels.
See the user guide for supported models, serving options, and Choice, Noul, and Score examples. The plugin targets vLLM 0.29.0 and Python 3.12+.
For image questions, start a supported vision model and follow its image request example. Short MP4 videos are supported by Valen on Linux and Mac, and by Clef on Linux.
RadixFlow combines bounded admission, state-ready traversal and complete-state copying for shared-prefix scheduling. It is experimental and opt-in on Linux; ordinary serving defaults remain unchanged. Enable it.
Open-Jev-2B/9B throughput below is four-candidate decisions per second, averaged over three fresh-service runs. Native vLLM uses the same checkpoint/plugin, prefix caching and synchronous eager configuration. Short and long inputs come from RACE and QuALITY calibration questions; each condition has 32 requests per run.
| Model | Input | Concurrency | Native vLLM req/s | RadixFlow req/s | Gain vs native | Speed vs author |
|---|---|---|---|---|---|---|
| Open-Jev-2B | Short | 1 | 7.53 | 11.54 | +53.3% | 1.79× |
| Open-Jev-2B | Short | 8 | 35.57 | 38.91 | +9.4% | 6.06× |
| Open-Jev-2B | Short | 32 | 50.19 | 50.82 | +1.3% | 7.90× |
| Open-Jev-2B | Long | 1 | 4.90 | 4.59 | −6.3% | 6.73× |
| Open-Jev-2B | Long | 8 | 8.39 | 8.77 | +4.5% | 12.85× |
| Open-Jev-2B | Long | 32 | 9.36 | 9.65 | +3.1% | 14.16× |
| Open-Jev-9B | Short | 1 | 5.74 | 8.12 | +41.4% | 2.01× |
| Open-Jev-9B | Short | 8 | 16.22 | 16.61 | +2.4% | 4.08× |
| Open-Jev-9B | Short | 32 | 17.70 | 18.12 | +2.4% | 4.49× |
| Open-Jev-9B | Long | 1 | 2.31 | 2.22 | −4.0% | 9.12× |
| Open-Jev-9B | Long | 8 | 2.98 | 2.99 | +0.4% | 12.31× |
| Open-Jev-9B | Long | 32 | 3.04 | 3.08 | +1.4% | 12.69× |
Across our tested conditions, RadixFlow delivers up to 53.3% higher decision throughput than native vLLM with prefix caching, measured on Open-Jev-2B with short inputs at concurrency 1 and averaged over three fresh-service runs.
The author comparison includes differences in backend, batching and cache support; its installed runtime uses the published PyTorch fallback without optional FLA/causal-conv1d kernels. These gains are workload-dependent; the short C1 gain includes admission/pooling changes, while long C8/C32 record confirmed dependency bypasses. Full results include variation, latency, worker steps, host time, actual token reuse and output agreement.
A full-attention OpenJev-0.6B control also covers concurrency 1/8/32. It improves low-concurrency throughput but regresses at higher concurrency and changes 15/288 paired selected answers; it is not a recommended RadixFlow deployment case.
--radixflow true|false with --radixflow / --no-radixflow aliases, shared by Jev and ordinary generative-model serving. Existing policy flags remain compatible.VLLM_JEV_RADIXFLOW_LIBRARY. The integration is model-independent within supported native prefix-cache configurations; incompatible cache/scheduler settings are rejected explicitly. Usage.context_order permutations while preserving its Pointer readouts; native remains the default.context_order with all six instructions/criteria/state permutations across supported models. Existing presets remain compatible; see the configuration guide.--decision-template native|instructions-first|path.json. Native prompts remain the default; configuration examples show how to select a preset or load a JSON file.{options} placeholder puts the full fixed candidate list before the changing state while retaining the selected candidate and scoring cue at the end. Thanks to xxyyy's request in #7.state_template for text/JSON objects or lists and instruction_template for explicit text instructions. Chat/media envelopes keep their native structure; unsupported full-layout overrides are rejected.cache_salt on supported backends. Restart to change the template; validate custom prompts on your own labelled data because outputs can change./v1/systemone for native Open-Jev, contributed by Shelter Zhou / Sheltercosmo (PR #6). The guide explains trusted salt assignment and limits.vllm-jev serve command.Measured on an Apple M5 with 16 GB unified memory, using MLX: 96 text Choice requests for OpenJev and 42 GameQA Maze image questions for Valen. Requests are sequential after warmup; model loading is excluded.
| Model | Input | Latency (ms) | P95 (ms) | Throughput (req/s) |
|---|---|---|---|---|
| OpenJev-0.6B | Text | 67.9 | 120.2 | 12.02 |
| Valen-Preview-0923 | Image | 205.9 | 249.7 | 4.64 |
Valen selected the same answers as the Linux reference on all 42 questions; both answered 17 correctly. Probability values differ between backends. Mac executes one model request at a time; concurrent requests queue.
Each row uses the same model, input, and A800 GPU for both paths. Lower latency and higher throughput are better. Measurement methods are noted below.
Paired values: Without vLLM Jev → With vLLM Jev.
| Model | Input | Concurrency | Latency (ms) | P95 (ms) | Throughput (req/s) | Speedup | Throughput gain |
|---|---|---|---|---|---|---|---|
| Open-Jev-2B | Short | 1 | 546.6 → 73.0 | 557.6 → 74.3 | 1.83 → 13.66 | 7.5× | 7.5× |
| Open-Jev-2B | Short | 8 | 4360.5 → 100.5 | 4451.8 → 105.2 | 1.83 → 78.83 | 43.4× | 43.1× |
| Open-Jev-2B | Long | 1 | 582.3 → 81.9 | 588.1 → 83.8 | 1.72 → 12.20 | 7.1× | 7.1× |
| Open-Jev-2B | Long | 8 | 4674.5 → 248.9 | 4745.4 → 272.2 | 1.71 → 31.65 | 18.8× | 18.5× |
| Open-Jev-9B | Short | 1 | 674.9 → 79.2 | 678.3 → 81.1 | 1.48 → 12.58 | 8.5× | 8.5× |
| Open-Jev-9B | Short | 8 | 5337.6 → 205.2 | 5393.2 → 207.4 | 1.50 → 38.87 | 26.0× | 26.0× |
| Open-Jev-9B | Long | 1 | 716.9 → 149.7 | 728.1 → 152.5 | 1.39 → 6.67 | 4.8× | 4.8× |
| Open-Jev-9B | Long | 8 | 5726.5 → 1016.6 | 5749.3 → 1019.3 | 1.40 → 7.87 | 5.6× | 5.6× |
| Laya English⁵ | MMLU sample | 1 | 26.6 → 10.3 | 28.0 → 12.6 | 37.61 → 94.79 | 2.6× | 2.5× |
| Laya English⁵ | MMLU sample | 16 | 404.5 → 77.5 | 416.0 → 98.8 | 39.55 → 202.87 | 5.2× | 5.1× |
| Laya multilingual⁶ | MMLU sample | 1 | 22.4 → 9.8 | 24.0 → 11.1 | 44.63 → 100.11 | 2.3× | 2.2× |
| Laya multilingual⁶ | MMLU sample | 16 | 339.8 → 75.5 | 350.6 → 96.0 | 47.03 → 209.53 | 4.5× | 4.5× |
| Laya typed decisions⁶ | MMLU sample | 1 | 26.1 → 10.5 | 27.2 → 12.4 | 38.91 → 92.30 | 2.5× | 2.4× |
| Laya typed decisions⁶ | MMLU sample | 16 | 401.2 → 83.1 | 413.4 → 101.3 | 39.83 → 193.34 | 4.8× | 4.9× |
| OpenJev-0.6B¹ | Short | 1 | 74.6 → 16.4 | 76.5 → 17.0 | 13.35 → 63.03 | 4.5× | 4.7× |
| OpenJev-0.6B¹ | Short | 8 | 583.2 → 37.5 | 601.6 → 49.3 | 13.62 → 198.70 | 15.5× | 14.6× |
| OpenJev-0.6B¹ | Long | 1 | 74.2 → 23.8 | 75.5 → 24.2 | 13.46 → 42.55 | 3.1× | 3.2× |
| OpenJev-0.6B¹ | Long | 8 | 584.5 → 67.9 | 598.0 → 70.6 | 13.63 → 117.24 | 8.6× | 8.6× |
| Tiny-Jev² | Short | 1 | 28.5 → 10.2 | 29.0 → 17.8 | 35.03 → 88.45 | 2.8× | 2.5× |
| Tiny-Jev² | Short | 8 | 216.9 → 28.8 | 222.0 → 45.7 | 36.61 → 254.99 | 7.5× | 7.0× |
| Tiny-Jev² | Long | 1 | 28.4 → 11.5 | 30.1 → 12.4 | 34.59 → 85.70 | 2.5× | 2.5× |
| Tiny-Jev² | Long | 8 | 223.0 → 43.3 | 224.3 → 59.7 | 35.75 → 179.94 | 5.1× | 5.0× |
| Valen-Preview-0923³ | Image | 1 | 231.9 → 77.3 | 240.2 → 82.0 | 4.30 → 12.90 | 3.0× | 3.0× |
| vjev-vision⁴ | Image | 1 | 239.8 → 84.1 | 265.7 → 88.5 | 4.13 → 11.94 | 2.8× | 2.9× |
| vjev-vision-pilot⁴ | Image | 1 | 231.4 → 84.2 | 242.1 → 88.4 | 4.28 → 11.92 | 2.7× | 2.8× |
laya-serve 0.3.20 with vLLM Jev HTTP on the same A800 and 500 fixed four-choice questions. Labels differed on 6/500 questions; the largest option-probability difference was 0.0222. Laya's direct predict_batch SDK can be faster for many states sharing one question schema; the HTTP figures do not measure that bulk path. The optional TileLang fast path was unavailable with this server's CUDA toolkit.Report bugs and feature requests in Issues. Use Discussions for questions and ideas. Submit code changes as pull requests; the maintainer reviews them before merging.
Apache-2.0. The Choice prompt follows MIT-licensed Open-Jev; see third-party notices.
If you use vLLM Jev in your research, please cite our paper: RadixFlow: Filling Execution Bubbles in Prefix-Cached Hybrid LLM Serving.
@misc{jing2026radixflow,
title = {{RadixFlow}: Filling Execution Bubbles in Prefix-Cached Hybrid {LLM} Serving},
author = {Huihao Jing and Wenbin Hu and Shaojin Chen and Haochen Shi and Haoyu Huang and Sirui Zhang and Yuxuan Liu and Zhongwei Xie and Haoran Li},
year = {2026},
eprint = {2610.18143},
archivePrefix = {arXiv},
primaryClass = {cs.AI},
url = {https://arxiv.org/abs/2610.18143}
}