Skip to Content
DocsUse CasesModel Layers

Model Layers

Model layers are LODE’s primary use case. They describe pools of AI models available at a given tier in the StackNet registry.

Schema

model-layer-v1.lode
{ "schema": "lode", "version": 1, "name": "ModelLayer", "fields": [ { "id": 1, "name": "name", "type": "string", "required": true }, { "id": 2, "name": "isDefault", "type": "bool", "required": true }, { "id": 3, "name": "models", "type": "string[]", "required": true }, { "id": 4, "name": "defaultModel", "type": "string", "required": true }, { "id": 5, "name": "defaults", "type": "map<string,string>", "required": false } ] }

TypeScript Interface

interface ModelLayer { name: string; // "preview", "fast", "turbo" isDefault: boolean; // Default for bare aliases models: string[]; // Pool of canonical model IDs defaultModel: string; // Default from the pool defaults?: Record<string, string>; // Per-capability overrides }

Example Layer

preview-layer.json
{ "name": "preview", "isDefault": true, "models": [ "gpt-oss:20b", "qwen3:30b", "qwen3:8b", "qwen3-coder:30b", "minimax-m2.5:229b", "qwen3-omni:30b", "qwen3-vl:30b", "nomic-embed-text", "devstral:24b" ], "defaultModel": "gpt-oss:20b", "defaults": { "code": "qwen3-coder:30b", "embed": "nomic-embed-text", "vision": "qwen3-vl:30b", "media": "qwen3-omni:30b" } }

Compilation

$ lodec compile preview-layer.json -s model-layer-v1.lode -o preview.vein Compiled preview-layer.json preview.vein (187 bytes) Fingerprint: d4e8f1a2...

The equivalent JSON is ~350 bytes (pretty-printed) or ~220 bytes (compact). The Vein binary is ~187 bytes — roughly 15% smaller than compact JSON with full type safety and verifiability.

Distribution

The registry serves model layers as Vein binaries:

// Server app.get("/v1/registry/layers/:name/vein", (req, res) => { const layer = registry.getLayer(req.params.name); const schema = loadLode("model-layer-v1.lode"); const vein = compile(layer, schema); const fp = fingerprint(layer); res.set("Content-Type", "application/x-vein"); res.set("X-Lode-Fingerprint", fp); res.send(Buffer.from(vein)); });

Client Verification

const res = await fetch(`${registry}/v1/registry/layers/preview/vein`); const vein = new Uint8Array(await res.arrayBuffer()); const expected = res.headers.get("X-Lode-Fingerprint"); const schema = loadLode("model-layer-v1.lode"); if (verify(vein, expected, schema)) { const layer = decode(vein, schema); console.log(`Using ${layer.defaultModel} from ${layer.name} layer`); }

Per-Capability Resolution

The defaults map allows capability-specific model resolution:

function resolveModel(layer: ModelLayer, capability: string): string { return layer.defaults?.[capability] ?? layer.defaultModel; } resolveModel(previewLayer, "code"); // → "qwen3-coder:30b" resolveModel(previewLayer, "vision"); // → "qwen3-vl:30b" resolveModel(previewLayer, "chat"); // → "gpt-oss:20b" (default)
Last updated on