perf: Model check

This commit is contained in:
fit2cloud-chenyw
2025-07-26 10:09:45 +08:00
parent f3457fbe8f
commit 1e180950e8
4 changed files with 39 additions and 3 deletions
+22 -2
View File
@@ -1,5 +1,6 @@
import json
from typing import List, Union
from apps.ai_model.model_factory import LLMConfig, LLMFactory
from apps.system.schemas.ai_model_schema import AiModelConfigItem, AiModelCreator, AiModelEditor, AiModelGridItem
from fastapi import APIRouter, Query
from sqlmodel import func, select, update
@@ -7,9 +8,28 @@ from sqlmodel import func, select, update
from apps.system.models.system_model import AiModelDetail
from common.core.deps import SessionDep
from common.utils.time import get_timestamp
from common.utils.utils import SQLBotLogUtil
router = APIRouter(tags=["system/aimodel"], prefix="/system/aimodel")
@router.post("/status")
async def check_llm(info: AiModelCreator):
try:
additional_params = {item.key: item.val for item in info.config_list}
config = LLMConfig(
model_type="openai",
model_name=info.base_model,
api_key=info.api_key,
api_base_url=info.api_domain,
additional_params=additional_params,
)
llm_instance = LLMFactory.create_llm(config)
result = llm_instance.llm.invoke("who are you?")
SQLBotLogUtil.info(f"check_llm result: {result}")
except Exception as e:
SQLBotLogUtil.error(f"Error checking LLM: {e}")
raise e
@router.get("", response_model=list[AiModelGridItem])
async def query(
session: SessionDep,
@@ -74,8 +94,8 @@ async def update_model(
data["config"] = json.dumps([item.model_dump(exclude_unset=True) for item in editor.config_list])
data.pop("config_list", None)
db_model = session.get(AiModelDetail, id)
update_data = AiModelDetail.model_validate(data)
db_model.sqlmodel_update(update_data)
#update_data = AiModelDetail.model_validate(data)
db_model.sqlmodel_update(data)
session.add(db_model)
session.commit()
+2
View File
@@ -8,4 +8,6 @@ export const modelApi = {
delete: (id: number) => request.delete(`/system/aimodel/${id}`),
query: (id: number) => request.get(`/system/aimodel/${id}`),
setDefault: (id: number) => request.put(`/system/aimodel/default/${id}`),
check: (data: any) =>
request.post('/system/aimodel/status', data, { requestOptions: { silent: true } }),
}
+2 -1
View File
@@ -279,7 +279,8 @@
"verification_successful": "校验成功",
"del_default_tip": "无法删除模型: {msg}",
"del_default_warn": "该模型为系统默认模型,请先设置其他模型为系统默认模型,再删除此模型。",
"del_warn_tip": "是否删除模型: {msg}?"
"del_warn_tip": "是否删除模型: {msg}?",
"check_failed": "模型无效【{msg}】"
},
"user": {
"workspace": "工作空间",
+13
View File
@@ -69,6 +69,17 @@ const defaultModelListWithSearch = computed(() => {
})
})
const modelCheckHandler = (item: any) => {
setTimeout(() => {
modelApi.check(item).catch((err: any) => {
if (err.response?.data?.msg) {
ElMessage.error(t('model.check_failed', { msg: err.response.data.msg || '' }))
} else {
ElMessage.error(t('model.check_failed', { msg: err.message || '' }))
}
})
}, 1000)
}
const duplicateName = async (item: any) => {
const res = await modelApi.queryAll()
const names = res.filter((ele: any) => ele.id !== item.id).map((ele: any) => ele.name)
@@ -85,6 +96,7 @@ const duplicateName = async (item: any) => {
type: 'success',
message: t('workspace.add_successfully'),
})
modelCheckHandler(item)
})
return
}
@@ -95,6 +107,7 @@ const duplicateName = async (item: any) => {
type: 'success',
message: t('common.save_success'),
})
modelCheckHandler(item)
})
}