Skip to content

ignis v0.6.2

Released 2026-10-12. The container image, the archives and the notes as written: the release on GitHub.

  • Playground: a Server view. A fourth view lists the models the server can load (the switch tables and the catalog, with what is on disk) and loads one with a click. It also edits the running configuration: every patchable field with its limits, per-model values through a scope selector (all models or one family) with where each value comes from (its own value, the profile, a flag, the shared value), “Apply” or “Apply and reload” depending on whether a field needs a reload, and the configuration shown as a config file. New routes: GET /v1/config/fields, GET /v1/config/origins, GET /v1/models/catalog and GET /v1/config?format=yaml. POST /v1/models/switch takes model alone, PATCH /v1/config removes a key with null (JSON merge patch), and CORS allows PATCH (#316)
  • Idle unload. After model.idle_unload seconds in which no request uses the model, the server unloads it and stays up. The default is 300; 0 never unloads. Set it with --model-idle-unload, IGNIS_MODEL_IDLE_UNLOAD, make IDLE_UNLOAD=, or live through PATCH /v1/config. GET /v1/models then reports status: "unloaded", and the VRAM, the pinned host pools and the KV-RAM are free for other programs. The next authenticated request that needs a model loads it again (status: "loading"; requests arriving meanwhile wait for the same load) and is served. On the 5090 the 27B is back in about 11 s. Reading the server’s state (/v1/models, the config and catalog routes, metrics) neither keeps the model loaded nor loads it (#317; ADR 0049)
  • By default the model is now unloaded after 5 minutes unused. The first request after an idle period pays a cold load and starts without the retained prompt state (prefix reuse). Start with --model-idle-unload 0 (or make IDLE_UNLOAD=0) to keep the previous behaviour, and for any benchmark against a long-running server.
  • GET /v1/config answers in the config file’s shape: shared values at the group level, and a section per model family where that family’s value differs.
  • An explicit switch, or a PATCH /v1/config that reloads, out of unloaded is recorded in last_switch. The load a request triggers is not.
  • Tests: the KV-disk round trip waits for the live file’s queued delete (a Windows CI flake).
  • ADR 0049: an idle model is unloaded, and the next request loads it again
podman run --rm --device nvidia.com/gpu=all -p 8000:8000 \
-v /path/to/models:/models:ro \
-e IGNIS_MODEL_ARTIFACT=/models/<name>.ninfer \
ghcr.io/gpillon/ignis:0.6.2

(docker: --gpus all in place of --device.) The image carries the CUDA runtime but no driver — the host’s NVIDIA driver is injected by the container runtime. It is built from the same compile as the Linux tarball below, so the two always carry the same binaries.

The kernel is compiled for SM120a (RTX 5090 / Blackwell consumer) only, and the engine needs a .ninfer artifact, which is not part of this release. The Linux tarball needs the CUDA 13 runtime on the host; the Windows zip carries cudart64_*.dll. Both need an NVIDIA driver new enough for CUDA 13.

Apache-2.0 (LICENSE, NOTICE); the vendored reference ops keep their own terms (NOTICE-kernel).

Full Changelog: https://github.com/gpillon/ignis/compare/v0.6.1...v0.6.2