Files
ragflow/web/src/utils/form.ts
balibabu c849c76f8a Feat: Add a prefix to the name of the FormField associated with the chat. (#16178)
Fix: Add a prefix to the `name` of the `FormField` associated with the chat.
2026-06-22 19:18:11 +08:00

80 lines
2.2 KiB
TypeScript

import { variableEnabledFieldMap } from '@/constants/chat';
import { TFunction } from 'i18next';
import { camelCase } from 'lodash';
import omit from 'lodash/omit';
// chat model setting and generate operator
export const excludeUnEnabledVariables = (
values: any = {},
prefix = 'llm_setting.',
) => {
const unEnabledFields: Array<keyof typeof variableEnabledFieldMap> =
Object.keys(variableEnabledFieldMap).filter((key) => !values[key]) as Array<
keyof typeof variableEnabledFieldMap
>;
return unEnabledFields.map(
(key) => `${prefix}${variableEnabledFieldMap[key]}`,
);
};
// chat model setting and generate operator
export const removeUselessFieldsFromValues = (values: any, prefix?: string) => {
const nextValues: any = omit(values, [
...Object.keys(variableEnabledFieldMap),
'parameter',
...excludeUnEnabledVariables(values, prefix),
]);
return nextValues;
};
export function buildOptions(
data: Record<string, any>,
t?: TFunction<['translation', ...string[]], undefined>,
prefix?: string,
camel: boolean = false,
) {
if (t) {
return Object.values(data).map((val) => ({
label: t(
`${prefix ? prefix + '.' : ''}${typeof val === 'string' ? (camel ? camelCase(val) : val.toLowerCase()) : val}`,
),
value: val,
}));
}
return Object.values(data).map((val) => ({ label: val, value: val }));
}
export function setLLMSettingEnabledValues(
initialLlmSetting?: Record<string, any>,
) {
const values = Object.keys(variableEnabledFieldMap).reduce<
Record<string, boolean>
>((pre, field) => {
pre[field] =
initialLlmSetting === undefined
? false
: !!initialLlmSetting[
variableEnabledFieldMap[
field as keyof typeof variableEnabledFieldMap
]
];
return pre;
}, {});
return values;
}
/**
* Add prefix to form field name
* @param prefix - The prefix to add (e.g., 'chat.', 'settings.')
* @param name - The field name
* @returns The prefixed field name
* @example
* prefixName('chat.', 'icon') // returns 'chat.icon'
* prefixName('', 'name') // returns 'name'
*/
export function prefixName(prefix: string, name: string): string {
return `${prefix}${name}`;
}