CoreLayer Docs
Configuration

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:

ProviderIDDefault base URL
DeepSeekdeepseekhttps://api.deepseek.com/v1
OpenAIopenaihttps://api.openai.com/v1
Anthropicanthropichttps://api.anthropic.com/v1
Google Geminigeminihttps://generativelanguage.googleapis.com/v1beta/openai
Groqgroqhttps://api.groq.com/openai/v1
OpenRouteropenrouterhttps://openrouter.ai/api/v1
MiMo (Xiaomi)mimohttps://token-plan-ams.xiaomimimo.com/v1
Qwen (Alibaba)qwenhttps://dashscope.aliyuncs.com/compatible-mode/v1
Ollamaollamahttp://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

FileContents
~/.jarvis/config/config.jsonproviders[], activeProvider, activeModel, routing rules, defaults
~/.jarvis/security/credentials.jsonAPI 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:

  1. security/credentials.json and the provider entry in config.json
  2. The provider's environment variables (for example DEEPSEEK_API_KEY, ANTHROPIC_AUTH_TOKEN)
  3. 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 / activeModel define the default target.
  • routingRules[] map a taskType to a modelId, with optional conditions.
  • 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

On this page