diff --git a/README.md b/README.md index 066807597..13887c574 100644 --- a/README.md +++ b/README.md @@ -101,7 +101,7 @@ headroom perf headroom dashboard # live savings dashboard (proxy must be running) ``` -Granular extras: `[proxy]`, `[mcp]`, `[ml]`, `[code]`, `[memory]`, `[relevance]`, `[image]`, `[agno]`, `[langchain]`, `[evals]`, `[pytorch-mps]` (Apple-GPU memory-embedder offload — set `HEADROOM_EMBEDDER_RUNTIME=pytorch_mps`). Requires **Python 3.10+**. +Granular extras: `[proxy]`, `[mcp]`, `[ml]`, `[code]`, `[memory]`, `[vector]` (optional HNSW backend — needs a C++ toolchain, not in `[all]`), `[relevance]`, `[image]`, `[agno]`, `[langchain]`, `[evals]`, `[pytorch-mps]` (Apple-GPU memory-embedder offload — set `HEADROOM_EMBEDDER_RUNTIME=pytorch_mps`). Requires **Python 3.10+**. ## Proof @@ -325,7 +325,7 @@ npm install headroom-ai # TypeScript / Node docker pull ghcr.io/chopratejas/headroom:latest ``` -Granular extras: `[proxy]`, `[mcp]`, `[ml]` (Kompress-base), `[code]`, `[memory]`, `[relevance]`, `[image]`, `[agno]`, `[langchain]`, `[evals]`, `[pytorch-mps]` (Apple-GPU memory-embedder offload — set `HEADROOM_EMBEDDER_RUNTIME=pytorch_mps`). Requires **Python 3.10+**. +Granular extras: `[proxy]`, `[mcp]`, `[ml]` (Kompress-base), `[code]`, `[memory]`, `[vector]` (optional HNSW backend — needs a C++ toolchain, not in `[all]`), `[relevance]`, `[image]`, `[agno]`, `[langchain]`, `[evals]`, `[pytorch-mps]` (Apple-GPU memory-embedder offload — set `HEADROOM_EMBEDDER_RUNTIME=pytorch_mps`). Requires **Python 3.10+**. > **Note**: `[all]` covers the core stack but excludes framework adapters. Install them separately: `pip install "headroom-ai[langchain]"` (also `[agno]`, `[strands]`, `[anyllm]`, `[bedrock]`). diff --git a/docs/content/docs/installation.mdx b/docs/content/docs/installation.mdx index 162cc2a91..00187993c 100644 --- a/docs/content/docs/installation.mdx +++ b/docs/content/docs/installation.mdx @@ -41,7 +41,8 @@ pip install "headroom-ai[all]" | `proxy` | Proxy server, MCP tools, HTTP API | `pip install "headroom-ai[proxy]"` | | `ml` | Kompress (ModernBERT text compression, requires PyTorch) | `pip install "headroom-ai[ml]"` | | `code` | CodeCompressor (tree-sitter AST parsing) | `pip install "headroom-ai[code]"` | -| `memory` | Persistent memory (hnswlib, sqlite-vec, sentence-transformers) | `pip install "headroom-ai[memory]"` | +| `memory` | Persistent memory (sqlite-vec, sentence-transformers) — pure-Python default backend, no compiler | `pip install "headroom-ai[memory]"` | +| `vector` | Optional HNSW vector backend (hnswlib) — needs a C++ toolchain; **not in `[all]`** | `pip install "headroom-ai[vector]"` | | `relevance` | fastembed-based relevance scoring (BAAI/bge-small-en-v1.5, ONNX) | `pip install "headroom-ai[relevance]"` | | `image` | Image compression (Pillow, ONNX runtime, OCR) | `pip install "headroom-ai[image]"` | | `reports` | HTML/Markdown report generation (Jinja2) | `pip install "headroom-ai[reports]"` | diff --git a/pyproject.toml b/pyproject.toml index 0db33160d..2863896a8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -107,12 +107,22 @@ ml = [ # strands-agents`) drags huggingface-hub backwards. "huggingface-hub>=1.5.0,<2.0", ] -# Memory system (hierarchical memory with vector search) +# Memory system (hierarchical memory with vector search). +# Uses the pure-Python sqlite-vec backend by default (VectorBackend.AUTO -> +# SQLITE_VEC), so no C++ toolchain is required. The optional HNSW backend lives +# in the [vector] extra below; installing it here would make `[all]` (which pulls +# [memory]) fail on any machine without a compiler — see #1368. memory = [ - "hnswlib>=0.8.0", "sqlite-vec>=0.1.6", "sentence-transformers>=2.2.0,<6.0", ] +# Optional HNSW vector backend. Needs a C++ toolchain to build hnswlib, so it is +# kept out of [memory] and [all]; opt in with `pip install headroom-ai[vector]` +# and select it via MemoryConfig(vector_backend=VectorBackend.HNSW). The default +# sqlite-vec backend needs no compiler. +vector = [ + "hnswlib>=0.8.0", +] # Qdrant + Neo4j memory backend helpers memory-stack = [ "mem0ai>=2.0.0,<3.0",