Multi-provider routing
Every /ai/chat request passes through detectProvider(model) which selects the backend:
| Model pattern | Provider | Auth required |
|---|---|---|
meta/*, mistral/*, qwen/*, deepseek/*, moonshot/*, etc. | Workers AI | None (edge-bound) |
meta-llm | Workers AI (Llama 3.1 8B alias) | None |
gpt-*, o3, o4-mini | OpenAI | OPENAI_API_KEY secret or BYOK |
claude-* | Anthropic | ANTHROPIC_API_KEY secret or BYOK |
Auto-routing (auto)
When model: "auto", Neureus classifies the task type and selects the best available model:
| Task type | Preferred model |
|---|---|
coding | qwen/coder-32b → gpt-4o |
reasoning | deepseek/r1-32b → claude-opus-4-8 |
summarization | claude-haiku-4-5 → meta/llama-3.1-8b |
extraction | gpt-4o-mini → meta/llama-3.1-8b |
chat | meta/llama-3.3-70b → gpt-4o-mini |
Selection falls through to the next provider if the preferred one has no key configured. Workers AI models always work — no key required.
Available model IDs
Workers AI (no key required):
meta/llama-3.3-70b— general chat, fastmeta/llama-3.1-8b— smallest, cheapestmeta/llama-3.2-3b— ultra-fast edge inferencemeta/llama-4-scout-17b— Llama 4, long contextqwen/coder-32b— code generationqwen/qwq-32b— reasoningdeepseek/r1-32b— reasoning tasksmistral/7b— multilingualmistral/small-24b— balanced multilingualmoonshot/kimi-k2— long-context generalmoonshot/kimi-k2-code— long-context codinggoogle/gemma-4-27b— general purpose
OpenAI (BYOK or global key):
gpt-4o,gpt-4o-mini,o3,o4-mini
Anthropic (BYOK or global key):
claude-opus-4-8,claude-sonnet-4-6,claude-haiku-4-5
meta-llm vs auto
| Alias | Behaviour |
|---|---|
meta-llm | Hardcoded to meta/llama-3.1-8b — no classification, always the same model |
auto | Runs resolveAutoModel() — classifies the prompt, selects across all providers |
Use auto for production smart-routing. meta-llm exists for backwards compatibility and quick testing.
Streaming
All providers return normalized OpenAI-compatible SSE. The streamLlmComplete function translates provider-specific formats transparently.