haystack-velesdb 3.7.0__tar.gz → 3.8.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: haystack-velesdb
3
- Version: 3.7.0
3
+ Version: 3.8.1
4
4
  Summary: Haystack 2.x DocumentStore for VelesDB: The Local AI Memory Database.
5
5
  Author-email: VelesDB Team <contact@wiscale.fr>
6
6
  License: MIT
@@ -20,8 +20,8 @@ Requires-Python: >=3.10
20
20
  Description-Content-Type: text/markdown
21
21
  License-File: LICENSE
22
22
  Requires-Dist: haystack-ai>=2.0.0
23
- Requires-Dist: velesdb>=1.14.0
24
- Requires-Dist: velesdb-common>=1.14.0
23
+ Requires-Dist: velesdb>=3.8.0
24
+ Requires-Dist: velesdb-common>=3.8.0
25
25
  Provides-Extra: dev
26
26
  Requires-Dist: pytest<9.0,>=7.0; extra == "dev"
27
27
  Dynamic: license-file
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "haystack-velesdb"
7
- version = "3.7.0"
7
+ version = "3.8.1"
8
8
  description = "Haystack 2.x DocumentStore for VelesDB: The Local AI Memory Database."
9
9
  readme = "README.md"
10
10
  license = {text = "MIT"}
