Loomis
Configuration

Model keys

How the assistant reaches a model, where the keys go, and how to change which models your users are offered.

Out of the box the assistant answers over the real streaming path with canned words. That is deliberate: every screen can be seen and evaluated, and nothing is billed, until a key exists.

One key is enough

Everything this product does with a model goes through the Vercel AI Gateway. A plain vendor/model string is enough for a call, the gateway holds the accounts with each vendor, and the installation holds one key:

AI_GATEWAY_API_KEY

That single key reaches Anthropic, OpenAI, Google and the rest, which is why the other keys in this list are not needed to start.

The providers the installation knows about

ProviderEnvironment nameNeeded now
Vercel AI GatewayAI_GATEWAY_API_KEYYes. This is the one that is in use
AnthropicANTHROPIC_API_KEYNo. Claude arrives through the gateway
OpenAIOPENAI_API_KEYNo. Arrives through the gateway
GoogleGOOGLE_GENERATIVE_AI_API_KEYNo. Arrives through the gateway
PerplexityPERPLEXITY_API_KEYNo. Searching runs on the gateway's own search tool
ExaEXA_API_KEYNo. Reached by the gateway when a turn asks for it

The dormant ones exist so that a direct route is a change of settings rather than a change of code. Intelligence → Providers & keys shows each provider with its environment name, whether a key is set, and what that key is for, including the honest note that several of them do nothing yet.

Where a key goes

Intelligence → Providers & keys accepts a key and stores it sealed in the database, encrypted with the installation's SETTINGS_SECRET. This is the path most owners use:

  1. Open Providers & keys.
  2. Paste the key beside the provider and save.
  3. Press the health check on the same row.
  4. Set which models are user-pickable in Intelligence → Models.

A sealed key is never shown again, not even to the owner. It can be replaced, and it can be removed.

Changing `SETTINGS_SECRET` loses the sealed keys

Sealed values are encrypted with it, so rotating that secret makes every stored provider key unreadable at once. Re-paste them afterwards, or keep them in the environment so that rotation costs nothing.

Which models your users see

Intelligence → Models is the catalogue, and it decides more than a list:

SettingWhat it changes
Tier namesWhat the three groups are called in the picker
Which models are in each tierWhat the quick picks actually call
LiveA model switched off disappears from the picker everywhere
Context and output ceilingsHow much a turn may carry, and how long an answer may be
Temperature ceilingThe upper bound a user or an agent may ask for
Capability tagsWhich models are trusted with tools, images, or long context
Default tierWhat a new account starts on
Blocked listGateway models a user may never pick, even if the gateway offers them

The picker inside the product offers a short list by tier and then the full gateway list, filtered by what the panel allows. A model that is live in the picker and disabled by the plan's entitlements is still refused at the plan level, and Money → Entitlements is where that is decided.

Checking it works

Open Intelligence → Providers & keys and press the health check on the gateway row.

Open System → Status & health, where the gateway is one of the four checks with its response time.

Ask the assistant something real in /dashboard/new, with a project open so that tools are exercised.

Watch Insight → Overview for the turn appearing, and Insight → Analytics for the model mix.

A refusal is not a failure

When a turn is refused, the reason is one of: no key, a rate limit for the plan, a spend ceiling, or a blocked model. Insight → Analytics counts refusals separately from failures for exactly this reason, and the refusal message names the window and the wait.