Skip to content

Commit be6921c

Browse files
authored
Merge pull request #1794 from seehi/feat-rm-milvus
remove milvus from RAG
2 parents ad33445 + 2fdfd70 commit be6921c

File tree

8 files changed

+0
-144
lines changed

8 files changed

+0
-144
lines changed

metagpt/rag/factories/index.py

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
from llama_index.vector_stores.chroma import ChromaVectorStore
99
from llama_index.vector_stores.elasticsearch import ElasticsearchStore
1010
from llama_index.vector_stores.faiss import FaissVectorStore
11-
from llama_index.vector_stores.milvus import MilvusVectorStore
1211

1312
from metagpt.rag.factories.base import ConfigBasedFactory
1413
from metagpt.rag.schema import (
@@ -18,7 +17,6 @@
1817
ElasticsearchIndexConfig,
1918
ElasticsearchKeywordIndexConfig,
2019
FAISSIndexConfig,
21-
MilvusIndexConfig,
2220
)
2321

2422

@@ -30,7 +28,6 @@ def __init__(self):
3028
BM25IndexConfig: self._create_bm25,
3129
ElasticsearchIndexConfig: self._create_es,
3230
ElasticsearchKeywordIndexConfig: self._create_es,
33-
MilvusIndexConfig: self._create_milvus,
3431
}
3532
super().__init__(creators)
3633

@@ -49,11 +46,6 @@ def _create_bm25(self, config: BM25IndexConfig, **kwargs) -> VectorStoreIndex:
4946

5047
return self._index_from_storage(storage_context=storage_context, config=config, **kwargs)
5148

52-
def _create_milvus(self, config: MilvusIndexConfig, **kwargs) -> VectorStoreIndex:
53-
vector_store = MilvusVectorStore(collection_name=config.collection_name, uri=config.uri, token=config.token)
54-
55-
return self._index_from_vector_store(vector_store=vector_store, config=config, **kwargs)
56-
5749
def _create_chroma(self, config: ChromaIndexConfig, **kwargs) -> VectorStoreIndex:
5850
db = chromadb.PersistentClient(str(config.persist_path))
5951
chroma_collection = db.get_or_create_collection(config.collection_name, metadata=config.metadata)

metagpt/rag/factories/retriever.py

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
from llama_index.vector_stores.chroma import ChromaVectorStore
1414
from llama_index.vector_stores.elasticsearch import ElasticsearchStore
1515
from llama_index.vector_stores.faiss import FaissVectorStore
16-
from llama_index.vector_stores.milvus import MilvusVectorStore
1716

1817
from metagpt.rag.factories.base import ConfigBasedFactory
1918
from metagpt.rag.retrievers.base import RAGRetriever
@@ -22,15 +21,13 @@
2221
from metagpt.rag.retrievers.es_retriever import ElasticsearchRetriever
2322
from metagpt.rag.retrievers.faiss_retriever import FAISSRetriever
2423
from metagpt.rag.retrievers.hybrid_retriever import SimpleHybridRetriever
25-
from metagpt.rag.retrievers.milvus_retriever import MilvusRetriever
2624
from metagpt.rag.schema import (
2725
BaseRetrieverConfig,
2826
BM25RetrieverConfig,
2927
ChromaRetrieverConfig,
3028
ElasticsearchKeywordRetrieverConfig,
3129
ElasticsearchRetrieverConfig,
3230
FAISSRetrieverConfig,
33-
MilvusRetrieverConfig,
3431
)
3532

3633

@@ -60,7 +57,6 @@ def __init__(self):
6057
ChromaRetrieverConfig: self._create_chroma_retriever,
6158
ElasticsearchRetrieverConfig: self._create_es_retriever,
6259
ElasticsearchKeywordRetrieverConfig: self._create_es_retriever,
63-
MilvusRetrieverConfig: self._create_milvus_retriever,
6460
}
6561
super().__init__(creators)
6662

@@ -81,11 +77,6 @@ def _create_default(self, **kwargs) -> RAGRetriever:
8177

8278
return index.as_retriever()
8379

84-
def _create_milvus_retriever(self, config: MilvusRetrieverConfig, **kwargs) -> MilvusRetriever:
85-
config.index = self._build_milvus_index(config, **kwargs)
86-
87-
return MilvusRetriever(**config.model_dump())
88-
8980
def _create_faiss_retriever(self, config: FAISSRetrieverConfig, **kwargs) -> FAISSRetriever:
9081
config.index = self._build_faiss_index(config, **kwargs)
9182

@@ -144,14 +135,6 @@ def _build_chroma_index(self, config: ChromaRetrieverConfig, **kwargs) -> Vector
144135

145136
return self._build_index_from_vector_store(config, vector_store, **kwargs)
146137

