Providers & Models

Built-in providers (14)

From src/utils/values.ts:

Provider typeDefault base URLSDK
openaihttps://api.openai.com/v1@ai-sdk/openai
openai-compatible(user-supplied)@ai-sdk/openai-compatible
openai-responses(user-supplied)@ai-sdk/openai with /responses endpoint
anthropichttps://api.anthropic.com/v1@ai-sdk/anthropic
googlehttps://generativelanguage.googleapis.com/v1beta@ai-sdk/google
cerebras(user-supplied)@ai-sdk/openai-compatible
minimax (M2.7)(user-supplied)@ai-sdk/openai-compatible
openrouterhttps://openrouter.ai/api/v1@openrouter/ai-sdk-provider
xai(user-supplied)@ai-sdk/xai
deepseek(user-supplied)@ai-sdk/deepseek
ollamahttp://<your-ollama-host>:<port>/api (default 11434)ai-sdk-ollama
burncloudhttps://ai.burncloud.com/v1@ai-sdk/openai-compatible
togetherai(user-supplied)@ai-sdk/togetherai
groq(user-supplied)@ai-sdk/groq
cohere(user-supplied)@ai-sdk/cohere
mistral(user-supplied)@ai-sdk/mistral

Adding your first provider

  1. Open the app, navigate to Settings (gear icon in left drawer).
  2. Under Default Provider, click Add → pick a provider type (e.g. OpenAI Compatible).
  3. Fill in: Display Name, Base URL (for non-fixed providers), API Key.
  4. The provider gets a Share Link at the top of Settings. Copy and share it — others who open it auto-fill their settings.

Custom providers (mix-and-match subproviders)

Beyond the 14 built-ins, you can define a Custom Provider in /settings/providers/:id that maps model names across multiple subproviders:

  • Subproviders: each subprovider is itself a provider (built-in or another custom) with a modelMap from your custom model id to the upstream model id.
  • Fallback provider: if a model id is not in any subprovider's map, the request falls back to this provider.
  • Useful when you route cheap queries to one upstream, expensive ones to another, and present them under one alias to your assistants.

Data shape (from src/utils/types.ts):

interface CustomProvider {
  id: string
  name: string
  avatar: Avatar
  subproviders: { provider: Provider, modelMap: Record<string, string> }[]
  fallbackProvider?: Provider
}

Model selection — the cascade

When a dialog runs a turn, the model is picked in this order:

  1. dialog.modelOverride (set per-conversation via the model picker in the header)
  2. assistant.model (set on the assistant used for this dialog)
  3. userPerfs.model (the global default, set in Settings → Default Model)

Each model has an inputTypes triple of {user, assistant, tool} string arrays describing what content types it accepts (text, image, audio, pdf).

Common models shortcut

Settings → Common Models is a list of model ids you switch between often. The picker at the top of a dialog has a quick-pick dropdown populated from this list.

System assistant

Settings → System Assistant is a separate (provider, model) pair used for two background jobs:

  • Auto-summarizing a conversation title after the first turn
  • Extracting artifacts from assistant replies

If left blank, the global default provider/model is used.