Models & Providers
Aura Workshop is model-agnostic. Bring your own keys for 16 built-in providers and aggregators, plus any OpenAI-compatible endpoint — point a custom provider at any OpenAI-compatible server you run yourself, set sampling parameters per model, and let Aura Routing 2.0 pick the right model for each task — with a circuit breaker, load balancing, conditional rules, a semantic cache, and spend-limit fallback layered on top.
Cloud providers (direct API)
Aura Workshop connects directly to each provider's own API. The provider is auto-detected
from the model slug (org/model), so in most cases you only need to paste an
API key and pick a model. Each provider appears as an expandable card on the Models page.
| Provider | API base URL | Models |
|---|---|---|
| Anthropic | api.anthropic.com | Claude family (Opus, Sonnet, Haiku) for advanced reasoning, analysis, and code |
| OpenAI | api.openai.com | GPT and o-series models for versatile general-purpose tasks |
generativelanguage.googleapis.com | Gemini multimodal models with very large context windows | |
| MiniMax | api.minimax.io | MiniMax models for text, plus voice and video generation |
Authentication
Keys are held per provider, so one install can carry several at once
(provider_keys), with optional per-provider base-URL overrides
(provider_urls) and per-model key selection (key_overrides) when
a single model should bill to a specific plan.
| Provider | Auth type | Header / param |
|---|---|---|
| Anthropic | API key header | x-api-key: sk-ant-… |
| OpenAI | Bearer token | Authorization: Bearer sk-… |
| Query parameter | ?key=AIza… | |
| MiniMax | Bearer token | Authorization: Bearer … |
Configuring a cloud provider
- Open the Models page from the sidebar.
- Click a provider card to expand it.
- Paste your API key. Aura queries the provider's
/modelsendpoint and caches the result (~24h TTL), so the model dropdown stays current without manual entry. - Select a model. Adjust sampling parameters if needed (see Model parameters).
- Save. The model is immediately available in the quick model switcher for all new tasks.
thinking_level (off / low / medium /
high) and wired per provider — see
Thinking-mode wiring below.
Aggregator services
Aggregators expose many models behind a single key. All speak an OpenAI-compatible API with Bearer-token auth, so adding one key unlocks a wide catalog. Aura auto-detects the underlying vendor from the model slug's prefix.
| Aggregator | Highlights |
|---|---|
| OpenRouter | Unified API for 200+ models with automatic fallback; many free model options. |
| Together AI | Fast inference for open-weight models — Llama, Qwen, DeepSeek, Mistral, Gemma. |
| Groq | Ultra-fast LPU inference with sub-second latency; free tier with rate limits. |
| DeepSeek | High-performance reasoning and coding at low cost. |
| SiliconFlow | Cost-effective GPU cloud inference for Qwen and DeepSeek models. |
| Zhipu AI (z.ai) | GLM models with free tiers; exposes a reasoning_effort knob on GLM-5.2+. |
| Moonshot / Kimi | Multilingual, long-context models; supports named sub-keys (e.g. a coding plan). |
| Mistral AI | European models strong in coding and multilingual tasks. |
| Xiaomi / MiMo | Xiaomi's MiMo models for general tasks. |
| OpenCode Zen | Unified endpoint exposing GPT, Claude, Gemini, Grok and Qwen model families behind one key. |
Cloud tool integrations (Slack, Gmail, GitHub, Notion and 100+ more) are handled separately through Composio and MCP — see Integrations.
Custom & local providers
Any endpoint that speaks the OpenAI API format can be added as a custom provider. This is how you run models on your own hardware: stand up a local OpenAI-compatible server and point a custom provider at it.
Adding a custom provider
- Name — a human-readable label for the provider.
- Base URL — the API base, e.g.
http://localhost:11434/v1(Ollama) orhttp://localhost:1234/v1(LM Studio). - API key — a bearer key if the server requires one; local servers often need none.
- API format — OpenAI, Anthropic, Google, or generic OpenAI-compatible.
- Context window — set it so context compaction triggers at the right point for the model.
- Test connection — verify the endpoint is reachable before saving.
A custom provider stores its own base_url and (optional) key. Once saved, its
models sit alongside cloud models in the quick switcher and can back
teams and routing tiers like any other provider.
Common local servers
| Server | Typical base URL | Notes |
|---|---|---|
| Ollama | http://localhost:11434/v1 | Pull-and-run local model runner; OpenAI-compatible endpoint. |
| LM Studio | http://localhost:1234/v1 | Desktop app that serves local models over an OpenAI-compatible API. |
| vLLM | http://<host>:8000/v1 | High-throughput serving with PagedAttention for production workloads. |
| LocalAI / TGI / SGLang | varies | Any other OpenAI-compatible server works the same way. |
Model parameters
Sampling parameters shape a model's output. The values below are the global defaults; a
per-model override in model_params always wins over them, and is the source
Aura Routing, fallback, and hot-swap read to pull the correct settings for whatever model
they switch to.
| Parameter | Default | Description |
|---|---|---|
| Temperature | 0.7 | Controls randomness. Lower is more focused; higher is more creative. |
| Top P | 0.8 | Nucleus sampling — consider only tokens within this cumulative probability. |
| Top K | 20 | Consider only the K most likely tokens per step. 0 disables. |
| Min P | 0.0 | Discard tokens below this probability floor. |
| Repeat penalty | 1.0 | Values above 1.0 discourage repetition. |
| Max tokens | 4096 | Maximum tokens generated in a single response. |
| Thinking level | off | Extended-reasoning depth: off / low / medium / high, on models that support it. |
Per-model overrides
model_params is a map of modelId → {temperature, topP, topK,
maxTokens, …}, seeded from the built-in model presets and updated whenever you
override a value on the Models page. Notable built-in defaults: Gemma (temp 1.0, top_p
0.95, top_k 64) and Qwen3 (temp 0.6). Keeping overrides per model means routing to a
different model automatically carries that model's correct sampling settings.
Thinking-mode wiring
A single thinking_level maps to whatever each provider's API expects. Budget
tokens are derived from the level: low = 1024, medium = 4096, high = 16384.
| Provider | Wire form |
|---|---|
| OpenAI o-series, Grok | reasoning_effort |
| OpenRouter | reasoning |
| Anthropic, Kimi, DeepSeek, GLM-5 | thinking: {type: enabled, budget_tokens} |
| Qwen3, Seed | enable_thinking |
| MiniMax M2 | reasoning_split |
Aura Routing 2.0
Aura Routing automatically picks a cost-appropriate model for each task. A 23-dimension scorer classifies every request into a tier and resolves a model from that tier, and five phases layer on top of the scorer. Everything runs locally and in-DB, and every decision is written to a routing decision log that powers the Routing Debug Log UI.
Enable it in Settings → Routing (routing_enabled). When
disabled, every task uses the globally selected model.
Tiers
Four tiers, each with its own model and boundary score, are configured in routing_config:
| Tier | Intended use |
|---|---|
| Simple | Quick questions, translations, formatting — routed to the cheapest model. |
| Standard | Moderate work: writing, analysis, single-step coding. |
| Complex | Multi-step tasks: architecture, debugging, research — routed to a capable model. |
| Reasoning | Deep reasoning, math, or extended chain-of-thought — routed to the most powerful model. |
The five phases
A request first checks conditional rules; on no match it falls through to the scorer, then load balancing, the health breaker, the semantic cache, and finally the guardrails registry before the provider call.
| Phase | What it does |
|---|---|
| 1 — Health circuit breaker | Passive latency + rate-limit breaker per model (Closed / Open / HalfOpen). A model that keeps failing is avoided and the next healthy alternative is picked; the circuit recovers with a single probe. Tracked in-memory with zero request overhead. |
| 2 — Weighted load balancer | When a tier holds several models, spreads traffic with a task-id-sticky weighted pick, skipping any model the health breaker has flagged. Stickiness keeps one task on one model across its turns. |
| 3 — Conditional routing rules | (when_expr, target) rows in the routing_rules table, evaluated by priority. The first match pins a tier or model and short-circuits the scorer — e.g. force a specific model when the prompt matches a condition. |
| 4 — Guardrails | Input / Output / Tool rules with actions Allow / Block / Redact; the first Block wins. Bundled rules cover destructive bash, a max-token cap, PII, secrets, and prompt injection. Seeded disabled — operators opt in per rule. (Hard-coded bash guardrails always block regardless.) |
| 5 — Semantic cache | Exact-hash plus embedding-cosine lookup keyed on namespace, model, and the tool fingerprint. A close-enough prior answer can be served without an LLM call. Off by default (semantic_cache_enabled); threshold defaults to 0.95 and never serves on a retry/restart or empty prompt. |
Routing analytics
The routing view reports tasks per tier, actual cost versus the hypothetical cost of running everything on the most capable model, and the resulting dollar and percentage savings — updated in real time. Reset from the billing reset control.
Spend limits & fallback
Spend limits and the fallback chain are their own tables, managed under
Settings → Billing (or via GET/PUT /api/billing/limits and
/api/billing/fallback-order).
- Spend limits — per-provider
{daily_limit_usd, monthly_limit_usd, enabled}. When the current provider is over budget, the resolver walks the fallback chain until it finds a provider that is in budget and reachable. - Fallback order — priority-ordered
{provider, model, base_url, api_key_ref}rows that define where routing spills over.
For every knob referenced here — routing config, semantic-cache keys, spend limits, provider keys and URL overrides — see the full reference in Settings.