From b2fa0a861dadc5d533a2188cf25a53a0f683facf Mon Sep 17 00:00:00 2001 From: yongtenglei Date: Tue, 2 Dec 2025 14:09:38 +0800 Subject: [PATCH] kb --- api/apps/kb_app.py | 60 +++++++++++++++++++++++++++------------------- 1 file changed, 36 insertions(+), 24 deletions(-) diff --git a/api/apps/kb_app.py b/api/apps/kb_app.py index 7ff01cc19..5d3dee0b9 100644 --- a/api/apps/kb_app.py +++ b/api/apps/kb_app.py @@ -17,6 +17,7 @@ import json import logging import random import re +import asyncio from quart import request import numpy as np @@ -116,12 +117,22 @@ async def update(): if kb.pagerank != req.get("pagerank", 0): if req.get("pagerank", 0) > 0: - settings.docStoreConn.update({"kb_id": kb.id}, {PAGERANK_FLD: req["pagerank"]}, - search.index_name(kb.tenant_id), kb.id) + await asyncio.to_thread( + settings.docStoreConn.update, + {"kb_id": kb.id}, + {PAGERANK_FLD: req["pagerank"]}, + search.index_name(kb.tenant_id), + kb.id, + ) else: # Elasticsearch requires PAGERANK_FLD be non-zero! - settings.docStoreConn.update({"exists": PAGERANK_FLD}, {"remove": PAGERANK_FLD}, - search.index_name(kb.tenant_id), kb.id) + await asyncio.to_thread( + settings.docStoreConn.update, + {"exists": PAGERANK_FLD}, + {"remove": PAGERANK_FLD}, + search.index_name(kb.tenant_id), + kb.id, + ) e, kb = KnowledgebaseService.get_by_id(kb.id) if not e: @@ -224,25 +235,28 @@ async def rm(): data=False, message='Only owner of knowledgebase authorized for this operation.', code=RetCode.OPERATING_ERROR) - for doc in DocumentService.query(kb_id=req["kb_id"]): - if not DocumentService.remove_document(doc, kbs[0].tenant_id): + def _rm_sync(): + for doc in DocumentService.query(kb_id=req["kb_id"]): + if not DocumentService.remove_document(doc, kbs[0].tenant_id): + return get_data_error_result( + message="Database error (Document removal)!") + f2d = File2DocumentService.get_by_document_id(doc.id) + if f2d: + FileService.filter_delete([File.source_type == FileSource.KNOWLEDGEBASE, File.id == f2d[0].file_id]) + File2DocumentService.delete_by_document_id(doc.id) + FileService.filter_delete( + [File.source_type == FileSource.KNOWLEDGEBASE, File.type == "folder", File.name == kbs[0].name]) + if not KnowledgebaseService.delete_by_id(req["kb_id"]): return get_data_error_result( - message="Database error (Document removal)!") - f2d = File2DocumentService.get_by_document_id(doc.id) - if f2d: - FileService.filter_delete([File.source_type == FileSource.KNOWLEDGEBASE, File.id == f2d[0].file_id]) - File2DocumentService.delete_by_document_id(doc.id) - FileService.filter_delete( - [File.source_type == FileSource.KNOWLEDGEBASE, File.type == "folder", File.name == kbs[0].name]) - if not KnowledgebaseService.delete_by_id(req["kb_id"]): - return get_data_error_result( - message="Database error (Knowledgebase removal)!") - for kb in kbs: - settings.docStoreConn.delete({"kb_id": kb.id}, search.index_name(kb.tenant_id), kb.id) - settings.docStoreConn.deleteIdx(search.index_name(kb.tenant_id), kb.id) - if hasattr(settings.STORAGE_IMPL, 'remove_bucket'): - settings.STORAGE_IMPL.remove_bucket(kb.id) - return get_json_result(data=True) + message="Database error (Knowledgebase removal)!") + for kb in kbs: + settings.docStoreConn.delete({"kb_id": kb.id}, search.index_name(kb.tenant_id), kb.id) + settings.docStoreConn.deleteIdx(search.index_name(kb.tenant_id), kb.id) + if hasattr(settings.STORAGE_IMPL, 'remove_bucket'): + settings.STORAGE_IMPL.remove_bucket(kb.id) + return get_json_result(data=True) + + return await asyncio.to_thread(_rm_sync) except Exception as e: return server_error_response(e) @@ -922,5 +936,3 @@ async def check_embedding(): if summary["avg_cos_sim"] > 0.9: return get_json_result(data={"summary": summary, "results": results}) return get_json_result(code=RetCode.NOT_EFFECTIVE, message="Embedding model switch failed: the average similarity between old and new vectors is below 0.9, indicating incompatible vector spaces.", data={"summary": summary, "results": results}) - -