Langchain-Chatchat
64 строки · 2.1 Кб
1from server.db.models.knowledge_base_model import KnowledgeBaseModel
2from server.db.session import with_session
3
4
5@with_session
6def add_kb_to_db(session, kb_name, kb_info, vs_type, embed_model):
7# 创建知识库实例
8kb = session.query(KnowledgeBaseModel).filter(KnowledgeBaseModel.kb_name.ilike(kb_name)).first()
9if not kb:
10kb = KnowledgeBaseModel(kb_name=kb_name, kb_info=kb_info, vs_type=vs_type, embed_model=embed_model)
11session.add(kb)
12else: # update kb with new vs_type and embed_model
13kb.kb_info = kb_info
14kb.vs_type = vs_type
15kb.embed_model = embed_model
16return True
17
18
19@with_session
20def list_kbs_from_db(session, min_file_count: int = -1):
21kbs = session.query(KnowledgeBaseModel.kb_name).filter(KnowledgeBaseModel.file_count > min_file_count).all()
22kbs = [kb[0] for kb in kbs]
23return kbs
24
25
26@with_session
27def kb_exists(session, kb_name):
28kb = session.query(KnowledgeBaseModel).filter(KnowledgeBaseModel.kb_name.ilike(kb_name)).first()
29status = True if kb else False
30return status
31
32
33@with_session
34def load_kb_from_db(session, kb_name):
35kb = session.query(KnowledgeBaseModel).filter(KnowledgeBaseModel.kb_name.ilike(kb_name)).first()
36if kb:
37kb_name, vs_type, embed_model = kb.kb_name, kb.vs_type, kb.embed_model
38else:
39kb_name, vs_type, embed_model = None, None, None
40return kb_name, vs_type, embed_model
41
42
43@with_session
44def delete_kb_from_db(session, kb_name):
45kb = session.query(KnowledgeBaseModel).filter(KnowledgeBaseModel.kb_name.ilike(kb_name)).first()
46if kb:
47session.delete(kb)
48return True
49
50
51@with_session
52def get_kb_detail(session, kb_name: str) -> dict:
53kb: KnowledgeBaseModel = session.query(KnowledgeBaseModel).filter(KnowledgeBaseModel.kb_name.ilike(kb_name)).first()
54if kb:
55return {
56"kb_name": kb.kb_name,
57"kb_info": kb.kb_info,
58"vs_type": kb.vs_type,
59"embed_model": kb.embed_model,
60"file_count": kb.file_count,
61"create_time": kb.create_time,
62}
63else:
64return {}
65