Skip to main content

Model Catalog

Every chat node picks a model from a portal picker fed by three sources: the bundled BYOK provider shortlists, the CLI agents’ own --model alias lists, and a remote patch channel that can update the BYOK lists without an app release. This page is the full catalog as coded in src/lib/chatModels.ts. For how the backends themselves work — API, CLI agent, and Warp — see Chat Pane. The short version: the API (BYOK) backend calls provider SDKs from the app’s frontend via the Vercel AI SDK, the CLI Agent backend drives the vendor CLI headlessly through a per-turn Node bridge (auth is whatever the CLI is already logged into), and Warp is an experimental Rust gateway that routes provider/model strings in a single round trip.

BYOK providers

Nine providers ship in the bundled floor (PROVIDER_MODELS in src/lib/chatModels.ts), 88 models in total. Context windows come from the context map in config/models.json; models without an entry there fall back to the 128,000-token default (DEFAULT_CONTEXT).

CLI agent shortlists

The four CLI-agent backends ride the same cli backend and bridge sidecar; each has its own --model alias shortlist (CLI_AGENT_MODELS in src/lib/chatModels.ts). Order is default first.
These are the CLI’s real --model aliases, not BYOK model ids.

The models.json patch channel

The bundled tables above are a floor. On top of it runs a data-only patch channel that lives outside the app-version updater (src/lib/remoteConfig.ts), so a new model can ship by editing config/models.json and pushing, without cutting a release. At startup, startModelManifestFetch:
1

Fetch

Fetches https://cdn.jsdelivr.net/gh/tempestai-dev/tempest@main/config/models.json with cache: "no-cache".
2

Validate

validate() turns the untrusted JSON into a manifest patch. Anything malformed is dropped rather than coerced, unknown keys are ignored, and a bad manifest degrades to “no patch” — never a throw.
3

Merge

The patch is merged over the bundled floor: provider-level replace plus a context merge by id. A provider the patch names wins whole; a provider it omits keeps its bundled list.
4

Cache

The last-good raw manifest is written to localStorage under the key tempest-model-manifest.
To add a model through the patch channel you supply that provider’s full array — the patch replaces the named provider wholesale. An empty or partial fetch can never blank the UI, though: the merge can only add or replace whole providers, never remove one, so the bundled floor always stands underneath.
Resolution order: the bundled floor merged with the last-good cache is available before any network runs (new installs get the bundled lists; returning users get the last-fetched lists even offline), and a live fetch overwrites both. The fetch is silent on failure — the bundled or cached floor already works. The channel is explicitly unsigned, by design: it carries display data only — model ids, labels, context numbers — nothing that grants privilege or influences behavior, so it needs no signature. Contrast this with the agent manifest, config/agents.json, which is verified with minisign because it carries CLI command strings and auto-approve flags. See Agent manifest.

Adding a model

No release: config/models.json

Edit config/models.json and push to main. The jsDelivr-hosted manifest is fetched at startup, validated, and merged over the bundled floor. Update the file’s updatedAt stamp while you’re there.

Release: the bundled floor

Edit PROVIDER_MODELS / MODEL_CONTEXT in src/lib/chatModels.ts. This changes what ships in the app itself and goes out with the next release — use it for the initial catalog or when a bundled shortlist should change structurally.
BYOK provider keys come from your OS credential manager, entered once in Settings → API Keys — see API Keys. The experimental Warp backend is separate from all of the above: it has its own provider/model list (currently openai/gpt-5-nano, openai/gpt-4o-mini, deepseek/deepseek-v4-flash, kimi/kimi-k3, openrouter/anthropic/claude-sonnet-4) and is gated behind Settings → Experimental. See Chat Pane.