Repository navigation
ReVolta 0.1.1
ReVolta 0.1.1
A bug-fix release for ReVolta 0.1.0 (Qwen3.8 Flash-Next on 4 × V100 32 GB). Only Python code
changed. The native extensions were rebuilt from unchanged sources: their code and data are
identical to 0.1.0, and three nvcc-built files differ only in local symbol names and the
debug-file checksum. On requests that do not hit one of the
fixes, greedy output and fixed-seed sampling are identical to 0.1.0.
Behaviour changes
- Stop strings with thinking on match only after the reasoning ends. A
stopstring
repeated inside the reasoning no longer ends the request with emptycontent, and a
stopof</think>no longer ends a request at the end of the reasoning. - Reasoning/content split uses the
</think>token, not its text. A literal
</think>written in the reasoning or the answer no longer moves the split. With
thinking off, the whole output is content, in streaming and non-streaming responses. qwen3_codertool calls stream string arguments as they are generated, instead of
sending a long argument only at the end. A repeated parameter name keeps its first
value (a warning is logged).- Invalid request parameters return 400 with a one-line warning in the log, without
an ASGI traceback.
Fixes
API and output processing:
- Streaming with
n≥ 2 kept prompt log-probabilities for every choice. - A structured-output failure while generating now ends only that request; the engine
keeps serving. - An output buffer could be reused while it was still being sent to the API server.
- The end-of-stream tool-call flush could join a sent prefix and the full arguments into
invalid JSON.
Scheduling, KV offload and state:
- Resetting the prefix cache (development endpoints and
LLM.reset_prefix_cache) with KV
offload enabled no longer crashes the engine; preemptions outside the step loop are
flushed correctly. - Without MTP, a prompt no longer takes one extra prefill step.
- Draft warm-up runs no longer write QSA ring state into the null block.
- Loading an AWQ checkpoint with a missing tensor fails at startup instead of running.
Memory and startup:
- PLE layers no longer allocate speculative state blocks that are never used
(KV pool 1,145,881 tokens on the reference setup, from 1,140,505). - NCCL communicators are created before memory profiling, so they no longer allocate
memory inside the profiling window. - Standard NVFP4 checkpoints get their validated kernel settings from the ReVolta
profile; they no longer need manual environment variables. - FP4-Local with a data-parallel vision encoder profiles the encoder at startup.
- Two blocking GPU synchronizations in mixed batches (PLE metadata, QSA prefill bounds) are gone.
- A 512K view whose outer config has no
rope_parametersnow loads (#2). - The startup profile line no longer reports
pex_p2pbefore the workers have resolved
the interconnect, and the profile's own compile setting no longer triggers a
diagnostic warning (#2).
Multimodal:
- A repeated image or video is no longer evicted from the encoder cache while another
occurrence still needs it. - Media preprocessing runs on its own thread and no longer blocks tokenization.
- A multimodal request rejected after rendering no longer leaves its media registered.
- Videos with an unknown or invalid frame rate no longer fail.
- Startup checks that the visual token IDs in the config match the tokenizer.
- Faster placeholder matching for long multimodal prompts.
Documentation:
- The README's 512K view script failed to load. Fixed in the README on 2026-10-21 (#2).
- Host memory guidance for large image bursts (#2).
- The cause of batch-dependent output differences: the order of the tensor-parallel
all-reduce sums, amplified near routing and block-selection ties.
Release gate
All results come from the reference machine (4 × V100 32 GB PCIe behind one PCIe switch).
Baselines were measured with 0.1.0 in the same window.
| Check | Result |
|---|---|
| Greedy output and C1 fixed-seed sampling vs 0.1.0 | Identical |
| Full AWQ gate (4/8-request stress, multimodal stress, offload readback, 211K retrieval, 512K boundary) | Pass |
| Speed vs 0.1.0 (512-token responses, C1/C2/C4/C8) | Throughput ratio 1.004 / 1.019 / 1.008 / 0.999 |
| FP4-Local and standard NVFP4 smoke (release candidate) | Pass |
| Offload connector GPU unit tests | 158 passed; 2 failures also present in 0.1.0 (sliding-window layout, not used by this model) |
Known limitations
See README, Support and known limits.
New in this list: a qwen3_coder string argument containing the literal text
</function> is cut at that point.
Assets
| File | Content |
|---|---|
revolta-0.1.1-cp312-cp312-linux_x86_64.whl |
Wheel (Linux x86-64, Python 3.12, CUDA 12.8; debug symbols stripped) |
revolta-0.1.1-cp312-cp312-linux_x86_64.debug.tar.xz |
Separate debug symbols for the native extensions |
SHA256SUMS |
Checksums of the files above |
Docker image: ghcr.io/leonccaa/revolta:0.1.1 (digest sha256:dce36236fa4018c0d45fcf1a33284b8cdbb20638713ce5fdd2a77fca686cf084).
PyPI: pip install revolta==0.1.1 (added 2026-10-21). The PyPI file is
revolta-0.1.1-1-cp312-cp312-manylinux_2_34_x86_64.whl, sha256
87ad51a5aac165edc0dc094b96a8d9e861668930504ecbf0788512e9e7305b19. It contains the
same files as the wheel above. Only the metadata differs: plain version pins for
torch==2.10.0, torchaudio==2.10.0 and torchvision==0.25.0 instead of
download.pytorch.org URLs, the manylinux_2_34_x86_64 platform tag and build tag 1.
Both wheels need glibc 2.34 or newer.
The first PyPI file, revolta-0.1.1-cp312-cp312-manylinux_2_34_x86_64.whl, has a
malformed RECORD: paths that contain commas are not quoted. uv refuses it and pip
prints warnings. pip and uv prefer the build-1 file, which fixes this.
Thanks
Thanks to @jttdev for the first NVLink test and the bug
reports in #2.