From d857a391b3a1dca014e6614b44ac08fa588aa7f7 Mon Sep 17 00:00:00 2001 From: Archer <545436317@qq.com> Date: Thu, 6 Feb 2025 14:34:43 +0800 Subject: [PATCH] 4.8.20 update (#3706) * fix: rerank auth token * feat: check null value * bind notify * perf: reasoning config * Adapt mongo 4.x index --- packages/global/core/ai/model.ts | 3 +++ packages/service/common/mongo/index.ts | 9 +++++++-- .../service/core/ai/audio/transcriptions.ts | 2 +- packages/service/core/ai/config/utils.ts | 10 +++++++--- packages/service/core/ai/embedding/index.ts | 10 ++++++---- packages/service/core/ai/rerank/index.ts | 4 ++-- .../core/dataset/data/dataTextSchema.ts | 7 +------ packages/web/i18n/en/account.json | 2 ++ packages/web/i18n/zh-CN/account.json | 2 ++ packages/web/i18n/zh-Hant/account.json | 2 ++ projects/app/public/docs/chatProblem.md | 7 ++----- projects/app/src/components/Layout/index.tsx | 2 ++ .../account/model/ModelConfigTable.tsx | 13 +++++++++++++ .../app/src/pages/api/core/ai/model/test.ts | 18 +++++++++++------- 14 files changed, 61 insertions(+), 30 deletions(-) diff --git a/packages/global/core/ai/model.ts b/packages/global/core/ai/model.ts index 8588b68eb..8fd818307 100644 --- a/packages/global/core/ai/model.ts +++ b/packages/global/core/ai/model.ts @@ -61,6 +61,9 @@ export const getModelFromList = ( model: string ) => { const modelData = modelList.find((item) => item.model === model) ?? modelList[0]; + if (!modelData) { + throw new Error('No Key model is configured'); + } const provider = getModelProvider(modelData.provider); return { ...modelData, diff --git a/packages/service/common/mongo/index.ts b/packages/service/common/mongo/index.ts index fb1835d3d..09235bb16 100644 --- a/packages/service/common/mongo/index.ts +++ b/packages/service/common/mongo/index.ts @@ -63,6 +63,13 @@ export const getMongoModel = (name: string, schema: mongoose.Schema) => { const model = connectionMongo.model(name, schema); + // Sync index + syncMongoIndex(model); + + return model; +}; + +const syncMongoIndex = async (model: Model) => { if (process.env.SYNC_INDEX !== '0' && process.env.NODE_ENV !== 'test') { try { model.syncIndexes({ background: true }); @@ -70,8 +77,6 @@ export const getMongoModel = (name: string, schema: mongoose.Schema) => { addLog.error('Create index error', error); } } - - return model; }; export const ReadPreference = connectionMongo.mongo.ReadPreference; diff --git a/packages/service/core/ai/audio/transcriptions.ts b/packages/service/core/ai/audio/transcriptions.ts index 753f8b481..8e9a97acd 100644 --- a/packages/service/core/ai/audio/transcriptions.ts +++ b/packages/service/core/ai/audio/transcriptions.ts @@ -24,7 +24,7 @@ export const aiTranscriptions = async ({ ? { url: modelData.requestUrl } : { baseURL: aiAxiosConfig.baseUrl, - url: modelData.requestUrl || '/audio/transcriptions' + url: '/audio/transcriptions' }), headers: { Authorization: modelData.requestAuth diff --git a/packages/service/core/ai/config/utils.ts b/packages/service/core/ai/config/utils.ts index e39ee1a38..54cad5c2e 100644 --- a/packages/service/core/ai/config/utils.ts +++ b/packages/service/core/ai/config/utils.ts @@ -11,7 +11,11 @@ import { ReRankModelItemType } from '@fastgpt/global/core/ai/model.d'; import { debounce } from 'lodash'; -import { ModelProviderType } from '@fastgpt/global/core/ai/provider'; +import { + getModelProvider, + ModelProviderIdType, + ModelProviderType +} from '@fastgpt/global/core/ai/provider'; import { findModelFromAlldata } from '../model'; import { reloadFastGPTConfigBuffer, @@ -91,7 +95,7 @@ export const loadSystemModels = async (init = false) => { await Promise.all( providerList.map(async (name) => { const fileContent = (await import(`./provider/${name}`))?.default as { - provider: ModelProviderType; + provider: ModelProviderIdType; list: SystemModelItemType[]; }; @@ -101,7 +105,7 @@ export const loadSystemModels = async (init = false) => { const modelData: any = { ...fileModel, ...dbModel?.metadata, - provider: dbModel?.metadata?.provider || fileContent.provider, + provider: getModelProvider(dbModel?.metadata?.provider || fileContent.provider).id, type: dbModel?.metadata?.type || fileModel.type, isCustom: false }; diff --git a/packages/service/core/ai/embedding/index.ts b/packages/service/core/ai/embedding/index.ts index adf3db7dc..ec0650546 100644 --- a/packages/service/core/ai/embedding/index.ts +++ b/packages/service/core/ai/embedding/index.ts @@ -32,12 +32,14 @@ export async function getVectorsByText({ model, input, type }: GetVectorProps) { model: model.model, input: [input] }, - model.requestUrl && model.requestAuth + model.requestUrl ? { path: model.requestUrl, - headers: { - Authorization: `Bearer ${model.requestAuth}` - } + headers: model.requestAuth + ? { + Authorization: `Bearer ${model.requestAuth}` + } + : undefined } : {} ) diff --git a/packages/service/core/ai/rerank/index.ts b/packages/service/core/ai/rerank/index.ts index 9ad231d89..7a019d73b 100644 --- a/packages/service/core/ai/rerank/index.ts +++ b/packages/service/core/ai/rerank/index.ts @@ -26,7 +26,7 @@ export function reRankRecall({ return Promise.reject('no rerank model'); } - const { baseUrl, authorization } = getAxiosConfig({}); + const { baseUrl, authorization } = getAxiosConfig(); let start = Date.now(); return POST( @@ -38,7 +38,7 @@ export function reRankRecall({ }, { headers: { - Authorization: model.requestAuth ? model.requestAuth : authorization + Authorization: model.requestAuth ? `Bearer ${model.requestAuth}` : authorization }, timeout: 30000 } diff --git a/packages/service/core/dataset/data/dataTextSchema.ts b/packages/service/core/dataset/data/dataTextSchema.ts index f23a7f7d0..da06a80a4 100644 --- a/packages/service/core/dataset/data/dataTextSchema.ts +++ b/packages/service/core/dataset/data/dataTextSchema.ts @@ -37,12 +37,7 @@ try { { teamId: 1, datasetId: 1, fullTextToken: 'text' }, { name: 'teamId_1_datasetId_1_fullTextToken_text', - default_language: 'none', - collation: { - locale: 'simple', // 使用简单匹配规则 - strength: 2, // 忽略大小写 - caseLevel: false // 进一步确保大小写不敏感 - } + default_language: 'none' } ); DatasetDataTextSchema.index({ dataId: 1 }, { unique: true }); diff --git a/packages/web/i18n/en/account.json b/packages/web/i18n/en/account.json index 3e6a41a62..1bef764cd 100644 --- a/packages/web/i18n/en/account.json +++ b/packages/web/i18n/en/account.json @@ -49,6 +49,8 @@ "model.output_price": "Output price", "model.output_price_tip": "The language model output price. If this item is configured, the model comprehensive price will be invalid.", "model.param_name": "Parameter name", + "model.reasoning": "Support output thinking", + "model.reasoning_tip": "For example, Deepseek-reasoner can output the thinking process.", "model.request_auth": "Custom key", "model.request_auth_tip": "When making a request to a custom request address, carry the request header: Authorization: Bearer xxx to make the request.", "model.request_url": "Custom url", diff --git a/packages/web/i18n/zh-CN/account.json b/packages/web/i18n/zh-CN/account.json index 5ea458615..d9043f010 100644 --- a/packages/web/i18n/zh-CN/account.json +++ b/packages/web/i18n/zh-CN/account.json @@ -49,6 +49,8 @@ "model.output_price": "模型输出价格", "model.output_price_tip": "语言模型输出价格,如果配置了该项,则模型综合价格会失效", "model.param_name": "参数名", + "model.reasoning": "支持输出思考", + "model.reasoning_tip": "例如 Deepseek-reasoner,可以输出思考过程。", "model.request_auth": "自定义请求 Key", "model.request_auth_tip": "向自定义请求地址发起请求时候,携带请求头:Authorization: Bearer xxx 进行请求", "model.request_url": "自定义请求地址", diff --git a/packages/web/i18n/zh-Hant/account.json b/packages/web/i18n/zh-Hant/account.json index c8a1d4ba9..66ce5b25c 100644 --- a/packages/web/i18n/zh-Hant/account.json +++ b/packages/web/i18n/zh-Hant/account.json @@ -48,6 +48,8 @@ "model.output_price": "模型輸出價格", "model.output_price_tip": "語言模型輸出價格,如果配置了該項,則模型綜合價格會失效", "model.param_name": "參數名", + "model.reasoning": "支持輸出思考", + "model.reasoning_tip": "例如 Deepseek-reasoner,可以輸出思考過程。", "model.request_auth": "自訂請求 Key", "model.request_auth_tip": "向自訂請求地址發起請求時候,攜帶請求頭:Authorization: Bearer xxx 進行請求", "model.request_url": "自訂請求地址", diff --git a/projects/app/public/docs/chatProblem.md b/projects/app/public/docs/chatProblem.md index 4cf848ff7..c110cd467 100644 --- a/projects/app/public/docs/chatProblem.md +++ b/projects/app/public/docs/chatProblem.md @@ -1,11 +1,8 @@ ### 常见问题 - [**Git 地址**,点击查看项目地址](https://github.com/labring/FastGPT) -- [本地部署 FastGPT](https://doc.tryfastgpt.ai/docs/installation) -- [API 文档](https://doc.tryfastgpt.ai/docs/development/openapi?pre_pathname=%2Fdrive%2Fhome%2F) -- **反馈问卷**: 如果你遇到任何使用问题或有期望的功能,可以[填写该问卷](https://www.wjx.cn/vm/rLIw1uD.aspx#) -- **问题文档**: [先看文档,再提问](https://kjqvjse66l.feishu.cn/docx/HtrgdT0pkonP4kxGx8qcu6XDnGh) -- [点击查看商业版文档](https://doc.tryfastgpt.ai/docs/commercial) +- [点击查看官方文档](https://doc.tryfastgpt.ai/docs/) +- [点击查看商业版文档](https://doc.tryfastgpt.ai/docs/shopping_cart/intro/) - [计费规则](https://doc.tryfastgpt.ai/docs/pricing/) **其他问题** diff --git a/projects/app/src/components/Layout/index.tsx b/projects/app/src/components/Layout/index.tsx index 0fe546023..dda3aeb2f 100644 --- a/projects/app/src/components/Layout/index.tsx +++ b/projects/app/src/components/Layout/index.tsx @@ -73,6 +73,8 @@ const Layout = ({ children }: { children: JSX.Element }) => { const showUpdateNotification = isUpdateNotification && + feConfigs?.bind_notification_method && + feConfigs?.bind_notification_method.length > 0 && !userInfo?.team.notificationAccount && !!userInfo?.team.permission.isOwner; diff --git a/projects/app/src/pageComponents/account/model/ModelConfigTable.tsx b/projects/app/src/pageComponents/account/model/ModelConfigTable.tsx index 672a98924..990f1a0cf 100644 --- a/projects/app/src/pageComponents/account/model/ModelConfigTable.tsx +++ b/projects/app/src/pageComponents/account/model/ModelConfigTable.tsx @@ -922,6 +922,19 @@ const ModelEditModal = ({ + + + + {t('account:model.reasoning')} + + + + + + + + + {feConfigs?.isPlus && ( diff --git a/projects/app/src/pages/api/core/ai/model/test.ts b/projects/app/src/pages/api/core/ai/model/test.ts index 3900dcd2c..e001f8f4b 100644 --- a/projects/app/src/pages/api/core/ai/model/test.ts +++ b/projects/app/src/pages/api/core/ai/model/test.ts @@ -66,9 +66,11 @@ const testLLMModel = async (model: LLMModelItemType) => { }, { ...(model.requestUrl ? { path: model.requestUrl } : {}), - headers: { - ...(model.requestAuth ? { Authorization: `Bearer ${model.requestAuth}` } : {}) - } + headers: model.requestAuth + ? { + Authorization: `Bearer ${model.requestAuth}` + } + : undefined } ); @@ -98,12 +100,14 @@ const testTTSModel = async (model: TTSModelType) => { response_format: 'mp3', speed: 1 }, - model.requestUrl && model.requestAuth + model.requestUrl ? { path: model.requestUrl, - headers: { - Authorization: `Bearer ${model.requestAuth}` - } + headers: model.requestAuth + ? { + Authorization: `Bearer ${model.requestAuth}` + } + : undefined } : {} );