Skip to content

Commit 15b042f

Browse files
Merge branch 'dev'
2 parents f48f56e + 14799a3 commit 15b042f

File tree

10 files changed

+70
-561
lines changed

10 files changed

+70
-561
lines changed

backend/apps/system/api/aimodel.py

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from typing import List, Union
33
from apps.system.schemas.ai_model_schema import AiModelConfigItem, AiModelCreator, AiModelEditor, AiModelGridItem
44
from fastapi import APIRouter, Query
5-
from sqlmodel import func, select
5+
from sqlmodel import func, select, update
66

77
from apps.system.models.system_model import AiModelDetail
88
from common.core.deps import SessionDep
@@ -23,7 +23,7 @@ async def query(
2323
AiModelDetail.default_model)
2424
if keyword is not None:
2525
statement = statement.where(AiModelDetail.name.like(f"%{keyword}%"))
26-
26+
statement = statement.order_by(AiModelDetail.create_time.asc())
2727
items = session.exec(statement).all()
2828
return items
2929

@@ -85,6 +85,27 @@ async def delete_model(
8585
id: int
8686
):
8787
item = session.get(AiModelDetail, id)
88+
if item.default_model:
89+
raise RuntimeError(f"Can not delete [${item.name}], because it is default model!")
8890
session.delete(item)
8991
session.commit()
92+
93+
@router.put("/default/{id}")
94+
async def set_default(session: SessionDep, id: int):
95+
db_model = session.get(AiModelDetail, id)
96+
if not db_model:
97+
raise ValueError(f"AiModelDetail with id {id} not found")
98+
if db_model.default_model:
99+
return
100+
101+
try:
102+
session.exec(
103+
update(AiModelDetail).values(default_model=False)
104+
)
105+
db_model.default_model = True
106+
session.add(db_model)
107+
session.commit()
108+
except Exception as e:
109+
session.rollback()
110+
raise e
90111

frontend/src/api/system.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,5 @@ export const modelApi = {
77
edit: (data: any) => request.put('/system/aimodel', data),
88
delete: (id: number) => request.delete(`/system/aimodel/${id}`),
99
query: (id: number) => request.get(`/system/aimodel/${id}`),
10-
status: (data: any) => request.patch('/system/aimodel/status', data),
10+
setDefault: (id: number) => request.put(`/system/aimodel/default/${id}`),
1111
}

frontend/src/router/index.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import Datasource from '@/views/ds/Datasource.vue'
99
import DashboardEditor from '@/views/dashboard/editor/index.vue'
1010
import DashboardPreview from '@//views/dashboard/preview/SQPreviewSingle.vue'
1111
import Dashboard from '@/views/dashboard/index.vue'
12-
// import Model from '@/views/system/model/index.vue'
1312
import Model from '@/views/system/model/Model.vue'
1413
// import User from "@/views/system/user/index.vue";
1514
import { watchRouter } from './watch'

