Repository navigation
giq 0.5.2 — crash fix, large JSON schemas, CI
giq 0.5.2 fixes an engine crash in 0.5.1's interactive NVFP4 recipe and makes large JSON schemas converge on vllm. Upgrade in place.
Fixes
- The interactive NVFP4 recipe could crash under concurrent long requests.
qwen3.8-27b-nvfp4-chat(MTP with 3 draft tokens, 5.5 GiB KV, 4 parallel) scheduled 8,192 tokens a step. On a 32 GB card that step's working memory didn't fit beside the weights and the KV pool. Three agents reading their tool results at once ran the engine out of memory (31.2 of 31.8 GiB), and every request failed until giq restarted it.- It now schedules 4,096 tokens a step. The same three-agent load ran clean to 40k tokens of history each (peak 30.7 GiB), and a single agent's time to first token and decode rate were unchanged up to 60k.
- Why nothing caught it at start: with a KV size given in bytes, as giq gives it, vllm skips its memory profiling.
- Large JSON schemas on vllm no longer run into whitespace. Contributed by @pauldkling in #2. vllm's default grammar allows any whitespace between JSON tokens, and on a large or deeply nested schema the model can wander into newlines and spaces until
max_tokens, returning invalid JSON. Reproduced on an RTX PRO 6000 with a 13.5 KB schema: 92% whitespace,finish_reason: length.- New default: every vllm recipe uses the
xgrammarbackend with free whitespace switched off. - Opting out: a recipe can ask for vllm's default back with
structured_outputs: {backend: auto, disable_any_whitespace: false}. - Load-time check: a recipe that pairs
disable_any_whitespacewithbackend: autois refused when it loads, rather than by vllm minutes into a start. - Behaviour change: schema-constrained output from vllm is now compact JSON with no indentation, so fewer tokens and the same content.
- New default: every vllm recipe uses the
- A restarted engine keeps the previous run's log. giq restarts a crashed resident engine by itself, and the new run used to overwrite the log that held the crash's stack trace. The previous run now moves to
<name>.log.1. One run is kept, so a crash loop can't fill the disk. install-debian.sh --helpno longer starts a kernel build. The usage text is an unquoted heredoc, so the backticks aroundgiq prepare vllmwere command substitution: printing the help ran it wherever giq was installed.- CI runs. GitHub Actions now builds and tests every push and pull request, and builds the release files for a tag (this release's were built that way). Its first runs also caught a test that only passed on a machine with a GPU, and the installer bug above. The workflow can be started by hand too (
workflow_dispatch). - The test suite ignores the shell's giq configuration. With an operator's
GIQ_CONFIGand recipes directory in the environment, twelve policy, runner and registry tests failed against a correctmain. The suite now drops what configures a giq and keeps what only locates binaries and models.
Agent workload on an RTX 5090
Measured while finding the crash: an agent loop through giq's OpenAI endpoint, streamed with tools, its history growing by a ~5k-token tool result a turn. Recipe settings as qwen3.8-27b-nvfp4-chat in this release, pinned.
| History | Prefix cache hit | Time to first token | Decode |
|---|---|---|---|
| 6k | 0% | 0.7 s | 167 tok/s |
| 23k | 70% | 1.1 s | 163 tok/s |
| 60k | 86% | 2.2 s | 180 tok/s |
| 102k | 92% | 2.9 s | 170 tok/s |
| 125k | 94% | 3.5 s | 173 tok/s |
- Speed holds at long context. Decoding stays at 153–195 tok/s up to 125k tokens, because the model's linear-attention layers don't slow with context.
- Prefix caching works. Each turn re-reads about 8k tokens: the new tool result plus a stretch back to the last point where vllm saved the linear-attention state.
- Tool calls: 63 of 63 parsed correctly across one agent with thinking off, one with thinking on, and three at once.
Full changelog: v0.5.1...v0.5.2