
Memo supports 7 cloud AI services alongside local models. Each provider is configured independently with its own API key, model selection, and context window.
| Provider | Models |
|---|---|
| OpenAI | GPT-4o, GPT-4.1 |
| Google Gemini | Gemini 2.0 Flash, 2.5 Pro |
| Anthropic Claude | Claude Sonnet 4, Opus 4 |
| xAI Grok | Grok-2 |
| Groq | Llama 4, DeepSeek (fast inference) |
| OpenRouter | 300+ models through one API |
| Ollama | Any locally-running Ollama model |
Enabled providers form a priority-ordered chain. When the primary provider fails or is rate-limited, Memo falls through to the next one automatically.
User → [OpenAI] → fail → [Gemini] → fail → [Claude] → success → User
After 3 consecutive failures, a provider is automatically disabled. A background health-check goroutine probes it periodically; if it recovers, the provider re-enables without user intervention.
The context budget (how much chat history is packed per request) follows the model, not the provider type. Set the "Context window (tokens)" field in the provider config to match your model's real window (e.g. 1000000 for 1M). Leave empty for sensible defaults (Gemini 1M, Claude 200K, others 128K).
API keys are stored encrypted on disk using AES-256-GCM with a machine-derived key. The key derivation uses the machine's hardware identifier — keys are unrecoverable if the machine key file (data/machine.key) is lost. Keys never appear in plaintext in config files or logs.
The Settings → API Providers tab shows a list of all 7 providers. Each entry:
flutter_svg)The bottom engine bar displays the currently active provider's logo and name with a green status dot, matching the local model indicator style.
Switch providers mid-conversation with /model — no restart, no lost context. The provider change takes effect on the next message.