Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions tests/integration/test_chroma_pipeline.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,24 @@ def test_chroma_as_retriever(chroma_adapter: ChromaAdapter) -> None:
assert results[0].id == "test_id_retriever"


def test_chroma_metadata_filtering(chroma_adapter: ChromaAdapter) -> None:
"""Verify that ChromaAdapter retrieves only filtered metadata matching documents."""
doc_match = Document(
page_content="Electronics topic query", metadata={"category": "electronics", "tenant": "user1"}, id="doc_match"
)
doc_skip = Document(
page_content="Electronics topic query", metadata={"category": "clothing", "tenant": "user1"}, id="doc_skip"
)
chroma_adapter.upsert(doc_match)
chroma_adapter.upsert(doc_skip)

# Filter exactly category=electronics
retriever = chroma_adapter.as_retriever(metadata_filter={"category": "electronics"}, search_kwargs={"k": 2})
results = retriever.invoke("Electronics topic query")
assert len(results) == 1
assert results[0].id == "doc_match"


def test_e2e_pipeline_chroma_hard_delete(
chroma_adapter: ChromaAdapter,
document_builder: DocumentBuilder,
Expand Down
20 changes: 20 additions & 0 deletions tests/integration/test_milvus_adapter.py
Original file line number Diff line number Diff line change
Expand Up @@ -102,3 +102,23 @@ def test_milvus_adapter_upsert_missing_id(milvus_adapter: MilvusAdapter) -> None
with pytest.raises(ValueError) as exc_info:
milvus_adapter.upsert(doc)
assert "Document ID must be provided" in str(exc_info.value)


def test_milvus_adapter_metadata_filtering(milvus_adapter: MilvusAdapter) -> None:
"""Verify that MilvusAdapter filters documents matching metadata expression."""
doc_match = Document(
page_content="Matching product description", metadata={"category": "books", "in_stock": True}, id="doc_match"
)
doc_skip = Document(
page_content="Matching product description", metadata={"category": "clothing", "in_stock": True}, id="doc_skip"
)

milvus_adapter.upsert(doc_match)
milvus_adapter.upsert(doc_skip)

# Filter with category == books
retriever = milvus_adapter.as_retriever(metadata_filter={"category": "books"}, search_kwargs={"k": 2})
results = retriever.invoke("Matching product")
assert len(results) == 1
doc_id = results[0].id or results[0].metadata.get("pk")
assert doc_id == "doc_match"
13 changes: 13 additions & 0 deletions tests/unit/test_pgvector_adapter.py
Original file line number Diff line number Diff line change
Expand Up @@ -142,3 +142,16 @@ def test_pgvector_adapter_as_retriever(mock_pgvector: MagicMock) -> None:

adapter.as_retriever(search_kwargs={"k": 3})
adapter.store.as_retriever.assert_called_once_with(search_kwargs={"k": 3})


def test_pgvector_adapter_metadata_filtering(mock_pgvector: MagicMock) -> None:
"""Verify that PGVectorAdapter maps metadata_filter to search_kwargs filter dictionary."""
embeddings = FakeEmbeddings(size=128)
adapter = PGVectorAdapter(
connection_string="postgresql+psycopg://postgres:secret@localhost:5432/mydb",
collection_name="test_collection",
embeddings=embeddings,
)

adapter.as_retriever(metadata_filter={"category": "electronics"}, search_kwargs={"k": 3})
adapter.store.as_retriever.assert_called_once_with(search_kwargs={"k": 3, "filter": {"category": "electronics"}})
Loading