From 41b0e6ceafa37e035ca990e2460480d39d69997b Mon Sep 17 00:00:00 2001 From: tam Date: Fri, 14 Mar 2025 11:28:18 +0800 Subject: [PATCH 1/2] "fix(vector_store): Enhance delete_vector_name method with error handling and resource cleanup" --- .../storage/vector_store/chroma_store.py | 45 ++++++++++++++++--- 1 file changed, 40 insertions(+), 5 deletions(-) diff --git a/packages/dbgpt-ext/src/dbgpt_ext/storage/vector_store/chroma_store.py b/packages/dbgpt-ext/src/dbgpt_ext/storage/vector_store/chroma_store.py index b433a0a384..c60eb72c97 100644 --- a/packages/dbgpt-ext/src/dbgpt_ext/storage/vector_store/chroma_store.py +++ b/packages/dbgpt-ext/src/dbgpt_ext/storage/vector_store/chroma_store.py @@ -201,16 +201,51 @@ def load_document(self, chunks: List[Chunk]) -> List[str]: return ids def delete_vector_name(self, vector_name: str): - """Delete vector name.""" + """Delete vector name and clean up resources. + + Args: + vector_name (str): Name of the vector to delete + + Returns: + bool: True if deletion was successful, False otherwise + + Raises: + Exception: If any error occurs during deletion + """ try: from chromadb.api.client import SharedSystemClient except ImportError: raise ImportError("Please install chroma package first.") + logger.info(f"chroma vector_name:{vector_name} begin delete...") - self._chroma_client.delete_collection(self._collection.name) - SharedSystemClient.clear_system_cache() - self._clean_persist_folder() - return True + + try: + # Check if collection exists first + collections = self._chroma_client.list_collections() + collection_exists = self._collection.name in collections + + if not collection_exists: + logger.warning(f"Collection {self._collection.name} does not exist, skipping deletion") + return True + + # Delete collection if it exists + self._chroma_client.delete_collection(self._collection.name) + SharedSystemClient.clear_system_cache() + + # Clean persist folder if it exists + if os.path.exists(self.persist_dir): + try: + self._clean_persist_folder() + except Exception as e: + logger.error(f"Failed to clean persist folder: {e}") + # Even if folder cleanup fails, collection deletion succeeded + return True + + return True + + except Exception as e: + logger.error(f"Error during vector store deletion: {e}") + raise def delete_by_ids(self, ids): """Delete vector by ids.""" From bf4f550b1b8bf957dab6b24e62acde8fa5d37754 Mon Sep 17 00:00:00 2001 From: tam Date: Fri, 14 Mar 2025 14:02:33 +0800 Subject: [PATCH 2/2] fix(fmt): fix format --- .../storage/vector_store/chroma_store.py | 24 ++++++++++--------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/packages/dbgpt-ext/src/dbgpt_ext/storage/vector_store/chroma_store.py b/packages/dbgpt-ext/src/dbgpt_ext/storage/vector_store/chroma_store.py index c60eb72c97..012e3693d6 100644 --- a/packages/dbgpt-ext/src/dbgpt_ext/storage/vector_store/chroma_store.py +++ b/packages/dbgpt-ext/src/dbgpt_ext/storage/vector_store/chroma_store.py @@ -202,13 +202,13 @@ def load_document(self, chunks: List[Chunk]) -> List[str]: def delete_vector_name(self, vector_name: str): """Delete vector name and clean up resources. - + Args: vector_name (str): Name of the vector to delete - + Returns: bool: True if deletion was successful, False otherwise - + Raises: Exception: If any error occurs during deletion """ @@ -216,22 +216,24 @@ def delete_vector_name(self, vector_name: str): from chromadb.api.client import SharedSystemClient except ImportError: raise ImportError("Please install chroma package first.") - + logger.info(f"chroma vector_name:{vector_name} begin delete...") - + try: # Check if collection exists first collections = self._chroma_client.list_collections() collection_exists = self._collection.name in collections - + if not collection_exists: - logger.warning(f"Collection {self._collection.name} does not exist, skipping deletion") + logger.warning( + f"Collection {self._collection.name} does not exist, skip delete" + ) return True - + # Delete collection if it exists self._chroma_client.delete_collection(self._collection.name) SharedSystemClient.clear_system_cache() - + # Clean persist folder if it exists if os.path.exists(self.persist_dir): try: @@ -240,9 +242,9 @@ def delete_vector_name(self, vector_name: str): logger.error(f"Failed to clean persist folder: {e}") # Even if folder cleanup fails, collection deletion succeeded return True - + return True - + except Exception as e: logger.error(f"Error during vector store deletion: {e}") raise