From 17dfb3654f7f6c2ad6f16facd87919759b0cbc0e Mon Sep 17 00:00:00 2001 From: Yi Date: Wed, 8 Jan 2025 14:45:03 +0800 Subject: [PATCH] feat: add version incompatible case --- .../model-provider-page/model-icon/index.tsx | 6 +- .../agent-model-trigger.tsx | 9 ++- .../status-indicators.tsx | 72 +++++++++++++------ .../deprecated-model-trigger.tsx | 4 +- 4 files changed, 66 insertions(+), 25 deletions(-) diff --git a/web/app/components/header/account-setting/model-provider-page/model-icon/index.tsx b/web/app/components/header/account-setting/model-provider-page/model-icon/index.tsx index e657106ab8..1139e5e030 100644 --- a/web/app/components/header/account-setting/model-provider-page/model-icon/index.tsx +++ b/web/app/components/header/account-setting/model-provider-page/model-icon/index.tsx @@ -13,12 +13,14 @@ type ModelIconProps = { modelName?: string className?: string isDeprecated?: boolean + isInModelList?: boolean } const ModelIcon: FC = ({ provider, className, modelName, isDeprecated = false, + isInModelList = false, }) => { const language = useLanguage() if (provider?.provider.includes('openai') && modelName?.includes('gpt-4o')) @@ -26,7 +28,7 @@ const ModelIcon: FC = ({ if (provider?.provider.includes('openai') && modelName?.startsWith('gpt-4')) return
- if (provider?.icon_small) { + if (provider?.icon_small && isInModelList) { return (
= ({ return (
diff --git a/web/app/components/header/account-setting/model-provider-page/model-parameter-modal/agent-model-trigger.tsx b/web/app/components/header/account-setting/model-provider-page/model-parameter-modal/agent-model-trigger.tsx index 6cc21699c4..f38440837c 100644 --- a/web/app/components/header/account-setting/model-provider-page/model-parameter-modal/agent-model-trigger.tsx +++ b/web/app/components/header/account-setting/model-provider-page/model-parameter-modal/agent-model-trigger.tsx @@ -26,6 +26,7 @@ import cn from '@/utils/classnames' import { useProviderContext } from '@/context/provider-context' import { RiEqualizer2Line } from '@remixicon/react' import { fetchPluginInfoFromMarketPlace } from '@/service/plugins' +import { fetchModelProviderModelList } from '@/service/common' export type AgentModelTriggerProps = { open?: boolean @@ -67,6 +68,7 @@ const AgentModelTrigger: FC = ({ const [pluginInfo, setPluginInfo] = useState(null) const [isPluginChecked, setIsPluginChecked] = useState(false) const [installed, setInstalled] = useState(false) + const [inModelList, setInModelList] = useState(false) const invalidateInstalledPluginList = useInvalidateInstalledPluginList() const handleOpenModal = useModelModalHandler() useEffect(() => { @@ -77,6 +79,9 @@ const AgentModelTrigger: FC = ({ const name = parts[1] try { const pluginInfo = await fetchPluginInfoFromMarketPlace({ org, name }) + const modelsData = await fetchModelProviderModelList(`/workspaces/current/model-providers/${providerName}/models`) + if (modelId && modelsData.data.find(item => item.model === modelId)) + setInModelList(true) if (pluginInfo.data.plugin.category === PluginType.model) setPluginInfo(pluginInfo.data.plugin) } @@ -89,7 +94,7 @@ const AgentModelTrigger: FC = ({ setIsPluginChecked(true) } })() - }, [providerName, modelProvider]) + }, [providerName, modelProvider, modelId]) if (modelId && !isPluginChecked) return null @@ -107,6 +112,7 @@ const AgentModelTrigger: FC = ({ provider={currentProvider || modelProvider} modelName={currentModel?.model || modelId} isDeprecated={hasDeprecated} + isInModelList={inModelList} /> = ({ { +const StatusIndicators = ({ needsConfiguration, modelProvider, inModelList, disabled, pluginInfo, t }: StatusIndicatorsProps) => { + const renderTooltipContent = (title: string, description?: string, linkText?: string, linkHref?: string) => { + return ( +
+
{title}
+ {description && ( +
+ {description} +
+ )} + {linkText && linkHref && ( +
+ { + e.stopPropagation() + }} + > + {linkText} + +
+ )} +
+ ) + } return ( <> - {!needsConfiguration && modelProvider && disabled && ( + {/* plugin installed and model is in model list but disabled */} + {!needsConfiguration && modelProvider && disabled && inModelList && ( )} + {/* plugin installed from github/local and model is not in model list */} + { + modelProvider && !inModelList && ( + + + + ) + } + {/* plugin not installed and not in marketplace */} {!modelProvider && !pluginInfo && ( -
{t('workflow.nodes.agent.modelNotInMarketplace.title')}
-
- {t('workflow.nodes.agent.modelNotInMarketplace.desc')} -
-
- { - e.stopPropagation() - }} - > - {t('workflow.nodes.agent.linkToPlugin')} - -
-
- } + popupContent={renderTooltipContent( + t('workflow.nodes.agent.modelNotInMarketplace.title'), + t('workflow.nodes.agent.modelNotInMarketplace.desc'), + t('workflow.nodes.agent.linkToPlugin'), + '/plugins', + )} asChild={false} needsDelay > diff --git a/web/app/components/header/account-setting/model-provider-page/model-selector/deprecated-model-trigger.tsx b/web/app/components/header/account-setting/model-provider-page/model-selector/deprecated-model-trigger.tsx index ce40ab7b22..207e0a7eaf 100644 --- a/web/app/components/header/account-setting/model-provider-page/model-selector/deprecated-model-trigger.tsx +++ b/web/app/components/header/account-setting/model-provider-page/model-selector/deprecated-model-trigger.tsx @@ -22,11 +22,11 @@ const ModelTrigger: FC = ({ return (