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.
This commit is contained in:
beyondkmp 2025-08-16 21:14:47 +08:00 committed by GitHub
parent 04326eba21
commit 62a6a0a8be
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 36 additions and 4 deletions

View File

@ -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<PreprocessProvider>) => dispatch(_updatePreprocessProvider({ id, ...updates }))
updateProvider: (updates: Partial<PreprocessProvider>) => {
const payload = { id, ...updates }
dispatch(_updatePreprocessProvider(payload))
// 将更新同步到所有知识库中的引用
if (updates.apiHost || updates.apiKey || updates.model) {
dispatch(_syncPreprocessProvider(payload))
}
}
}
}

View File

@ -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
}
}

View File

@ -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<Partial<PreprocessProvider>>) {
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