From 4254822d7e442f52174d4a1055caad62017f0fd0 Mon Sep 17 00:00:00 2001 From: "hanzhi.421" Date: Mon, 8 Sep 2025 14:43:14 +0800 Subject: [PATCH 1/2] feat: delete kb on viking and vector --- veadk/database/database_adapter.py | 20 +++++++++++++++++ veadk/database/local_database.py | 1 + veadk/database/viking/viking_database.py | 28 ++++++++++-------------- veadk/knowledgebase/knowledgebase.py | 4 ++++ 4 files changed, 37 insertions(+), 16 deletions(-) diff --git a/veadk/database/database_adapter.py b/veadk/database/database_adapter.py index 50084e9c..3bc973bc 100644 --- a/veadk/database/database_adapter.py +++ b/veadk/database/database_adapter.py @@ -201,6 +201,18 @@ def query(self, query: str, index: str, top_k: int) -> list[str]: top_k=top_k, ) + def delete(self, index: str) -> bool: + self._validate_index(index) + logger.debug(f"Deleting collection from vector database: index={index}") + try: + self.client.delete(collection_name=index) + return True + except Exception as e: + logger.error( + f"Failed to delete collection from vector database: index={index} error={e}" + ) + return False + def delete_doc(self, index: str, id: str) -> bool: self._validate_index(index) logger.debug(f"Deleting documents from vector database: index={index} id={id}") @@ -278,6 +290,11 @@ def query(self, query: str, index: str, top_k: int) -> list[str]: return self.client.query(query, collection_name=index, top_k=top_k) + def delete(self, index: str) -> bool: + self._validate_index(index) + logger.debug(f"Deleting collection from Viking database: index={index}") + return self.client.delete(collection_name=index) + def delete_doc(self, index: str, id: str) -> bool: self._validate_index(index) logger.debug(f"Deleting documents from vector database: index={index} id={id}") @@ -343,6 +360,9 @@ def add(self, data: list[str], **kwargs): def query(self, query: str, **kwargs): return self.client.query(query, **kwargs) + def delete(self, index: str): + self.client.delete() + def delete_doc(self, index: str, id: str) -> bool: return self.client.delete_doc(id) diff --git a/veadk/database/local_database.py b/veadk/database/local_database.py index 45ac2e1d..e5d12290 100644 --- a/veadk/database/local_database.py +++ b/veadk/database/local_database.py @@ -41,6 +41,7 @@ def query(self, query: str, **kwargs: Any) -> list[str]: def delete(self, **kwargs: Any): self.data = {} + return True def add(self, texts: list[str], **kwargs: Any): return self.add_texts(texts) diff --git a/veadk/database/viking/viking_database.py b/veadk/database/viking/viking_database.py index 1e0cac1c..461991f2 100644 --- a/veadk/database/viking/viking_database.py +++ b/veadk/database/viking/viking_database.py @@ -270,8 +270,8 @@ def delete(self, **kwargs: Any): result = rsp.json() if result["code"] != 0: logger.error(f"Error in add_doc: {result['message']}") - return {"error": result["message"]} - return {} + return False + return True def query(self, query: str, **kwargs: Any) -> list[str]: """ @@ -413,19 +413,17 @@ def list_docs( "limit": limit, } - create_collection_req = prepare_request( + list_doc_req = prepare_request( method="POST", path=list_docs_path, config=self.config, data=request_params, ) resp = requests.request( - method=create_collection_req.method, - url="https://{}{}".format( - g_knowledge_base_domain, create_collection_req.path - ), - headers=create_collection_req.headers, - data=create_collection_req.body, + method=list_doc_req.method, + url="https://{}{}".format(g_knowledge_base_domain, list_doc_req.path), + headers=list_doc_req.headers, + data=list_doc_req.body, ) result = resp.json() @@ -450,19 +448,17 @@ def delete_by_id(self, collection_name: str, id: str) -> bool: "point_id": id, } - create_collection_req = prepare_request( + delete_by_id_req = prepare_request( method="POST", path=delete_docs_path, config=self.config, data=request_params, ) resp = requests.request( - method=create_collection_req.method, - url="https://{}{}".format( - g_knowledge_base_domain, create_collection_req.path - ), - headers=create_collection_req.headers, - data=create_collection_req.body, + method=delete_by_id_req.method, + url="https://{}{}".format(g_knowledge_base_domain, delete_by_id_req.path), + headers=delete_by_id_req.headers, + data=delete_by_id_req.body, ) result = resp.json() diff --git a/veadk/knowledgebase/knowledgebase.py b/veadk/knowledgebase/knowledgebase.py index 10955075..a1b73943 100644 --- a/veadk/knowledgebase/knowledgebase.py +++ b/veadk/knowledgebase/knowledgebase.py @@ -81,6 +81,10 @@ def search(self, query: str, app_name: str, top_k: int | None = None) -> list[st logger.warning(f"No documents found in knowledgebase. Query: {query}") return result + def delete(self, app_name: str) -> bool: + index = build_knowledgebase_index(app_name) + return self.adapter.delete(index=index) + def delete_doc(self, app_name: str, id: str) -> bool: index = build_knowledgebase_index(app_name) return self.adapter.delete_doc(index=index, id=id) From 2ae5f48e55541e4cb83a61c411fd32e301bd3610 Mon Sep 17 00:00:00 2001 From: "hanzhi.421" Date: Mon, 8 Sep 2025 15:07:51 +0800 Subject: [PATCH 2/2] fix: fix viking delete --- veadk/database/database_adapter.py | 33 +++++++++++++++++++++--- veadk/database/viking/viking_database.py | 8 +++--- 2 files changed, 34 insertions(+), 7 deletions(-) diff --git a/veadk/database/database_adapter.py b/veadk/database/database_adapter.py index 3bc973bc..b789cf03 100644 --- a/veadk/database/database_adapter.py +++ b/veadk/database/database_adapter.py @@ -54,6 +54,17 @@ def query(self, query: str, index: str, top_k: int = 0) -> list: logger.error(f"Failed to search from Redis: index={index} error={e}") raise e + def delete(self, index: str) -> bool: + logger.debug(f"Deleting key from Redis database: index={index}") + try: + self.client.delete(key=index) + return True + except Exception as e: + logger.error( + f"Failed to delete key from Redis database: index={index} error={e}" + ) + return False + def delete_doc(self, index: str, id: str) -> bool: logger.debug(f"Deleting document from Redis database: index={index} id={id}") try: @@ -135,6 +146,17 @@ def query(self, query: str, index: str, top_k: int) -> list[str]: return [item["data"] for item in results] + def delete(self, index: str) -> bool: + logger.debug(f"Deleting table from SQL database: table_name={index}") + try: + self.client.delete(table=index) + return True + except Exception as e: + logger.error( + f"Failed to delete table from SQL database: table_name={index} error={e}" + ) + return False + def delete_doc(self, index: str, id: str) -> bool: logger.debug(f"Deleting document from SQL database: table_name={index} id={id}") try: @@ -293,7 +315,7 @@ def query(self, query: str, index: str, top_k: int) -> list[str]: def delete(self, index: str) -> bool: self._validate_index(index) logger.debug(f"Deleting collection from Viking database: index={index}") - return self.client.delete(collection_name=index) + return self.client.delete(name=index) def delete_doc(self, index: str, id: str) -> bool: self._validate_index(index) @@ -341,6 +363,11 @@ def query(self, query: str, index: str, top_k: int, **kwargs): result = self.client.query(query, collection_name=index, top_k=top_k, **kwargs) return result + def delete(self, index: str) -> bool: + self._validate_index(index) + logger.debug(f"Deleting collection from Viking database memory: index={index}") + raise NotImplementedError("VikingMemoryDatabase does not support delete") + def delete_docs(self, index: str, ids: list[int]): raise NotImplementedError("VikingMemoryDatabase does not support delete_docs") @@ -360,8 +387,8 @@ def add(self, data: list[str], **kwargs): def query(self, query: str, **kwargs): return self.client.query(query, **kwargs) - def delete(self, index: str): - self.client.delete() + def delete(self, index: str) -> bool: + return self.client.delete() def delete_doc(self, index: str, id: str) -> bool: return self.client.delete_doc(id) diff --git a/veadk/database/viking/viking_database.py b/veadk/database/viking/viking_database.py index 461991f2..18474768 100644 --- a/veadk/database/viking/viking_database.py +++ b/veadk/database/viking/viking_database.py @@ -38,9 +38,9 @@ search_knowledge_path = "/api/knowledge/collection/search_knowledge" list_collections_path = "/api/knowledge/collection/list" get_collections_path = "/api/knowledge/collection/info" +doc_del_path = "/api/knowledge/collection/delete" doc_add_path = "/api/knowledge/doc/add" doc_info_path = "/api/knowledge/doc/info" -doc_del_path = "/api/collection/drop" list_docs_path = "/api/knowledge/point/list" delete_docs_path = "/api/knowledge/point/delete" @@ -255,9 +255,9 @@ def add( } def delete(self, **kwargs: Any): - collection_name = kwargs.get("collection_name") - resource_id = kwargs.get("resource_id") - request_param = {"collection_name": collection_name, "resource_id": resource_id} + name = kwargs.get("name") + project = kwargs.get("project", self.config.project) + request_param = {"name": name, "project": project} doc_del_req = prepare_request( method="POST", path=doc_del_path, config=self.config, data=request_param )