@@ -31,8 +31,8 @@ classifiers = [
31
31
  requires-python = ">=3.10"
32
32
  dependencies = [
33
33
  "haystack-ai>=2.0.0",
34
- "velesdb>=1.14.0",
35
- "velesdb-common>=1.14.0",
34
+ "velesdb>=3.8.0",
35
+ "velesdb-common>=3.8.0",
36
36
  ]
37
37
 
38
38
  [project.optional-dependencies]
@@ -0,0 +1,7 @@
1
+ """Haystack 2.x DocumentStore integration for VelesDB."""
2
+
3
+ from haystack_velesdb.document_store import VelesDBDocumentStore
4
+ from haystack_velesdb.retriever import VelesDBEmbeddingRetriever
5
+
6
+ __all__ = ["VelesDBDocumentStore", "VelesDBEmbeddingRetriever"]
7
+ __version__ = "3.8.1"
@@ -0,0 +1,65 @@
1
+ """Haystack retriever component backed by a :class:`VelesDBDocumentStore`."""
2
+
3
+ from typing import Any, Dict, List, Optional
4
+
5
+ from haystack import component, default_from_dict, default_to_dict
6
+ from haystack.dataclasses import Document
7
+
8
+ from haystack_velesdb.document_store import VelesDBDocumentStore
9
+
10
+
11
+ @component
12
+ class VelesDBEmbeddingRetriever:
13
+ """Retrieves documents from a :class:`VelesDBDocumentStore` by dense
14
+ embedding similarity, for use inside a Haystack ``Pipeline``.
15
+
16
+ Ships the component the ecosystem expects (like ``QdrantEmbeddingRetriever``)
17
+ so callers no longer have to hand-roll a ``@component`` wrapper: connect an
18
+ embedder's ``embedding`` output to this component's ``query_embedding`` input.
19
+ ``top_k`` / ``filters`` set at construction can be overridden per ``run``.
20
+ """
21
+
22
+ def __init__(
23
+ self,
24
+ document_store: VelesDBDocumentStore,
25
+ top_k: int = 10,
26
+ filters: Optional[Dict[str, Any]] = None,
27
+ scale_score: bool = True,
28
+ ) -> None:
29
+ self._document_store = document_store
30
+ self._top_k = top_k
31
+ self._filters = filters
32
+ self._scale_score = scale_score
33
+
34
+ @component.output_types(documents=List[Document])
35
+ def run(
36
+ self,
37
+ query_embedding: List[float],
38
+ top_k: Optional[int] = None,
39
+ filters: Optional[Dict[str, Any]] = None,
40
+ ) -> Dict[str, List[Document]]:
41
+ """Run dense retrieval for ``query_embedding``."""
42
+ documents = self._document_store.embedding_retrieval(
43
+ query_embedding,
44
+ top_k=self._top_k if top_k is None else top_k,
45
+ filters=self._filters if filters is None else filters,
46
+ scale_score=self._scale_score,
47
+ )
48
+ return {"documents": documents}
49
+
50
+ def to_dict(self) -> Dict[str, Any]:
51
+ """Serialize the component (and its store) for pipeline persistence."""
52
+ return default_to_dict(
53
+ self,
54
+ document_store=self._document_store.to_dict(),
55
+ top_k=self._top_k,
56
+ filters=self._filters,
57
+ scale_score=self._scale_score,
58
+ )
59
+
60
+ @classmethod
61
+ def from_dict(cls, data: Dict[str, Any]) -> "VelesDBEmbeddingRetriever":
62
+ """Rebuild the component (and its store) from a serialized pipeline."""
63
+ store_data = data["init_parameters"]["document_store"]
64
+ data["init_parameters"]["document_store"] = VelesDBDocumentStore.from_dict(store_data)
65
+ return default_from_dict(cls, data)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: haystack-velesdb
3
- Version: 3.7.0
3
+ Version: 3.8.1
4
4
  Summary: Haystack 2.x DocumentStore for VelesDB: The Local AI Memory Database.
5
5
  Author-email: VelesDB Team <contact@wiscale.fr>
6
6
  License: MIT
@@ -20,8 +20,8 @@ Requires-Python: >=3.10
20
20
  Description-Content-Type: text/markdown
21
21
  License-File: LICENSE
22
22
  Requires-Dist: haystack-ai>=2.0.0
23
- Requires-Dist: velesdb>=1.14.0
24
- Requires-Dist: velesdb-common>=1.14.0
23
+ Requires-Dist: velesdb>=3.8.0
24
+ Requires-Dist: velesdb-common>=3.8.0
25
25
  Provides-Extra: dev
26
26
  Requires-Dist: pytest<9.0,>=7.0; extra == "dev"
27
27
  Dynamic: license-file
@@ -4,6 +4,7 @@ pyproject.toml
4
4
  src/haystack_velesdb/__init__.py
5
5
  src/haystack_velesdb/document_store.py
6
6
  src/haystack_velesdb/py.typed
7
+ src/haystack_velesdb/retriever.py
7
8
  src/haystack_velesdb.egg-info/PKG-INFO
8
9
  src/haystack_velesdb.egg-info/SOURCES.txt
9
10
  src/haystack_velesdb.egg-info/dependency_links.txt
@@ -1,6 +1,6 @@
1
1
  haystack-ai>=2.0.0
2
- velesdb>=1.14.0
3
- velesdb-common>=1.14.0
2
+ velesdb>=3.8.0
3
+ velesdb-common>=3.8.0
4
4
 
5
5
  [dev]
6
6
  pytest<9.0,>=7.0
@@ -286,3 +286,34 @@ def test_pipeline_with_decorated_retriever(tmp_path) -> None:
286
286
  assert len(docs) == 2
287
287
  # Top result should be the closest English doc to the query vector.
288
288
  assert docs[0].id == "doc-en-1"
289
+
290
+
291
+ def test_shipped_embedding_retriever_component_runs(tmp_path) -> None:
292
+ """The package now ships VelesDBEmbeddingRetriever, so callers no longer
293
+ hand-roll a @component wrapper. It runs standalone and inside a Pipeline."""
294
+ from haystack_velesdb import VelesDBEmbeddingRetriever
295
+
296
+ store = _store(tmp_path)
297
+ store.write_documents(_docs())
298
+ retriever = VelesDBEmbeddingRetriever(document_store=store, top_k=2)
299
+
300
+ out = retriever.run(query_embedding=[1.0, 0.0, 0.0, 0.0])
301
+ assert [d.id for d in out["documents"]][0] == "doc-en-1"
302
+
303
+ pipeline = Pipeline()
304
+ pipeline.add_component("retriever", retriever)
305
+ result = pipeline.run({"retriever": {"query_embedding": [1.0, 0.0, 0.0, 0.0]}})
306
+ assert len(result["retriever"]["documents"]) == 2
307
+
308
+
309
+ def test_shipped_embedding_retriever_serialization_roundtrip(tmp_path) -> None:
310
+ """to_dict/from_dict rebuilds the component and its store for pipeline YAML."""
311
+ from haystack_velesdb import VelesDBEmbeddingRetriever
312
+
313
+ retriever = VelesDBEmbeddingRetriever(
314
+ document_store=_store(tmp_path), top_k=3, scale_score=False
315
+ )
316
+ restored = VelesDBEmbeddingRetriever.from_dict(retriever.to_dict())
317
+ assert restored._top_k == 3
318
+ assert restored._scale_score is False
319
+ assert isinstance(restored._document_store, VelesDBDocumentStore)
@@ -1,6 +0,0 @@
1
- """Haystack 2.x DocumentStore integration for VelesDB."""
2
-
3
- from haystack_velesdb.document_store import VelesDBDocumentStore
4
-
5
- __all__ = ["VelesDBDocumentStore"]
6
- __version__ = "3.7.0"