From 250885cb4de0b67b9023dbd8bf0e3c0bbfcb7d33 Mon Sep 17 00:00:00 2001 From: Wenjie Zhang Date: Mon, 4 May 2026 08:12:54 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BD=BF=E7=94=A8=20buildLlmInfoPayload?= =?UTF-8?q?=20=E5=87=BD=E6=95=B0=E6=9E=84=E9=80=A0=20llm=5Finfo=EF=BC=8C?= =?UTF-8?q?=E7=AE=80=E5=8C=96=E4=BB=A3=E7=A0=81=E5=B9=B6=E9=81=BF=E5=85=8D?= =?UTF-8?q?=E7=A9=BA=E5=80=BC=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/src/components/DatabaseHeader.vue | 8 ++------ web/src/components/KnowledgeBaseCard.vue | 8 ++------ web/src/utils/kb_utils.js | 17 ++++++++++++++--- web/src/views/DataBaseView.vue | 15 +++------------ 4 files changed, 21 insertions(+), 27 deletions(-) diff --git a/web/src/components/DatabaseHeader.vue b/web/src/components/DatabaseHeader.vue index 8bbc672f..99ba673d 100644 --- a/web/src/components/DatabaseHeader.vue +++ b/web/src/components/DatabaseHeader.vue @@ -75,7 +75,7 @@ import { ref, reactive, computed } from 'vue' import { useRouter } from 'vue-router' import { useDatabaseStore } from '@/stores/database' -import { getKbTypeLabel, getKbTypeIcon, getKbTypeColor, parseModelSpec, buildDisplaySpec } from '@/utils/kb_utils' +import { getKbTypeLabel, getKbTypeIcon, getKbTypeColor, parseModelSpec, buildDisplaySpec, buildLlmInfoPayload } from '@/utils/kb_utils' import { LeftOutlined, EditOutlined, DeleteOutlined } from '@ant-design/icons-vue' import HeaderComponent from '@/components/HeaderComponent.vue' import ModelSelectorComponent from '@/components/ModelSelectorComponent.vue' @@ -132,11 +132,7 @@ const handleEditSubmit = () => { // 如果是 LightRAG 类型,包含 llm_info if (database.value.kb_type === 'lightrag') { - updateData.llm_info = { - model_spec: editForm.llm_info.model_spec, - provider: editForm.llm_info.provider, - model_name: editForm.llm_info.model_name - } + updateData.llm_info = buildLlmInfoPayload(editForm.llm_info) } await store.updateDatabaseInfo(updateData) diff --git a/web/src/components/KnowledgeBaseCard.vue b/web/src/components/KnowledgeBaseCard.vue index b4912e42..04ca9072 100644 --- a/web/src/components/KnowledgeBaseCard.vue +++ b/web/src/components/KnowledgeBaseCard.vue @@ -158,7 +158,7 @@ import { ref, reactive, computed, h, onMounted } from 'vue' import { useRouter } from 'vue-router' import { useDatabaseStore } from '@/stores/database' import { useUserStore } from '@/stores/user' -import { getKbTypeLabel, getKbTypeColor, parseModelSpec, buildDisplaySpec } from '@/utils/kb_utils' +import { getKbTypeLabel, getKbTypeColor, parseModelSpec, buildDisplaySpec, buildLlmInfoPayload } from '@/utils/kb_utils' import { CHUNK_PRESET_OPTIONS, CHUNK_PRESET_LABEL_MAP, @@ -377,11 +377,7 @@ const handleEditSubmit = () => { // 如果是 LightRAG 类型,包含 llm_info if (database.value.kb_type === 'lightrag') { - updateData.llm_info = { - model_spec: editForm.llm_info.model_spec, - provider: editForm.llm_info.provider, - model_name: editForm.llm_info.model_name - } + updateData.llm_info = buildLlmInfoPayload(editForm.llm_info) } await store.updateDatabaseInfo(updateData) diff --git a/web/src/utils/kb_utils.js b/web/src/utils/kb_utils.js index 2fbb50e4..e210c524 100644 --- a/web/src/utils/kb_utils.js +++ b/web/src/utils/kb_utils.js @@ -29,11 +29,12 @@ export const getKbTypeColor = (type) => { // 解析模型 spec 为 { model_spec, provider, model_name } // V2 格式: provider_id:model_id(冒号分隔) -// V1 格式: provider/model_name(斜杠分隔) +// V1 格式: provider/model_name(斜杠分隔,model_name 可包含冒号) export const parseModelSpec = (spec) => { if (typeof spec !== 'string' || !spec) return null - const sep = spec.includes(':') ? ':' : '/' - const index = spec.indexOf(sep) + const slashIndex = spec.indexOf('/') + const colonIndex = spec.indexOf(':') + const index = slashIndex !== -1 ? slashIndex : colonIndex return { model_spec: spec, provider: index !== -1 ? spec.slice(0, index) : '', @@ -48,3 +49,13 @@ export const buildDisplaySpec = (llmInfo) => { const modelName = llmInfo?.model_name || '' return provider && modelName ? `${provider}/${modelName}` : '' } + +// 构造提交给后端的 llm_info,避免旧数据写入空 model_spec +export const buildLlmInfoPayload = (llmInfo) => { + const payload = { + provider: llmInfo?.provider || '', + model_name: llmInfo?.model_name || '' + } + if (llmInfo?.model_spec) payload.model_spec = llmInfo.model_spec + return payload +} diff --git a/web/src/views/DataBaseView.vue b/web/src/views/DataBaseView.vue index 89120681..25660647 100644 --- a/web/src/views/DataBaseView.vue +++ b/web/src/views/DataBaseView.vue @@ -250,7 +250,7 @@ import ExtensionCardGrid from '@/components/extensions/ExtensionCardGrid.vue' import InfoCard from '@/components/shared/InfoCard.vue' import dayjs, { parseToShanghai } from '@/utils/time' import AiTextarea from '@/components/AiTextarea.vue' -import { getKbTypeLabel, getKbTypeIcon, getKbTypeColor, parseModelSpec, buildDisplaySpec } from '@/utils/kb_utils' +import { getKbTypeLabel, getKbTypeIcon, getKbTypeColor, parseModelSpec, buildDisplaySpec, buildLlmInfoPayload } from '@/utils/kb_utils' import { CHUNK_PRESET_OPTIONS, getChunkPresetDescription } from '@/utils/chunk_presets' const route = useRoute() @@ -458,17 +458,8 @@ const buildRequestData = () => { if (newDatabase.kb_type === 'lightrag') { requestData.additional_params.language = newDatabase.language || 'English' - if (newDatabase.llm_info.model_spec) { - requestData.llm_info = { - model_spec: newDatabase.llm_info.model_spec, - provider: newDatabase.llm_info.provider, - model_name: newDatabase.llm_info.model_name - } - } else if (newDatabase.llm_info.provider && newDatabase.llm_info.model_name) { - requestData.llm_info = { - provider: newDatabase.llm_info.provider, - model_name: newDatabase.llm_info.model_name - } + if (newDatabase.llm_info.model_spec || (newDatabase.llm_info.provider && newDatabase.llm_info.model_name)) { + requestData.llm_info = buildLlmInfoPayload(newDatabase.llm_info) } }