From 62a6a0a8bec127a4020e2909058b62dbe0333c9e Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Sat, 16 Aug 2025 21:14:47 +0800 Subject: [PATCH] fix: Update KnowledgeBase form and service to handle preprocess provider correctly (#9229) * fix: Update KnowledgeBase form and service to handle preprocess provider correctly - Enhanced useKnowledgeBaseForm hook to set preprocessProvider with the correct providerId type. - Modified getKnowledgeBaseParams function to retrieve preprocess provider from the store instead of the base, ensuring accurate provider assignment. * fix: Remove unused providerId from preprocessProvider in useKnowledgeBaseForm hook - Cleaned up the useKnowledgeBaseForm hook by removing the unused providerId property from the preprocessProvider object, ensuring a more accurate representation of the data structure. * format code * feat: Sync preprocess provider updates across knowledge bases - Added a new action to synchronize updates to the preprocess provider across all knowledge bases that reference it. - Updated the usePreprocessProvider hook to dispatch the new sync action after updating the provider. - Modified getKnowledgeBaseParams to ensure the correct preprocess provider is assigned when retrieving knowledge base parameters. * fix: Update sync logic for preprocess provider updates - Modified the syncPreprocessProvider action to merge updates directly into the existing provider object instead of replacing it. - Adjusted the usePreprocessProvider hook to only dispatch the sync action when specific fields (apiHost, apiKey, model) are updated, improving efficiency. --- src/renderer/src/hooks/usePreprocess.ts | 10 +++++++++- src/renderer/src/services/KnowledgeService.ts | 13 ++++++++++++- src/renderer/src/store/knowledge.ts | 17 +++++++++++++++-- 3 files changed, 36 insertions(+), 4 deletions(-) diff --git a/src/renderer/src/hooks/usePreprocess.ts b/src/renderer/src/hooks/usePreprocess.ts index 5172e2c68a..96e01ec407 100644 --- a/src/renderer/src/hooks/usePreprocess.ts +++ b/src/renderer/src/hooks/usePreprocess.ts @@ -1,4 +1,5 @@ import { RootState } from '@renderer/store' +import { syncPreprocessProvider as _syncPreprocessProvider } from '@renderer/store/knowledge' import { setDefaultPreprocessProvider as _setDefaultPreprocessProvider, updatePreprocessProvider as _updatePreprocessProvider, @@ -17,7 +18,14 @@ export const usePreprocessProvider = (id: PreprocessProviderId) => { return { provider, - updateProvider: (updates: Partial) => dispatch(_updatePreprocessProvider({ id, ...updates })) + updateProvider: (updates: Partial) => { + const payload = { id, ...updates } + dispatch(_updatePreprocessProvider(payload)) + // 将更新同步到所有知识库中的引用 + if (updates.apiHost || updates.apiKey || updates.model) { + dispatch(_syncPreprocessProvider(payload)) + } + } } } diff --git a/src/renderer/src/services/KnowledgeService.ts b/src/renderer/src/services/KnowledgeService.ts index 02fb646563..ad0e113266 100644 --- a/src/renderer/src/services/KnowledgeService.ts +++ b/src/renderer/src/services/KnowledgeService.ts @@ -21,6 +21,17 @@ export const getKnowledgeBaseParams = (base: KnowledgeBase): KnowledgeBaseParams const aiProvider = new AiProvider(provider) const rerankAiProvider = new AiProvider(rerankProvider) + // get preprocess provider from store instead of base.preprocessProvider + const preprocessProvider = store + .getState() + .preprocess.providers.find((p) => p.id === base.preprocessProvider?.provider.id) + const updatedPreprocessProvider = preprocessProvider + ? { + type: 'preprocess' as const, + provider: preprocessProvider + } + : base.preprocessProvider + let host = aiProvider.getBaseURL() const rerankHost = rerankAiProvider.getBaseURL() if (provider.type === 'gemini') { @@ -57,7 +68,7 @@ export const getKnowledgeBaseParams = (base: KnowledgeBase): KnowledgeBaseParams apiKey: rerankAiProvider.getApiKey() || 'secret', baseURL: rerankHost }, - preprocessProvider: base.preprocessProvider, + preprocessProvider: updatedPreprocessProvider, documentCount: base.documentCount } } diff --git a/src/renderer/src/store/knowledge.ts b/src/renderer/src/store/knowledge.ts index b82e99f471..b006d30dd1 100644 --- a/src/renderer/src/store/knowledge.ts +++ b/src/renderer/src/store/knowledge.ts @@ -1,7 +1,7 @@ import { loggerService } from '@logger' import { createSlice, PayloadAction } from '@reduxjs/toolkit' import FileManager from '@renderer/services/FileManager' -import { FileMetadata, KnowledgeBase, KnowledgeItem, ProcessingStatus } from '@renderer/types' +import { FileMetadata, KnowledgeBase, KnowledgeItem, PreprocessProvider, ProcessingStatus } from '@renderer/types' const logger = loggerService.withContext('Store:Knowledge') @@ -174,6 +174,18 @@ const knowledgeSlice = createSlice({ } }, + syncPreprocessProvider(state, action: PayloadAction>) { + const updatedProvider = action.payload + state.bases.forEach((base) => { + if (base.preprocessProvider && base.preprocessProvider.provider.id === updatedProvider.id) { + base.preprocessProvider.provider = { + ...base.preprocessProvider.provider, + ...updatedProvider + } + } + }) + }, + updateBaseItemUniqueId( state, action: PayloadAction<{ baseId: string; itemId: string; uniqueId: string; uniqueIds: string[] }> @@ -221,7 +233,8 @@ export const { clearCompletedProcessing, clearAllProcessing, updateBaseItemUniqueId, - updateBaseItemIsPreprocessed + updateBaseItemIsPreprocessed, + syncPreprocessProvider } = knowledgeSlice.actions export default knowledgeSlice.reducer