diff --git a/docs/concepts/memory-builtin.md b/docs/concepts/memory-builtin.md index a19ac7a2c90..602f1f8b74d 100644 --- a/docs/concepts/memory-builtin.md +++ b/docs/concepts/memory-builtin.md @@ -38,6 +38,25 @@ To set a provider explicitly: Without an embedding provider, only keyword search is available. +To force the built-in local embedding provider, point `local.modelPath` at a +GGUF file: + +```json5 +{ + agents: { + defaults: { + memorySearch: { + provider: "local", + fallback: "none", + local: { + modelPath: "~/.node-llama-cpp/models/embeddinggemma-300m-qat-Q8_0.gguf", + }, + }, + }, + }, +} +``` + ## Supported embedding providers | Provider | ID | Auto-detected | Notes | @@ -89,6 +108,17 @@ automatic user modeling. **Memory search disabled?** Check `openclaw memory status`. If no provider is detected, set one explicitly or add an API key. +**Local provider not detected?** Confirm the local path exists and run: + +```bash +openclaw memory status --deep --agent main +openclaw memory index --force --agent main +``` + +Both standalone CLI commands and the Gateway use the same `local` provider id. +If the provider is set to `auto`, local embeddings are considered first only +when `memorySearch.local.modelPath` points to an existing local file. + **Stale results?** Run `openclaw memory index --force` to rebuild. The watcher may miss changes in rare edge cases. diff --git a/docs/plugins/manifest.md b/docs/plugins/manifest.md index b6c7ed678ca..06834714714 100644 --- a/docs/plugins/manifest.md +++ b/docs/plugins/manifest.md @@ -370,6 +370,7 @@ read without importing the plugin runtime. "speechProviders": ["openai"], "realtimeTranscriptionProviders": ["openai"], "realtimeVoiceProviders": ["openai"], + "memoryEmbeddingProviders": ["local"], "mediaUnderstandingProviders": ["openai", "openai-codex"], "imageGenerationProviders": ["openai"], "videoGenerationProviders": ["qwen"], @@ -389,6 +390,7 @@ Each list is optional: | `speechProviders` | `string[]` | Speech provider ids this plugin owns. | | `realtimeTranscriptionProviders` | `string[]` | Realtime-transcription provider ids this plugin owns. | | `realtimeVoiceProviders` | `string[]` | Realtime-voice provider ids this plugin owns. | +| `memoryEmbeddingProviders` | `string[]` | Memory embedding provider ids this plugin owns. | | `mediaUnderstandingProviders` | `string[]` | Media-understanding provider ids this plugin owns. | | `imageGenerationProviders` | `string[]` | Image-generation provider ids this plugin owns. | | `videoGenerationProviders` | `string[]` | Video-generation provider ids this plugin owns. | @@ -401,6 +403,12 @@ Provider plugins that implement `resolveExternalAuthProfiles` should declare through a deprecated compatibility fallback, but that fallback is slower and will be removed after the migration window. +Bundled memory embedding providers should declare +`contracts.memoryEmbeddingProviders` for every adapter id they expose, including +built-in adapters such as `local`. Standalone CLI paths use this manifest +contract to load only the owning plugin before the full Gateway runtime has +registered providers. + ## mediaUnderstandingProviderMetadata reference Use `mediaUnderstandingProviderMetadata` when a media-understanding provider has diff --git a/docs/reference/memory-config.md b/docs/reference/memory-config.md index 9dd7fbfa56a..8c8f912024b 100644 --- a/docs/reference/memory-config.md +++ b/docs/reference/memory-config.md @@ -207,6 +207,18 @@ arn:aws:bedrock:*::foundation-model/amazon.titan-embed-text-v2:0 Default model: `embeddinggemma-300m-qat-Q8_0.gguf` (~0.6 GB, auto-downloaded). Requires native build: `pnpm approve-builds` then `pnpm rebuild node-llama-cpp`. +Use the standalone CLI to verify the same provider path the Gateway uses: + +```bash +openclaw memory status --deep --agent main +openclaw memory index --force --agent main +``` + +If `provider` is `auto`, `local` is selected only when `local.modelPath` points +to an existing local file. `hf:` and HTTP(S) model references can still be used +explicitly with `provider: "local"`, but they do not make `auto` select local +before the model is available on disk. + --- ## Hybrid search config