147-
@get_or_build_index
148-
def _build_milvus_index(self, config: MilvusRetrieverConfig, **kwargs) -> VectorStoreIndex:
149-
vector_store = MilvusVectorStore(
150-
uri=config.uri, collection_name=config.collection_name, token=config.token, dim=config.dimensions
151-
)
152-
153-
return self._build_index_from_vector_store(config, vector_store, **kwargs)
154-
155138
@get_or_build_index
156139
def _build_es_index(self, config: ElasticsearchRetrieverConfig, **kwargs) -> VectorStoreIndex:
157140
vector_store = ElasticsearchStore(**config.store_config.model_dump())

metagpt/rag/retrievers/milvus_retriever.py

Lines changed: 0 additions & 17 deletions
This file was deleted.

metagpt/rag/schema.py

Lines changed: 0 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -69,36 +69,6 @@ class BM25RetrieverConfig(IndexRetrieverConfig):
6969
_no_embedding: bool = PrivateAttr(default=True)
7070

7171

72-
class MilvusRetrieverConfig(IndexRetrieverConfig):
73-
"""Config for Milvus-based retrievers."""
74-
75-
uri: str = Field(default="./milvus_local.db", description="The directory to save data.")
76-
collection_name: str = Field(default="metagpt", description="The name of the collection.")
77-
token: str = Field(default=None, description="The token for Milvus")
78-
metadata: Optional[CollectionMetadata] = Field(
79-
default=None, description="Optional metadata to associate with the collection"
80-
)
81-
dimensions: int = Field(default=0, description="Dimensionality of the vectors for Milvus index construction.")
82-
83-
_embedding_type_to_dimensions: ClassVar[dict[EmbeddingType, int]] = {
84-
EmbeddingType.GEMINI: 768,
85-
EmbeddingType.OLLAMA: 4096,
86-
}
87-
88-
@model_validator(mode="after")
89-
def check_dimensions(self):
90-
if self.dimensions == 0:
91-
self.dimensions = config.embedding.dimensions or self._embedding_type_to_dimensions.get(
92-
config.embedding.api_type, 1536
93-
)
94-
if not config.embedding.dimensions and config.embedding.api_type not in self._embedding_type_to_dimensions:
95-
logger.warning(
96-
f"You didn't set dimensions in config when using {config.embedding.api_type}, default to 1536"
97-
)
98-
99-
return self
100-
101-
10272
class ChromaRetrieverConfig(IndexRetrieverConfig):
10373
"""Config for Chroma-based retrievers."""
10474

@@ -210,17 +180,6 @@ class ChromaIndexConfig(VectorIndexConfig):
210180
)
211181

212182

213-
class MilvusIndexConfig(VectorIndexConfig):
214-
"""Config for milvus-based index."""
215-
216-
collection_name: str = Field(default="metagpt", description="The name of the collection.")
217-
uri: str = Field(default="./milvus_local.db", description="The uri of the index.")
218-
token: Optional[str] = Field(default=None, description="The token of the index.")
219-
metadata: Optional[CollectionMetadata] = Field(
220-
default=None, description="Optional metadata to associate with the collection"
221-
)
222-
223-
224183
class BM25IndexConfig(BaseIndexConfig):
225184
"""Config for bm25-based index."""
226185

setup.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@ def run(self):
4343
"llama-index-postprocessor-cohere-rerank==0.1.4",
4444
"llama-index-postprocessor-colbert-rerank==0.1.1",
4545
"llama-index-postprocessor-flag-embedding-reranker==0.1.2",
46-
"llama-index-vector-stores-milvus==0.1.23",
4746
"docx2txt==0.8",
4847
],
4948
}
Lines changed: 0 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
11
import random
22

3-
import pytest
4-
5-
from metagpt.document_store.milvus_store import MilvusConnection, MilvusStore
6-
73
seed_value = 42
84
random.seed(seed_value)
95

@@ -20,29 +16,3 @@ def assert_almost_equal(actual, expected):
2016
assert abs(ac - exp) <= delta, f"{ac} is not within {delta} of {exp}"
2117
else:
2218
assert abs(actual - expected) <= delta, f"{actual} is not within {delta} of {expected}"
23-
24-
25-
@pytest.mark.skip() # Skip because the pymilvus dependency is not installed by default
26-
def test_milvus_store():
27-
milvus_connection = MilvusConnection(uri="./milvus_local.db")
28-
milvus_store = MilvusStore(milvus_connection)
29-
30-
collection_name = "TestCollection"
31-
milvus_store.create_collection(collection_name, dim=8)
32-
33-
milvus_store.add(collection_name, ids, vectors, metadata)
34-
35-
search_results = milvus_store.search(collection_name, query=[1.0] * 8)
36-
assert len(search_results) > 0
37-
first_result = search_results[0]
38-
assert first_result["id"] == "doc_0"
39-
40-
search_results_with_filter = milvus_store.search(collection_name, query=[1.0] * 8, filter={"rand_number": 1})
41-
assert len(search_results_with_filter) > 0
42-
assert search_results_with_filter[0]["id"] == "doc_1"
43-
44-
milvus_store.delete(collection_name, _ids=["doc_0"])
45-
deleted_results = milvus_store.search(collection_name, query=[1.0] * 8, limit=1)
46-
assert deleted_results[0]["id"] != "doc_0"
47-
48-
milvus_store.client.drop_collection(collection_name)

