How it works
The lab rents the card, runs six checks, and writes the recipe only if all of them pass.
{"model":"qwen3.5-9b",
"weights":"TheMelonGod/Qwen3.5-9B-exl3@22ef1303062e0f6d0b282440f8c1f685947f4938",
"engine":"tabbyapi-exl3@0f83e6198dc3",
"set":{"ctx":65536,"draft":"mtp"},
"card":"rtx-3070-ti-8gb",
"proof":[{"at":"2026-09-25","on":"vast","gpu":"RTX 3070 Ti",
"gates":"load chat reasoning tools context speed","tps":105.3,"prefill":1485}]}- weights
- A Hugging Face repo at an exact commit.
- engine
- A profile in
registry/engines/, pinned to its container image digest. - set
- Only the settings that differ from the profile's defaults.
- proof
- The runs it passed: where, on what GPU, which checks, and the speed measured. Sibling means it ran on the same chip family because nobody rents this card; earlier check means it passed the older acceptance and is waiting for a full run.
| load | The server lists the model within an hour |
| chat | A plain question gets an answer that ends on its own |
| reasoning | The thinking comes back separately, and 17 × 23 is answered 391 |
| tools | A weather tool is called with the right city, and its result is used in the reply |
| context | A code planted in a prompt filling 85% of the window is recalled |
| speed | Decode over the first 30 seconds of an answer is at least 15 tok/s. No answer is ever cut short. |
registry/ the source of truth, tiny
cards/<vendor>/<card>.json a GPU: name, memory, how to detect it
engines/<profile>.json an engine: pinned image, arguments, config
recipes/<vendor>/<card>/<model>.<engine>.<ctx>k.json
one recipe (~400 bytes): weights, engine, settings, proof
models.json each model: family, release date, what it is for
lab/ make recipes: lab.py (try, convert, render, check), catalog.py
dist/ catalog.json: everything above, rendered, 3 picks per GPU
site/ this website and its API
sdk/ js/ and python/: pick a recipe for a GPU, print the command
app/ local-ai: run a recipe on any Linux
images/ the container images we build (gateway, tabbyapi-exl3, ...)
plugin/ what the Omarchy Local AI plugin reads
data/ everything the registry held before; nothing reads itGET /api/v2/catalog.json | Everything: every GPU, its picks, every recipe with its rendered launch |
GET /api/v2/gpus/<gpu>.json | One GPU and its top recipes, launches included |
GET /api/v2/pick?gpu=RTX%203090&vram=24 | The recommended recipe for the GPU a program detected |
curl -s "https://local.sybilsolutions.ai/api/v2/pick?gpu=RTX%204090&vram=24" | jq .recipe.launch.image
// JavaScript (sdk/js): no dependencies
import { pick, command } from "@local-ai/registry";
const r = await pick({ gpu: "NVIDIA GeForce RTX 4090", vram: 24 });
console.log(command(r));
# Python (sdk/python): standard library only
from local_ai_registry import pick, command
print(command(pick(gpu="NVIDIA GeForce RTX 4090", vram=24)))