Pins the qdrant memory provider at f65e62d (0.1.8), which adds display.level (off | summary | verbose) for the recall indicator. The description's previously-unqualified 'progress display (off/minimal/verbose)' sentence is replaced: it named the older top-level progress knob, which is now easily confused with the new display.level ladder. Both are stated with their own value sets and what each gates.
29 lines
4.7 KiB
YAML
29 lines
4.7 KiB
YAML
name: qdrant
|
|
repo: https://github.com/kuehnberger/hermes-qdrant-memory
|
|
sha: f65e62d1ab100bfad04fc47c78200f327f8b2ba1
|
|
version: "0.1.8"
|
|
image: https://raw.githubusercontent.com/kuehnberger/hermes-qdrant-memory/f65e62d1ab100bfad04fc47c78200f327f8b2ba1/docs/banner.jpg
|
|
description: "Dense semantic memory for Hermes, stored in a Qdrant collection you host. Each turn becomes one point — user and assistant text verbatim, no LLM summarization step — embedded on-device at 384 dimensions with fastembed (ONNX; the default install is 206 MB of runtime dependencies with no torch, versus ~1.2 GB when sentence-transformers was a hard dependency) and recalled by cosine search with an optional session_id payload filter, so a result quotes what was actually said. Registers 7 tools: qdrant_search, qdrant_upsert, qdrant_recall, qdrant_collect, qdrant_prepare, qdrant_forget (point-targeted deletion, dry-run by default, no delete-all), and md_search (local markdown knowledge index). An optional recall-indicator display, display.level (off | summary | verbose, default off), adds latency and collection to the chat indicator at summary and one numeric line per operation to the log at verbose — numbers and identifiers only, never message text; it is separate from the older top-level progress knob (off | minimal | verbose), which gates status events. sentence-transformers is selectable on GPU hosts; both backends produce identical vectors for all-MiniLM-L6-v2, so switching backends needs no re-embedding. A circuit breaker (5 consecutive I/O failures, 120 s cooldown) degrades to no new memories instead of crashing, and is_available()/check_backend()/unavailable_reason() distinguish a misconfiguration from a dead server. Hybrid dense+sparse RRF search and INT8 quantization exist in _backend.py but are not on the live path. Local embedded Qdrant mode is not supported: the provider is REST-only and needs a reachable server. Disclosure — all memory content (verbatim user and assistant turns) is stored in and read back from the Qdrant server at the configured url (default http://localhost:6333); QDRANT_API_KEY is only needed for Qdrant Cloud, is kept in .env and read through the Hermes secret scope, and is never written to config.yaml or qdrant.json. Disclosure — the only other outbound traffic is a one-time download of the embedding model weights from huggingface.co (fastembed falls back to storage.googleapis.com/qdrant-fastembed if that fails); embedding runs on-device and no memory content goes to any other party. Disclosure — settings are stored in <HERMES_HOME>/qdrant.json (created 0600, no credentials) and last-operation status in <HERMES_HOME>/qdrant-status.json. Disclosure — md_search returns snippets of local markdown to the model from ~/.hermes/skills, the Obsidian vault at ~/Documents/hermes_default, ~/.hermes/hermes-agent/website and any path in the md_docs_roots key of qdrant.json; its index is built only when you run scripts/md_ingest.py and lives in <base Hermes home>/state/md-search/ (shared by all profiles). Disclosure — the optional semantic tier (md_ingest.py --semantic, and md_search queries with few lexical hits) sends embedding vectors plus file-path labels and section headings, never chunk text, to a separate hermes_md_docs collection on the Qdrant server named by the QDRANT_URL env var (default http://localhost:6333, no API key), and downloads paraphrase-multilingual-MiniLM-L12-v2 from huggingface.co on first use. Disclosure — the plugin is not a server and registers no MCP server, but it is loaded in-process into every Hermes process that embeds, so each one pays its own model copy (measured ~194-211 MB per process)."
|
|
maintainer: kuehnberger
|
|
tier: community
|
|
category: memory
|
|
requires_hermes: ">=0.21.5"
|
|
docs_url: https://github.com/kuehnberger/hermes-qdrant-memory#readme
|
|
known_issues:
|
|
- "Windows on ARM is unsupported: grpcio, pulled in by qdrant-client, has no win_arm64 wheel. Linux and macOS on x86_64/arm64 and Windows x86_64 are supported."
|
|
- "Local embedded Qdrant mode is not supported — the provider is REST-only and requires a reachable server."
|
|
- "md_search returns 'no markdown index yet' until you run the bundled ingest script once (python scripts/md_ingest.py, lexical only and fast; add --semantic for the embedding tier, which takes about 7 minutes for 5500 chunks on a 5-core CPU). No background process does this for you."
|
|
- "Running the plugin's pytest suite inside an installed copy still changes the PM dependency stamp (the .pytest_cache directory is hashed as a build input); only an upstream core change can exclude gitignored state."
|
|
capabilities:
|
|
provides_tools:
|
|
- qdrant_search
|
|
- qdrant_upsert
|
|
- qdrant_recall
|
|
- qdrant_collect
|
|
- qdrant_prepare
|
|
- qdrant_forget
|
|
- md_search
|
|
provides_hooks: []
|
|
provides_middleware: []
|
|
requires_env: []
|