import { type FC, useState, useEffect } from 'react' import { useTranslation } from 'react-i18next' import { useParams } from 'react-router-dom' import { Row, Col, Space, Switch, Select, InputNumber, Slider, App, Form } from 'antd' import clsx from 'clsx' import Card from './components/Card' import type { ConfigForm, Variable } from './types' import { getMemoryExtractionConfig, updateMemoryExtractionConfig } from '@/api/memory' import Markdown from '@/components/Markdown' import { getModelList } from '@/api/models'; import type { Model } from '@/views/ModelManagement/types' import { configList } from './constant' import Result from './components/Result' import SwitchFormItem from '@/components/FormItem/SwitchFormItem' const keys = [ // 'example', 'storageLayerModule', 'arrangementLayerModule' ] const ConfigDesc: FC<{ config: Variable, className?: string }> = ({config, className}) => { const { t } = useTranslation(); return (
{config.variableName && {t('memoryExtractionEngine.variableName')}: {config.variableName}} {config.control && {t('memoryExtractionEngine.control')}: {t(`memoryExtractionEngine.${config.control}`)}} {config.type && {t('memoryExtractionEngine.type')}: {config.type}} {config.meaning &&
{t('memoryExtractionEngine.Meaning')}: {t(`memoryExtractionEngine.${config.meaning}`)}
}
) } const MemoryExtractionEngine: FC = () => { const { t } = useTranslation(); const { message } = App.useApp(); const { id } = useParams() const [expandedKeys, setExpandedKeys] = useState(keys) const [form] = Form.useForm() const [modelForm] = Form.useForm() const modelValues = Form.useWatch([], modelForm) const values = Form.useWatch([], form) const [loading, setLoading] = useState(false) const [iterationPeriodDisabled, setIterationPeriodDisabled] = useState(false) const [modelList, setModelList] = useState([]) useEffect(() => { if (values?.reflexion_range === 'database') { form.setFieldValue('iteration_period', 24) setIterationPeriodDisabled(true) } else { setIterationPeriodDisabled(false) } }, [values]) const getModels = () => { getModelList({ type: 'llm,chat', pagesize: 100, page: 1 }) .then(res => { const response = res as { items: Model[] } setModelList(response.items) }) } const getConfig = () => { if (!id) { return } getMemoryExtractionConfig(id).then(res => { const response = res as ConfigForm const initialValues: ConfigForm = { ...response, t_name_strict: Number(response.t_name_strict || 0), t_type_strict: Number(response.t_type_strict || 0), t_overall: Number(response.t_overall || 0), } // setData(initialValues) form.setFieldsValue(initialValues) modelForm.setFieldsValue({ llm_id: response.llm_id, }) }) } useEffect(() => { if (id) { getConfig() getModels() } }, [id]) const handleExpand = (key: string) => { const newKeys = expandedKeys.includes(key) ? expandedKeys.filter(item => item !== key) : [...expandedKeys, key] setExpandedKeys(newKeys) } const handleSave = () => { if (!id) { return } console.log('values', values) setLoading(true) updateMemoryExtractionConfig({ ...values, ...modelValues, config_id: id, }).then(() => { message.success(t('common.saveSuccess')) }) .finally(() => { setLoading(false) }) } return ( <>
{t('memoryExtractionEngine.title')}
{t('memoryExtractionEngine.subTitle')}
({ ...item, label: t(`memoryExtractionEngine.${item.label}`) })) : []} /> } {config.control === 'slider' && <>
-{t(`memoryExtractionEngine.${config.label}`)}
{config.min || 0} {t('memoryExtractionEngine.CurrentValue')}: {values?.[config.variableName as keyof ConfigForm]}
} {config.control === 'inputNumber' && <>
-{t(`memoryExtractionEngine.${config.label}`)}
} ))} ))} ))}
) } export default MemoryExtractionEngine