Reset function for VectorDBs (#2584)
This commit is contained in:
@@ -75,9 +75,48 @@ class RedisDB(VectorStoreBase):
|
||||
self.index.set_client(self.client)
|
||||
self.index.create(overwrite=True)
|
||||
|
||||
# TODO: Implement multiindex support.
|
||||
def create_col(self, name, vector_size, distance):
|
||||
raise NotImplementedError("Collection/Index creation not supported yet.")
|
||||
def create_col(self, name=None, vector_size=None, distance=None):
|
||||
"""
|
||||
Create a new collection (index) in Redis.
|
||||
|
||||
Args:
|
||||
name (str, optional): Name for the collection. Defaults to None, which uses the current collection_name.
|
||||
vector_size (int, optional): Size of the vector embeddings. Defaults to None, which uses the current embedding_model_dims.
|
||||
distance (str, optional): Distance metric to use. Defaults to None, which uses 'cosine'.
|
||||
|
||||
Returns:
|
||||
The created index object.
|
||||
"""
|
||||
# Use provided parameters or fall back to instance attributes
|
||||
collection_name = name or self.schema['index']['name']
|
||||
embedding_dims = vector_size or self.embedding_model_dims
|
||||
distance_metric = distance or "cosine"
|
||||
|
||||
# Create a new schema with the specified parameters
|
||||
index_schema = {
|
||||
"name": collection_name,
|
||||
"prefix": f"mem0:{collection_name}",
|
||||
}
|
||||
|
||||
# Copy the default fields and update the vector field with the specified dimensions
|
||||
fields = DEFAULT_FIELDS.copy()
|
||||
fields[-1]["attrs"]["dims"] = embedding_dims
|
||||
fields[-1]["attrs"]["distance_metric"] = distance_metric
|
||||
|
||||
# Create the schema
|
||||
schema = {"index": index_schema, "fields": fields}
|
||||
|
||||
# Create the index
|
||||
index = SearchIndex.from_dict(schema)
|
||||
index.set_client(self.client)
|
||||
index.create(overwrite=True)
|
||||
|
||||
# Update instance attributes if creating a new collection
|
||||
if name:
|
||||
self.schema = schema
|
||||
self.index = index
|
||||
|
||||
return index
|
||||
|
||||
def insert(self, vectors: list, payloads: list = None, ids: list = None):
|
||||
data = []
|
||||
@@ -194,6 +233,25 @@ class RedisDB(VectorStoreBase):
|
||||
def col_info(self, name):
|
||||
return self.index.info()
|
||||
|
||||
def reset(self):
|
||||
"""
|
||||
Reset the index by deleting and recreating it.
|
||||
"""
|
||||
collection_name = self.schema['index']['name']
|
||||
logger.warning(f"Resetting index {collection_name}...")
|
||||
self.delete_col()
|
||||
|
||||
self.index = SearchIndex.from_dict(self.schema)
|
||||
self.index.set_client(self.client)
|
||||
self.index.create(overwrite=True)
|
||||
|
||||
#or use
|
||||
#self.create_col(collection_name, self.embedding_model_dims)
|
||||
|
||||
|
||||
# Recreate the index with the same parameters
|
||||
self.create_col(collection_name, self.embedding_model_dims)
|
||||
|
||||
def list(self, filters: dict = None, limit: int = None) -> list:
|
||||
"""
|
||||
List all recent created memories from the vector store.
|
||||
|
||||
Reference in New Issue
Block a user