Skip to content

Commit 56f3ed4

Browse files
committed
tests: harden unit tests (randomize order, add third doc); chore: ignore caches; docs: refine retriever docstrings and README; add examples under docs/
1 parent e5140f4 commit 56f3ed4

10 files changed

Lines changed: 40 additions & 15 deletions

File tree

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# Byte-compiled / optimized / DLL files
22
__pycache__/
3+
**/__pycache__/
34
*.py[cod]
45
*$py.class
56

@@ -36,6 +37,8 @@ coverage.xml
3637
*.py,cover
3738
.hypothesis/
3839
.pytest_cache/
40+
.mypy_cache/
41+
.ruff_cache/
3942
htmlcov/
4043

4144
# Type checkers / linters
-567 Bytes
Binary file not shown.
-9.39 KB
Binary file not shown.

langchain_superlinked/retrievers.py

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
1-
"""Retriever for Superlinked."""
1+
"""LangChain retriever backed by Superlinked.
2+
3+
This module adapts Superlinked query execution to LangChain's retriever
4+
interface. Provide a Superlinked App instance and a `QueryDescriptor`,
5+
and map a result field to `Document.page_content`.
6+
"""
27

38
from __future__ import annotations
49

@@ -188,16 +193,16 @@ def validate_superlinked_packages(cls, values: Dict[str, Any]) -> Dict[str, Any]
188193
def _get_relevant_documents(
189194
self, query: str, *, run_manager: CallbackManagerForRetrieverRun, **kwargs: Any
190195
) -> List[Document]:
191-
"""
192-
Retrieve relevant documents from Superlinked.
196+
"""Retrieve relevant documents from Superlinked.
193197
194198
Args:
195-
query: The user's text query.
196-
run_manager: The callback manager for the retriever run.
197-
**kwargs: Additional parameters to pass to the Superlinked query at runtime.
199+
query: User query text.
200+
run_manager: Callback manager for this retriever run.
201+
**kwargs: Extra parameters forwarded to Superlinked
202+
(for example, weights, filters, `k`).
198203
199204
Returns:
200-
A list of relevant LangChain Documents.
205+
List of `Document` mapped from Superlinked results.
201206
"""
202207
# Extract k parameter before building query_params
203208
k = kwargs.pop("k", self.k)
-173 Bytes
Binary file not shown.
-191 Bytes
Binary file not shown.
Binary file not shown.
-184 Bytes
Binary file not shown.
Binary file not shown.

tests/unit_tests/test_retrievers.py

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
"""Unit tests for SuperlinkedRetriever."""
22

3+
import random
34
from unittest.mock import Mock
45

56
from langchain_core.callbacks import CallbackManagerForRetrieverRun
@@ -40,8 +41,19 @@ def test_get_relevant_documents_success(self) -> None:
4041
"category": "landmark",
4142
}
4243

44+
mock_entry3 = Mock()
45+
mock_entry3.id = "3"
46+
mock_entry3.fields = {
47+
"text": "Machine learning enables predictive analytics.",
48+
"category": "technology",
49+
}
50+
51+
# Randomize entry order to enforce order-independence
52+
entries = [mock_entry1, mock_entry2, mock_entry3]
53+
random.shuffle(entries)
54+
4355
mock_result = Mock()
44-
mock_result.entries = [mock_entry1, mock_entry2]
56+
mock_result.entries = entries
4557
retriever.sl_client.query.return_value = mock_result
4658

4759
# Test the actual method implementation
@@ -50,13 +62,18 @@ def test_get_relevant_documents_success(self) -> None:
5062
retriever, "landmarks", run_manager=run_manager
5163
)
5264

53-
# Verify results
54-
assert len(docs) == 2
55-
assert isinstance(docs[0], Document)
56-
assert docs[0].page_content == "The Eiffel Tower is in Paris."
57-
assert docs[0].metadata == {"id": "1", "category": "landmark"}
58-
assert docs[1].page_content == "The Colosseum is in Rome."
59-
assert docs[1].metadata == {"id": "2", "category": "landmark"}
65+
# Verify results (order-independent)
66+
assert len(docs) == 3
67+
assert all(isinstance(d, Document) for d in docs)
68+
expected = {
69+
("The Eiffel Tower is in Paris.", ("1", "landmark")),
70+
("The Colosseum is in Rome.", ("2", "landmark")),
71+
("Machine learning enables predictive analytics.", ("3", "technology")),
72+
}
73+
got = {
74+
(d.page_content, (d.metadata["id"], d.metadata["category"])) for d in docs
75+
}
76+
assert got == expected
6077

6178
def test_get_relevant_documents_with_k_parameter(self) -> None:
6279
"""Test retrieval with k parameter limiting results."""

0 commit comments

Comments
 (0)