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')}
{expandedKeys.includes('example') &&
}
>
)
}
export default MemoryExtractionEngine