diff --git a/document/content/docs/upgrading/4-13/4132.mdx b/document/content/docs/upgrading/4-13/4132.mdx index 2f4f2b9813b4..cfeaab065a91 100644 --- a/document/content/docs/upgrading/4-13/4132.mdx +++ b/document/content/docs/upgrading/4-13/4132.mdx @@ -15,11 +15,17 @@ description: 'FastGPT V4.13.1 更新说明' ## 🐛 修复 1. LLM 模型默认支持图片,导致请求错误。 +2. Mongo 多副本切换时候,watch 未重新触发。 ## 🔨 插件更新 -1. Perplexity search 工具。 -2. Base64转文件工具。 -3. MiniMax TTS 文件生成工具。 -4. Openrouter nano banana 绘图工具。 -5. 系统工具支持配置是否需要在 Worker 中运行。 \ No newline at end of file +1. 新增:Perplexity search 工具。 +2. 新增:Base64转文件工具。 +3. 新增:MiniMax TTS 文件生成工具。 +4. 新增:Openrouter nano banana 绘图工具。 +5. 新增:Redis 缓存操作工具。 +6. 新增:Tavily search 工具。 +7. 新增:硅基流动 qwen-image 和 qwen-image-edit 工具。 +8. 新增:飞书多维表格操作套件。 +9. 新增:Youtube 字幕提取。 +10. 系统工具支持配置是否需要在 Worker 中运行。 \ No newline at end of file diff --git a/document/data/doc-last-modified.json b/document/data/doc-last-modified.json index 261ebf5030f7..8e5f0c525dab 100644 --- a/document/data/doc-last-modified.json +++ b/document/data/doc-last-modified.json @@ -113,7 +113,7 @@ "document/content/docs/upgrading/4-12/4124.mdx": "2025-09-17T22:29:56+08:00", "document/content/docs/upgrading/4-13/4130.mdx": "2025-09-30T16:00:10+08:00", "document/content/docs/upgrading/4-13/4131.mdx": "2025-09-30T15:47:06+08:00", - "document/content/docs/upgrading/4-13/4132.mdx": "2025-10-12T00:04:51+08:00", + "document/content/docs/upgrading/4-13/4132.mdx": "2025-10-13T16:16:59+08:00", "document/content/docs/upgrading/4-8/40.mdx": "2025-08-02T19:38:37+08:00", "document/content/docs/upgrading/4-8/41.mdx": "2025-08-02T19:38:37+08:00", "document/content/docs/upgrading/4-8/42.mdx": "2025-08-02T19:38:37+08:00", diff --git a/packages/service/common/mongo/init.ts b/packages/service/common/mongo/init.ts index b7233f06c6a0..4fc57d42ec9c 100644 --- a/packages/service/common/mongo/init.ts +++ b/packages/service/common/mongo/init.ts @@ -7,7 +7,13 @@ const maxConnecting = Math.max(30, Number(process.env.DB_MAX_LINK || 20)); /** * connect MongoDB and init data */ -export async function connectMongo(db: Mongoose, url: string): Promise { +export async function connectMongo(props: { + db: Mongoose; + url: string; + connectedCb?: () => void; +}): Promise { + const { db, url, connectedCb } = props; + /* Connecting, connected will return */ if (db.connection.readyState !== 0) { return db; @@ -31,7 +37,7 @@ export async function connectMongo(db: Mongoose, url: string): Promise RemoveListeners(); await db.disconnect(); await delay(1000); - await connectMongo(db, url); + await connectMongo(props); } } catch (error) {} }); @@ -42,7 +48,7 @@ export async function connectMongo(db: Mongoose, url: string): Promise RemoveListeners(); await db.disconnect(); await delay(1000); - await connectMongo(db, url); + await connectMongo(props); } } catch (error) {} }); @@ -60,9 +66,11 @@ export async function connectMongo(db: Mongoose, url: string): Promise retryReads: true }; - db.connect(url, options); - + await db.connect(url, options); console.log('mongo connected'); + + connectedCb?.(); + return db; } catch (error) { addLog.error('Mongo connect error', error); @@ -70,6 +78,6 @@ export async function connectMongo(db: Mongoose, url: string): Promise await db.disconnect(); await delay(1000); - return connectMongo(db, url); + return connectMongo(props); } } diff --git a/packages/service/core/ai/config/utils.ts b/packages/service/core/ai/config/utils.ts index 3869b264d0dc..0e184a85997a 100644 --- a/packages/service/core/ai/config/utils.ts +++ b/packages/service/core/ai/config/utils.ts @@ -236,7 +236,7 @@ export const getSystemModelConfig = async (model: string): Promise { const changeStream = MongoSystemModel.watch(); - changeStream.on( + return changeStream.on( 'change', debounce(async () => { try { diff --git a/packages/service/core/workflow/dispatch/index.ts b/packages/service/core/workflow/dispatch/index.ts index eed55c50064c..c0652a0a891d 100644 --- a/packages/service/core/workflow/dispatch/index.ts +++ b/packages/service/core/workflow/dispatch/index.ts @@ -633,14 +633,13 @@ export const runWorkflow = async (data: RunWorkflowProps): Promise 0) || + (!Array.isArray(toolResponses) && typeof toolResponses === 'object' && - Object.keys(toolResponses).length === 0 - ) - return; + Object.keys(toolResponses).length > 0) + ) { this.toolRunResponse = toolResponses; } diff --git a/projects/app/src/instrumentation.ts b/projects/app/src/instrumentation.ts index 28e28e766e2f..e7de610b1ecb 100644 --- a/projects/app/src/instrumentation.ts +++ b/projects/app/src/instrumentation.ts @@ -47,8 +47,15 @@ export async function register() { initGlobalVariables(); // Connect to MongoDB - await connectMongo(connectionMongo, MONGO_URL); - connectMongo(connectionLogMongo, MONGO_LOG_URL); + await connectMongo({ + db: connectionMongo, + url: MONGO_URL, + connectedCb: () => startMongoWatch() + }); + connectMongo({ + db: connectionLogMongo, + url: MONGO_LOG_URL + }); //init system config;init vector database;init root user await Promise.all([getInitConfig(), initVectorStore(), initRootUser(), loadSystemModels()]); @@ -60,7 +67,6 @@ export async function register() { initAppTemplateTypes() ]); - startMongoWatch(); startCron(); startTrainingQueue(true); trackTimerProcess(); diff --git a/projects/app/src/pages/api/core/app/version/publish.ts b/projects/app/src/pages/api/core/app/version/publish.ts index ffbc75d78013..14e70e531cc7 100644 --- a/projects/app/src/pages/api/core/app/version/publish.ts +++ b/projects/app/src/pages/api/core/app/version/publish.ts @@ -116,3 +116,11 @@ async function handler(req: ApiRequestProps, res: NextApiRe } export default NextAPI(handler); + +export const config = { + api: { + bodyParser: { + sizeLimit: '5mb' + } + } +}; diff --git a/projects/app/src/service/common/system/volumnMongoWatch.ts b/projects/app/src/service/common/system/volumnMongoWatch.ts index 729120ed7d12..f2772173ed3b 100644 --- a/projects/app/src/service/common/system/volumnMongoWatch.ts +++ b/projects/app/src/service/common/system/volumnMongoWatch.ts @@ -7,17 +7,21 @@ import { getAppTemplatesAndLoadThem } from '@fastgpt/service/core/app/templates/ import { watchSystemModelUpdate } from '@fastgpt/service/core/ai/config/utils'; import { SystemConfigsTypeEnum } from '@fastgpt/global/common/system/config/constants'; +const changeStreams: any[] = []; + export const startMongoWatch = async () => { - reloadConfigWatch(); - createDatasetTrainingMongoWatch(); - refetchAppTemplates(); - watchSystemModelUpdate(); + cleanupMongoWatch(); + console.log('Watch mongo db start'); + changeStreams.push(reloadConfigWatch()); + changeStreams.push(createDatasetTrainingMongoWatch()); + changeStreams.push(refetchAppTemplates()); + changeStreams.push(watchSystemModelUpdate()); }; const reloadConfigWatch = () => { const changeStream = MongoSystemConfigs.watch(); - changeStream.on('change', async (change) => { + return changeStream.on('change', async (change) => { try { if ( change.operationType === 'update' || @@ -36,7 +40,7 @@ const reloadConfigWatch = () => { const refetchAppTemplates = () => { const changeStream = MongoAppTemplate.watch(); - changeStream.on( + return changeStream.on( 'change', debounce(async (change) => { setTimeout(() => { @@ -47,3 +51,9 @@ const refetchAppTemplates = () => { }, 500) ); }; + +const cleanupMongoWatch = () => { + changeStreams.forEach((changeStream) => { + changeStream?.close(); + }); +}; diff --git a/projects/app/src/service/core/dataset/training/utils.ts b/projects/app/src/service/core/dataset/training/utils.ts index 687464db49e8..e79790c1f125 100644 --- a/projects/app/src/service/core/dataset/training/utils.ts +++ b/projects/app/src/service/core/dataset/training/utils.ts @@ -8,7 +8,7 @@ import { datasetParseQueue } from '../queues/datasetParse'; export const createDatasetTrainingMongoWatch = () => { const changeStream = MongoDatasetTraining.watch(); - changeStream.on('change', async (change) => { + return changeStream.on('change', async (change) => { try { if (change.operationType === 'insert') { const fullDocument = change.fullDocument as DatasetTrainingSchemaType;