balibabu
feat: fixed an issue where the default value for temperature was not set when creating a new chat and install remark-gfm so that the markdown table can be displayed (#124)
79f4fcc
import { | |
LlmModelType, | |
ModelVariableType, | |
settledModelVariableMap, | |
} from '@/constants/knowledge'; | |
import { Divider, Flex, Form, InputNumber, Select, Slider, Switch } from 'antd'; | |
import classNames from 'classnames'; | |
import { useEffect } from 'react'; | |
import { ISegmentedContentProps } from '../interface'; | |
import { useFetchLlmList, useSelectLlmOptions } from '@/hooks/llmHooks'; | |
import { variableEnabledFieldMap } from '../constants'; | |
import styles from './index.less'; | |
const ModelSetting = ({ show, form }: ISegmentedContentProps) => { | |
const parameterOptions = Object.values(ModelVariableType).map((x) => ({ | |
label: x, | |
value: x, | |
})); | |
const modelOptions = useSelectLlmOptions(); | |
const handleParametersChange = (value: ModelVariableType) => { | |
const variable = settledModelVariableMap[value]; | |
form.setFieldsValue({ llm_setting: variable }); | |
}; | |
useEffect(() => { | |
const values = Object.keys(variableEnabledFieldMap).reduce< | |
Record<string, boolean> | |
>((pre, field) => { | |
pre[field] = true; | |
return pre; | |
}, {}); | |
form.setFieldsValue(values); | |
}, [form]); | |
useFetchLlmList(LlmModelType.Chat); | |
return ( | |
<section | |
className={classNames({ | |
[styles.segmentedHidden]: !show, | |
})} | |
> | |
<Form.Item | |
label="Model" | |
name="llm_id" | |
rules={[{ required: true, message: 'Please select!' }]} | |
> | |
<Select options={modelOptions} showSearch /> | |
</Form.Item> | |
<Divider></Divider> | |
<Form.Item | |
label="Parameters" | |
name="parameters" | |
initialValue={ModelVariableType.Precise} | |
// rules={[{ required: true, message: 'Please input!' }]} | |
> | |
<Select<ModelVariableType> | |
options={parameterOptions} | |
onChange={handleParametersChange} | |
/> | |
</Form.Item> | |
<Form.Item label="Temperature" tooltip={'xx'}> | |
<Flex gap={20} align="center"> | |
<Form.Item | |
name={'temperatureEnabled'} | |
valuePropName="checked" | |
noStyle | |
> | |
<Switch size="small" /> | |
</Form.Item> | |
<Flex flex={1}> | |
<Form.Item | |
name={['llm_setting', 'temperature']} | |
noStyle | |
rules={[{ required: true, message: 'Temperature is required' }]} | |
> | |
<Slider className={styles.variableSlider} max={1} step={0.01} /> | |
</Form.Item> | |
</Flex> | |
<Form.Item | |
name={['llm_setting', 'temperature']} | |
noStyle | |
rules={[{ required: true, message: 'Temperature is required' }]} | |
> | |
<InputNumber | |
className={styles.sliderInputNumber} | |
max={1} | |
min={0} | |
step={0.01} | |
/> | |
</Form.Item> | |
</Flex> | |
</Form.Item> | |
<Form.Item label="Top P" tooltip={'xx'}> | |
<Flex gap={20} align="center"> | |
<Form.Item name={'topPEnabled'} valuePropName="checked" noStyle> | |
<Switch size="small" /> | |
</Form.Item> | |
<Flex flex={1}> | |
<Form.Item | |
name={['llm_setting', 'top_p']} | |
noStyle | |
rules={[{ required: true, message: 'Top_p is required' }]} | |
> | |
<Slider className={styles.variableSlider} max={1} step={0.01} /> | |
</Form.Item> | |
</Flex> | |
<Form.Item | |
name={['llm_setting', 'top_p']} | |
noStyle | |
rules={[{ required: true, message: 'Top_p is required' }]} | |
> | |
<InputNumber | |
className={styles.sliderInputNumber} | |
max={1} | |
min={0} | |
step={0.01} | |
/> | |
</Form.Item> | |
</Flex> | |
</Form.Item> | |
<Form.Item label="Presence Penalty" tooltip={'xx'}> | |
<Flex gap={20} align="center"> | |
<Form.Item | |
name={'presencePenaltyEnabled'} | |
valuePropName="checked" | |
noStyle | |
> | |
<Switch size="small" /> | |
</Form.Item> | |
<Flex flex={1}> | |
<Form.Item | |
name={['llm_setting', 'presence_penalty']} | |
noStyle | |
rules={[ | |
{ required: true, message: 'Presence Penalty is required' }, | |
]} | |
> | |
<Slider className={styles.variableSlider} max={1} step={0.01} /> | |
</Form.Item> | |
</Flex> | |
<Form.Item | |
name={['llm_setting', 'presence_penalty']} | |
noStyle | |
rules={[ | |
{ required: true, message: 'Presence Penalty is required' }, | |
]} | |
> | |
<InputNumber | |
className={styles.sliderInputNumber} | |
max={1} | |
min={0} | |
step={0.01} | |
/> | |
</Form.Item> | |
</Flex> | |
</Form.Item> | |
<Form.Item label="Frequency Penalty" tooltip={'xx'}> | |
<Flex gap={20} align="center"> | |
<Form.Item | |
name={'frequencyPenaltyEnabled'} | |
valuePropName="checked" | |
noStyle | |
> | |
<Switch size="small" /> | |
</Form.Item> | |
<Flex flex={1}> | |
<Form.Item | |
name={['llm_setting', 'frequency_penalty']} | |
noStyle | |
rules={[ | |
{ required: true, message: 'Frequency Penalty is required' }, | |
]} | |
> | |
<Slider className={styles.variableSlider} max={1} step={0.01} /> | |
</Form.Item> | |
</Flex> | |
<Form.Item | |
name={['llm_setting', 'frequency_penalty']} | |
noStyle | |
rules={[ | |
{ required: true, message: 'Frequency Penalty is required' }, | |
]} | |
> | |
<InputNumber | |
className={styles.sliderInputNumber} | |
max={1} | |
min={0} | |
step={0.01} | |
/> | |
</Form.Item> | |
</Flex> | |
</Form.Item> | |
<Form.Item label="Max Tokens" tooltip={'xx'}> | |
<Flex gap={20} align="center"> | |
<Form.Item name={'maxTokensEnabled'} valuePropName="checked" noStyle> | |
<Switch size="small" /> | |
</Form.Item> | |
<Flex flex={1}> | |
<Form.Item | |
name={['llm_setting', 'max_tokens']} | |
noStyle | |
rules={[{ required: true, message: 'Max Tokens is required' }]} | |
> | |
<Slider className={styles.variableSlider} max={2048} /> | |
</Form.Item> | |
</Flex> | |
<Form.Item | |
name={['llm_setting', 'max_tokens']} | |
noStyle | |
rules={[{ required: true, message: 'Max Tokens is required' }]} | |
> | |
<InputNumber | |
className={styles.sliderInputNumber} | |
max={2048} | |
min={0} | |
/> | |
</Form.Item> | |
</Flex> | |
</Form.Item> | |
</section> | |
); | |
}; | |
export default ModelSetting; | |