TotalApp Docs

Embedding Model

Configuring the local Ollama model that powers ranking and ordering for Semantic Search.

Why Ollama, and Why Local

By default, embeddings for Semantic Search are computed by a local Ollama instance running on your own machine at 127.0.0.1:11434. (You can opt into a hosted model instead — see Hosted (Cloud LLM) Embedding below.) With Ollama this is a deliberate architectural choice: your knowledge library — potentially sensitive documents, notes, or internal material — never has to leave your computer just to be ranked. TotalApp's cloud-hosted server has no network path to your Ollama instance; the ranking always happens directly in your browser talking to your own machine.

This also means the Embedding Engine setting is completely independent of your Writer Engine choice (API, Local LLM, Ollama) for text generation — you can generate content via the Anthropic API while still using a local Ollama model purely for embeddings, or vice versa.

Screen preview

A quick look at the screens. Use the toggle in the corner of each preview to switch between the dark and light themes.

app.totalapp.app/settings/agentic
Embedding Engine
My Knowledge Search Behavior
Assisted — I pick from ranked suggestions
Relevance Score Display
Cosine similarity (raw, default)
Embedding Model
nomic-embed-text via Ollama
Auto-Attach Threshold
Minimum 60% relevance before suggesting
Embedding Cache
Vectors stored locally, refreshed on edit
Keyword Fallback
Used automatically when Ollama is offline
Library Re-index
Runs in the background after each upload

Assisted or automatic

Setting Up

  1. Install Ollama on your machine if you haven't already.
  2. Pull an embedding model, e.g. ollama pull nomic-embed-text.
  3. In TotalApp, go to Settings → AI Models → Embedding Engine.
  4. Confirm your Ollama connection is detected (test it under Text Generation Provider if it isn't showing as connected).
  5. Select your embedding model from the Semantic Search (Embedding Engine) dropdown — only models with embedding-oriented names (containing "embed", "bge", "nomic", or "minilm") are listed here, so it never gets mixed up with a text-generation model.

Hosted (Cloud LLM) Embedding

In Settings → AI Models → Embedding, set the provider to Cloud LLM (Hosted API) and pick a model from the Modelion or OpenRouter list. Semantic Search then ranks your sources with that model instead of Ollama, with no local install needed.

Two things to know before switching

Your text leaves your machine. With a hosted model, the text of your query and of every source being ranked is sent through TotalApp's server to the provider. Ollama never does this.

Changing the model makes stored vectors outdated. Vectors from different models cannot be compared. Each source remembers the model that produced its vector, so after any change of embedding model the old vectors are recomputed automatically the next time the sources are ranked (and sources saved before this was recorded are recomputed once). With a hosted model that means each source's text is sent again.

Model Separation — Why You Can't Pick a Chat Model Here

The Embedding Engine dropdown only lists Ollama models whose names indicate they're built for embeddings (e.g. nomic-embed-text, bge-small, all-minilm). General-purpose chat/completion models (e.g. llama3, deepseek, qwen) are excluded from this list — and, at runtime, TotalApp guards against calling a chat model's embedding endpoint by mistake. This keeps the two roles cleanly separated: one model type talks to /api/generate for writing, another talks to /api/embeddings for ranking.

Understanding Relevance Scores

Cosine similarity between two text embeddings ranges in theory from -1 to +1, but real-world scores from general-purpose models like nomic-embed-text cluster in a much narrower practical band:

RelationshipTypical score
Completely unrelated text~20-40%
Related, relevant text~55-75%
Near-identical text90%+ (rare)

Unrelated content rarely scores near 0% because language models share common "general language" structure across nearly any text. This is normal and expected — a 30% score on an unrelated document is not a bug. See the info tooltip next to Embedding Engine in Settings for the same explanation in-app.

What Happens Without an Embedding Model

Nothing breaks. My Knowledge and every Writer Tool's Attach Knowledge picker continue to work exactly as they did before Semantic Search existed — sources are listed in their original order, with a note that ranking is currently unavailable. Ranking and Automatic auto-attach are the only features gated on having an embedding model configured.

FAQ

Can I use a cloud embedding API instead of Ollama?
Yes. In Settings → AI Models → Embedding choose Cloud LLM (Hosted API) and pick a Modelion or OpenRouter embedding model. Your text is then sent to that provider; see Hosted (Cloud LLM) Embedding above for the privacy and re-embedding notes.
Which embedding model should I pick?
nomic-embed-text is a solid general-purpose default. Smaller models like all-minilm run faster but may rank less precisely; larger models like bge-large are more accurate but slower to embed each source.
Does the embedding model need to match my Writer Engine's text generation model?
No. They are entirely independent — you can mix and match any embedding model with any text-generation engine.
Will selecting a chat model here break anything?
The dropdown only ever lists embedding-oriented models by name, and the app guards at runtime against treating a non-embedding model as one, so this isn't something you can accidentally trigger.