"""Test Milvus functionality.""" from typing import List, Optional from langchain.docstore.document import Document from langchain.vectorstores import Milvus from tests.integration_tests.vectorstores.fake_embeddings import ( FakeEmbeddings, fake_texts, ) def _milvus_from_texts( metadatas: Optional[List[dict]] = None, drop: bool = True ) -> Milvus: return Milvus.from_texts( fake_texts, FakeEmbeddings(), metadatas=metadatas, connection_args={"host": "127.0.0.1", "port": "19530"}, drop_old=drop, ) def test_milvus() -> None: """Test end to end construction and search.""" docsearch = _milvus_from_texts() output = docsearch.similarity_search("foo", k=1) assert output == [Document(page_content="foo")] def test_milvus_with_score() -> None: """Test end to end construction and search with scores and IDs.""" texts = ["foo", "bar", "baz"] metadatas = [{"page": i} for i in range(len(texts))] docsearch = _milvus_from_texts(metadatas=metadatas) output = docsearch.similarity_search_with_score("foo", k=3) docs = [o[0] for o in output] scores = [o[1] for o in output] assert docs == [ Document(page_content="foo", metadata={"page": 0}), Document(page_content="bar", metadata={"page": 1}), Document(page_content="baz", metadata={"page": 2}), ] assert scores[0] < scores[1] < scores[2] def test_milvus_max_marginal_relevance_search() -> None: """Test end to end construction and MRR search.""" texts = ["foo", "bar", "baz"] metadatas = [{"page": i} for i in range(len(texts))] docsearch = _milvus_from_texts(metadatas=metadatas) output = docsearch.max_marginal_relevance_search("foo", k=2, fetch_k=3) assert output == [ Document(page_content="foo", metadata={"page": 0}), Document(page_content="baz", metadata={"page": 2}), ] def test_milvus_add_extra() -> None: """Test end to end construction and MRR search.""" texts = ["foo", "bar", "baz"] metadatas = [{"page": i} for i in range(len(texts))] docsearch = _milvus_from_texts(metadatas=metadatas) docsearch.add_texts(texts, metadatas) output = docsearch.similarity_search("foo", k=10) assert len(output) == 6 def test_milvus_no_drop() -> None: """Test end to end construction and MRR search.""" texts = ["foo", "bar", "baz"] metadatas = [{"page": i} for i in range(len(texts))] docsearch = _milvus_from_texts(metadatas=metadatas) del docsearch docsearch = _milvus_from_texts(metadatas=metadatas, drop=False) output = docsearch.similarity_search("foo", k=10) assert len(output) == 6 # if __name__ == "__main__": # test_milvus() # test_milvus_with_score() # test_milvus_max_marginal_relevance_search() # test_milvus_add_extra() # test_milvus_no_drop()