bugfix:dev分支创建知识库必然失败的bug修复 (#1980)

* bugfix:dev分支创建知识库必然失败的bug修复

* 统一 KBServiceFactory.get_service_by_name 的逻辑,数据库中不存在知识库时返回 None

---------

Co-authored-by: liunux4odoo <liunux@qq.com>
This commit is contained in:
WilliamChen-luckbob 2023-11-09 17:45:21 +08:00 committed by GitHub
parent d0d688d4b0
commit ce1001a043
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 9 additions and 11 deletions

View File

@ -278,15 +278,10 @@ class KBServiceFactory:
return DefaultKBService(kb_name) return DefaultKBService(kb_name)
@staticmethod @staticmethod
def get_service_by_name(kb_name: str, def get_service_by_name(kb_name: str) -> KBService:
default_vs_type: SupportedVSType = SupportedVSType.FAISS,
default_embed_model: str = EMBEDDING_MODEL,
) -> KBService:
_, vs_type, embed_model = load_kb_from_db(kb_name) _, vs_type, embed_model = load_kb_from_db(kb_name)
if vs_type is None: # faiss knowledge base not in db if _ is None: # kb not in db, just return None
vs_type = default_vs_type return None
if embed_model is None:
embed_model = default_embed_model
return KBServiceFactory.get_service(kb_name, vs_type, embed_model) return KBServiceFactory.get_service(kb_name, vs_type, embed_model)
@staticmethod @staticmethod
@ -331,6 +326,9 @@ def get_kb_details() -> List[Dict]:
def get_kb_file_details(kb_name: str) -> List[Dict]: def get_kb_file_details(kb_name: str) -> List[Dict]:
kb = KBServiceFactory.get_service_by_name(kb_name) kb = KBServiceFactory.get_service_by_name(kb_name)
if kb is None:
return []
files_in_folder = list_files_from_folder(kb_name) files_in_folder = list_files_from_folder(kb_name)
files_in_db = kb.list_files() files_in_db = kb.list_files()
result = {} result = {}

View File

@ -157,7 +157,7 @@ def prune_db_docs(kb_names: List[str]):
""" """
for kb_name in kb_names: for kb_name in kb_names:
kb = KBServiceFactory.get_service_by_name(kb_name) kb = KBServiceFactory.get_service_by_name(kb_name)
if kb and kb.exists(): if kb is not None:
files_in_db = kb.list_files() files_in_db = kb.list_files()
files_in_folder = list_files_from_folder(kb_name) files_in_folder = list_files_from_folder(kb_name)
files = list(set(files_in_db) - set(files_in_folder)) files = list(set(files_in_db) - set(files_in_folder))
@ -175,7 +175,7 @@ def prune_folder_files(kb_names: List[str]):
""" """
for kb_name in kb_names: for kb_name in kb_names:
kb = KBServiceFactory.get_service_by_name(kb_name) kb = KBServiceFactory.get_service_by_name(kb_name)
if kb and kb.exists(): if kb is not None:
files_in_db = kb.list_files() files_in_db = kb.list_files()
files_in_folder = list_files_from_folder(kb_name) files_in_folder = list_files_from_folder(kb_name)
files = list(set(files_in_folder) - set(files_in_db)) files = list(set(files_in_folder) - set(files_in_db))

View File

@ -33,7 +33,7 @@ def test_recreate_vs():
folder2db([kb_name], "recreate_vs") folder2db([kb_name], "recreate_vs")
kb = KBServiceFactory.get_service_by_name(kb_name) kb = KBServiceFactory.get_service_by_name(kb_name)
assert kb.exists() assert kb and kb.exists()
files = kb.list_files() files = kb.list_files()
print(files) print(files)