tests/metagpt/rag/factories/test_index.py

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
ElasticsearchIndexConfig,
99
ElasticsearchStoreConfig,
1010
FAISSIndexConfig,
11-
MilvusIndexConfig,
1211
)
1312

1413

@@ -21,10 +20,6 @@ def setup(self):
2120
def faiss_config(self):
2221
return FAISSIndexConfig(persist_path="")
2322

24-
@pytest.fixture
25-
def milvus_config(self):
26-
return MilvusIndexConfig(uri="", collection_name="")
27-
2823
@pytest.fixture
2924
def chroma_config(self):
3025
return ChromaIndexConfig(persist_path="", collection_name="")
@@ -70,16 +65,6 @@ def test_create_bm25_index(
7065
):
7166
self.index_factory.get_index(bm25_config, embed_model=mock_embedding)
7267

73-
def test_create_milvus_index(self, mocker, milvus_config, mock_from_vector_store, mock_embedding):
74-
# Mock
75-
mock_milvus_store = mocker.patch("metagpt.rag.factories.index.MilvusVectorStore")
76-
77-
# Exec
78-
self.index_factory.get_index(milvus_config, embed_model=mock_embedding)
79-
80-
# Assert
81-
mock_milvus_store.assert_called_once()
82-
8368
def test_create_chroma_index(self, mocker, chroma_config, mock_from_vector_store, mock_embedding):
8469
# Mock
8570
mock_chroma_db = mocker.patch("metagpt.rag.factories.index.chromadb.PersistentClient")

tests/metagpt/rag/factories/test_retriever.py

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,22 +5,19 @@
55
from llama_index.core.schema import TextNode
66
from llama_index.vector_stores.chroma import ChromaVectorStore
77
from llama_index.vector_stores.elasticsearch import ElasticsearchStore
8-
from llama_index.vector_stores.milvus import MilvusVectorStore
98

109
from metagpt.rag.factories.retriever import RetrieverFactory
1110
from metagpt.rag.retrievers.bm25_retriever import DynamicBM25Retriever
1211
from metagpt.rag.retrievers.chroma_retriever import ChromaRetriever
1312
from metagpt.rag.retrievers.es_retriever import ElasticsearchRetriever
1413
from metagpt.rag.retrievers.faiss_retriever import FAISSRetriever
1514
from metagpt.rag.retrievers.hybrid_retriever import SimpleHybridRetriever
16-
from metagpt.rag.retrievers.milvus_retriever import MilvusRetriever
1715
from metagpt.rag.schema import (
1816
BM25RetrieverConfig,
1917
ChromaRetrieverConfig,
2018
ElasticsearchRetrieverConfig,
2119
ElasticsearchStoreConfig,
2220
FAISSRetrieverConfig,
23-
MilvusRetrieverConfig,
2421
)
2522

2623

@@ -44,10 +41,6 @@ def mock_vector_store_index(self, mocker):
4441
def mock_chroma_vector_store(self, mocker):
4542
return mocker.MagicMock(spec=ChromaVectorStore)
4643

47-
@pytest.fixture
48-
def mock_milvus_vector_store(self, mocker):
49-
return mocker.MagicMock(spec=MilvusVectorStore)
50-
5144
@pytest.fixture
5245
def mock_es_vector_store(self, mocker):
5346
return mocker.MagicMock(spec=ElasticsearchStore)
@@ -98,14 +91,6 @@ def test_get_retriever_with_chroma_config(self, mocker, mock_chroma_vector_store
9891

9992
assert isinstance(retriever, ChromaRetriever)
10093

101-
def test_get_retriever_with_milvus_config(self, mocker, mock_milvus_vector_store, mock_embedding):
102-
mock_config = MilvusRetrieverConfig(uri="/path/to/milvus.db", collection_name="test_collection")
103-
mocker.patch("metagpt.rag.factories.retriever.MilvusVectorStore", return_value=mock_milvus_vector_store)
104-
105-
retriever = self.retriever_factory.get_retriever(configs=[mock_config], nodes=[], embed_model=mock_embedding)
106-
107-
assert isinstance(retriever, MilvusRetriever)
108-
10994
def test_get_retriever_with_es_config(self, mocker, mock_es_vector_store, mock_embedding):
11095
mock_config = ElasticsearchRetrieverConfig(store_config=ElasticsearchStoreConfig())
11196
mocker.patch("metagpt.rag.factories.retriever.ElasticsearchStore", return_value=mock_es_vector_store)

0 commit comments

Comments
 (0)