AI providers and models
Every install ships the full model catalog. People only pick models this installation can actually reach. Saving a provider key makes that provider's models appear at once — the catalog does not need to be seeded again, and the container does not need a restart.
What people see
Availability is decided when the list is read. A provider counts as available when its API key or server URL is present. An Ollama model also has to be pulled on that server.
| Who | What they see |
|---|---|
| Regular users | Models of available providers only. Unconfigured cloud models and Ollama models that are not pulled yet are hidden. |
| Administrators | The full catalog on the admin tabs of Manage → Assistants → Models. Unavailable rows stay in the list, greyed, with a badge: Provider not configured or Not pulled. |
Keys are entered on Operate → AI infrastructure → Models & keys (/admin/setup). A key is tested against the provider, stored encrypted, and used on the next request. Select suggested models recommends only within the providers this installation can reach. A new account keeps the install-wide defaults until that person chooses a model.
Health checks (Operate → Model Status) are separate: a provider that is configured but briefly down still appears in the picker.
Command line
php bin/console app:provider:list
php bin/console app:provider:list --fresh
php bin/console app:model:enable --provider groq
php bin/console app:model:disable --provider openai
php bin/console app:model:enable --only ollama --only piper --only whisper
app:model:disable is a soft deactivate. It sets the model inactive and not selectable and keeps the row, so chat history that points at it still resolves. The next app:seed (every container start) leaves that choice in place. There is no command that deletes catalog rows. Turn a provider back on with app:model:enable --provider <name>.
--only is an allow-list: those providers are enabled and every other catalog provider is soft-disabled. A cloud provider added in a later release stays off until you extend the list. It cannot be combined with --provider or with per-model keys.
On Kubernetes the same switches are models.providers.only, models.providers.enabled, and models.providers.disabled. The air-gap overlay is examples/values-airgap.yaml.
Speech without a cloud key
Local speech-to-text is a catalog entry (Whisper, tag sound2text). It is available when WHISPER_ENABLED is on and the whisper.cpp binary plus the WHISPER_DEFAULT_MODEL file are present, so SOUND2TEXT can point at it on every browser. Spoken answers use Piper when SYNAPLAN_TTS_URL answers — see Text-to-Speech.
On an install that must stay on your network, set WEB_SPEECH_ENABLED=false. Chrome's Web Speech API sends the recording to Google; with the flag off, the microphone records and the server transcribes with Whisper. The full local setup is Air-gapped installation.
Typical setups
- Try it locally.
docker compose upwith thelocal-aiprofile and no cloud keys. The picker lists the Ollama models that have finished downloading. Speech-to-text is local Whisper. - Local, plus one or two cloud keys. Paste a Groq or OpenAI key under Models & keys. That provider's models show up within seconds. Suggested defaults stay inside the providers that are actually configured.
- Kubernetes. Point
ollama.baseUrl(or Triton) at your inference service and optionally narrow the catalog withmodels.providers.*. See Kubernetes. - Air-gapped. Pre-pulled Ollama models,
WEB_SPEECH_ENABLED=false, local Whisper and Piper, and the Helm allow-list so later cloud providers stay off. See Air-gapped installation.
Provider keys themselves — where to paste them, encryption, env import — are on Administration. Local Ollama setup is the Local AI module page.