import FieldWrapper from '@/components/seal-form/field-wrapper'; import SealInput from '@/components/seal-form/seal-input'; import SealSelect from '@/components/seal-form/seal-select'; import { INPUT_WIDTH } from '@/constants'; import { InfoCircleOutlined } from '@ant-design/icons'; import { useIntl } from '@umijs/max'; import { Form, InputNumber, Slider, Tooltip } from 'antd'; import _ from 'lodash'; import { memo, useCallback, useEffect, useId, useState } from 'react'; import CustomLabelStyles from '../style/custom-label.less'; type ParamsSettingsFormProps = { seed?: number; stop?: number; temperature?: number; top_p?: number; max_tokens?: number; model?: string; }; type ParamsSettingsProps = { selectedModel?: string; showModelSelector?: boolean; params?: ParamsSettingsFormProps; model?: string; modelList: Global.BaseOption[]; onValuesChange?: (changeValues: any, value: Record) => void; setParams: (params: any) => void; globalParams?: ParamsSettingsFormProps; }; const METAKEYS: Record = { seed: 'seed', stop: 'stop', temperature: 'temperature', top_p: 'top_p', n_slot_ctx: 'max_tokens', max_model_len: 'max_tokens' }; const ParamsSettings: React.FC = ({ selectedModel, setParams, globalParams, onValuesChange, modelList, showModelSelector = true }) => { const intl = useIntl(); const initialValues = { seed: null, stop: null, temperature: 1, top_p: 1, max_tokens: 1024, ...globalParams }; const [form] = Form.useForm(); const formId = useId(); const [metaData, setMetaData] = useState>({}); const [firstLoad, setFirstLoad] = useState(true); const handleOnFinish = (values: any) => { console.log('handleOnFinish', values); }; const handleOnFinishFailed = (errorInfo: any) => { console.log('handleOnFinishFailed', errorInfo); }; const handleValuesChange = useCallback( (changedValues: any, allValues: any) => { setParams?.(allValues); onValuesChange?.(changedValues, allValues); }, [onValuesChange, setParams] ); const handleFieldValueChange = useCallback( (val: any, field: string) => { const values = form.getFieldsValue(); form.setFieldsValue({ ...values, [field]: val }); setParams({ ...values, [field]: val }); onValuesChange?.( { [field]: val }, { ...values, [field]: val } ); }, [form, setParams, onValuesChange] ); const handleModelChange = (val: string) => { const model = _.find(modelList, { value: val }); const modelMeta = model?.meta || {}; const modelMetaValue = _.pick(modelMeta, _.keys(METAKEYS)); const obj = Object.entries(METAKEYS).reduce((acc: any, [key, value]) => { const val = modelMetaValue[key]; if (val && _.hasIn(modelMetaValue, key)) { acc[value] = val; } return acc; }, {}); form.setFieldsValue(obj); setMetaData(obj); return obj; }; useEffect(() => { let model = selectedModel || ''; if (showModelSelector) { model = model || _.get(modelList, '[0].value'); } const modelMetaData = handleModelChange(model); const mergeData = _.merge({}, initialValues, modelMetaData); form.setFieldsValue({ ...mergeData, model: model }); setParams({ ...mergeData, model: model }); setFirstLoad(false); }, [modelList, showModelSelector, selectedModel]); useEffect(() => { if (!firstLoad) { form.setFieldsValue(globalParams); } }, [globalParams, firstLoad]); const renderLabel = (args: { field: string; label: string; description: string; }) => { return ( {args.description ? ( {args.label} ) : ( {args.label} )} handleFieldValueChange(val, args.field)} > ); }; return (
{showModelSelector && ( <>

{intl.formatMessage({ id: 'playground.model' })}

name="model" rules={[ { required: true, message: intl.formatMessage( { id: 'common.form.rule.select' }, { name: intl.formatMessage({ id: 'playground.model' }) } ) } ]} > )}

{intl.formatMessage({ id: 'playground.parameters' })}

name="temperature" rules={[{ required: false }]} > handleFieldValueChange(val, 'temperature')} > name="max_tokens" rules={[{ required: false }]} > handleFieldValueChange(val, 'max_tokens')} > name="top_p" rules={[{ required: false }]} > handleFieldValueChange(val, 'top_p')} > name="seed" rules={[{ required: false }]} > name="stop" rules={[{ required: false }]} normalize={(value) => { return value || null; }} >
); }; export default memo(ParamsSettings);