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