import { type FC, memo, useMemo } from 'react' import type { NodeProps } from '../../types' import type { AgentNodeType } from './types' import { SettingItem } from '../_base/components/setting-item' import { Group, GroupLabel } from '../_base/components/group' import type { ToolIconProps } from './components/tool-icon' import { ToolIcon } from './components/tool-icon' import useConfig from './use-config' import { useTranslation } from 'react-i18next' import { FormTypeEnum } from '@/app/components/header/account-setting/model-provider-page/declarations' import { useRenderI18nObject } from '@/hooks/use-i18n' import { ModelBar } from './components/model-bar' const AgentNode: FC> = (props) => { const { inputs, currentStrategy, currentStrategyStatus, pluginDetail } = useConfig(props.id, props.data) const renderI18nObject = useRenderI18nObject() const { t } = useTranslation() const models = useMemo(() => { if (!inputs) return [] // if selected, show in node // if required and not selected, show empty selector // if not required and not selected, show nothing const models = currentStrategy?.parameters .filter(param => param.type === FormTypeEnum.modelSelector) .reduce((acc, param) => { const item = inputs.agent_parameters?.[param.name]?.value if (!item) { if (param.required) { acc.push({ param: param.name }) return acc } else { return acc } } acc.push({ provider: item.provider, model: item.model, param: param.name }) return acc }, [] as Array<{ param: string } | { provider: string, model: string, param: string }>) || [] return models }, [currentStrategy, inputs]) const tools = useMemo(() => { const tools: Array = [] currentStrategy?.parameters.forEach((param) => { if (param.type === FormTypeEnum.toolSelector) { const field = param.name const value = inputs.agent_parameters?.[field]?.value if (value) { tools.push({ providerName: value.provider_name as any, }) } } if (param.type === FormTypeEnum.multiToolSelector) { const field = param.name const value = inputs.agent_parameters?.[field]?.value if (value) { (value as unknown as any[]).forEach((item) => { tools.push({ providerName: item.provider_name, }) }) } } }) return tools }, [currentStrategy?.parameters, inputs.agent_parameters]) return
{inputs.agent_strategy_name ? {inputs.agent_strategy_label} : } {models.length > 0 && {t('workflow.nodes.agent.model')} } > {models.map((model) => { return })} } {tools.length > 0 && {t('workflow.nodes.agent.toolbox')} }>
{tools.map(tool => )}
}
} AgentNode.displayName = 'AgentNode' export default memo(AgentNode)