skills/rules/config-providers.md
Plano translates requests between its internal format and each provider's API. The model field uses provider/model-name syntax which determines both the upstream endpoint and the request/response translation layer. Some providers require an explicit provider_interface override.
Provider format reference:
| Model prefix | Wire format | Example |
|---|---|---|
openai/* | OpenAI | openai/gpt-4o |
anthropic/* | Anthropic | anthropic/claude-sonnet-4-20250514 |
gemini/* | Google Gemini | gemini/gemini-2.0-flash |
mistral/* | Mistral | mistral/mistral-large-latest |
groq/* | Groq | groq/llama-3.3-70b-versatile |
deepseek/* | DeepSeek | deepseek/deepseek-chat |
xai/* | Grok (OpenAI-compat) | xai/grok-2 |
together_ai/* | Together.ai | together_ai/meta-llama/Llama-3 |
custom/* | Requires provider_interface | custom/my-local-model |
Incorrect (missing provider prefix, ambiguous format):
model_providers:
- model: gpt-4o # Missing openai/ prefix — Plano cannot route this
access_key: $OPENAI_API_KEY
- model: claude-3-5-sonnet # Missing anthropic/ prefix
access_key: $ANTHROPIC_API_KEY
Correct (explicit provider prefixes):
model_providers:
- model: openai/gpt-4o
access_key: $OPENAI_API_KEY
default: true
- model: anthropic/claude-sonnet-4-20250514
access_key: $ANTHROPIC_API_KEY
- model: gemini/gemini-2.0-flash
access_key: $GOOGLE_API_KEY
For local or self-hosted models (Ollama, LiteLLM, vLLM):
model_providers:
- model: custom/llama3
base_url: http://host.docker.internal:11434/v1 # Ollama endpoint
provider_interface: openai # Ollama speaks OpenAI format
default: true
Always set default: true on exactly one provider per listener so Plano has a fallback when routing preferences do not match.
Reference: https://github.com/katanemo/archgw