import SimilaritySlider from '@/components/similarity-slider'; import { DeleteOutlined, QuestionCircleOutlined } from '@ant-design/icons'; import { Button, Col, Divider, Form, Input, Row, Switch, Table, TableProps, Tooltip, } from 'antd'; import classNames from 'classnames'; import { ForwardedRef, forwardRef, useEffect, useImperativeHandle, useState, } from 'react'; import { v4 as uuid } from 'uuid'; import { VariableTableDataType as DataType, IPromptConfigParameters, ISegmentedContentProps, } from '../interface'; import { EditableCell, EditableRow } from './editable-cell'; import Rerank from '@/components/rerank'; import TopNItem from '@/components/top-n-item'; import { useTranslate } from '@/hooks/common-hooks'; import { useSelectPromptConfigParameters } from '../hooks'; import styles from './index.less'; const PromptEngine = ( { show }: ISegmentedContentProps, ref: ForwardedRef>, ) => { const [dataSource, setDataSource] = useState([]); const parameters = useSelectPromptConfigParameters(); const { t } = useTranslate('chat'); const components = { body: { row: EditableRow, cell: EditableCell, }, }; const handleRemove = (key: string) => () => { const newData = dataSource.filter((item) => item.key !== key); setDataSource(newData); }; const handleSave = (row: DataType) => { const newData = [...dataSource]; const index = newData.findIndex((item) => row.key === item.key); const item = newData[index]; newData.splice(index, 1, { ...item, ...row, }); setDataSource(newData); }; const handleAdd = () => { setDataSource((state) => [ ...state, { key: uuid(), variable: '', optional: true, }, ]); }; const handleOptionalChange = (row: DataType) => (checked: boolean) => { const newData = [...dataSource]; const index = newData.findIndex((item) => row.key === item.key); const item = newData[index]; newData.splice(index, 1, { ...item, optional: checked, }); setDataSource(newData); }; useImperativeHandle( ref, () => { return dataSource .filter((x) => x.variable.trim() !== '') .map((x) => ({ key: x.variable, optional: x.optional })); }, [dataSource], ); const columns: TableProps['columns'] = [ { title: t('key'), dataIndex: 'variable', key: 'variable', onCell: (record: DataType) => ({ record, editable: true, dataIndex: 'variable', title: 'key', handleSave, }), }, { title: t('optional'), dataIndex: 'optional', key: 'optional', width: 40, align: 'center', render(text, record) { return ( ); }, }, { title: t('operation'), dataIndex: 'operation', width: 30, key: 'operation', align: 'center', render(_, record) { return ; }, }, ]; useEffect(() => { setDataSource(parameters); }, [parameters]); return (
{dataSource.length > 0 && ( styles.editableRow} /> )} ); }; export default forwardRef(PromptEngine);