mirror of
https://github.com/CherryHQ/cherry-studio.git
synced 2026-01-03 11:19:10 +08:00
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:
parent
04326eba21
commit
62a6a0a8be
@ -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))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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
|
||||
}
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
Reference in New Issue
Block a user