Files
2026-04-11 09:45:12 -05:00

174 lines
5.7 KiB
Markdown

---
slug: ollama-memory-embeddings
display_name: Ollama Memory Embeddings
displayName: Ollama Memory Embeddings
name: ollama-memory-embeddings
description: >
Configure OpenClaw memory search to use Ollama as the embeddings server
(OpenAI-compatible /v1/embeddings) instead of the built-in node-llama-cpp
local GGUF loading. Includes interactive model selection and optional import
of an existing local embedding GGUF into Ollama.
---
# Ollama Memory Embeddings
This skill configures OpenClaw memory search to use Ollama as the **embeddings
server** via its OpenAI-compatible `/v1/embeddings` endpoint.
> **Embeddings only.** This skill does not affect chat/completions routing —
> it only changes how memory-search embedding vectors are generated.
## What it does
- Installs this skill under `~/.openclaw/skills/ollama-memory-embeddings`
- Verifies Ollama is installed and reachable
- Lets the user choose an embedding model:
- `embeddinggemma` (default — closest to OpenClaw built-in)
- `nomic-embed-text` (strong quality, efficient)
- `all-minilm` (smallest/fastest)
- `mxbai-embed-large` (highest quality, larger)
- Optionally imports an existing local embedding GGUF into Ollama via
`ollama create` (currently detects embeddinggemma, nomic-embed, all-minilm,
and mxbai-embed GGUFs in known cache directories)
- Normalizes model names (handles `:latest` tag automatically)
- Updates `agents.defaults.memorySearch` in OpenClaw config (surgical — only
touches keys this skill owns):
- `provider = "openai"`
- `model = <selected model>:latest`
- `remote.baseUrl = "http://127.0.0.1:11434/v1/"`
- `remote.apiKey = "ollama"` (required by client, ignored by Ollama)
- Performs a post-write config sanity check (reads back and validates JSON)
- Optionally restarts the OpenClaw gateway (with detection of available
restart methods: `openclaw gateway restart`, systemd, launchd)
- Optional memory reindex during install (`openclaw memory index --force --verbose`)
- Runs a two-step verification:
1. Checks model exists in `ollama list`
2. Calls the embeddings endpoint and validates the response
- Adds an idempotent drift-enforcement command (`enforce.sh`)
- Adds optional config drift auto-healing watchdog (`watchdog.sh`)
## Install
```bash
bash ~/.openclaw/skills/ollama-memory-embeddings/install.sh
```
From this repository:
```bash
bash skills/ollama-memory-embeddings/install.sh
```
## Non-interactive usage
```bash
bash ~/.openclaw/skills/ollama-memory-embeddings/install.sh \
--non-interactive \
--model embeddinggemma \
--reindex-memory auto
```
Bulletproof setup (install watchdog):
```bash
bash ~/.openclaw/skills/ollama-memory-embeddings/install.sh \
--non-interactive \
--model embeddinggemma \
--reindex-memory auto \
--install-watchdog \
--watchdog-interval 60
```
> **Note:** In non-interactive mode, `--import-local-gguf auto` is treated as
> `no` (safe default). Use `--import-local-gguf yes` to explicitly opt in.
Options:
- `--model <id>`: one of `embeddinggemma`, `nomic-embed-text`, `all-minilm`, `mxbai-embed-large`
- `--import-local-gguf <auto|yes|no>`: default `auto` (interactive: prompts; non-interactive: `no`)
- `--import-model-name <name>`: default `embeddinggemma-local`
- `--skip-restart`: do not restart gateway
- `--openclaw-config <path>`: config file path override
- `--install-watchdog`: install launchd drift auto-heal watchdog (macOS)
- `--watchdog-interval <sec>`: watchdog interval (default 60)
- `--reindex-memory <auto|yes|no>`: memory rebuild mode (default `auto`)
## Verify
```bash
~/.openclaw/skills/ollama-memory-embeddings/verify.sh
```
Use `--verbose` to dump raw API response on failure:
```bash
~/.openclaw/skills/ollama-memory-embeddings/verify.sh --verbose
```
## Drift enforcement and auto-heal
Manually enforce desired state (safe to run repeatedly):
```bash
~/.openclaw/skills/ollama-memory-embeddings/enforce.sh \
--model embeddinggemma \
--openclaw-config ~/.openclaw/openclaw.json
```
Check for drift only:
```bash
~/.openclaw/skills/ollama-memory-embeddings/enforce.sh \
--check-only \
--model embeddinggemma
```
Run watchdog once (check + heal):
```bash
~/.openclaw/skills/ollama-memory-embeddings/watchdog.sh \
--once \
--model embeddinggemma
```
Install watchdog via launchd (macOS):
```bash
~/.openclaw/skills/ollama-memory-embeddings/watchdog.sh \
--install-launchd \
--model embeddinggemma \
--interval-sec 60
```
## GGUF detection scope
The installer searches for embedding GGUFs matching these patterns in known
cache directories (`~/.node-llama-cpp/models`, `~/.cache/node-llama-cpp/models`,
`~/.cache/openclaw/models`):
- `*embeddinggemma*.gguf`
- `*nomic-embed*.gguf`
- `*all-minilm*.gguf`
- `*mxbai-embed*.gguf`
Other embedding GGUFs are not auto-detected. You can always import manually:
```bash
ollama create my-model -f /path/to/Modelfile
```
## Notes
- This does not modify OpenClaw package code. It only updates user config.
- A timestamped backup of config is written before changes.
- If no local GGUF exists, install proceeds by pulling the selected model from Ollama.
- Model names are normalized with `:latest` tag for consistent Ollama interaction.
- If embedding model changes, rebuild/re-embed existing memory vectors to avoid
retrieval mismatch across incompatible vector spaces.
- With `--reindex-memory auto`, installer reindexes only when the effective
embedding fingerprint changed (`provider`, `model`, `baseUrl`, `apiKey presence`).
- Drift checks require a non-empty apiKey but do not require a literal `"ollama"` value.
- Config backups are created only when a write is needed.
- Legacy schema fallback is supported: if `agents.defaults.memorySearch` is absent,
the enforcer reads known legacy paths and mirrors writes to preserve compatibility.