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:
kind | Reaches |
|---|---|
openai | OpenAI, Azure OpenAI, Ollama, vLLM, llama.cpp, LM Studio, Groq, Together, OpenRouter, Fireworks, DeepSeek, Mistral’s compatible endpoint, and most hosted gateways |
anthropic | Anthropic, and gateways that front the Messages API |
google | Google 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§
- Model
Config - The
[model]section of a manifest. - Model
Entry - What one model provides.
- Provider
Config - One service the operator declared.
Enums§
- Provider
Kind - The wire protocols Ingot speaks.
Constants§
- BUILT_
IN_ CATALOGUE - The models Ingot knows about without being told.