diff --git a/docs/configuration-guide.md b/docs/configuration-guide.md index 828ba94..d6e4a3d 100644 --- a/docs/configuration-guide.md +++ b/docs/configuration-guide.md @@ -317,7 +317,7 @@ leann search my-index "your query" --no-recompute When to use: - Extreme low latency requirements (high QPS, interactive assistants) - Read-heavy workloads where storage is cheaper than latency -- Environments without a stable embedding server +- No always-available GPU Constraints: - HNSW: when `--no-recompute` is set, LEANN automatically disables compact mode during build diff --git a/packages/leann-core/src/leann/api.py b/packages/leann-core/src/leann/api.py index 65d75b9..bc060b0 100644 --- a/packages/leann-core/src/leann/api.py +++ b/packages/leann-core/src/leann/api.py @@ -162,6 +162,18 @@ class LeannBuilder: **backend_kwargs, ): self.backend_name = backend_name + # Normalize incompatible combinations early (for consistent metadata) + if backend_name == "hnsw": + is_recompute = backend_kwargs.get("is_recompute", True) + is_compact = backend_kwargs.get("is_compact", True) + if is_recompute is False and is_compact is True: + warnings.warn( + "HNSW with is_recompute=False requires non-compact storage. Forcing is_compact=False.", + UserWarning, + stacklevel=2, + ) + backend_kwargs["is_compact"] = False + backend_factory: Optional[LeannBackendFactoryInterface] = BACKEND_REGISTRY.get(backend_name) if backend_factory is None: raise ValueError(f"Backend '{backend_name}' not found or not registered.")