[models] in config.toml. The active provider is chosen automatically per request (primary → fallback → fast → local, based on task complexity), or forced to one provider at runtime via POST /api/v1/settings/model.
Supported providers
Every key also accepts
ENV:VAR_NAME (reads an environment variable) or op://vault/item/field (resolves via the 1Password CLI) instead of a plaintext value.
Configuration
primary/fallback/fast/local are model IDs, not provider names — the provider is inferred from the ID’s prefix (claude-* → Anthropic, gemini-* → Google, grok-* → xAI, ollama/* → Ollama, openrouter/* → OpenRouter, etc.).
Ollama (fully local)
ollama pull llama3.2:1b.
Checking provider status
GET /v1/models for OpenAI/Mistral/xAI/Moonshot/OpenRouter/Groq/Together/Fireworks/DeepSeek, Ollama’s GET /api/tags) — every other provider reports “not supported” rather than a guessed result. See API Reference → Overview for the matching GET /api/v1/models route.
Switching providers at runtime
"provider": null to restore automatic task-based routing. The switch takes effect immediately for the next request — no restart needed.
Reasoning effort (“thinking”)
A normalizedoff|low|medium|high|xhigh|max ladder maps to each provider’s native reasoning control — Anthropic’s extended thinking (with a scaled token budget), xAI/OpenRouter’s reasoning_effort field, and Ollama’s think field (collapsed to a boolean: off → false, anything else → true, since not every Ollama model accepts the 3-tier string form). Every other provider ignores it — notably DeepSeek, which has no per-request reasoning-effort field at all; its only reasoning lever is which model you configure (deepseek-chat vs. deepseek-reasoner).
ModelRouter.generate() (the 32 channel adapters) or generate_stream() (the Web UI and voice assistant) — both read the same /think level.
Cost tracking
Token counts and estimated USD cost (from a static per-model pricing table) are tracked automatically per generation:$0.00 — see Observability.
Privacy mode
Withprivacy_mode = true, NeuralCleave forces every request to Ollama regardless of the configured provider. Combined with local voice (faster-whisper + Kokoro) and local embeddings (all-MiniLM-L6-v2), zero bytes leave your machine. See Privacy Mode.