diff --git a/web/app/components/header/account-setting/model-provider-page/index.spec.tsx b/web/app/components/header/account-setting/model-provider-page/index.spec.tsx index ede9c1f7fe..27cead7eb2 100644 --- a/web/app/components/header/account-setting/model-provider-page/index.spec.tsx +++ b/web/app/components/header/account-setting/model-provider-page/index.spec.tsx @@ -83,6 +83,10 @@ vi.mock('./system-model-selector', () => ({ default: () =>
, })) +vi.mock('@/service/use-plugins', () => ({ + useCheckInstalled: () => ({ data: undefined }), +})) + describe('ModelProviderPage', () => { beforeEach(() => { vi.useFakeTimers() diff --git a/web/app/components/header/account-setting/model-provider-page/index.tsx b/web/app/components/header/account-setting/model-provider-page/index.tsx index 6e4c7663b4..9a0a046fcc 100644 --- a/web/app/components/header/account-setting/model-provider-page/index.tsx +++ b/web/app/components/header/account-setting/model-provider-page/index.tsx @@ -1,11 +1,13 @@ import type { ModelProvider, } from './declarations' +import type { PluginDetail } from '@/app/components/plugins/types' import { useDebounce } from 'ahooks' import { useMemo } from 'react' import { useTranslation } from 'react-i18next' import { useSystemFeaturesQuery } from '@/context/global-public-context' import { useProviderContext } from '@/context/provider-context' +import { useCheckInstalled } from '@/service/use-plugins' import { cn } from '@/utils/classnames' import { CustomConfigurationStatusEnum, @@ -18,6 +20,7 @@ import InstallFromMarketplace from './install-from-marketplace' import ProviderAddedCard from './provider-added-card' import QuotaPanel from './provider-added-card/quota-panel' import SystemModelSelector from './system-model-selector' +import { providerToPluginId } from './utils' type SystemModelConfigStatus = 'no-provider' | 'none-configured' | 'partially-configured' | 'fully-configured' @@ -37,6 +40,22 @@ const ModelProviderPage = ({ searchText }: Props) => { const { data: ttsDefaultModel, isLoading: isTTSDefaultModelLoading } = useDefaultModel(ModelTypeEnum.tts) const { modelProviders: providers } = useProviderContext() const { data: systemFeatures } = useSystemFeaturesQuery() + + const allPluginIds = useMemo(() => { + return [...new Set(providers.map(p => providerToPluginId(p.provider)).filter(Boolean))] + }, [providers]) + const { data: installedPlugins } = useCheckInstalled({ + pluginIds: allPluginIds, + enabled: allPluginIds.length > 0, + }) + const pluginDetailMap = useMemo(() => { + const map = new Map