mirror of
https://github.com/CherryHQ/cherry-studio.git
synced 2026-01-04 11:49:02 +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 { HStack } from '@renderer/components/Layout'
|
||||||
import { ApiKeyListPopup } from '@renderer/components/Popups/ApiKeyListPopup'
|
import { ApiKeyListPopup } from '@renderer/components/Popups/ApiKeyListPopup'
|
||||||
import { isEmbeddingModel, isRerankModel } from '@renderer/config/models'
|
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 { useTheme } from '@renderer/context/ThemeProvider'
|
||||||
import { useAllProviders, useProvider, useProviders } from '@renderer/hooks/useProvider'
|
import { useAllProviders, useProvider, useProviders } from '@renderer/hooks/useProvider'
|
||||||
import { useTimer } from '@renderer/hooks/useTimer'
|
import { useTimer } from '@renderer/hooks/useTimer'
|
||||||
@ -11,7 +11,7 @@ import i18n from '@renderer/i18n'
|
|||||||
import { ModelList } from '@renderer/pages/settings/ProviderSettings/ModelList'
|
import { ModelList } from '@renderer/pages/settings/ProviderSettings/ModelList'
|
||||||
import { checkApi } from '@renderer/services/ApiService'
|
import { checkApi } from '@renderer/services/ApiService'
|
||||||
import { isProviderSupportAuth } from '@renderer/services/ProviderService'
|
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 { ApiKeyConnectivity, HealthStatus } from '@renderer/types/healthCheck'
|
||||||
import { formatApiHost, formatApiKeys, getFancyProviderName, isOpenAIProvider } from '@renderer/utils'
|
import { formatApiHost, formatApiKeys, getFancyProviderName, isOpenAIProvider } from '@renderer/utils'
|
||||||
import { formatErrorMessage } from '@renderer/utils/error'
|
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(() => {
|
useEffect(() => {
|
||||||
if (provider.id === 'copilot') {
|
if (provider.id === 'copilot') {
|
||||||
return
|
return
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user