Skip to main content

Settings → AI & Models

The two models Mnemosyne OS runs on are chosen here: the one that turns your notes into vectors (memory) and the one that answers you (intelligence). The rail entry is AI & Models; the page is titled AI Configuration and its subtitle reads Mnemosyne OS needs two models to function: one for memory, one for intelligence.

Unlike the Voice page, this one has a Save button, and almost nothing is written until you press it. The few exceptions are listed at the end of this page.

For what the models are (credits, routes, what a vector is), see Models and credits. This page is about the settings.

The header: Save, the active mode, the keystore warning

  • Save sits top right. It is highlighted while something has changed, and a ● unsaved badge appears next to it. After a save it reads ✓ Saved for a couple of seconds.
  • Saving does two things. Everything that is not a secret (embedding mode, model and dimension, the intelligence model, the fallback switch, per-provider model overrides, the address of your own server) is kept in the app's own settings. The API keys go through a separate path: the main process writes every non-empty key into ~/.mnemosyne/keys.enc, a file encrypted with the operating system's keystore (DPAPI on Windows, Keychain on macOS, libsecret or kwallet on Linux). A saved key is never sent back to the settings page: the field shows a masked "saved" state instead.
  • Active mode is a badge, not a choice. It reads Hybrid when the embedding mode is hybrid, Cloud when both the embedding and the intelligence run in the cloud, 100% Local when both run on your machine, and Hybrid for any other mix.
When the OS cannot encrypt

If the operating system's keystore is unavailable, an amber banner appears under the header: OS encryption is unavailable on this machine — API keys cannot be saved securely and will not survive a restart. The app refuses to write a key in cleartext. The key you type still works for the current session; it is gone at the next launch.

The rest of the page is three numbered columns. On a narrow settings window they reflow to two, then one, with the intelligence column first.

Column 01 — Vector Memory

Converts your notes into vectors. Permanent. A permanent warning box sits under the subtitle: ⚠ Changing after indexing = full re-indexing of all vaults.

Embedding mode

Three stacked cards. The default is 100% Local.

CardThe app's own note
100% LocalLocalLlama / Ollama only. Zero network. No data leaves your machine.
100% CloudAny configured cloud provider (Vertex, OpenAI, Jina…). High precision.
HybridLocal + Cloud simultaneously. If internet drops — local vector is already saved.

With Hybrid selected, an amber banner repeats the card's note. Hybrid computes two vectors for every chronicle: the local primary model, plus Google's text-embedding-004 through Vertex, in parallel. It therefore needs the Vertex service-account JSON of column 03.

The wording of the local card

The local card still says "LocalLlama / Ollama". The local embedder actually runs inside the app process; there is no Ollama path. The sentence is legacy wording, the behaviour is the one you want: zero network.

Dimensions

A row of pills: 384D, 512D, 768D ★, 1024D, 1536D. The row is labelled Dimensions in cloud mode and Primary in local or hybrid mode. 768 is the native dimension and the default; the star only shows while it is the active one. Picking a dimension auto-selects the first catalogue model at that size, and a line under the pills counts n models available (local and cloud together). If the active dimension is not 768, a hint box repeats the re-indexing warning.

Embedding model

Click-to-select cards, filtered by mode (local models in local and hybrid mode, cloud models in cloud mode) and by dimension. Each card shows a (local) or (cloud) glyph, the name, tag chips and the download size. The recommended model carries a ★ Recommended chip (the chip is in English in every language) and sorts first: nomic when the interface is in English, multilingual-e5 for every other language. That recommended 768D local model is also the default selection.

ModelDimsRunsSizeTags
all-MiniLM-L6-v2384local22 MBultra-light, fast
paraphrase-MiniLM-L12-v2384local120 MBmultilingual
jina-embeddings-v2-small-en512local65 MBJina AI, 8k ctx
nomic-embed-text v1.5768local274 MBmultilingual, ★ for English
multilingual-e5-base768local278 MBMicrosoft, multilingual, ★ for the other languages
bge-base-en-v1.5768local210 MBBAAI
Jina AI (cloud)768cloudcloud, API key (jina-embeddings-v3)
Vertex gecko768cloudGoogle Cloud, cloud (text-embedding-004)
bge-large-en-v1.51024local617 MBhigh precision, BAAI
gte-large1024local620 MBAlibaba DAMO
OpenAI text-embedding-31536cloudcloud, OpenAI, API key (text-embedding-3-small)

Under the selected local model, a download control: ↓ Download from HuggingFace, then a thin progress bar with the percentage, speed and ETA and a Cancel button, then ✓ Saved once the weights are on disk. Models already downloaded are detected when the page opens.

