Repository navigation
giq 0.6.0
giq 0.6.0 splits giq into a small core and plugins.
- Core: the queue, scheduler, API and dashboard, plus LLMs through llama.cpp. Installed alone it needs no torch and takes about 40 MB.
- Curated plugins, each its own package, released with core: image generation, speech, OCR, depth and vllm.
- Installing everything:
make syncor the installer, exactly as before. - Your own plugins: anything else, including multiview, now comes as a plugin. The contract is documented and versioned.
- Installing a few: every package is a wheel on this release;
giq pluginsprints the command for each one not installed.
0.6.0 also changes how models get onto a machine. The Recipes page shows what runs here. A new Add page fetches the rest from the Hugging Face Hub, after showing what that takes. giq add <recipe> does the same from the command line.
Breaking: POST /multiview and five old recipes are gone, and a few defaults moved. Read Upgrading first.
Plugins
A plugin is a Python package that registers engines, modalities, routes, recipes and dashboard panels through the giq.plugins entry point (ADR-004, docs/plugins.md). Installing it is the whole of enabling it.
-
The curated plugins live in this repository as packages of one uv workspace, all version 0.6.0:
Package Adds giq-vllmthe vllm engine for LLMs, giq prepare vllmgiq-sdcppimage generation and editing, with their sandbox panels giq-speechspeech to text with diarization, text to speech, voiceprints, /v1/audio/*, their sandbox panelsgiq-ocrdocument OCR, POST /ocrgiq-depthdepth maps, POST /depthgiq-defaultsall of the above Each brings its own recipes and dependencies, so torch leaves core's dependency list.
-
Plugins only add. A plugin is refused whole, with the reason in
giq pluginsand/status, when:- it was written for another plugin API version;
- it does not import;
- it takes a name or a route that is already registered.
Core and the other plugins keep serving.
-
Plugins bring dashboard panels. The sandbox draws its tabs from what is installed. The image and speech panels now ship with their plugins, under the same addresses, so links and bookmarks still work. A plugin's module gets React, the API client and the shared components from the dashboard through
@giq/plugin-ui, so it never bundles its own copy of React. -
Child processes speak
giq_child, a standard-library-only protocol. A plugin's child can therefore run on an interpreter of its own, without giq, when its dependencies cannot share giq's. -
Every engine-specific detail is now a registration:
- the routes, smoke tests (
POST /test/{modality}, which replaces/test/{kind}) andgiq prepare <engine>; - the startup clean-up of leftover servers;
- the modality labels, icons and colours the dashboard shows.
- the routes, smoke tests (
Multiview leaves giq: the way back is a plugin
Multi-view geometry with Depth Anything 3 served one project. It pinned numpy below 2 and needed its own interpreter, which made it a poor fit for every install. 0.6.0 removes it:
- the
multiviewmodality,POST /multiviewand theda3-baserecipe; - the
da3engine andenvs/da3.
Old multiview jobs in the history still show, in the neutral colour.
If you need multiview, it belongs in an engine plugin, which is the case the contract was designed for:
- An engine with an interpreter of its own. Its
preparehook (giq prepare da3) builds that interpreter from a lock the plugin ships. - A child that speaks
giq_child. It runs on that interpreter without giq installed. - The
multiviewmodality, its route and its recipe. The plugin registers all three.
docs/plugins.md walks through each part.
Getting recipes
-
The Recipes page shows what is on this machine. A recipe that cannot run here is marked, with the reason: its engine binary is missing, or no card fits it.
-
The Add page lists everything else by modality, with a search:
- recipes giq can fetch;
- recipes whose files you place yourself;
- curated plugins not installed, with their install command. The dashboard never installs a plugin.
-
giq plans before it fetches. "Check what it takes" shows:
- whether a card fits it;
- the download size, from the Hub;
- free disk where the files go;
- which parts another recipe already brought;
- whether a gated repository opens with your token;
- the licence.
Then it offers the fetch, with live progress and a stop button. A stopped fetch resumes next time. Files appear in place only when all of them have arrived.
-
giq add <recipe>prints the same plan, asks once, and fetches.--dry-runstops after the plan. Under the hardened systemd unit the service may not write the models directory, so the dashboard hands you this command instead. -
Every built-in recipe says where its weights come from.
- A source names a whole Hub repository, or one file of it (
hf:org/repo/path/in/repo). - Weights under the models directory are pinned to the commit whose files their VRAM figure was measured with. The gemma GGUFs are pinned to the revisions before unsloth's re-uploads.
- flux_klein now loads z-image's text encoder, which is byte-identical to its own.
- A source names a whole Hub repository, or one file of it (
-
The vision projector is weights:
weights.parts.mmproj. It is inventoried, fetched and deleted like the rest.params.mmprojin an existing file still loads, with a warning. -
The API follows:
/recipesgives each recipe's availability and the checks behind it;GET /recipes/{name}/planandPOST /recipes/{name}/fetch;GET/DELETE /downloads;DELETE /recipes/{name}/weightsremoves what only that recipe loads;GET /plugins.
Clients see what runs
/capabilitiesadvertises, per modality, only the recipes that run here. They come in preferred order, kept warm first, with adefault. The rest are offered underavailable, with a one-line verdict. Every installed modality is listed, even with nothing ready.GET /capabilities/{modality}returns one entry./v1/modelslists the same LLMs in the same order.- The audio routes run the recipe
modelnames. OpenAI's names (whisper-1,tts-1) get the modality's default. /llm/endpointwithout?model=points at the first LLM kept warm. It used to point at gemma-4-12b.
Fixes
- Transcription with diarization and voiceprints no longer fail with a 500 unless kept warm. The on-demand path rejected the plain dicts the audio and voiceprint adapters return. Since 0.5.3 stopped keeping them warm by default, every diarized transcription and every voiceprint failed on a default install.
One torch, and Unlimited-OCR on it
- giq runs vllm's torch line: torch 2.13, torchvision 0.28, torchaudio 2.11. A card sees one torch, and VRAM figures compare across engines.
giq-defaultsholds the line for every curated plugin. - Unlimited-OCR runs on giq's own transformers 5. Its separate interpreter is gone. giq's OCR child adapts three changes from transformers 4.57: the cache's maximum length, the tokenizer, and the rotary embeddings. Its output is byte-for-byte identical to 4.57's on the pages checked. The OCR child is chosen from the checkpoint's architecture, and
engine: transformers-4.57loads astransformers, with a warning.
Upgrading
- Multiview users: stay on 0.5.x until a multiview plugin is installed next to giq 0.6.0 (see above).
POST /multiviewand themultiviewmodality are gone from giq itself. - Five old recipes left the built-in catalog: gemma-3-27b-it-qat, llama-3.2-3b, qwen-coder-30b, qwen3.5-35b-a3b and qwen3.6-27b. If you still run one, copy its file from 0.5.3 into your recipes directory.
make syncafter checking out 0.6.0. It installs core and every curated plugin, as a single environment did before, and moves it to torch 2.13. That is a large download.- Remove the old side environments.
envs/unlimited-ocr/.venvandenvs/da3/.venvare no longer used, andGIQ_UNLIMITED_OCR_PYTHONis ignored. - Behaviour that changed:
/test/{kind}is now/test/{modality};/test/imageis/test/text2image./capabilitiesand/v1/modelsno longer list recipes whose weights are missing./llm/endpointneeds?model=when nothing is kept warm.
- Operator recipe files with
params.mmprojkeep working. Move the line toweights.parts.mmprojto silence the warning. - Re-measure VRAM figures where they matter. The
measured: truefigures date from torch 2.11.
Full changelog: v0.5.3...v0.6.0