Skip to content

Commit 7369e26

Browse files
authored
✨ record embedding model used by each knowledge base in PG
✨ record embedding model used by each knowledge base in PG
2 parents 8ee893c + 00b0bc7 commit 7369e26

14 files changed

+1038
-1160
lines changed

backend/apps/elasticsearch_app.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ def get_list_indices(
135135
"""List all user indices with optional stats"""
136136
try:
137137
user_id, tenant_id = get_current_user_id(authorization)
138-
return ElasticSearchService.list_indices(pattern, include_stats, tenant_id, es_core)
138+
return ElasticSearchService.list_indices(pattern, include_stats, tenant_id, user_id, es_core)
139139
except Exception as e:
140140
raise HTTPException(
141141
status_code=500, detail=f"Error get index: {str(e)}")

backend/apps/knowledge_app.py

Lines changed: 0 additions & 76 deletions
This file was deleted.

backend/apps/tenant_config_app.py

Lines changed: 20 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
import logging
2+
from http import HTTPStatus
23
from typing import List, Optional
34

4-
import requests
5-
from fastapi import APIRouter, Body, Header
5+
from fastapi import APIRouter, Body, Header, HTTPException
66
from fastapi.responses import JSONResponse
77

8-
from consts.const import DEPLOYMENT_VERSION, ELASTICSEARCH_SERVICE
8+
from consts.const import DEPLOYMENT_VERSION
99
from services.tenant_config_service import get_selected_knowledge_list, update_selected_knowledge
1010
from utils.auth_utils import get_current_user_id
1111

@@ -20,16 +20,15 @@ def get_deployment_version():
2020
"""
2121
try:
2222
return JSONResponse(
23-
status_code=200,
23+
status_code=HTTPStatus.OK,
2424
content={"deployment_version": DEPLOYMENT_VERSION,
2525
"status": "success"}
2626
)
2727
except Exception as e:
2828
logger.error(f"Failed to get deployment version, error: {e}")
29-
return JSONResponse(
30-
status_code=500,
31-
content={"message": "Failed to get deployment version",
32-
"status": "error"}
29+
raise HTTPException(
30+
status_code=HTTPStatus.INTERNAL_SERVER_ERROR,
31+
detail="Failed to get deployment version"
3332
)
3433

3534

@@ -42,44 +41,19 @@ def load_knowledge_list(
4241
selected_knowledge_info = get_selected_knowledge_list(
4342
tenant_id=tenant_id, user_id=user_id)
4443

45-
kb_name_list = [item["index_name"] for item in selected_knowledge_info]
46-
47-
# Query embedding models from Elasticsearch service
48-
embedding_models = []
49-
if kb_name_list:
50-
try:
51-
api_url = f"{ELASTICSEARCH_SERVICE}/indices?include_stats=true"
52-
response = requests.get(api_url, timeout=10)
53-
response.raise_for_status()
54-
55-
index_to_model = {}
56-
for index_info in response.json().get("indices_info", []):
57-
index_name = index_info.get("name")
58-
embedding_model = index_info.get("stats", {}).get(
59-
"base_info", {}).get("embedding_model", "")
60-
if index_name:
61-
index_to_model[index_name] = embedding_model
62-
63-
embedding_models = [index_to_model.get(
64-
kb_name, "") for kb_name in kb_name_list]
65-
66-
except Exception as e:
67-
logger.error(f"API call failed: {e}")
68-
embedding_models = []
69-
70-
content = {"selectedKbNames": kb_name_list,
71-
"selectedKbModels": embedding_models,
44+
content = {"selectedKbNames": [item["index_name"] for item in selected_knowledge_info],
45+
"selectedKbModels": [item["embedding_model_name"] for item in selected_knowledge_info],
7246
"selectedKbSources": [item["knowledge_sources"] for item in selected_knowledge_info]}
7347

7448
return JSONResponse(
75-
status_code=200,
49+
status_code=HTTPStatus.OK,
7650
content={"content": content, "status": "success"}
7751
)
7852
except Exception as e:
7953
logger.error(f"load knowledge list failed, error: {e}")
80-
return JSONResponse(
81-
status_code=400,
82-
content={"message": "Failed to load configuration", "status": "error"}
54+
raise HTTPException(
55+
status_code=HTTPStatus.INTERNAL_SERVER_ERROR,
56+
detail="Failed to load configuration"
8357
)
8458

8559

@@ -94,18 +68,17 @@ def update_knowledge_list(
9468
tenant_id=tenant_id, user_id=user_id, index_name_list=knowledge_list)
9569
if result:
9670
return JSONResponse(
97-
status_code=200,
71+
status_code=HTTPStatus.OK,
9872
content={"message": "update success", "status": "success"}
9973
)
10074
else:
101-
return JSONResponse(
102-
status_code=400,
103-
content={"message": "update failed", "status": "error"}
75+
raise HTTPException(
76+
status_code=HTTPStatus.INTERNAL_SERVER_ERROR,
77+
detail="Failed to update configuration"
10478
)
10579
except Exception as e:
10680
logger.error(f"update knowledge list failed, error: {e}")
107-
return JSONResponse(
108-
status_code=400,
109-
content={"message": "Failed to update configuration",
110-
"status": "error"}
81+
raise HTTPException(
82+
status_code=HTTPStatus.INTERNAL_SERVER_ERROR,
83+
detail="Failed to update configuration"
11184
)

backend/database/db_models.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -282,6 +282,7 @@ class KnowledgeRecord(TableBase):
282282
index_name = Column(String(100), doc="Knowledge base name")
283283
knowledge_describe = Column(String(3000), doc="Knowledge base description")
284284
knowledge_sources = Column(String(300), doc="Knowledge base sources")
285+
embedding_model_name = Column(String(200), doc="Embedding model name, used to record the embedding model used by the knowledge base")
285286
tenant_id = Column(String(100), doc="Tenant ID")
286287
delete_flag = Column(String(
287288
1), default="N", doc="Knowledge base status. Currently defaults to 1, if knowledge base status is 0, then this knowledge base is unavailable")

backend/database/knowledge_db.py

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ def create_knowledge_record(query: Dict[str, Any]) -> int:
1818
- knowledge_status: Knowledge base status
1919
- user_id: Optional user ID for created_by and updated_by fields
2020
- tenant_id: Optional tenant ID for created_by and updated_by fields
21+
- embedding_model_name: embedding model name for the knowledge base
2122
2223
Returns:
2324
int: Newly created knowledge base ID
@@ -31,7 +32,8 @@ def create_knowledge_record(query: Dict[str, Any]) -> int:
3132
"created_by": query.get("user_id"),
3233
"updated_by": query.get("user_id"),
3334
"knowledge_sources": query.get("knowledge_sources", "elasticsearch"),
34-
"tenant_id": query.get("tenant_id")
35+
"tenant_id": query.get("tenant_id"),
36+
"embedding_model_name": query.get("embedding_model_name")
3537
}
3638

3739
# Create new record
@@ -163,7 +165,8 @@ def get_knowledge_info_by_knowledge_ids(knowledge_ids: List[str]) -> List[Dict[s
163165
knowledge_info.append({
164166
"knowledge_id": item.knowledge_id,
165167
"index_name": item.index_name,
166-
"knowledge_sources": item.knowledge_sources
168+
"knowledge_sources": item.knowledge_sources,
169+
"embedding_model_name": item.embedding_model_name
167170
})
168171
return knowledge_info
169172
except SQLAlchemyError as e:
@@ -180,3 +183,29 @@ def get_knowledge_ids_by_index_names(index_names: List[str]) -> List[str]:
180183
return [item.knowledge_id for item in result]
181184
except SQLAlchemyError as e:
182185
raise e
186+
187+
188+
def get_knowledge_info_by_tenant_id(tenant_id: str) -> List[Dict[str, Any]]:
189+
try:
190+
with get_db_session() as session:
191+
result = session.query(KnowledgeRecord).filter(
192+
KnowledgeRecord.tenant_id == tenant_id,
193+
KnowledgeRecord.delete_flag != 'Y'
194+
).all()
195+
return [as_dict(item) for item in result]
196+
except SQLAlchemyError as e:
197+
raise e
198+
199+
200+
def update_model_name_by_index_name(index_name: str, embedding_model_name: str, tenant_id: str, user_id: str) -> bool:
201+
try:
202+
with get_db_session() as session:
203+
session.query(KnowledgeRecord).filter(
204+
KnowledgeRecord.index_name == index_name,
205+
KnowledgeRecord.delete_flag != 'Y',
206+
KnowledgeRecord.tenant_id == tenant_id
207+
).update({"embedding_model_name": embedding_model_name, "updated_by": user_id})
208+
session.commit()
209+
return True
210+
except SQLAlchemyError as e:
211+
raise e

backend/database/tenant_config_db.py

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
1+
import logging
12
from typing import Any, Dict
23

3-
from .client import get_db_session
4-
from .db_models import TenantConfig
4+
from sqlalchemy.exc import SQLAlchemyError
55

6+
from database.client import get_db_session
7+
from database.db_models import TenantConfig
8+
9+
10+
logger = logging.getLogger("tenant_config_db")
611

712
def get_all_configs_by_tenant_id(tenant_id: str):
813
with get_db_session() as session:
@@ -65,8 +70,9 @@ def insert_config(insert_data: Dict[str, Any]):
6570
session.add(TenantConfig(**insert_data))
6671
session.commit()
6772
return True
68-
except Exception as e:
73+
except SQLAlchemyError as e:
6974
session.rollback()
75+
logger.error(f"insert config failed, error: {e}")
7076
return False
7177

7278

@@ -79,8 +85,9 @@ def delete_config_by_tenant_config_id(tenant_config_id: int):
7985
).update({"delete_flag": "Y"})
8086
session.commit()
8187
return True
82-
except Exception as e:
88+
except SQLAlchemyError as e:
8389
session.rollback()
90+
logger.error(f"delete config by tenant config id failed, error: {e}")
8491
return False
8592

8693

@@ -96,8 +103,9 @@ def delete_config(tenant_id: str, user_id: str, select_key: str, config_value: s
96103
).update({"delete_flag": "Y"})
97104
session.commit()
98105
return True
99-
except Exception as e:
106+
except SQLAlchemyError as e:
100107
session.rollback()
108+
logger.error(f"delete config failed, error: {e}")
101109
return False
102110

103111

@@ -110,8 +118,9 @@ def update_config_by_tenant_config_id(tenant_config_id: int, update_value: str):
110118
).update({"config_value": update_value})
111119
session.commit()
112120
return True
113-
except Exception as e:
121+
except SQLAlchemyError as e:
114122
session.rollback()
123+
logger.error(f"update config by tenant config id failed, error: {e}")
115124
return False
116125

117126

@@ -124,6 +133,7 @@ def update_config_by_tenant_config_id_and_data(tenant_config_id: int, insert_dat
124133
).update(insert_data)
125134
session.commit()
126135
return True
127-
except Exception as e:
136+
except SQLAlchemyError as e:
128137
session.rollback()
138+
logger.error(f"update config by tenant config id and data failed, error: {e}")
129139
return False

0 commit comments

Comments
 (0)