mirror of
https://github.com/CherryHQ/cherry-studio.git
synced 2025-12-28 05:11:24 +08:00
feat(ProviderSettings): enhance provider data management on mount
- Implemented a cleanup process for provider data to remove duplicates and ensure all system providers are included. - Added logic to identify and eliminate duplicate providers based on their IDs. - Integrated missing system providers into the list, ensuring comprehensive provider management upon component mount.
This commit is contained in:
parent
7a0da13676
commit
e7a1a43856
@ -3,7 +3,7 @@ import { LoadingIcon } from '@renderer/components/Icons'
|
||||
import { HStack } from '@renderer/components/Layout'
|
||||
import { ApiKeyListPopup } from '@renderer/components/Popups/ApiKeyListPopup'
|
||||
import { isEmbeddingModel, isRerankModel } from '@renderer/config/models'
|
||||
import { PROVIDER_URLS } from '@renderer/config/providers'
|
||||
import { PROVIDER_URLS, SYSTEM_PROVIDERS_CONFIG } from '@renderer/config/providers'
|
||||
import { useTheme } from '@renderer/context/ThemeProvider'
|
||||
import { useAllProviders, useProvider, useProviders } from '@renderer/hooks/useProvider'
|
||||
import { useTimer } from '@renderer/hooks/useTimer'
|
||||
@ -11,7 +11,7 @@ import i18n from '@renderer/i18n'
|
||||
import { ModelList } from '@renderer/pages/settings/ProviderSettings/ModelList'
|
||||
import { checkApi } from '@renderer/services/ApiService'
|
||||
import { isProviderSupportAuth } from '@renderer/services/ProviderService'
|
||||
import { isSystemProvider } from '@renderer/types'
|
||||
import { isSystemProvider, Provider, SystemProviderId, SystemProviderIds } from '@renderer/types'
|
||||
import { ApiKeyConnectivity, HealthStatus } from '@renderer/types/healthCheck'
|
||||
import { formatApiHost, formatApiKeys, getFancyProviderName, isOpenAIProvider } from '@renderer/utils'
|
||||
import { formatErrorMessage } from '@renderer/utils/error'
|
||||
@ -225,6 +225,52 @@ const ProviderSetting: FC<Props> = ({ providerId }) => {
|
||||
)
|
||||
}
|
||||
|
||||
// Clean up provider data on component mount - remove duplicates and add missing system providers
|
||||
useEffect(() => {
|
||||
const cleanupProviders = () => {
|
||||
const currentProviders = allProviders
|
||||
const systemProviderIds = Object.keys(SystemProviderIds) as SystemProviderId[]
|
||||
|
||||
// Find duplicates (same id appears multiple times)
|
||||
const seenIds = new Set<string>()
|
||||
const duplicateIds = new Set<string>()
|
||||
currentProviders.forEach((p) => {
|
||||
if (seenIds.has(p.id)) {
|
||||
duplicateIds.add(p.id)
|
||||
}
|
||||
seenIds.add(p.id)
|
||||
})
|
||||
|
||||
const cleanedProviders: Provider[] = []
|
||||
const processedIds = new Set<string>()
|
||||
|
||||
currentProviders.forEach((p) => {
|
||||
if (!processedIds.has(p.id)) {
|
||||
cleanedProviders.push(p)
|
||||
processedIds.add(p.id)
|
||||
}
|
||||
})
|
||||
|
||||
// Find missing system providers
|
||||
const existingProviderIds = cleanedProviders.map((p) => p.id)
|
||||
const missingSystemProviderIds = systemProviderIds.filter((id) => !existingProviderIds.includes(id))
|
||||
|
||||
// Add missing system providers
|
||||
missingSystemProviderIds.forEach((id: SystemProviderId) => {
|
||||
const systemProvider = SYSTEM_PROVIDERS_CONFIG[id]
|
||||
cleanedProviders.push({ ...systemProvider })
|
||||
})
|
||||
|
||||
// Update providers if there were changes
|
||||
if (duplicateIds.size > 0 || missingSystemProviderIds.length > 0) {
|
||||
updateProviders(cleanedProviders)
|
||||
}
|
||||
}
|
||||
|
||||
cleanupProviders()
|
||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||
}, []) // Empty dependency array to run only on mount
|
||||
|
||||
useEffect(() => {
|
||||
if (provider.id === 'copilot') {
|
||||
return
|
||||
|
||||
Loading…
Reference in New Issue
Block a user