Skip to main content

Module catalogue

Module catalogue 

Source
Expand description

Which model services this machine can reach.

Three are built in, because most people want them and none needs configuring. Everything else is declared by the operator:

[model]
default = "local"

[[model.provider]]
name = "local"                 # the vendor half of `model exact "local/…"`
kind = "openai"                # the wire protocol it speaks
base-url = "http://localhost:11434/v1/chat/completions"

[[model.provider]]
name = "azure"
kind = "openai"
base-url = "https://…/chat/completions?api-version=2024-10-21"
api-key-env = "AZURE_OPENAI_KEY"

kind names a protocol, not a company. Ingot implements three, and a service that speaks any of them can be reached by naming it here — which is why “how many providers does Ingot support” is the wrong question. The answer to the right one:

kindReaches
openaiOpenAI, Azure OpenAI, Ollama, vLLM, llama.cpp, LM Studio, Groq, Together, OpenRouter, Fireworks, DeepSeek, Mistral’s compatible endpoint, and most hosted gateways
anthropicAnthropic, and gateways that front the Messages API
googleGoogle Gemini

A third protocol is here for one reason: Gemini is the vendor that cannot be reached by pretending to be something else. Anything that already speaks one of the first two needs no code, only a base-url.

§What a model can do, as opposed to where it is

model requires { structured_output, context >= 128k } has to be matched against something. That something is also here:

[[model.catalogue]]
model = "openai/gpt-5.1"
context = 400000
capabilities = ["tool_calling", "structured_output", "streaming"]

These facts used to be consts in a provider module, which had two costs. A model growing a larger context window was a code change and a release. And only one of the three providers had them at all — the other two refused a capability requirement outright, saying they had “no catalogue to match them against”. This is that catalogue, and all three now consult it through ModelConfig::resolve_capabilities, so they cannot answer the same question differently.

base-url is a complete endpoint for openai and anthropic. For google it is the API base, because that protocol puts the model and the method in the path — see ProviderKind::base_url_is_an_endpoint.

api-key-env names an environment variable. There is no way to write a key into a manifest, for the same reason there is none in [[mcp.server]]: a manifest is committed. A provider with no api-key-env sends no authentication at all, which is what a local server usually wants.

Structs§

ModelConfig
The [model] section of a manifest.
ModelEntry
What one model provides.
ProviderConfig
One service the operator declared.

Enums§

ProviderKind
The wire protocols Ingot speaks.

Constants§

BUILT_IN_CATALOGUE
The models Ingot knows about without being told.