Skip to content

[Bug]: openclaw doctor falsely warns about missing embedding provider when QMD local embeddings are set #17263

@DavidOrti

Description

@DavidOrti

Summary

I have QMD search backend enabled, when running openclaw doctor, it says no embedding provider is set. I'm hosting my own embeddings for QMD (gemma), so no API key is needed.

Steps to reproduce

  1. Configure QMD as memory backend with local models (I set embeddinggemma-300M)
  2. Verify embeddings work: qmd embed succeeds, qmd query "test" returns results
  3. Run openclaw doctor
  4. See warning

Expected behavior

Doctor should detect that QMD is configured with local models and skip this warning (or show a green check).

Actual behavior

◇  Memory search ───────────────────────────────────────────────────────────────────────────╮
│                                                                                           │
│  Memory search is enabled but no embedding provider is configured.                        │
│  Semantic recall will not work without an embedding provider.                             │
│                                                                                           │
│  Fix (pick one):                                                                          │
│  - Set OPENAI_API_KEY or GEMINI_API_KEY in your environment                               │
│  - Add credentials: openclaw auth add --provider openai                                   │
│  - For local embeddings: configure agents.defaults.memorySearch.provider and local model  │
│    path                                                                                   │
│  - To disable: openclaw config set agents.defaults.memorySearch.enabled false             │
│                                                                                           │
│  Verify: openclaw memory status --deep                                                    │
│                                                                                           │
├───────────────────────────────────────────────────────────────────────────────────────────╯

OpenClaw version

2026.2.14

Operating system

Ubuntu 24.04

Install method

npm global

Logs, screenshots, and evidence

Impact and severity

No response

Additional information

From my clanker:

The doctor check flows through this logic:

  1. resolveMemorySearchConfig() returns a resolved object with a provider field
  2. If provider === "auto" (which is likely the default), it falls through to line 703
  3. It checks hasLocalEmbeddings(resolved.local) — which looks for local.modelPath
  4. QMD handles its own embeddings internally — there's no modelPath in the OpenClaw config because QMD uses its own embeddinggemma model
  5. So hasLocalEmbeddings returns false
  6. Then it checks for remote API keys (openai/gemini/voyage) — we have none
  7. Result: false positive warning "no embedding provider configured"

The doctor doesn't know that when memory.backend = "qmd", QMD handles embeddings entirely on its own. The check assumes OpenClaw itself must have an embedding provider configured, but QMD bundles its own.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions