openclaw/docs/concepts/model-providers.md

314 lines
8.4 KiB
Markdown
Raw Normal View History

2026-01-10 21:37:38 +01:00
---
summary: "Model provider overview with example configs + CLI flows"
read_when:
- You need a provider-by-provider model setup reference
- You want example configs or CLI onboarding commands for model providers
title: "Model Providers"
2026-01-10 21:37:38 +01:00
---
2026-01-31 21:13:13 +09:00
2026-01-10 21:37:38 +01:00
# Model providers
2026-01-13 08:11:59 +00:00
This page covers **LLM/model providers** (not chat channels like WhatsApp/Telegram).
2026-01-10 21:37:38 +01:00
For model selection rules, see [/concepts/models](/concepts/models).
## Quick rules
- Model refs use `provider/model` (example: `opencode/claude-opus-4-5`).
- If you set `agents.defaults.models`, it becomes the allowlist.
2026-01-30 03:15:10 +01:00
- CLI helpers: `openclaw onboard`, `openclaw models list`, `openclaw models set <provider/model>`.
2026-01-10 21:37:38 +01:00
## Built-in providers (pi-ai catalog)
2026-01-30 03:15:10 +01:00
OpenClaw ships with the piai catalog. These providers require **no**
2026-01-10 21:37:38 +01:00
`models.providers` config; just set auth + pick a model.
### OpenAI
- Provider: `openai`
- Auth: `OPENAI_API_KEY`
- Example model: `openai/gpt-5.2`
2026-01-30 03:15:10 +01:00
- CLI: `openclaw onboard --auth-choice openai-api-key`
2026-01-10 21:37:38 +01:00
```json5
{
2026-01-31 21:13:13 +09:00
agents: { defaults: { model: { primary: "openai/gpt-5.2" } } },
2026-01-10 21:37:38 +01:00
}
```
### Anthropic
- Provider: `anthropic`
- Auth: `ANTHROPIC_API_KEY` or `claude setup-token`
- Example model: `anthropic/claude-opus-4-5`
2026-01-30 03:15:10 +01:00
- CLI: `openclaw onboard --auth-choice token` (paste setup-token) or `openclaw models auth paste-token --provider anthropic`
2026-01-10 21:37:38 +01:00
```json5
{
2026-01-31 21:13:13 +09:00
agents: { defaults: { model: { primary: "anthropic/claude-opus-4-5" } } },
2026-01-10 21:37:38 +01:00
}
```
### OpenAI Code (Codex)
- Provider: `openai-codex`
- Auth: OAuth (ChatGPT)
2026-01-10 21:37:38 +01:00
- Example model: `openai-codex/gpt-5.2`
2026-01-30 03:15:10 +01:00
- CLI: `openclaw onboard --auth-choice openai-codex` or `openclaw models auth login --provider openai-codex`
2026-01-10 21:37:38 +01:00
```json5
{
2026-01-31 21:13:13 +09:00
agents: { defaults: { model: { primary: "openai-codex/gpt-5.2" } } },
2026-01-10 21:37:38 +01:00
}
```
### OpenCode Zen
- Provider: `opencode`
- Auth: `OPENCODE_API_KEY` (or `OPENCODE_ZEN_API_KEY`)
- Example model: `opencode/claude-opus-4-5`
2026-01-30 03:15:10 +01:00
- CLI: `openclaw onboard --auth-choice opencode-zen`
2026-01-10 21:37:38 +01:00
```json5
{
2026-01-31 21:13:13 +09:00
agents: { defaults: { model: { primary: "opencode/claude-opus-4-5" } } },
2026-01-10 21:37:38 +01:00
}
```
### Google Gemini (API key)
- Provider: `google`
- Auth: `GEMINI_API_KEY`
- Example model: `google/gemini-3-pro-preview`
2026-01-30 03:15:10 +01:00
- CLI: `openclaw onboard --auth-choice gemini-api-key`
2026-01-10 21:37:38 +01:00
### Google Vertex, Antigravity, and Gemini CLI
2026-01-10 21:37:38 +01:00
- Providers: `google-vertex`, `google-antigravity`, `google-gemini-cli`
- Auth: Vertex uses gcloud ADC; Antigravity/Gemini CLI use their respective auth flows
- Antigravity OAuth is shipped as a bundled plugin (`google-antigravity-auth`, disabled by default).
2026-01-30 03:15:10 +01:00
- Enable: `openclaw plugins enable google-antigravity-auth`
- Login: `openclaw models auth login --provider google-antigravity --set-default`
- Gemini CLI OAuth is shipped as a bundled plugin (`google-gemini-cli-auth`, disabled by default).
2026-01-30 03:15:10 +01:00
- Enable: `openclaw plugins enable google-gemini-cli-auth`
- Login: `openclaw models auth login --provider google-gemini-cli --set-default`
- Note: you do **not** paste a client id or secret into `openclaw.json`. The CLI login flow stores
2026-01-25 05:53:17 +00:00
tokens in auth profiles on the gateway host.
2026-01-10 21:37:38 +01:00
### Z.AI (GLM)
- Provider: `zai`
- Auth: `ZAI_API_KEY`
- Example model: `zai/glm-4.7`
2026-01-30 03:15:10 +01:00
- CLI: `openclaw onboard --auth-choice zai-api-key`
2026-01-10 21:37:38 +01:00
- Aliases: `z.ai/*` and `z-ai/*` normalize to `zai/*`
2026-01-16 14:40:56 +01:00
### Vercel AI Gateway
- Provider: `vercel-ai-gateway`
- Auth: `AI_GATEWAY_API_KEY`
- Example model: `vercel-ai-gateway/anthropic/claude-opus-4.5`
2026-01-30 03:15:10 +01:00
- CLI: `openclaw onboard --auth-choice ai-gateway-api-key`
2026-01-16 14:40:56 +01:00
2026-01-10 21:37:38 +01:00
### Other built-in providers
- OpenRouter: `openrouter` (`OPENROUTER_API_KEY`)
- Example model: `openrouter/anthropic/claude-sonnet-4-5`
- xAI: `xai` (`XAI_API_KEY`)
- Groq: `groq` (`GROQ_API_KEY`)
- Cerebras: `cerebras` (`CEREBRAS_API_KEY`)
2026-01-12 05:57:49 +00:00
- GLM models on Cerebras use ids `zai-glm-4.7` and `zai-glm-4.6`.
- OpenAI-compatible base URL: `https://api.cerebras.ai/v1`.
2026-01-10 21:37:38 +01:00
- Mistral: `mistral` (`MISTRAL_API_KEY`)
- GitHub Copilot: `github-copilot` (`COPILOT_GITHUB_TOKEN` / `GH_TOKEN` / `GITHUB_TOKEN`)
## Providers via `models.providers` (custom/base URL)
Use `models.providers` (or `models.json`) to add **custom** providers or
OpenAI/Anthropiccompatible proxies.
2026-01-12 06:47:57 +00:00
### Moonshot AI (Kimi)
Moonshot uses OpenAI-compatible endpoints, so configure it as a custom provider:
- Provider: `moonshot`
- Auth: `MOONSHOT_API_KEY`
- Example model: `moonshot/kimi-k2.5`
- Kimi K2 model IDs:
2026-02-02 02:08:24 +01:00
{/_ moonshot-kimi-k2-model-refs:start _/}
- `moonshot/kimi-k2.5`
- `moonshot/kimi-k2-0905-preview`
- `moonshot/kimi-k2-turbo-preview`
- `moonshot/kimi-k2-thinking`
- `moonshot/kimi-k2-thinking-turbo`
2026-02-02 02:08:24 +01:00
{/_ moonshot-kimi-k2-model-refs:end _/}
2026-01-31 21:13:13 +09:00
2026-01-12 06:47:57 +00:00
```json5
{
agents: {
2026-01-31 21:13:13 +09:00
defaults: { model: { primary: "moonshot/kimi-k2.5" } },
2026-01-12 06:47:57 +00:00
},
models: {
mode: "merge",
providers: {
moonshot: {
baseUrl: "https://api.moonshot.ai/v1",
apiKey: "${MOONSHOT_API_KEY}",
api: "openai-completions",
2026-01-31 21:13:13 +09:00
models: [{ id: "kimi-k2.5", name: "Kimi K2.5" }],
},
},
},
2026-01-12 06:47:57 +00:00
}
```
### Kimi Coding
Kimi Coding uses Moonshot AI's Anthropic-compatible endpoint:
- Provider: `kimi-coding`
- Auth: `KIMI_API_KEY`
- Example model: `kimi-coding/k2p5`
```json5
{
env: { KIMI_API_KEY: "sk-..." },
agents: {
2026-01-31 21:13:13 +09:00
defaults: { model: { primary: "kimi-coding/k2p5" } },
},
}
```
2026-01-17 20:28:15 +00:00
### Qwen OAuth (free tier)
2026-01-17 20:20:25 +00:00
2026-01-17 20:28:15 +00:00
Qwen provides OAuth access to Qwen Coder + Vision via a device-code flow.
2026-01-17 20:20:25 +00:00
Enable the bundled plugin, then log in:
```bash
2026-01-30 03:15:10 +01:00
openclaw plugins enable qwen-portal-auth
openclaw models auth login --provider qwen-portal --set-default
2026-01-17 20:20:25 +00:00
```
Model refs:
2026-01-31 21:13:13 +09:00
2026-01-17 20:20:25 +00:00
- `qwen-portal/coder-model`
- `qwen-portal/vision-model`
See [/providers/qwen](/providers/qwen) for setup details and notes.
2026-01-13 00:22:03 +00:00
### Synthetic
Synthetic provides Anthropic-compatible models behind the `synthetic` provider:
- Provider: `synthetic`
- Auth: `SYNTHETIC_API_KEY`
- Example model: `synthetic/hf:MiniMaxAI/MiniMax-M2.1`
2026-01-30 03:15:10 +01:00
- CLI: `openclaw onboard --auth-choice synthetic-api-key`
2026-01-13 00:22:03 +00:00
```json5
{
agents: {
2026-01-31 21:13:13 +09:00
defaults: { model: { primary: "synthetic/hf:MiniMaxAI/MiniMax-M2.1" } },
2026-01-13 00:22:03 +00:00
},
models: {
mode: "merge",
providers: {
synthetic: {
baseUrl: "https://api.synthetic.new/anthropic",
apiKey: "${SYNTHETIC_API_KEY}",
api: "anthropic-messages",
2026-01-31 21:13:13 +09:00
models: [{ id: "hf:MiniMaxAI/MiniMax-M2.1", name: "MiniMax M2.1" }],
},
},
},
2026-01-13 00:22:03 +00:00
}
```
2026-01-10 21:37:38 +01:00
### MiniMax
MiniMax is configured via `models.providers` because it uses custom endpoints:
2026-01-12 05:49:02 +00:00
- MiniMax (Anthropiccompatible): `--auth-choice minimax-api`
2026-01-10 21:37:38 +01:00
- Auth: `MINIMAX_API_KEY`
2026-01-12 00:57:17 +00:00
See [/providers/minimax](/providers/minimax) for setup details, model options, and config snippets.
feat: Add Ollama provider with automatic model discovery (#1606) * feat: Add Ollama provider with automatic model discovery - Add Ollama provider builder with automatic model detection - Discover available models from local Ollama instance via /api/tags API - Make resolveImplicitProviders async to support dynamic model discovery - Add comprehensive Ollama documentation with setup and usage guide - Add tests for Ollama provider integration - Update provider index and model providers documentation Closes #1531 * fix: Correct Ollama provider type definitions and error handling - Fix input property type to match ModelDefinitionConfig - Import ModelDefinitionConfig type properly - Fix error template literal to use String() for type safety - Simplify return type signature of discoverOllamaModels * fix: Suppress unhandled promise warnings from ensureClawdbotModelsJson in tests - Cast unused promise returns to 'unknown' to suppress TypeScript warnings - Tests that don't await the promise are intentionally not awaiting it - This fixes the failing test suite caused by unawaited async calls * fix: Skip Ollama model discovery during tests - Check for VITEST or NODE_ENV=test before making HTTP requests - Prevents test timeouts and hangs from network calls - Ollama discovery will still work in production/normal usage * fix: Set VITEST environment variable in test setup - Ensures Ollama discovery is skipped in all test runs - Prevents network calls during tests that could cause timeouts * test: Temporarily skip Ollama provider tests to diagnose CI failures * fix: Make Ollama provider opt-in to avoid breaking existing tests **Root Cause:** The Ollama provider was being added to ALL configurations by default (with a fallback API key of 'ollama-local'), which broke tests that expected NO providers when no API keys were configured. **Solution:** - Removed the default fallback API key for Ollama - Ollama provider now requires explicit configuration via: - OLLAMA_API_KEY environment variable, OR - Ollama profile in auth store - Updated documentation to reflect the explicit configuration requirement - Added a test to verify Ollama is not added by default This fixes all 4 failing test suites: - checks (node, test, pnpm test) - checks (bun, test, bunx vitest run) - checks-windows (node, test, pnpm test) - checks-macos (test, pnpm test) Closes #1531
2026-01-24 22:38:52 +00:00
### Ollama
Ollama is a local LLM runtime that provides an OpenAI-compatible API:
- Provider: `ollama`
- Auth: None required (local server)
- Example model: `ollama/llama3.3`
- Installation: https://ollama.ai
```bash
# Install Ollama, then pull a model:
ollama pull llama3.3
```
```json5
{
agents: {
2026-01-31 21:13:13 +09:00
defaults: { model: { primary: "ollama/llama3.3" } },
},
feat: Add Ollama provider with automatic model discovery (#1606) * feat: Add Ollama provider with automatic model discovery - Add Ollama provider builder with automatic model detection - Discover available models from local Ollama instance via /api/tags API - Make resolveImplicitProviders async to support dynamic model discovery - Add comprehensive Ollama documentation with setup and usage guide - Add tests for Ollama provider integration - Update provider index and model providers documentation Closes #1531 * fix: Correct Ollama provider type definitions and error handling - Fix input property type to match ModelDefinitionConfig - Import ModelDefinitionConfig type properly - Fix error template literal to use String() for type safety - Simplify return type signature of discoverOllamaModels * fix: Suppress unhandled promise warnings from ensureClawdbotModelsJson in tests - Cast unused promise returns to 'unknown' to suppress TypeScript warnings - Tests that don't await the promise are intentionally not awaiting it - This fixes the failing test suite caused by unawaited async calls * fix: Skip Ollama model discovery during tests - Check for VITEST or NODE_ENV=test before making HTTP requests - Prevents test timeouts and hangs from network calls - Ollama discovery will still work in production/normal usage * fix: Set VITEST environment variable in test setup - Ensures Ollama discovery is skipped in all test runs - Prevents network calls during tests that could cause timeouts * test: Temporarily skip Ollama provider tests to diagnose CI failures * fix: Make Ollama provider opt-in to avoid breaking existing tests **Root Cause:** The Ollama provider was being added to ALL configurations by default (with a fallback API key of 'ollama-local'), which broke tests that expected NO providers when no API keys were configured. **Solution:** - Removed the default fallback API key for Ollama - Ollama provider now requires explicit configuration via: - OLLAMA_API_KEY environment variable, OR - Ollama profile in auth store - Updated documentation to reflect the explicit configuration requirement - Added a test to verify Ollama is not added by default This fixes all 4 failing test suites: - checks (node, test, pnpm test) - checks (bun, test, bunx vitest run) - checks-windows (node, test, pnpm test) - checks-macos (test, pnpm test) Closes #1531
2026-01-24 22:38:52 +00:00
}
```
Ollama is automatically detected when running locally at `http://127.0.0.1:11434/v1`. See [/providers/ollama](/providers/ollama) for model recommendations and custom configuration.
2026-01-10 21:37:38 +01:00
### Local proxies (LM Studio, vLLM, LiteLLM, etc.)
Example (OpenAIcompatible):
```json5
{
agents: {
defaults: {
model: { primary: "lmstudio/minimax-m2.1-gs32" },
2026-01-31 21:13:13 +09:00
models: { "lmstudio/minimax-m2.1-gs32": { alias: "Minimax" } },
},
2026-01-10 21:37:38 +01:00
},
models: {
providers: {
lmstudio: {
baseUrl: "http://localhost:1234/v1",
apiKey: "LMSTUDIO_KEY",
api: "openai-completions",
models: [
{
id: "minimax-m2.1-gs32",
name: "MiniMax M2.1",
reasoning: false,
input: ["text"],
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
contextWindow: 200000,
2026-01-31 21:13:13 +09:00
maxTokens: 8192,
},
],
},
},
},
2026-01-10 21:37:38 +01:00
}
```
Notes:
2026-01-31 21:13:13 +09:00
- For custom providers, `reasoning`, `input`, `cost`, `contextWindow`, and `maxTokens` are optional.
2026-01-30 03:15:10 +01:00
When omitted, OpenClaw defaults to:
- `reasoning: false`
- `input: ["text"]`
- `cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }`
- `contextWindow: 200000`
- `maxTokens: 8192`
- Recommended: set explicit values that match your proxy/model limits.
2026-01-10 21:37:38 +01:00
## CLI examples
```bash
2026-01-30 03:15:10 +01:00
openclaw onboard --auth-choice opencode-zen
openclaw models set opencode/claude-opus-4-5
openclaw models list
2026-01-10 21:37:38 +01:00
```
See also: [/gateway/configuration](/gateway/configuration) for full configuration examples.