import { type FC, useEffect, useState, useRef, type Key } from 'react' import { useTranslation } from 'react-i18next' import { useParams } from 'react-router-dom'; import Card from './components/Card' import { Form, Space, Row, Col, Button, Flex, App } from 'antd' import type { DefaultOptionType } from 'antd/es/select' import Tag, { type TagProps } from './components/Tag' import CustomSelect from '@/components/CustomSelect'; import { getApplicationListUrl, getMultiAgentConfig, saveMultiAgentConfig } from '@/api/application'; import type { Config, SubAgentModalRef, ChatData, SubAgentItem } from './types' import Chat from './components/Chat' import RbCard from '@/components/RbCard/Card' import SubAgentModal from './components/SubAgentModal' import Empty from '@/components/Empty' const tagColors = ['processing', 'warning', 'default'] const MAX_LENGTH = 5; const Cluster: FC<{application: SubAgentItem}> = ({application}) => { const { t } = useTranslation() const { message } = App.useApp() const [form] = Form.useForm() const { id } = useParams() const subAgentModalRef = useRef(null) const [data, setData] = useState(null) const values = Form.useWatch([], form) const [subAgents, setSubAgents] = useState([]) const [chatList, setChatList] = useState([ { list: [] }, ]) const handleSave = (flag = true) => { const params = { ...values, sub_agents: (subAgents || []).map(item => ({ ...item, priority: 1, })) } return new Promise((resolve, reject) => { form.validateFields().then(() => { saveMultiAgentConfig(id as string, params) .then(() => { if (flag) { message.success(t('common.saveSuccess')) } resolve(true) }) .catch(error => { reject(error) }) }) .catch(error => { reject(error) }) }) } useEffect(() => { getData() }, [id]) useEffect(() => { if (application) { form.setFieldsValue({ name: application.name, }) } }, [application]) const getData = () => { if (!id) { return } getMultiAgentConfig(id as string).then(res => { const response = res as Config setData(response) form.setFieldsValue({ ...response, }) setSubAgents(response.sub_agents || []) }) } const handleSubAgentModal = (agent?: SubAgentItem) => { subAgentModalRef.current?.handleOpen(agent) } const refreshSubAgents = (agent: SubAgentItem) => { // setSubAgents(subAgents) const index = subAgents.findIndex(item => item.agent_id === agent.agent_id) const newSubAgents = [...subAgents] if (index === -1) { if (subAgents.length >= MAX_LENGTH) { message.warning(t('application.subAgentMaxLength', {maxLength: MAX_LENGTH})) return } setSubAgents([...newSubAgents, agent]) } else { newSubAgents[index] = agent setSubAgents(newSubAgents) } } const handleDeleteSubAgent = (agent: SubAgentItem) => { setSubAgents(prev => prev.filter(item => item.agent_id !== agent.agent_id)) } const handleChange = (value: Key, option?: DefaultOptionType | DefaultOptionType[] | undefined) => { if (option && !Array.isArray(option)) { form.setFieldsValue({ master_agent_name: option.children }) } } return (
{t('application.agentName')} } className="rb:mb-[20px]!" rules={[{ required: true, message: t('common.pleaseSelect') }]} >
{t('application.added')}: {subAgents.length}/{MAX_LENGTH}
{subAgents.length === 0 ? : subAgents.map((agent, index) => (
{agent.name?.[0]}
{agent.name} {agent.role &&
{agent.role || '-'}
} {agent.capabilities && {agent.capabilities.map((tag, tagIndex) => {tag})}}
handleSubAgentModal(agent)} >
handleDeleteSubAgent(agent)} >
))}
) } export default Cluster