dify/web/app/components/plugins/install-plugin/hooks/use-refresh-plugin-list.tsx

124 lines
4.7 KiB
TypeScript

import type { Plugin, PluginDeclaration, PluginManifestInMarket } from '../../types'
import { useQuery } from '@tanstack/react-query'
import { ModelTypeEnum } from '@/app/components/header/account-setting/model-provider-page/declarations'
import { useInvalidateDefaultModel } from '@/app/components/header/account-setting/model-provider-page/hooks'
import { useProviderContext } from '@/context/provider-context'
import { consoleQuery } from '@/service/console'
import { useInvalidDataSourceListAuth } from '@/service/use-datasource'
import { useInvalidDataSourceList } from '@/service/use-pipeline'
import {
useInvalidateCheckInstalled,
useInvalidateInstalledPluginList,
} from '@/service/use-plugins'
import { useInvalidateStrategyProviders } from '@/service/use-strategy'
import {
useInvalidateAllBuiltInTools,
useInvalidateAllToolProviders,
useInvalidateRAGRecommendedPlugins,
} from '@/service/use-tools'
import { useInvalidateAllTriggerPlugins } from '@/service/use-triggers'
import { PluginCategoryEnum } from '../../types'
type PluginCategoryPayload = {
category: PluginCategoryEnum
}
const SYSTEM_MODEL_TYPES = [
ModelTypeEnum.textGeneration,
ModelTypeEnum.textEmbedding,
ModelTypeEnum.rerank,
ModelTypeEnum.speech2text,
ModelTypeEnum.tts,
]
const useRefreshPluginList = () => {
const invalidateInstalledPluginList = useInvalidateInstalledPluginList()
const invalidateCheckInstalled = useInvalidateCheckInstalled()
const { refetch: refetchLLMModelList } = useQuery(
consoleQuery.workspaces.current.models.modelTypes.byModelType.get.queryOptions({
input: { params: { model_type: ModelTypeEnum.textGeneration } },
}),
)
const { refetch: refetchEmbeddingModelList } = useQuery(
consoleQuery.workspaces.current.models.modelTypes.byModelType.get.queryOptions({
input: { params: { model_type: ModelTypeEnum.textEmbedding } },
}),
)
const { refetch: refetchRerankModelList } = useQuery(
consoleQuery.workspaces.current.models.modelTypes.byModelType.get.queryOptions({
input: { params: { model_type: ModelTypeEnum.rerank } },
}),
)
const { refetch: refetchSpeech2textModelList } = useQuery(
consoleQuery.workspaces.current.models.modelTypes.byModelType.get.queryOptions({
input: { params: { model_type: ModelTypeEnum.speech2text } },
}),
)
const { refetch: refetchTTSModelList } = useQuery(
consoleQuery.workspaces.current.models.modelTypes.byModelType.get.queryOptions({
input: { params: { model_type: ModelTypeEnum.tts } },
}),
)
const invalidateDefaultModel = useInvalidateDefaultModel()
const { refreshModelProviders } = useProviderContext()
const invalidateAllToolProviders = useInvalidateAllToolProviders()
const invalidateAllBuiltInTools = useInvalidateAllBuiltInTools()
const invalidateAllDataSources = useInvalidDataSourceList()
const invalidateDataSourceListAuth = useInvalidDataSourceListAuth()
const invalidateStrategyProviders = useInvalidateStrategyProviders()
const invalidateAllTriggerPlugins = useInvalidateAllTriggerPlugins()
const invalidateRAGRecommendedPlugins = useInvalidateRAGRecommendedPlugins()
return {
refreshPluginList: (
manifest?: PluginManifestInMarket | Plugin | PluginDeclaration | PluginCategoryPayload | null,
refreshAllType?: boolean,
) => {
// installed list
if (refreshAllType || !manifest) invalidateInstalledPluginList()
else invalidateInstalledPluginList(manifest.category)
invalidateCheckInstalled()
// tool page, tool select
if ((manifest && PluginCategoryEnum.tool.includes(manifest.category)) || refreshAllType) {
invalidateAllToolProviders()
invalidateAllBuiltInTools()
invalidateRAGRecommendedPlugins('tool')
// TODO: update suggested tools. It's a function in hook useMarketplacePlugins,handleUpdatePlugins
}
if ((manifest && PluginCategoryEnum.trigger.includes(manifest.category)) || refreshAllType)
invalidateAllTriggerPlugins()
if (
(manifest && PluginCategoryEnum.datasource.includes(manifest.category)) ||
refreshAllType
) {
invalidateAllDataSources()
invalidateDataSourceListAuth()
}
// model select
if ((manifest && PluginCategoryEnum.model.includes(manifest.category)) || refreshAllType) {
refreshModelProviders()
refetchLLMModelList()
refetchEmbeddingModelList()
refetchRerankModelList()
refetchSpeech2textModelList()
refetchTTSModelList()
SYSTEM_MODEL_TYPES.forEach((type) => invalidateDefaultModel(type))
}
// agent select
if ((manifest && PluginCategoryEnum.agent.includes(manifest.category)) || refreshAllType)
invalidateStrategyProviders()
},
}
}
export default useRefreshPluginList