From 9980fed90b5cea81fd096850ce4f760b4bab4228 Mon Sep 17 00:00:00 2001 From: Quicy <1728550853@qq.com> Date: Wed, 21 Jan 2026 12:07:38 +0800 Subject: [PATCH] feat: add setting --- packages/shared/src/model.ts | 15 ++ packages/web/src/pages/models/index.vue | 43 ++-- packages/web/src/pages/settings/index.vue | 293 ++++++++++++++++++++-- 3 files changed, 301 insertions(+), 50 deletions(-) diff --git a/packages/shared/src/model.ts b/packages/shared/src/model.ts index e0a788c4..6ba4d6a5 100644 --- a/packages/shared/src/model.ts +++ b/packages/shared/src/model.ts @@ -63,3 +63,18 @@ export interface ChatModel extends BaseModel { } export type Model = EmbeddingModel | ChatModel + + +// 表格当中model的类型 +export interface ModelTable { + apiKey: string, + baseUrl: string, + clientType: 'OpenAI' | 'Anthropic' | 'Google', + modelId: string, + name: string, + type: 'chat' | 'embedding', + id: string, + defaultChatModel: boolean, + defaultEmbeddingModel: boolean, + defaultSummaryModel: boolean +} \ No newline at end of file diff --git a/packages/web/src/pages/models/index.vue b/packages/web/src/pages/models/index.vue index 033951d7..15ea2130 100644 --- a/packages/web/src/pages/models/index.vue +++ b/packages/web/src/pages/models/index.vue @@ -16,21 +16,9 @@ import { import DataTable from '@/components/DataTable/index.vue' import request from '@/utils/request' import { type ColumnDef } from '@tanstack/vue-table' +import {type ModelTable as ModelType} from '@memoh/shared' -interface ModelType { - apiKey: string, - baseUrl: string, - clientType: 'OpenAI' | 'Anthropic' | 'Google', - modelId: string, - name: string, - type: 'chat' | 'embedding', - id: string, - defaultChatModel: boolean, - defaultEmbeddingModel: boolean, - defaultSummaryModel: boolean -} - const openDialogModel = ref(false) const editModelInfo = ref(null) provide('open', openDialogModel) @@ -85,22 +73,23 @@ const renderCheckDefault = () => { accessorKey: `${modelSetting.key}`, header: () => h('div', { class: 'text-left' }, modelSetting.title), cell({ row }) { - return h(Checkbox, { - state: row.original[modelSetting.type as 'defaultChatModel' | 'defaultSummaryModel' | 'defaultEmbeddingModel'], - disabled: row.original[modelSetting.type as 'defaultChatModel' | 'defaultSummaryModel' | 'defaultEmbeddingModel'] ? true : false, + const type = modelSetting.type as 'defaultChatModel' | 'defaultSummaryModel' | 'defaultEmbeddingModel' + return row.original.type === modelSetting.key ? h(Checkbox, { + state: row.original[type], + disabled: row.original[type] ? true : false, 'onUpdate:modelValue'(val) { - row.original[modelSetting.type as 'defaultChatModel' | 'defaultSummaryModel' | 'defaultEmbeddingModel'] = val as boolean + row.original[type] = val as boolean setDefaultModel({ id: row.original.id, type: modelSetting.key }) } - }) + }) : h('div') } } as ColumnDef ))] } -const checkDefaultModel=ref(renderCheckDefault()) +const checkDefaultModel = ref(renderCheckDefault()) const columns: ComputedRef[]> = computed(() => [ { @@ -131,7 +120,7 @@ const columns: ComputedRef[]> = computed(() => [ header: () => h('div', { class: 'text-left' }, 'Type'), }, - + ...checkDefaultModel.value , { @@ -171,13 +160,13 @@ const { data: modelData } = useQuery({ } })) - + return fetchModeData } }) watch(modelData, () => { - checkDefaultModel.value=renderCheckDefault() + checkDefaultModel.value = renderCheckDefault() }) @@ -202,7 +191,7 @@ const pagination = computed(() => { :data="displayFormat" /> -
+
\ No newline at end of file diff --git a/packages/web/src/pages/settings/index.vue b/packages/web/src/pages/settings/index.vue index 8fbd423e..d55008f3 100644 --- a/packages/web/src/pages/settings/index.vue +++ b/packages/web/src/pages/settings/index.vue @@ -2,45 +2,292 @@
- - - Settings - - - Model Settings - - - +
+ + + Settings + + + Model Settings + + + + + + + Chat Model + + + + +
+ +
+
+
+ + + + Embedding Model + + + + +
+ +
+
+
+
+ + + + + + Summary Model + + + + +
+ +
+
+
+ + + + Language + + + + +
+ +
+
+
+ + + + + Timeout + + + + +
+ +
+
+
+
+ + + +
\ No newline at end of file