Model Providers
Configure the providers the Model Gateway can route to.
Every model call goes through one OpenAI-compatible adapter. A provider is therefore a baseURL plus a key — not a per-vendor SDK — and adding a provider that speaks the OpenAI wire format is configuration, not code.
Supported provider IDs
These IDs are recognized by the provider resolver, including their environment variables and default base URLs:
| Provider | ID | Default base URL |
|---|---|---|
| DeepSeek | deepseek | https://api.deepseek.com/v1 |
| OpenAI | openai | https://api.openai.com/v1 |
| Anthropic | anthropic | https://api.anthropic.com/v1 |
| Google Gemini | gemini | https://generativelanguage.googleapis.com/v1beta/openai |
| Groq | groq | https://api.groq.com/openai/v1 |
| OpenRouter | openrouter | https://openrouter.ai/api/v1 |
| MiMo (Xiaomi) | mimo | https://token-plan-ams.xiaomimimo.com/v1 |
| Qwen (Alibaba) | qwen | https://dashscope.aliyuncs.com/compatible-mode/v1 |
| Ollama | ollama | http://localhost:11434/v1 |
Gemini's ID is gemini, not google — the latter only appears in the environment variable name GOOGLE_API_KEY.
Where configuration lives
| File | Contents |
|---|---|
~/.jarvis/config/config.json | providers[], activeProvider, activeModel, routing rules, defaults |
~/.jarvis/security/credentials.json | API keys, keyed by provider id |
No API key is ever written to config.json.
{
"version": 1,
"activeProvider": "mimo",
"activeModel": "mimo-v2.5-pro",
"providers": [
{
"id": "deepseek",
"name": "DeepSeek",
"type": "openai_compatible",
"baseURL": "https://api.deepseek.com/v1",
"enabled": true
}
]
}type is openai_compatible for every remote provider and ollama for a local server.
Key and base URL resolution
For a provider, the resolver checks in order:
security/credentials.jsonand the provider entry inconfig.json- The provider's environment variables (for example
DEEPSEEK_API_KEY,ANTHROPIC_AUTH_TOKEN) - The built-in default base URL
If a URL is not recognized as a provider name, the resolver tries to infer the provider from its hostname (for example api.deepseek.com → deepseek).
The full environment variable table is in Config File.
Routing and fallback
activeProvider/activeModeldefine the default target.routingRules[]map ataskTypeto amodelId, with optionalconditions.- When a provider fails repeatedly it is marked dead for a cooldown (two consecutive failures, then exponential backoff), so subsequent calls skip it instead of paying the same timeout again. A success resets it.
Model families
The adapter applies small per-family adaptations rather than exposing them as configuration:
- Reasoning models (
o1…o4, previews) get the parameters those endpoints accept, not the chat defaults. - Anthropic models are called through the OpenAI-compatible endpoint, so tool-calling and streaming behave like the other providers.
Which models are current
This page deliberately does not list model names. Model IDs change faster than documentation: use Settings → Models, which reads the provider's model list where the provider exposes one, or the provider's own documentation. Pinning a name here would go stale within a release.
Next Steps
- Model Gateway — routing and streaming behavior
- Configure Local Models — Ollama setup
- Config File — the complete reference