From 14799a36ea9b352db44eecc25a690f6d1b4ac0e4 Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Fri, 4 Jul 2025 16:42:54 +0800 Subject: [PATCH] perf: Set default model --- backend/apps/system/api/aimodel.py | 25 +- frontend/src/api/system.ts | 2 +- frontend/src/router/index.ts | 1 - frontend/src/views/system/model/Card.vue | 14 +- frontend/src/views/system/model/Model.vue | 10 +- frontend/src/views/system/model/index.vue | 538 ---------------------- 6 files changed, 37 insertions(+), 553 deletions(-) delete mode 100644 frontend/src/views/system/model/index.vue diff --git a/backend/apps/system/api/aimodel.py b/backend/apps/system/api/aimodel.py index 52074a57..781d1889 100644 --- a/backend/apps/system/api/aimodel.py +++ b/backend/apps/system/api/aimodel.py @@ -2,7 +2,7 @@ import json from typing import List, Union from apps.system.schemas.ai_model_schema import AiModelConfigItem, AiModelCreator, AiModelEditor, AiModelGridItem from fastapi import APIRouter, Query -from sqlmodel import func, select +from sqlmodel import func, select, update from apps.system.models.system_model import AiModelDetail from common.core.deps import SessionDep @@ -23,7 +23,7 @@ async def query( AiModelDetail.default_model) if keyword is not None: statement = statement.where(AiModelDetail.name.like(f"%{keyword}%")) - + statement = statement.order_by(AiModelDetail.create_time.asc()) items = session.exec(statement).all() return items @@ -85,6 +85,27 @@ async def delete_model( id: int ): item = session.get(AiModelDetail, id) + if item.default_model: + raise RuntimeError(f"Can not delete [${item.name}], because it is default model!") session.delete(item) session.commit() + +@router.put("/default/{id}") +async def set_default(session: SessionDep, id: int): + db_model = session.get(AiModelDetail, id) + if not db_model: + raise ValueError(f"AiModelDetail with id {id} not found") + if db_model.default_model: + return + + try: + session.exec( + update(AiModelDetail).values(default_model=False) + ) + db_model.default_model = True + session.add(db_model) + session.commit() + except Exception as e: + session.rollback() + raise e \ No newline at end of file diff --git a/frontend/src/api/system.ts b/frontend/src/api/system.ts index 0153122c..153c985f 100644 --- a/frontend/src/api/system.ts +++ b/frontend/src/api/system.ts @@ -7,5 +7,5 @@ export const modelApi = { edit: (data: any) => request.put('/system/aimodel', data), delete: (id: number) => request.delete(`/system/aimodel/${id}`), query: (id: number) => request.get(`/system/aimodel/${id}`), - status: (data: any) => request.patch('/system/aimodel/status', data), + setDefault: (id: number) => request.put(`/system/aimodel/default/${id}`), } diff --git a/frontend/src/router/index.ts b/frontend/src/router/index.ts index 1839cb34..aa4f4c5f 100644 --- a/frontend/src/router/index.ts +++ b/frontend/src/router/index.ts @@ -9,7 +9,6 @@ import Datasource from '@/views/ds/Datasource.vue' import DashboardEditor from '@/views/dashboard/editor/index.vue' import DashboardPreview from '@//views/dashboard/preview/SQPreviewSingle.vue' import Dashboard from '@/views/dashboard/index.vue' -// import Model from '@/views/system/model/index.vue' import Model from '@/views/system/model/Model.vue' // import User from "@/views/system/user/index.vue"; import { watchRouter } from './watch' diff --git a/frontend/src/views/system/model/Card.vue b/frontend/src/views/system/model/Card.vue index 516fbef2..e166f753 100644 --- a/frontend/src/views/system/model/Card.vue +++ b/frontend/src/views/system/model/Card.vue @@ -59,14 +59,12 @@ const handleDel = () => { - + + + + + + diff --git a/frontend/src/views/system/model/Model.vue b/frontend/src/views/system/model/Model.vue index ee4eb4db..98638694 100644 --- a/frontend/src/views/system/model/Model.vue +++ b/frontend/src/views/system/model/Model.vue @@ -69,6 +69,10 @@ const defaultModelListWithSearch = computed(() => { }) const handleDefaultModelChange = (item: any) => { + const current_default_node = modelList.value.find((ele: Model) => ele.default_model) + if (current_default_node?.id === item.id) { + return + } ElMessageBox.confirm(`是否设置 ${item.name} 为系统默认模型?`, { confirmButtonType: 'primary', tip: '系统默认模型被替换后,智能问数的结果将会受到影响,请谨慎操作。', @@ -78,10 +82,10 @@ const handleDefaultModelChange = (item: any) => { autofocus: false, callback: (val: string) => { if (val === 'confirm') { - modelList.value.forEach((ele: any) => { - ele.default_model = ele.id === item.id + modelApi.setDefault(item.id).then(() => { + ElMessage.success('设置成功') + search() }) - ElMessage.success('设置成功') } }, }) diff --git a/frontend/src/views/system/model/index.vue b/frontend/src/views/system/model/index.vue deleted file mode 100644 index 457db734..00000000 --- a/frontend/src/views/system/model/index.vue +++ /dev/null @@ -1,538 +0,0 @@ - - - - -