Model Orchestrator
Route tasks to different LLM providers based on content classification. Each task type maps to a provider chain with automatic fallback. Use the orchestrator to combine local and cloud models — for example, embeddings via Ollama and chat via Claude.
Configuration
[llm]
provider = "orchestrator"
[llm.orchestrator]
default = "claude"
embed = "ollama"
[llm.orchestrator.providers.ollama]
provider_type = "ollama"
[llm.orchestrator.providers.claude]
provider_type = "claude"
[llm.orchestrator.routes]
coding = ["claude", "ollama"] # try Claude first, fallback to Ollama
creative = ["claude"] # cloud only
analysis = ["claude", "ollama"] # prefer cloud
general = ["claude"] # cloud only
Provider Keys
default— provider for chat when no specific route matchesembed— provider for all embedding operations (skill matching, semantic memory)
Task Classification
Task types are classified via keyword heuristics:
| Task Type | Keywords |
|---|---|
coding | code, function, debug, refactor, implement |
creative | write, story, poem, creative |
analysis | analyze, compare, evaluate |
translation | translate, convert language |
summarization | summarize, summary, tldr |
general | everything else |
Fallback Chains
Routes define provider preference order. If the first provider fails, the next one in the list is tried automatically.
coding = ["local", "cloud"] # try local first, fallback to cloud
Hybrid Setup Example
Embeddings via free local Ollama, chat via paid Claude API:
[llm]
provider = "orchestrator"
[llm.orchestrator]
default = "claude"
embed = "ollama"
[llm.orchestrator.providers.ollama]
provider_type = "ollama"
[llm.orchestrator.providers.claude]
provider_type = "claude"
[llm.orchestrator.routes]
general = ["claude"]