mirror of
https://git.mirrors.martin98.com/https://github.com/infiniflow/ragflow.git
synced 2025-06-30 00:35:10 +08:00
### What problem does this PR solve? fix: fixed the issue that ModelSetting could not be saved #614 ### Type of change - [x] Bug Fix (non-breaking change which fixes an issue)
This commit is contained in:
parent
674b3aeafd
commit
7059ec2298
@ -21,11 +21,11 @@ export interface LlmSetting {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export interface Variable {
|
export interface Variable {
|
||||||
frequency_penalty: number;
|
frequency_penalty?: number;
|
||||||
max_tokens: number;
|
max_tokens?: number;
|
||||||
presence_penalty: number;
|
presence_penalty?: number;
|
||||||
temperature: number;
|
temperature?: number;
|
||||||
top_p: number;
|
top_p?: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface IDialog {
|
export interface IDialog {
|
||||||
@ -38,7 +38,7 @@ export interface IDialog {
|
|||||||
kb_names: string[];
|
kb_names: string[];
|
||||||
language: string;
|
language: string;
|
||||||
llm_id: string;
|
llm_id: string;
|
||||||
llm_setting: LlmSetting;
|
llm_setting: Variable;
|
||||||
llm_setting_type: string;
|
llm_setting_type: string;
|
||||||
name: string;
|
name: string;
|
||||||
prompt_config: PromptConfig;
|
prompt_config: PromptConfig;
|
||||||
|
@ -181,6 +181,9 @@ const ChatConfigurationModal = ({
|
|||||||
key={key}
|
key={key}
|
||||||
show={key === value}
|
show={key === value}
|
||||||
form={form}
|
form={form}
|
||||||
|
{...(key === ConfigurationSegmented.ModelSetting
|
||||||
|
? { initialLlmSetting: initialDialog.llm_setting, visible }
|
||||||
|
: {})}
|
||||||
{...(key === ConfigurationSegmented.PromptEngine
|
{...(key === ConfigurationSegmented.PromptEngine
|
||||||
? { ref: promptEngineRef }
|
? { ref: promptEngineRef }
|
||||||
: {})}
|
: {})}
|
||||||
|
@ -11,10 +11,19 @@ import { ISegmentedContentProps } from '../interface';
|
|||||||
|
|
||||||
import { useTranslate } from '@/hooks/commonHooks';
|
import { useTranslate } from '@/hooks/commonHooks';
|
||||||
import { useFetchLlmList, useSelectLlmOptions } from '@/hooks/llmHooks';
|
import { useFetchLlmList, useSelectLlmOptions } from '@/hooks/llmHooks';
|
||||||
|
import { Variable } from '@/interfaces/database/chat';
|
||||||
import { variableEnabledFieldMap } from '../constants';
|
import { variableEnabledFieldMap } from '../constants';
|
||||||
import styles from './index.less';
|
import styles from './index.less';
|
||||||
|
|
||||||
const ModelSetting = ({ show, form }: ISegmentedContentProps) => {
|
const ModelSetting = ({
|
||||||
|
show,
|
||||||
|
form,
|
||||||
|
initialLlmSetting,
|
||||||
|
visible,
|
||||||
|
}: ISegmentedContentProps & {
|
||||||
|
initialLlmSetting?: Variable;
|
||||||
|
visible?: boolean;
|
||||||
|
}) => {
|
||||||
const { t } = useTranslate('chat');
|
const { t } = useTranslate('chat');
|
||||||
const parameterOptions = Object.values(ModelVariableType).map((x) => ({
|
const parameterOptions = Object.values(ModelVariableType).map((x) => ({
|
||||||
label: t(camelCase(x)),
|
label: t(camelCase(x)),
|
||||||
@ -29,14 +38,23 @@ const ModelSetting = ({ show, form }: ISegmentedContentProps) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const values = Object.keys(variableEnabledFieldMap).reduce<
|
if (visible) {
|
||||||
Record<string, boolean>
|
const values = Object.keys(variableEnabledFieldMap).reduce<
|
||||||
>((pre, field) => {
|
Record<string, boolean>
|
||||||
pre[field] = true;
|
>((pre, field) => {
|
||||||
return pre;
|
pre[field] =
|
||||||
}, {});
|
initialLlmSetting === undefined
|
||||||
form.setFieldsValue(values);
|
? true
|
||||||
}, [form]);
|
: !!initialLlmSetting[
|
||||||
|
variableEnabledFieldMap[
|
||||||
|
field as keyof typeof variableEnabledFieldMap
|
||||||
|
] as keyof Variable
|
||||||
|
];
|
||||||
|
return pre;
|
||||||
|
}, {});
|
||||||
|
form.setFieldsValue(values);
|
||||||
|
}
|
||||||
|
}, [form, initialLlmSetting, visible]);
|
||||||
|
|
||||||
useFetchLlmList(LlmModelType.Chat);
|
useFetchLlmList(LlmModelType.Chat);
|
||||||
|
|
||||||
@ -60,7 +78,6 @@ const ModelSetting = ({ show, form }: ISegmentedContentProps) => {
|
|||||||
name="parameters"
|
name="parameters"
|
||||||
tooltip={t('freedomTip')}
|
tooltip={t('freedomTip')}
|
||||||
initialValue={ModelVariableType.Precise}
|
initialValue={ModelVariableType.Precise}
|
||||||
// rules={[{ required: true, message: 'Please input!' }]}
|
|
||||||
>
|
>
|
||||||
<Select<ModelVariableType>
|
<Select<ModelVariableType>
|
||||||
options={parameterOptions}
|
options={parameterOptions}
|
||||||
@ -76,26 +93,33 @@ const ModelSetting = ({ show, form }: ISegmentedContentProps) => {
|
|||||||
>
|
>
|
||||||
<Switch size="small" />
|
<Switch size="small" />
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
<Flex flex={1}>
|
<Form.Item noStyle dependencies={['temperatureEnabled']}>
|
||||||
<Form.Item
|
{({ getFieldValue }) => {
|
||||||
name={['llm_setting', 'temperature']}
|
const disabled = !getFieldValue('temperatureEnabled');
|
||||||
noStyle
|
return (
|
||||||
rules={[{ required: true, message: t('temperatureMessage') }]}
|
<>
|
||||||
>
|
<Flex flex={1}>
|
||||||
<Slider className={styles.variableSlider} max={1} step={0.01} />
|
<Form.Item name={['llm_setting', 'temperature']} noStyle>
|
||||||
</Form.Item>
|
<Slider
|
||||||
</Flex>
|
className={styles.variableSlider}
|
||||||
<Form.Item
|
max={1}
|
||||||
name={['llm_setting', 'temperature']}
|
step={0.01}
|
||||||
noStyle
|
disabled={disabled}
|
||||||
rules={[{ required: true, message: t('temperatureMessage') }]}
|
/>
|
||||||
>
|
</Form.Item>
|
||||||
<InputNumber
|
</Flex>
|
||||||
className={styles.sliderInputNumber}
|
<Form.Item name={['llm_setting', 'temperature']} noStyle>
|
||||||
max={1}
|
<InputNumber
|
||||||
min={0}
|
className={styles.sliderInputNumber}
|
||||||
step={0.01}
|
max={1}
|
||||||
/>
|
min={0}
|
||||||
|
step={0.01}
|
||||||
|
disabled={disabled}
|
||||||
|
/>
|
||||||
|
</Form.Item>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}}
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
</Flex>
|
</Flex>
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
@ -104,26 +128,33 @@ const ModelSetting = ({ show, form }: ISegmentedContentProps) => {
|
|||||||
<Form.Item name={'topPEnabled'} valuePropName="checked" noStyle>
|
<Form.Item name={'topPEnabled'} valuePropName="checked" noStyle>
|
||||||
<Switch size="small" />
|
<Switch size="small" />
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
<Flex flex={1}>
|
<Form.Item noStyle dependencies={['topPEnabled']}>
|
||||||
<Form.Item
|
{({ getFieldValue }) => {
|
||||||
name={['llm_setting', 'top_p']}
|
const disabled = !getFieldValue('topPEnabled');
|
||||||
noStyle
|
return (
|
||||||
rules={[{ required: true, message: t('topPMessage') }]}
|
<>
|
||||||
>
|
<Flex flex={1}>
|
||||||
<Slider className={styles.variableSlider} max={1} step={0.01} />
|
<Form.Item name={['llm_setting', 'top_p']} noStyle>
|
||||||
</Form.Item>
|
<Slider
|
||||||
</Flex>
|
className={styles.variableSlider}
|
||||||
<Form.Item
|
max={1}
|
||||||
name={['llm_setting', 'top_p']}
|
step={0.01}
|
||||||
noStyle
|
disabled={disabled}
|
||||||
rules={[{ required: true, message: t('topPMessage') }]}
|
/>
|
||||||
>
|
</Form.Item>
|
||||||
<InputNumber
|
</Flex>
|
||||||
className={styles.sliderInputNumber}
|
<Form.Item name={['llm_setting', 'top_p']} noStyle>
|
||||||
max={1}
|
<InputNumber
|
||||||
min={0}
|
className={styles.sliderInputNumber}
|
||||||
step={0.01}
|
max={1}
|
||||||
/>
|
min={0}
|
||||||
|
step={0.01}
|
||||||
|
disabled={disabled}
|
||||||
|
/>
|
||||||
|
</Form.Item>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}}
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
</Flex>
|
</Flex>
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
@ -136,26 +167,36 @@ const ModelSetting = ({ show, form }: ISegmentedContentProps) => {
|
|||||||
>
|
>
|
||||||
<Switch size="small" />
|
<Switch size="small" />
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
<Flex flex={1}>
|
<Form.Item noStyle dependencies={['presencePenaltyEnabled']}>
|
||||||
<Form.Item
|
{({ getFieldValue }) => {
|
||||||
name={['llm_setting', 'presence_penalty']}
|
const disabled = !getFieldValue('presencePenaltyEnabled');
|
||||||
noStyle
|
return (
|
||||||
rules={[{ required: true, message: t('presencePenaltyMessage') }]}
|
<>
|
||||||
>
|
<Flex flex={1}>
|
||||||
<Slider className={styles.variableSlider} max={1} step={0.01} />
|
<Form.Item
|
||||||
</Form.Item>
|
name={['llm_setting', 'presence_penalty']}
|
||||||
</Flex>
|
noStyle
|
||||||
<Form.Item
|
>
|
||||||
name={['llm_setting', 'presence_penalty']}
|
<Slider
|
||||||
noStyle
|
className={styles.variableSlider}
|
||||||
rules={[{ required: true, message: t('presencePenaltyMessage') }]}
|
max={1}
|
||||||
>
|
step={0.01}
|
||||||
<InputNumber
|
disabled={disabled}
|
||||||
className={styles.sliderInputNumber}
|
/>
|
||||||
max={1}
|
</Form.Item>
|
||||||
min={0}
|
</Flex>
|
||||||
step={0.01}
|
<Form.Item name={['llm_setting', 'presence_penalty']} noStyle>
|
||||||
/>
|
<InputNumber
|
||||||
|
className={styles.sliderInputNumber}
|
||||||
|
max={1}
|
||||||
|
min={0}
|
||||||
|
step={0.01}
|
||||||
|
disabled={disabled}
|
||||||
|
/>
|
||||||
|
</Form.Item>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}}
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
</Flex>
|
</Flex>
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
@ -171,28 +212,39 @@ const ModelSetting = ({ show, form }: ISegmentedContentProps) => {
|
|||||||
>
|
>
|
||||||
<Switch size="small" />
|
<Switch size="small" />
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
<Flex flex={1}>
|
<Form.Item noStyle dependencies={['frequencyPenaltyEnabled']}>
|
||||||
<Form.Item
|
{({ getFieldValue }) => {
|
||||||
name={['llm_setting', 'frequency_penalty']}
|
const disabled = !getFieldValue('frequencyPenaltyEnabled');
|
||||||
noStyle
|
return (
|
||||||
rules={[
|
<>
|
||||||
{ required: true, message: t('frequencyPenaltyMessage') },
|
<Flex flex={1}>
|
||||||
]}
|
<Form.Item
|
||||||
>
|
name={['llm_setting', 'frequency_penalty']}
|
||||||
<Slider className={styles.variableSlider} max={1} step={0.01} />
|
noStyle
|
||||||
</Form.Item>
|
>
|
||||||
</Flex>
|
<Slider
|
||||||
<Form.Item
|
className={styles.variableSlider}
|
||||||
name={['llm_setting', 'frequency_penalty']}
|
max={1}
|
||||||
noStyle
|
step={0.01}
|
||||||
rules={[{ required: true, message: t('frequencyPenaltyMessage') }]}
|
disabled={disabled}
|
||||||
>
|
/>
|
||||||
<InputNumber
|
</Form.Item>
|
||||||
className={styles.sliderInputNumber}
|
</Flex>
|
||||||
max={1}
|
<Form.Item
|
||||||
min={0}
|
name={['llm_setting', 'frequency_penalty']}
|
||||||
step={0.01}
|
noStyle
|
||||||
/>
|
>
|
||||||
|
<InputNumber
|
||||||
|
className={styles.sliderInputNumber}
|
||||||
|
max={1}
|
||||||
|
min={0}
|
||||||
|
step={0.01}
|
||||||
|
disabled={disabled}
|
||||||
|
/>
|
||||||
|
</Form.Item>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}}
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
</Flex>
|
</Flex>
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
@ -201,25 +253,32 @@ const ModelSetting = ({ show, form }: ISegmentedContentProps) => {
|
|||||||
<Form.Item name={'maxTokensEnabled'} valuePropName="checked" noStyle>
|
<Form.Item name={'maxTokensEnabled'} valuePropName="checked" noStyle>
|
||||||
<Switch size="small" />
|
<Switch size="small" />
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
<Flex flex={1}>
|
<Form.Item noStyle dependencies={['maxTokensEnabled']}>
|
||||||
<Form.Item
|
{({ getFieldValue }) => {
|
||||||
name={['llm_setting', 'max_tokens']}
|
const disabled = !getFieldValue('maxTokensEnabled');
|
||||||
noStyle
|
|
||||||
rules={[{ required: true, message: t('maxTokensMessage') }]}
|
return (
|
||||||
>
|
<>
|
||||||
<Slider className={styles.variableSlider} max={2048} />
|
<Flex flex={1}>
|
||||||
</Form.Item>
|
<Form.Item name={['llm_setting', 'max_tokens']} noStyle>
|
||||||
</Flex>
|
<Slider
|
||||||
<Form.Item
|
className={styles.variableSlider}
|
||||||
name={['llm_setting', 'max_tokens']}
|
max={2048}
|
||||||
noStyle
|
disabled={disabled}
|
||||||
rules={[{ required: true, message: t('maxTokensMessage') }]}
|
/>
|
||||||
>
|
</Form.Item>
|
||||||
<InputNumber
|
</Flex>
|
||||||
className={styles.sliderInputNumber}
|
<Form.Item name={['llm_setting', 'max_tokens']} noStyle>
|
||||||
max={2048}
|
<InputNumber
|
||||||
min={0}
|
disabled={disabled}
|
||||||
/>
|
className={styles.sliderInputNumber}
|
||||||
|
max={2048}
|
||||||
|
min={0}
|
||||||
|
/>
|
||||||
|
</Form.Item>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}}
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
</Flex>
|
</Flex>
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user