Two empty-list messages are shown in English in every language: — Configure a cloud provider in column 3 (cloud mode with no cloud model at that dimension) and — No models at this dimension.

Same dimension, different space

Changing the embedding mode, model or dimension after your vaults are indexed breaks retrieval until every vault is re-vectorised. Even at the same dimension, a different model is a different vector space. Save asks you to confirm before it lets this through (see Changing the embedding model), and the re-vectorisation itself is Rebuild all on the Vaults page.

Column 02 — Intelligence

Understands, reasons, responds. Easily configurable. The default selection is Google DeepMind's first row, shown as Gemini 3.6 Flash.

The toolbar at the top of the column holds Costs on the left (it opens the call journal) and, on the right, two view buttons: List view () and Logo view (). The view is remembered between sessions; list view is the default.

I have my own APIs

A box above the model choice, always shown:

  • I have my own APIs — no free credits, a checkbox. Hides the free-credit ask. Your balance is untouched. It is a preference: it hides the free-credit request in the wallet and lets the beta quest accept a key of your own. It never touches the server balance and can be unticked.
  • Ticked, the box checks your route (a free catalogue call, no tokens spent) and prints a verdict, with a ↻ Check again button. While it runs: Checking your route…
VerdictWhat it means
No intelligence configured yet.Nothing selected. Drawn in warning colour.
Local model active — nothing leaves this machine.A local GGUF model is the main model.
Still on the sponsored credits, not your own key.Mnemosyne Cloud is selected.
OpenAI confirmed your key. (with the provider's name)The provider's model list answered with your key.
Key saved for MiniMax — it offers no way to confirm it.The provider publishes no model list. An unknown, not a failure.
Could not reach OpenAI — your key is untested, not refused.Network. An unknown, not a failure.
OpenAI refused your key.The provider answered with an authentication error. Drawn in warning colour.

Logo view

A grid of provider tiles, one per group below plus a Local tile. A tile whose key is stored (or, for Google Cloud, whose JSON is set; for your own server, whose address is set) is in full colour; the others are greyed with a lock and the tooltip API key needed. Clicking a coloured tile switches the model in one click. Clicking a greyed tile switches back to list view, focused on that provider. The Local tile opens a green panel captioned Local · no key required with the local model list, its download control and the add-model form.

List view: the providers

One collapsible group per provider. The group holding the current model opens by itself. Each header shows the provider's name, a hint, and a badge naming the model that will actually be sent (your override, or the default row).

GroupHint under the nameDefault row
Mnemosyne CloudSponsored credits · no API keyFast (Flash Lite · the most credit-efficient ★) and Reasoning (Flash · better at generation & reasoning · uses ×6 credit)
Google DeepMindaistudio.google.comGemini 3.6 Flash and Gemini 3.5 Flash
Google CloudSame JSON as the embedding ✔Vertex · Gemini 3.6 Flash (Deep Think · reasoning · shared JSON ★) and Vertex · Gemini 3.5 Flash (Fast · shared JSON)
OpenAIplatform.openai.comGPT-4o
Anthropicconsole.anthropic.comClaude Opus 5
Groqconsole.groq.com · free (limited)Groq / GPT-OSS 120B
Mistral AIconsole.mistral.aiMistral Large
DeepSeekplatform.deepseek.comDeepSeek V4 Flash
Alibaba Model Studiomodelstudio.console.alibabacloud.comQwen3.8-Max
MiniMaxplatform.minimax.io · great for roleplayMiniMax M2-her (Default · immersive roleplay · multi-turn ★) and MiniMax M2 (Default · general · reasoning · code)
Your own servervLLM, Ollama, TGI, or an internal gatewayits own card, below

For the groups that fetch their model list live (Google DeepMind, OpenAI, Anthropic, Groq, Mistral AI, DeepSeek, Alibaba Model Studio), the default row carries a note such as Default · reasoning · adjustable below ★ and the real choice happens in the Model picker. Mnemosyne Cloud, Google Cloud and MiniMax show fixed rows instead: a radio row per model.

Inside a provider group

Opened, a group shows, in this order:

  1. The API key field, one per provider. Its label is the provider's name followed by — API Key (or — JSON credentials for Vertex); that suffix is in English in every language. Provider names: Google AI Studio, OpenAI, Anthropic, Groq, Mistral AI, DeepSeek, Alibaba Model Studio, MiniMax, Vertex AI, Jina AI, OpenAI (embedding), Self-hosted. It is a password field with an eye toggle (Show the key / Hide the key) and a placeholder showing the expected prefix (AIzaSy…, sk-…, sk-ant-…, gsk_…, jina_…). Under it: Encrypted locally — never leaves your machine. Once a key is stored and the field untouched, the line becomes ✓ Saved — leave blank to keep it. The two MiniMax rows share one key.

  2. The fixed rows, for Mnemosyne Cloud, Google Cloud and MiniMax only.

  3. Model, the picker, for every provider except Google Cloud (the model follows the tier) and Mnemosyne Cloud.

    • Load available asks the provider for its own list, with your saved key: a half-typed key is never probed. The button reads Asking… then Reload. It is greyed while nothing is typed nor stored.
    • Above three models, a Filter… box appears. Preview, experimental, nightly, alpha, beta and release-candidate ids sink below the stable ones. The list is never truncated; it scrolls.
    • The first row is the default: its label plus Provider default. Choosing it clears your override.
    • Picking a model in a group that is not the active one also selects that provider.
    • The status line reads Empty = this provider's default. Any id it accepts will do. when idle, List fetched with your key — suggestions as you type. once loaded, and This key reaches no model. when the list came back empty.
    • Enter an id by hand reveals a text field (Exact model id). An id absent from the fetched list is flagged Not in the provider's list — will be sent as typed.
    The list failed withThe app says
    UNSUPPORTEDThis provider publishes no model list — type the id.
    NO_KEYEnter a key first.
    AUTHKey refused by the provider.
    HTTPThe provider returned an error — see the logs.
    NETWORKProvider unreachable.
    UNAVAILABLEThis build cannot list models — restart the app.

    The raw detail is printed in monospace under the sentence. Typing a new key clears a previous verdict.

  4. Your provider rate, for every provider except Mnemosyne Cloud: two decimal fields, ↑ for input and ↓ for output, in $ / 1M tokens. They are saved when you leave the field, and only when both are filled: Both fields or neither — half a rate would price one side and zero the other. There is no shipped price table, by design. The rate feeds the Costs panel.

Entering a cloud API key

  1. Create a key at the provider

    The hint under each provider's name points at its console (aistudio.google.com, platform.openai.com, console.anthropic.com…). Create a key there and copy it. For Google Cloud you need a service-account JSON file instead, entered in column 03.

  2. Open the provider's group

    In List view, click the provider's header. In Logo view, click its greyed tile: the page switches to list view, focused on it.

  3. Paste the key

    Paste it into the field labelled with the provider's name and — API Key. The characters stay hidden; Show the key reveals them. The key is not checked for shape: the only verification is the model list of the next steps.

  4. Save

    Press Save, top right. The button reads ✓ Saved, the key is written to ~/.mnemosyne/keys.enc, and the field now says ✓ Saved — leave blank to keep it. Nothing is probed before this point.

  5. Verify with the model list

    Click Load available under Model. A list of the provider's models and the line List fetched with your key — suggestions as you type. mean the key works. Key refused by the provider. means it does not. Provider unreachable. says nothing about the key. Pick a model, or leave Provider default, and Save again.

  6. Optional: the route check

    Tick I have my own APIs — no free credits. Its verdict names the provider that confirmed your key, and ↻ Check again repeats the check whenever you want.

Keys are stored per provider, so entering a key in the group or in column 03 is the same gesture. There is no delete button for a stored key on this page (only the Vertex JSON has a Remove); leaving a field blank keeps what is stored.

Mnemosyne Cloud credits

Selecting Fast or Reasoning shows a credits card instead of a key field. Mnemosyne Cloud is keyless: the app signs each call with your sovereign wallet and the gate meters the credit the founder granted you.

  • Mnemosyne Cloud credits, with a ⟳ Refresh balance button.
  • While reading: Checking credit balance…
  • Then a large $ remaining figure, used against the granted amount, and a usage bar that turns red above 90 %. Under it: Sponsored inference through the Mnemosyne gate — no API key needed.
The card saysWhy
No credit grant for this wallet yet — ask the founder for access, or pick another provider.The gate knows no grant for this wallet.
Access suspended by the founder.The grant exists and is suspended.
Sovereign wallet locked — unlock it to use your credits.The wallet is locked.
Credit service unreachable followed by a codeAnything else.

Credits and what they buy are explained in Models and credits. The Reasoning row costs six times the Fast one per call, and the card's row note says so.

Your own server

The Your own server group is a single card: An OpenAI-compatible server on your own network. Your questions and the retrieved passages go there, and never to the public internet. Typing in any of its fields selects this route. It is never billed: the Costs panel shows its cost as unknown, not as zero. The longer story is in Your own server.

  • Base URL, placeholder http://10.0.0.12:8000/v1. http:// is accepted on purpose: http:// is fine on a private network. Under the field, one line at a time: Calls: followed by the exact …/chat/completions endpoint the route will hit (no path means /v1 is added, a typed path is respected, a trailing /chat/completions is stripped); or Add the scheme: http://host:port or https://host:port for a value that does not parse; or Only http:// and https:// can be reached. for any other scheme. An empty field on Save removes the stored address.
  • Model, free text, placeholder Qwen/Qwen2.5-72B-Instruct. The name your server answers to, exactly. There is no list to pick from: only your server knows it. The name is sent as typed, never translated, and there is no default.
  • API key (optional), the same encrypted field as the other providers. Empty, the route sends no Authorization header at all.
  • Check this server (Checking… while it runs) asks /models on the same base as the answers, using the address currently in the box, saved or not. It is greyed until the address parses.
  • Use this server selects the route; selected, it is greyed and reads In use.
The check saysWhat it means
Reachable. 12 models served. with clickable chips (up to 12, then +n more)The server lists models. A chip fills the Model field.
Reachable. It lists no model, so type the name yourself.The server answered with an empty list.
This server refused the credentials. (red)Authentication failed.
No answer at this address. (neutral)Nothing answered: network, or no address.
It answered, but not with a model list. Many gateways publish none, and the answers do not travel through it. (neutral)Any other answer. Not a failure.

The raw code is printed next to every non-success sentence. Only the refusal is red: an unknown is never drawn as a failure.

Images on this route

Your own server is not asked to look at images: the app refuses an image upload on this route rather than guess what the server can do.

Local

After an or separator, a green banner: Local · no key required. The GGUF models below run inside the app (through node-llama-cpp, not Ollama). Each row shows the name, a description (in English in every language), a green ✓ Downloaded badge when the file is on disk, and, for a model you added yourself, a Custom chip and a control (Remove model). The download control (↓ Download from HuggingFace, progress, Cancel, ✓ Saved) sits under the selected row.

ModelThe app's own note
Qwen3.5 2B (Q4)1.3 GB · RAM min 4 GB · 262k context ★
Qwen3.5 0.8B (Q4)0.5 GB · RAM min 2 GB · smallest that still fits memory
Qwen3 4B Instruct (Q4)2.5 GB · RAM min 5 GB · 262k context · no thinking pass ★
Qwen3.5 4B (Q4)2.7 GB · RAM min 6 GB · 262k context · reasoning
Gemma 4 E2B (Q4)3.1 GB · RAM min 6 GB · 131k context · Google
Gemma 3 4B (Q4)2.5 GB · RAM min 5 GB · 131k context · Google
Qwen3.5 9B (Q4)5.7 GB · RAM min 12 GB · 262k context · reasoning ★
Gemma 4 E4B (Q4)5.0 GB · RAM min 10 GB · 131k context · Google
Qwen2.5 Coder 7B (Q4)4.7 GB · RAM min 8 GB · code
Qwen2.5 Coder 3B (Q4)1.9 GB · RAM min 4 GB · code
Qwen 2.5 3B (Q4)2.0 GB · RAM min 3 GB · 2024
Qwen 2.5 1.5B (Q4)1.0 GB · RAM min 2 GB · 2024
SmolLM2 1.7B (Q4)1.0 GB · RAM min 2 GB · 2024
Phi-3 Mini (Q4)2.2 GB · RAM min 4 GB · 2024 · only 4k context
Llama 3 8B (Q4)4.7 GB · RAM min 6 GB · 2024 · only 8k context
Mistral 7B (Q4)4.4 GB · RAM min 6 GB · 2023
DeepSeek-R1 7B (Q4)4.7 GB · reasoning · 2025
Qwen 2.5 7B (Q4)4.7 GB · RAM min 6 GB · 2024

The last eight are superseded models, kept so that existing installs keep working.

GPU for these models

Whether these models use your NVIDIA card is decided on the NVIDIA page, not here.

Add a model

A dashed + Add a model button opens a form: Paste a HuggingFace link, or pick a .gguf you already have.

  • Two tabs: HuggingFace link (a text field, placeholder https://huggingface.co/owner/repo/blob/main/model.Q4_K_M.gguf) and Local file (a read-only path and Choose a .gguf…, which opens a file dialog filtered to .gguf).
  • Name (optional).
  • Cancel and Add ( while busy). On success the new model is selected and its download control appears.
The form refuses with
Paste a HuggingFace link or an owner/repo.
This model is gated: accept its licence on HuggingFace first.
Not found on HuggingFace — check the link.
That file is not a .gguf.
No .gguf file in that link — open the file's page on HuggingFace and copy that URL.
That does not look like a HuggingFace repository (expected owner/name).
This model is split across several files, which cannot be downloaded here. Pick a single-file quantisation.
Could not reach HuggingFace. Check your connection and retry.
That file no longer exists at this path.
Pick a .gguf file.

Any other failure shows the raw message. Adding and removing a custom model takes effect immediately; it does not wait for Save.

Local fallback if network drops

Shown in list view only while the selected intelligence is a cloud model: a full-width switch with a bolt glyph, Local fallback if network drops, automatically switches to a local model. Off by default, and forced off as soon as you pick a local model as the main one. Switched on, an amber Fallback model block shows a second local model list (default Phi-3 Mini (Q4)), its download control and the add-model form.

Column 03 — Access

The subtitle depends on what your choices need: API keys for selected cloud models. when at least one key is required, otherwise No key required — everything runs locally.

A key is "needed" for a cloud or hybrid embedding (the embedding provider's key; hybrid always needs Vertex), for a cloud intelligence model (except Mnemosyne Cloud, which is keyless, and your own server, whose optional key lives in its card), and for a Vertex model.

  • Nothing needed: a lock glyph, 100% Local Mode, No data leaves your machine. Models run directly inside Mnemosyne OS.
  • Vertex AI (the header ▲ Vertex AI is in English in every language), when the embedding or the intelligence goes through Google Cloud. A green badge names what the JSON serves: Embedding, Intelligence, or both. Under Service Account JSON, a read-only box shows the chosen path (or — File selected), a Browse… button opens a file dialog, and once a path is set a red Remove button clears it. The path is not a secret; it is kept in the app's configuration, not in the encrypted key file. It is the only credential on this page with a remove gesture: an emptied path is deleted at the next Save.
  • The other providers: one password field per needed provider (Google AI Studio, OpenAI, Anthropic, Groq, Mistral AI, DeepSeek, Alibaba Model Studio, MiniMax, Jina AI, OpenAI (embedding)), placeholder API Key… or the provider's prefix. These are the same fields as the ones inside the provider groups of column 02: typing in one fills the other.
  • The footer, with a lock glyph: All keys are encrypted locally in ~/.mnemosyne/keys.enc.

Changing the embedding model

When the embedding mode, model or dimension you are about to save differs from what was saved last time, Save opens a dialog instead of saving:

  • Change the embedding model?
  • Your vaults are indexed with the current embedding model. Changing it does NOT re-index them automatically — until you re-vectorize every vault, memory search will return incoherent or empty results (even at the same dimension, a different model is a different vector space). Re-vectorize your vaults after saving.
  • Cancel / Change anyway. Clicking outside the dialog cancels.

A first-time setup, with nothing saved yet, never shows this dialog. The re-vectorisation itself is Rebuild all on the Vaults page, which purges every vault's vectors and re-reads every watched folder.

The Costs panel

The Costs button in column 02 opens the call journal. It reads the local journal (the last 500 calls) and, when it can, the gate's own usage trail for Mnemosyne Cloud. The two are kept apart because they are not equally true.

  • A totals row: the number of calls, ↑ tokens in · ↓ tokens out, the known cost, and, when some calls have no rate, how many are not priced. A journal that has not been read shows , never 0. Clear empties the local journal only.
  • BYOK calls go straight from your machine to your provider — the billed detail is theirs and is not known to us. Enter your rate; we count the tokens.
  • Debited — Mnemosyne Cloud, only when the gate returned entries: the amount spent and a table with time, model, tokens in and out, cost. When the readout is capped: A bounded readout: older calls fall off, so these rows can total less than the balance movement.
  • The local journal table: Time, Model, Billing, ↑, ↓, Cost. The billing cell reads Debited for Mnemosyne Cloud, Your server for the self-hosted route, Estimated for everything else. A cost the app could not compute shows , never 0. A failed call shows its model in red, with the error in the tooltip.
  • Reading the journal… while loading, No call recorded yet. when empty, Journal unavailable. when the journal cannot be read.

What is saved when

Nothing on this page is written until Save, with these exceptions:

  • the provider rate, saved when you leave its fields (both filled);
  • the I have my own APIs checkbox;
  • the list / logo view preference;
  • adding or removing a custom model;
  • model downloads, which start when you click them.

And the traps worth remembering:

  • A stored key never comes back to the page and cannot be deleted from it; blank keeps it. Only the Vertex JSON path has a Remove button.
  • The model list is only ever fetched with a saved key.
  • Your own server: the address comes only from you, the model name is sent as typed, and the check reports "no answer" as an unknown, not as a refusal.
  • Changing the embedding after indexing needs a Rebuild all on the Vaults page.