Skip to content

Commit f553821

Browse files
committed
Adapt tests and serialization
1 parent 0f29326 commit f553821

5 files changed

Lines changed: 112 additions & 175 deletions

File tree

integrations/falkordb/src/haystack_integrations/components/retrievers/falkordb/cypher_retriever.py

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
from typing import Any
66

7-
from haystack import component
7+
from haystack import component, default_from_dict, default_to_dict
88
from haystack.dataclasses import Document
99

1010
from haystack_integrations.document_stores.falkordb import FalkorDBDocumentStore
@@ -58,6 +58,30 @@ def __init__(
5858
self.document_store = document_store
5959
self.custom_cypher_query = custom_cypher_query
6060

61+
def to_dict(self) -> dict[str, Any]:
62+
"""
63+
Serialise the retriever to a dictionary.
64+
65+
:returns: Dictionary representation of the retriever.
66+
"""
67+
return default_to_dict(
68+
self,
69+
document_store=self.document_store.to_dict(),
70+
custom_cypher_query=self.custom_cypher_query,
71+
)
72+
73+
@classmethod
74+
def from_dict(cls, data: dict[str, Any]) -> "FalkorDBCypherRetriever":
75+
"""
76+
Deserialise a `FalkorDBCypherRetriever` produced by `to_dict`.
77+
78+
:param data: Serialised retriever dictionary.
79+
:returns: Reconstructed `FalkorDBCypherRetriever` instance.
80+
"""
81+
init_params = data["init_parameters"]
82+
init_params["document_store"] = FalkorDBDocumentStore.from_dict(init_params["document_store"])
83+
return default_from_dict(cls, data)
84+
6185
@component.output_types(documents=list[Document])
6286
def run(
6387
self,

integrations/falkordb/src/haystack_integrations/components/retrievers/falkordb/embedding_retriever.py

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
from typing import Any
66

7-
from haystack import component
7+
from haystack import component, default_from_dict, default_to_dict
88
from haystack.dataclasses import Document
99
from haystack.document_stores.types import FilterPolicy, apply_filter_policy
1010

@@ -63,6 +63,34 @@ def __init__(
6363
self.top_k = top_k
6464
self.filter_policy = FilterPolicy(filter_policy) if isinstance(filter_policy, str) else filter_policy
6565

66+
def to_dict(self) -> dict[str, Any]:
67+
"""
68+
Serialise the retriever to a dictionary.
69+
70+
:returns: Dictionary representation of the retriever.
71+
"""
72+
return default_to_dict(
73+
self,
74+
document_store=self.document_store.to_dict(),
75+
filters=self.filters,
76+
top_k=self.top_k,
77+
filter_policy=self.filter_policy.value,
78+
)
79+
80+
@classmethod
81+
def from_dict(cls, data: dict[str, Any]) -> "FalkorDBEmbeddingRetriever":
82+
"""
83+
Deserialise a `FalkorDBEmbeddingRetriever` produced by `to_dict`.
84+
85+
:param data: Serialised retriever dictionary.
86+
:returns: Reconstructed `FalkorDBEmbeddingRetriever` instance.
87+
"""
88+
init_params = data["init_parameters"]
89+
init_params["document_store"] = FalkorDBDocumentStore.from_dict(init_params["document_store"])
90+
if "filter_policy" in init_params:
91+
init_params["filter_policy"] = FilterPolicy(init_params["filter_policy"])
92+
return default_from_dict(cls, data)
93+
6694
@component.output_types(documents=list[Document])
6795
def run(
6896
self,

integrations/falkordb/src/haystack_integrations/document_stores/falkordb/document_store.py

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,12 @@
99
from datetime import datetime
1010
from typing import Any, Literal
1111

12+
from haystack import default_from_dict, default_to_dict
1213
from haystack.dataclasses import Document
1314
from haystack.document_stores.errors import DocumentStoreError, DuplicateDocumentError
1415
from haystack.document_stores.types import DocumentStore, DuplicatePolicy
1516
from haystack.errors import FilterError
16-
from haystack.utils import Secret
17+
from haystack.utils import Secret, deserialize_secrets_inplace
1718
from redis.exceptions import ResponseError
1819

1920
import falkordb # type: ignore[import-untyped,import-not-found]
@@ -130,6 +131,39 @@ def __init__(
130131
if verify_connectivity:
131132
self._ensure_connected()
132133

134+
def to_dict(self) -> dict[str, Any]:
135+
"""
136+
Serialise the store to a dictionary suitable for `from_dict`.
137+
138+
:returns: Dictionary representation of the store.
139+
"""
140+
return default_to_dict(
141+
self,
142+
host=self.host,
143+
port=self.port,
144+
graph_name=self.graph_name,
145+
username=self.username,
146+
password=self.password.to_dict() if self.password is not None else None,
147+
node_label=self.node_label,
148+
embedding_dim=self.embedding_dim,
149+
embedding_field=self.embedding_field,
150+
similarity=self.similarity,
151+
write_batch_size=self.write_batch_size,
152+
recreate_graph=self.recreate_graph,
153+
verify_connectivity=self.verify_connectivity,
154+
)
155+
156+
@classmethod
157+
def from_dict(cls, data: dict[str, Any]) -> FalkorDBDocumentStore:
158+
"""
159+
Deserialise a `FalkorDBDocumentStore` produced by `to_dict`.
160+
161+
:param data: Serialised store dictionary.
162+
:returns: Reconstructed `FalkorDBDocumentStore` instance.
163+
"""
164+
deserialize_secrets_inplace(data["init_parameters"], keys=["password"])
165+
return default_from_dict(cls, data)
166+
133167
# ------------------------------------------------------------------
134168
# Internal connection helpers
135169
# ------------------------------------------------------------------

integrations/falkordb/tests/test_document_store.py

Lines changed: 2 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import os
77

88
import pytest
9-
from haystack import default_from_dict, default_to_dict
109
from haystack.dataclasses import Document
1110
from haystack.testing.document_store import DocumentStoreBaseTests
1211

@@ -30,28 +29,14 @@ def test_to_dict_from_dict(self):
3029
verify_connectivity=False,
3130
)
3231

33-
data = default_to_dict(
34-
store,
35-
host=store.host,
36-
port=store.port,
37-
graph_name=store.graph_name,
38-
username=store.username,
39-
password=store.password,
40-
node_label=store.node_label,
41-
embedding_dim=store.embedding_dim,
42-
embedding_field=store.embedding_field,
43-
similarity=store.similarity,
44-
write_batch_size=store.write_batch_size,
45-
recreate_graph=store.recreate_graph,
46-
verify_connectivity=store.verify_connectivity,
47-
)
32+
data = store.to_dict()
4833

4934
assert data["init_parameters"]["host"] == "myhost"
5035
assert data["init_parameters"]["port"] == 1234
5136
assert data["init_parameters"]["embedding_dim"] == 512
5237
assert data["init_parameters"]["similarity"] == "euclidean"
5338

54-
restored = default_from_dict(FalkorDBDocumentStore, data)
39+
restored = FalkorDBDocumentStore.from_dict(data)
5540
assert restored.host == "myhost"
5641
assert restored.port == 1234
5742
assert restored.graph_name == "test_graph"

0 commit comments

Comments
 (0)