Skip to content

giq 0.5.2 — crash fix, large JSON schemas, CI

Choose a tag to compare

@github-actions github-actions released this 02 Oct 16:26
· 41 commits to main since this release

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 xgrammar backend 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_whitespace with backend: auto is 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.
  • 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 --help no longer starts a kernel build. The usage text is an unquoted heredoc, so the backticks around giq prepare vllm were 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_CONFIG and recipes directory in the environment, twelve policy, runner and registry tests failed against a correct main. 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