API
Models
Open weights only, each one pinned on-chain to the exact build an operator committed to serve.
The catalogue
Prices are USDC per million tokens. Latency is the observed median across nodes currently serving the model, not a promise.
| Model | Quant | Class | Input | Output | p50 |
|---|---|---|---|---|---|
| llama-3.3-70b-instruct | Q4_K_M | Forge | $0.180 | $0.55 | 640 ms |
| qwen2.5-32b-instruct | Q5_K_M | Core | $0.090 | $0.28 | 410 ms |
| mistral-small-24b | Q5_K_M | Core | $0.060 | $0.19 | 330 ms |
| gemma-3-12b-it | Q4_K_M | Spark | $0.030 | $0.08 | 210 ms |
| bge-m3 | F16 | Spark | $0.012 | — | 45 ms |
The class column is the minimum hardware that can hold the model. Asking for a higher class with vacuum.min_node_class usually buys throughput at the cost of a smaller pool.
Registry IDs
A model on Vacuum is not a name, it is an entry in an on-chain registry. The entry’s ID is derived from three things together:
- the hash of the weights file
- the quantization format
- the inference engine version
All three matter. The same weights at a different quantization are a different entry, because they are a different model in every way a user would notice. An operator commits to serving one exact entry, and quietly substituting another is fraud — detectable by the sampled audits described in Receipts and proofs.
Pinning a build
Passing a catalogue name gets you the current build for that name, which can change when a better quantization or a newer engine is published. That is usually what you want.
{ "model": "qwen2.5-32b-instruct" }When you need the exact same behaviour over time — a vector index, a benchmark, a regression suite — append the registry ID and the router will only route to nodes serving that build.
{ "model": "qwen2.5-32b-instruct@0x3f8b21c7e94a0d6528bf17ae3c904d11" }A pinned build is a smaller pool, and eventually an empty one — old builds are retired as operators move on. A pinned request that can no longer be served returns model_unavailable rather than silently falling back.
Listing at runtime
Do not hardcode the catalogue. Prices move with supply and demand, and builds are replaced.
curl https://api.vacuumfi.com/v1/models \ -H "Authorization: Bearer $VACUUM_KEY"{ "object": "list", "data": [ { "id": "qwen2.5-32b-instruct", "object": "model", "registry_id": "0x3f8b21c7e94a0d6528bf17ae3c904d11", "quantization": "Q5_K_M", "engine": "vllm-0.9.2", "context_window": 32768, "min_node_class": "Core", "pricing": { "input_usdc_per_mtok": "0.09", "output_usdc_per_mtok": "0.28" }, "observed": { "p50_latency_ms": 410, "nodes_serving": 486 } } ]}| Field | Type | Description |
|---|---|---|
| id | string | The catalogue name you pass as model. |
| registry_id | string | The on-chain entry this name currently resolves to. |
| context_window | integer | Total tokens, prompt and completion together. |
| min_node_class | string | Smallest hardware class that can hold it. |
| observed | object | Live median latency and how many nodes are serving it right now. Both move. |