import type { FC } from 'react' import type { NodeProps } from '../../types' import type { ToolIconProps } from './components/tool-icon' import type { AgentNodeType } from './types' import { memo, useMemo } from 'react' import { useTranslation } from 'react-i18next' import { FormTypeEnum } from '@/app/components/header/account-setting/model-provider-page/declarations' import { useRenderI18nObject } from '@/hooks/use-i18n' import { Group, GroupLabel } from '../_base/components/group' import { SettingItem } from '../_base/components/setting-item' import { ModelBar } from './components/model-bar' import { ToolIcon } from './components/tool-icon' import useConfig from './use-config' 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, i) => { if (param.type === FormTypeEnum.toolSelector) { const field = param.name const value = inputs.agent_parameters?.[field]?.value if (value) { tools.push({ id: `${param.name}-${i}`, 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, idx) => { tools.push({ id: `${param.name}-${idx}`, providerName: item.provider_name, }) }) } } }) return tools }, [currentStrategy?.parameters, inputs.agent_parameters]) return (
{inputs.agent_strategy_name ? ( {inputs.agent_strategy_label} ) : } {models.length > 0 && ( {t('nodes.agent.model', { ns: 'workflow' })} )} > {models.map((model) => { return ( ) })} )} {tools.length > 0 && ( {t('nodes.agent.toolbox', { ns: 'workflow' })} )} >
{tools.map((tool, i) => )}
)}
) } AgentNode.displayName = 'AgentNode' export default memo(AgentNode)