diff --git a/src/apis/paths/llm.ts b/src/apis/paths/llm.ts index b27c0e5248d234ab352d4a0ad445fea739b06bf2..3227bd77f4ad964702e9f9d9463d51c124a17caf 100644 --- a/src/apis/paths/llm.ts +++ b/src/apis/paths/llm.ts @@ -19,41 +19,14 @@ const updateLLMList = ({ conversationId, llmId }) => { /** * 获取已添加模型列表 - * @param modelType 模型类型,可选值:'chat' | 'embedding' | 'reranker' 等 + * @param modelType 模型类型,可选值:'chat' | 'embedding' | 'reranker' | 'function_call' 等 */ const getAddedModels = (modelType?: string) => { return get('/api/llm', modelType ? { modelType } : {}); }; -/** - * 获取 Embedding 配置 - * @returns - */ -const getEmbeddingConfig = () => { - return get<{ - type: string; - endpoint: string; - api_key: string; - model: string; - icon?: string; - }>('/api/llm/embedding'); -}; - -/** - * 获取 Reranker 配置 - * @returns - */ -const getRerankerConfig = () => { - return get<{ - type: string; - name: string; - }[]>('/api/llm/reranker'); -}; - export const llmApi = { getAddedModels, getLLMList, updateLLMList, - getEmbeddingConfig, - getRerankerConfig, }; diff --git a/src/views/settings/Model.vue b/src/views/settings/Model.vue index ba1c8cccf39bb080829b3c351640bef98adb9667..f458edc1b3c56f79f7600d05e0c7bbbccf77dab5 100644 --- a/src/views/settings/Model.vue +++ b/src/views/settings/Model.vue @@ -143,43 +143,28 @@ async function queryModelProviders() { } async function queryEmbeddingOptions() { - const [, res] = await api.getEmbeddingConfig(); + const [, res] = await api.getAddedModels('embedding'); if (res) { - // 将 embedding 配置转换为选项格式 - const result = res.result as any; - embeddingOptions.value = [{ - llmId: 'embedding_default', - modelName: result.model || 'Default Embedding Model', - icon: result.icon || '', - type: result.type, - endpoint: result.endpoint, - apiKey: result.api_key - }]; + embeddingOptions.value = res.result || []; } } async function queryRerankerOptions() { - const [, res] = await api.getRerankerConfig(); - if (res && res.result) { - // 将 reranker 配置转换为选项格式 - rerankerOptions.value = res.result.map((item: any, index: number) => { - // 根据不同类型设置正确的模型名称 - let modelName = ''; - if (item.type === 'algorithm') { - modelName = item.name || `Algorithm Reranker ${index + 1}`; - } else if (item.type === 'openai') { - modelName = item.model || `OpenAI Reranker ${index + 1}`; - } else { - modelName = item.name || item.model || `Reranker ${index + 1}`; - } - - return { - llmId: `reranker_${index}`, - modelName: modelName, - icon: item.icon || '', - type: item.type - }; - }); + const [, res] = await api.getAddedModels('reranker'); + + // 固定的 jaccard dis reranker 选项 + const fixedJaccardOption = { + llmId: 'jaccard dis reranker', + modelName: 'jaccard dis reranker', + type: 'algorithm' + }; + + if (res) { + // 将固定选项放在最前面 + rerankerOptions.value = [fixedJaccardOption, ...(res.result || [])]; + } else { + // 即使没有获取到后端数据,也要有固定选项 + rerankerOptions.value = [fixedJaccardOption]; } } @@ -232,11 +217,17 @@ async function handleSystemModelSettingsSave(settings: any) { if (settings.embeddingModel) { const model = embeddingOptions.value.find(m => m.llmId === settings.embeddingModel); if (model) { + // 处理 type 字段:如果是数组则取第一个元素,否则使用原值,默认为 'embedding' + let typeValue = 'embedding'; + if (model.type) { + typeValue = Array.isArray(model.type) ? model.type[0] : model.type; + } + preferences.embeddingModelPreference = { llmId: model.llmId, modelName: model.modelName || '', icon: model.icon || '', - type: model.type || '', + type: typeValue, endpoint: model.endpoint || '', apiKey: model.apiKey || '' }; @@ -246,19 +237,25 @@ async function handleSystemModelSettingsSave(settings: any) { if (settings.rerankModel) { const model = rerankerOptions.value.find(m => m.llmId === settings.rerankModel); if (model) { + // 处理 type 字段:如果是数组则取第一个元素,否则使用原值,默认为 'reranker' + let typeValue = 'reranker'; + if (model.type) { + typeValue = Array.isArray(model.type) ? model.type[0] : model.type; + } + preferences.rerankerPreference = { llmId: model.llmId, modelName: model.modelName || '', icon: model.icon || '', - type: model.type || '' + type: typeValue }; // 根据类型添加可选字段 - if (model.type !== 'algorithm') { + if (typeValue !== 'algorithm') { preferences.rerankerPreference.endpoint = model.endpoint || null; preferences.rerankerPreference.apiKey = model.apiKey || null; } - if (model.type === 'algorithm') { + if (typeValue === 'algorithm') { preferences.rerankerPreference.name = model.name || null; } }