Providers
The Providers page is where API keys live. One card per LLM provider, one block for web search, one block for memory embeddings. Keys are stored encrypted in the instance database; they never leave the machine except to call the provider's own API.
What this page is for
Exolvra doesn’t ship with any API keys — you supply the ones for the services you want to use. This page is the one place where every key is entered, one card per provider, with an expand to configure pattern so the screen stays readable even with eleven providers on it.
Open /settings/providers to see the full list. Cards marked Configured already have a key saved. Click a card to expand and edit.
LLM providers
Eleven LLM providers ship in the box:
| Provider | Key prefix | Notes |
|---|---|---|
| Anthropic (Claude) | sk-ant-... | Multiple keys supported for rate-limit pooling |
| OpenAI (GPT) | sk-... | Multiple keys supported |
| Google Gemini | AI... | Single key |
| Mistral | — | Single key |
| Groq (Ultra-Fast) | gsk_... | For Llama/Mixtral served at Groq’s latency |
| Azure OpenAI | endpoint + key | Enterprise Azure-hosted OpenAI |
| AWS Bedrock | region + access key + secret | For Claude and Titan models on AWS |
| GitHub Copilot | ghp_... | Uses your existing Copilot subscription |
| CommonStack (Unified Gateway) | cs-... | One key, many models — see below |
| Ollama | URL only | Local, free; default http://localhost:11434 |
| LM Studio | URL only | Local; default http://localhost:1234/v1 (key optional) |
Only configure the providers you actually use. Unconfigured providers are ignored; their models won’t appear in the router.
Multiple keys per provider
Anthropic and OpenAI support multiple keys. Paste additional keys with the + Add Key button. Exolvra rotates across them to pool rate limits and to provide failover — if one key is throttled, the next one takes over. Useful when you have production keys across several billing accounts.
CommonStack — the unified gateway
CommonStack is a single-key gateway that fronts many models across providers (OpenAI, Anthropic, Google, DeepSeek, xAI, Mistral, and more). Paste the CommonStack key once and you get access to the combined catalog without configuring each provider individually.
Two extra options sit under the CommonStack card:
- Enable smart routing — when on, Exolvra sends the special alias
model: "auto"for agent calls, letting CommonStack’s classifier pick the cheapest model per prompt. Cost reductions of 40–60% are common on mixed workloads. - Routing strategy —
Auto(the classifier decides),Fast(prefer speed), orBest(prefer quality). Only consulted when smart routing is on.
Smart routing is the fastest way to cut spend on a new deployment. Turn it on, watch the Budget dashboard for a week, and adjust.
Web search
The web-search block controls which engine backs the web_search tool. Pick the primary engine from the dropdown, then paste keys for the engines you want available:
| Engine | Needs | Strength |
|---|---|---|
| Brave Search | BSA... key | Good default; independent index |
| Perplexity | pplx-... key | Returns AI-summarized answers alongside results |
| Tavily | tvly-... key | Tuned for LLM consumers; cleaner output |
| Exa | exa-... key | Neural search; good for semantic queries |
| Serper | key | Google SERP wrapper, cheap |
| key | The actual Google search API | |
| DuckDuckGo | none | Free; not reachable from every network |
| SearXNG | URL | Self-hosted meta-search |
The Auto choice picks the first configured engine with a valid key. For production, pick the engine explicitly.
Firecrawl has its own key field — it’s the web_fetch tool’s JavaScript-rendering backend, used for pages that need a headless browser. Not strictly a search engine; it’s for fetching content from pages that don’t render server-side.
Memory & embeddings
The Embeddings block controls the semantic memory system. Three choices:
| Provider | Notes |
|---|---|
| Auto-detect best available | Pick the first available provider in order: Voyage → Gemini → OpenAI → Ollama |
| Ollama | Local, free. Use nomic-embed-text or equivalent |
| OpenAI | text-embedding-3-small is the usual choice |
| Gemini | text-embedding-004 |
| Voyage | High quality, dedicated embedding provider |
Leaving Embedding model blank picks the provider’s sensible default.
Memory decay half-life controls how fast older memories lose relevance in search. Default 30 days — older memories aren’t deleted, but their scores drop by half every 30 days. Set it higher if you want long-lived context; lower if you want recency to dominate.
How keys are stored
Every key entered here is written to the encrypted settings table in the instance database. Keys at rest go through the same envelope encryption as other sensitive config. They’re never logged. They’re never sent anywhere except the provider’s own API.
When database encryption is enabled (see Database encryption), keys get a second layer of AES-256-GCM on top of the whole-file SQLCipher encryption.
Common pitfalls
Pasting a key and not clicking Save. Every settings page has a Save button at the bottom. Navigating away without saving prompts you to confirm, but only if the navigation is internal to the dashboard — closing the browser tab loses the edit.
Configuring more providers than you use. Each configured key is a surface for abuse if the instance is compromised. Configure only the providers you actually want available.
Forgetting Azure endpoint or Bedrock region. Azure needs both an endpoint and a key; Bedrock needs a region, an access key, and a secret. The card validates on save — missing fields fail gracefully rather than silently swallowing the value.
Sharing a CommonStack key across environments. CommonStack keys are cheap to rotate; use a separate key for staging and production so you can track cost per environment.
Where to go next
- AI Models — pick the default model from the providers you just configured
- Budget — set limits before running real workloads
- Installation — the broader setup context