frontend/src/views/chat/ChatCreator.vue

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { chatApi, ChatInfo } from '@/api/chat.ts'
33
import { onMounted, ref } from 'vue'
44
import { datasourceApi } from '@/api/datasource.ts'
55
import DatasourceItemCard from '../ds/DatasourceItemCard.vue'
6+
import { useRoute } from 'vue-router'
67
78
const dsList = ref<Array<any>>([])
89
@@ -13,6 +14,7 @@ function listDs() {
1314
dsList.value = res
1415
})
1516
}
17+
const route = useRoute()
1618
1719
const dialogVisible = ref(false)
1820
@@ -66,6 +68,9 @@ function createChat(datasource: number) {
6668
6769
onMounted(() => {
6870
listDs()
71+
const id = route.query.id as unknown as number
72+
if (!id) return
73+
createChat(id)
6974
})
7075
7176
defineExpose({

frontend/src/views/ds/Card.vue

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,20 +12,21 @@ const props = withDefaults(
1212
defineProps<{
1313
name: string
1414
type: string
15+
type_name: string
1516
rate?: string
1617
description?: string
1718
id?: string
1819
}>(),
1920
{
2021
name: '-',
2122
type: '-',
22-
rate: '-',
2323
description: '-',
2424
id: '-',
25+
type_name: '-',
2526
}
2627
)
2728
28-
const emits = defineEmits(['edit', 'del', 'question', 'dataTableDetail'])
29+
const emits = defineEmits(['edit', 'del', 'question', 'dataTableDetail', 'showTable'])
2930
const icon = computed(() => {
3031
return (dsTypeWithImg.find((ele) => props.type === ele.type) || {}).img
3132
})
@@ -57,7 +58,7 @@ const onClickOutside = () => {
5758
<img :src="icon" width="32px" height="32px" />
5859
<div class="info">
5960
<div class="name">{{ name }}</div>
60-
<div class="type">{{ type }}</div>
61+
<div class="type">{{ type_name }}</div>
6162
</div>
6263
</div>
6364
<div class="type-value">
@@ -69,7 +70,6 @@ const onClickOutside = () => {
6970
<el-icon class="form-icon" size="16">
7071
<icon_form_outlined></icon_form_outlined>
7172
</el-icon>
72-
{{ rate }}
7373
</div>
7474
<div click.stop class="methods">
7575
<el-button type="primary" style="margin-right: 8px" @click.stop="handleQuestion">

frontend/src/views/ds/Datasource.vue

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import icon_searchOutline_outlined from '@/assets/svg/icon_search-outline_outlin
55
import arrow_down from '@/assets/svg/arrow-down.svg'
66
import icon_add_outlined from '@/assets/svg/icon_add_outlined.svg'
77
import EmptyBackground from '@/views/dashboard/common/EmptyBackground.vue'
8+
import { useRouter } from 'vue-router'
89
import DataTable from './DataTable.vue'
910
import icon_done_outlined from '@/assets/svg/icon_done_outlined.svg'
1011
import icon_close_outlined from '@/assets/svg/operate/ope-close.svg'
@@ -18,12 +19,14 @@ import { useI18n } from 'vue-i18n'
1819
1920
interface Datasource {
2021
name: string
22+
type_name: string
2123
type: string
2224
img: string
23-
rate?: string
25+
description: string
2426
id?: string
2527
}
2628
29+
const router = useRouter()
2730
const { t } = useI18n()
2831
const keywords = ref('')
2932
const defaultDatasourceKeywords = ref('')
@@ -75,6 +78,15 @@ const handleEditDatasource = (res: any) => {
7578
})
7679
}
7780
81+
const handleQuestion = (id: string) => {
82+
router.push({
83+
path: '/chat/index',
84+
query: {
85+
id,
86+
},
87+
})
88+
}
89+
7890
const handleAddDatasource = () => {
7991
editDatasource.value = false
8092
datasourceConfigvVisible.value = true
@@ -208,7 +220,7 @@ const dataTableDetail = (ele: any) => {
208220
</el-icon>
209221
</div>
210222
<div v-if="!defaultDatasourceListWithSearch.length" class="popover-item empty">
211-
没有找到相关结果
223+
{{ t('model.relevant_results_found') }}
212224
</div>
213225
</div>
214226
</div>
@@ -235,7 +247,9 @@ const dataTableDetail = (ele: any) => {
235247
:key="ele.id"
236248
:name="ele.name"
237249
:type="ele.type"
238-
:rate="ele.rate"
250+
:type_name="ele.type_name"
251+
:description="ele.description"
252+
@question="handleQuestion"
239253
@edit="handleEditDatasource(ele)"
240254
@del="deleteHandler(ele)"
241255
@data-table-detail="dataTableDetail(ele)"

frontend/src/views/system/model/Card.vue

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -59,14 +59,12 @@ const handleDel = () => {
5959
<edit></edit>
6060
</el-icon>
6161
</el-tooltip>
62-
<template v-if="!isDefault">
63-
<span class="divide"></span>
64-
<el-tooltip :offset="14" effect="dark" :content="$t('dashboard.delete')" placement="top">
65-
<el-icon size="16" @click="handleDel">
66-
<delIcon></delIcon>
67-
</el-icon>
68-
</el-tooltip>
69-
</template>
62+
<span class="divide"></span>
63+
<el-tooltip :offset="14" effect="dark" :content="$t('dashboard.delete')" placement="top">
64+
<el-icon size="16" @click="handleDel">
65+
<delIcon></delIcon>
66+
</el-icon>
67+
</el-tooltip>
7068
</div>
7169
</div>
7270
</template>

frontend/src/views/system/model/Model.vue

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,10 @@ const defaultModelListWithSearch = computed(() => {
6969
})
7070
7171
const handleDefaultModelChange = (item: any) => {
72+
const current_default_node = modelList.value.find((ele: Model) => ele.default_model)
73+
if (current_default_node?.id === item.id) {
74+
return
75+
}
7276
ElMessageBox.confirm(`是否设置 ${item.name} 为系统默认模型?`, {
7377
confirmButtonType: 'primary',
7478
tip: '系统默认模型被替换后,智能问数的结果将会受到影响,请谨慎操作。',
@@ -78,10 +82,10 @@ const handleDefaultModelChange = (item: any) => {
7882
autofocus: false,
7983
callback: (val: string) => {
8084
if (val === 'confirm') {
81-
modelList.value.forEach((ele: any) => {
82-
ele.default_model = ele.id === item.id
85+
modelApi.setDefault(item.id).then(() => {
86+
ElMessage.success('设置成功')
87+
search()
8388
})
84-
ElMessage.success('设置成功')
8589
}
8690
},
8791
})

frontend/src/views/system/model/ModelForm.vue

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,13 @@ const rules = {
8787
],
8888
base_model: [{ required: true, message: t('model.the_basic_model_de'), trigger: 'blur' }],
8989
name: [{ required: true, message: t('model.the_basic_model'), trigger: 'blur' }],
90-
api_key: [{ required: true, message: 'api_key', trigger: 'blur' }],
90+
api_key: [
91+
{
92+
required: true,
93+
message: t('datasource.please_enter') + t('common.empty') + 'API Key',
94+
trigger: 'blur',
95+
},
96+
],
9197
}
9298
9399
onMounted(() => {

0 commit comments

Comments
 (0)