Repository navigation
Speedy 0.3.1
Qwen3.8-Flash-Next (125B MoE) on one or two consumer RTX cards. Fixes for long sessions and long prompts, tool-call parsing fixes, and a new ready-made engine for RTX 20 (Turing) cards.
Downloads
| File | For |
|---|---|
strata-linux-x64-rtx20.zip / strata-windows-x64-rtx20.zip |
New: RTX 20 series (sm_75: 2060, 2070, 2080, 2080 Ti, Titan RTX), built, not tested yet |
strata-linux-x64-rtx30.zip / strata-windows-x64-rtx30.zip |
RTX 30 series (sm_86), tested on 2x RTX 3080 |
strata-linux-x64-rtx40.zip / strata-windows-x64-rtx40.zip |
RTX 40 series (sm_89), built, not tested yet |
strata-linux-x64-rtx50.zip / strata-windows-x64-rtx50.zip |
RTX 50 series (sm_120), built, not tested yet |
CUDA 13, NVIDIA driver 580+. python setup.py picks the zip for your card automatically, now including RTX 20 cards.
RTX 20 note: Turing has no BF16/TF32 tensor cores, so a few kernels use fp32 fallbacks and prompt reads are slower than on RTX 30. Most RTX 20 cards have 8 GB; 11-12 GB or more is recommended. Reports from RTX 20/40/50 owners are welcome.
Fixes
- Long prompts on the layer-major prefill path (#4, thanks @WilliamStone): with
STRATA_PF_GROUP_SCRATCH=1, a large routed expert group could overflow the MoE scratch and turn the layer into NaN rows, stopping the engine on prompts of ~29K tokens and up (HTTP 503). Oversized groups are now split. Prefill speed unchanged. - Long sessions slowly losing their expert cache (upstream #4844): under
--pipeline-windows 2with--adapt-async, a stale copy-back range made the engine read experts from the model file again after warm-up. Now 0 file reads after 190K exchanges. - Split-window DMA ordering (upstream #5096): an empty group no longer overtakes the earlier group's uploads.
- Expert cache
autokeeps the ~256 MiB the allocator needs after it (#4474). On 10 GB cards set--vram-reserve-miblower (we use 444) to keep the same slot count. - The engine waits up to 20 s for RAM to be given back by an earlier engine instead of failing (#4051); clearer memlock / PLE lock messages (#4671, #4846).
- Layer-major prefill copies an expert with no mapped blob from its source instead of ending the request (#4695).
Tool calls and the server
- Tool-call recovery is on by default: damaged arguments, a stray closing think tag or a missing
</function>no longer lose the call (#4427, #4077);"tool_call_recovery": falseturns it off. - A tool the conversation already called counts as declared on all routes (#4663);
tools.write/functions.write/default_api.writemap to the declared tool (#4751). - Calls shown inside code fences or quotes are not run (#4702, #4703); a file that lists closing tags is written whole (#4701); quoted tool-call text in a string argument stays exact (#4078).
/v1/messagescontext overflow uses Anthropic's wording, so Claude Code compacts instead of retrying (#4838).- Repeat / frequency / presence penalties count the reply's tokens, not the end of the prompt (#4590;
STRATA_PENALTY_PROMPT=1restores the old window).
Performance
- Hyper-connection read kernels for 5-8 token launches: decode at c=8 +5-7 %, same bits.
- Opt-in tensor-core GDN scan on 99 KB cards (
STRATA_GDN_TC,STRATA_GDN_CONVL2=2), pinned per preset for 2x RTX 3080.
Build
- HIP build fixes (
vmm_chunk_new,alignason int4 arrays); CI builds HIP by hand.