/* * @Author: ZhaoYing * @Date: 2026-02-03 17:30:02 * @Last Modified by: ZhaoYing * @Last Modified time: 2026-03-26 15:45:42 */ /** * Memory Extraction Engine Configuration Page * Configures entity deduplication, disambiguation, semantic anchoring, and pruning * Supports real-time testing with example data */ import { type FC, useState, useEffect } from 'react' import { useTranslation } from 'react-i18next' import { useParams } from 'react-router-dom' import { Row, Col, Space, Select, InputNumber, App, Form, Input, Flex, Tooltip, Divider } 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 { configList, modelConfigList } from './constant' import Result from './components/Result' import SwitchFormItem from '@/components/FormItem/SwitchFormItem' import ModelSelect from '@/components/ModelSelect' import RbSlider from '@/components/RbSlider'; import DescWrapper from '@/components/FormItem/DescWrapper' import LabelWrapper from '@/components/FormItem/LabelWrapper' /** Available configuration section keys */ const keys = [ 'modelConfig', 'storageLayerModule', 'arrangementLayerModule' ] /** * Configuration description component */ const Desc: FC<{ config: Variable, className?: string; onlyMeaning?: boolean; }> = ({ config, className, onlyMeaning = false}) => { const { t } = useTranslation(); return (
{!onlyMeaning && {config.variableName && {t('memoryExtractionEngine.variableName')}: {config.variableName}} {config.control && {t('memoryExtractionEngine.control')}: {t(`memoryExtractionEngine.${config.control}`)}} {config.type && {t('memoryExtractionEngine.type')}: {config.type}} }
) } const MemoryExtractionEngine: FC = () => { const { t } = useTranslation(); const { message } = App.useApp(); const { id } = useParams() const [expandedKeys, setExpandedKeys] = useState(keys) const [form] = Form.useForm() const values = Form.useWatch([], form) const [loading, setLoading] = useState(false) const [iterationPeriodDisabled, setIterationPeriodDisabled] = useState(false) useEffect(() => { if (values?.reflexion_range === 'database') { form.setFieldValue('iteration_period', 24) setIterationPeriodDisabled(true) } else { setIterationPeriodDisabled(false) } }, [values]) /** Fetch configuration data */ 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), } form.setFieldsValue(initialValues) }) } useEffect(() => { if (id) { getConfig() } }, [id]) /** Toggle section expansion */ const handleExpand = (key: string) => { const newKeys = expandedKeys.includes(key) ? expandedKeys.filter(item => item !== key) : [...expandedKeys, key] setExpandedKeys(newKeys) } /** Save configuration */ const handleSave = () => { if (!id) { return } setLoading(true) updateMemoryExtractionConfig({ ...values, config_id: id, }).then(() => { message.success(t('common.saveSuccess')) }) .finally(() => { setLoading(false) }) } return ( <> {t('memoryExtractionEngine.title')}
handleExpand('example')} > {t('memoryExtractionEngine.example')}
{expandedKeys.includes('example') &&
}
{/* */} {modelConfigList.map(config => (
))}
{/* */}
{configList.map((item, index) => ( {item.data.map(vo => ( {t(`memoryExtractionEngine.${vo.title}`)}
{vo.list.map(config => (
{config.control === 'button' ? } />} className="rb:mt-6" /> : <> {config.meaning ? {t(`memoryExtractionEngine.${config.label}`)} {t('memoryExtractionEngine.Meaning')}: {t(`memoryExtractionEngine.${config.meaning}`)} {config.label === 'intelligentSemanticPruningThreshold' && <> {t('memoryExtractionEngine.loose')} ← → {t('memoryExtractionEngine.strict')} 0.0
|
{t('memoryExtractionEngine.onlyDelete')} 0.3
|
{t('memoryExtractionEngine.semanticFiltering')} 0.6
|
{t('memoryExtractionEngine.sceneFocus')} 0.9
} } >
:
{t(`memoryExtractionEngine.${config.label}`)}
} {config.control !== 'text' && } />} {config.control === 'select' ? : null } }
))}
))}
))}
) } export default MemoryExtractionEngine