mirror of
https://github.com/labring/FastGPT.git
synced 2026-05-07 01:02:55 +08:00
V4.14.10 dev (#6674)
* feat: model config with brand-new price calculate machanism (#6616) * fix: image read and json error (Agent) (#6502) * fix: 1.image read 2.JSON parsing error * dataset cite and pause * perf: plancall second parse * add test --------- Co-authored-by: archer <545436317@qq.com> * master message * remove invalid code * wip: model config * feat: model config with brand-new price calculate machanism * merge main branch * ajust calculate way * ajust priceTiers resolve procession * perf: price config code * fix: default price * fix: test * fix: comment * fix test --------- Co-authored-by: YeYuheng <57035043+YYH211@users.noreply.github.com> Co-authored-by: archer <545436317@qq.com> * wip: fix modal UI (#6634) * wip: fix modal UI * fix: maxInputToken set * chore: add price unit for non llm models * chore: replace question mark icon with beta tag (#6672) * feat:rerank too long; fix:rerank ui(agent),embedding returns 0 (#6663) * feat:rerank too long; fix:rerank ui(agent),embedding returns 0 * rerank * fix:rerank function * perf: rerank code * fix rerank * perf: model price ui --------- Co-authored-by: archer <545436317@qq.com> * remove llmtype field * revert model init * fix: filed * fix: model select filter * perf: multiple selector render * remove invalid checker * remove invalid i18n * perf: model selector tip * perf: model selector tip * fix cr * limit pnpm version * fix: i18n * fix action * set default mintoken * update i18n * perf: usage push * fix:rerank model ui (#6677) * fix: tier match error * fix: testr --------- Co-authored-by: Ryo <whoeverimf5@gmail.com> Co-authored-by: YeYuheng <57035043+YYH211@users.noreply.github.com>
This commit is contained in:
@@ -21,6 +21,28 @@ type Props = Omit<NumberInputProps, 'onChange' | 'onBlur'> & {
|
||||
hideStepper?: boolean;
|
||||
};
|
||||
|
||||
const getSafeNumberValue = (value: unknown) => {
|
||||
if (value === '' || value === null || value === undefined) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
if (typeof value === 'number') {
|
||||
return Number.isFinite(value) ? value : undefined;
|
||||
}
|
||||
|
||||
if (typeof value === 'string') {
|
||||
const trimmedValue = value.trim();
|
||||
if (!trimmedValue) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
const parsedValue = Number(trimmedValue);
|
||||
return Number.isFinite(parsedValue) ? parsedValue : undefined;
|
||||
}
|
||||
|
||||
return undefined;
|
||||
};
|
||||
|
||||
const MyNumberInput = (props: Props) => {
|
||||
const {
|
||||
register,
|
||||
@@ -30,60 +52,62 @@ const MyNumberInput = (props: Props) => {
|
||||
placeholder,
|
||||
inputFieldProps,
|
||||
hideStepper = false,
|
||||
value,
|
||||
...restProps
|
||||
} = props;
|
||||
|
||||
const registeredField =
|
||||
register && name
|
||||
? register(name, {
|
||||
required: props.isRequired,
|
||||
min: props.min,
|
||||
max: props.max,
|
||||
setValueAs: (value) => getSafeNumberValue(value)
|
||||
})
|
||||
: undefined;
|
||||
const inputFieldRegisterProps = registeredField
|
||||
? {
|
||||
name: registeredField.name,
|
||||
ref: registeredField.ref
|
||||
}
|
||||
: undefined;
|
||||
|
||||
const safeControlledValue =
|
||||
value === '' ? '' : typeof value === 'undefined' ? undefined : getSafeNumberValue(value) ?? '';
|
||||
|
||||
const getRegisteredValue = (value: unknown) => {
|
||||
const safeValue = getSafeNumberValue(value);
|
||||
|
||||
if (typeof safeValue === 'number') {
|
||||
return safeValue;
|
||||
}
|
||||
|
||||
return '';
|
||||
};
|
||||
|
||||
return (
|
||||
<NumberInput
|
||||
{...restProps}
|
||||
{...(typeof value !== 'undefined' ? { value: safeControlledValue } : {})}
|
||||
onBlur={(e) => {
|
||||
const numE = e.target.value === '' ? '' : Number(e.target.value);
|
||||
if (onBlur) {
|
||||
if (numE === '') {
|
||||
// @ts-ignore
|
||||
onBlur('');
|
||||
} else {
|
||||
onBlur(numE);
|
||||
}
|
||||
}
|
||||
if (onChange) {
|
||||
if (numE === '') {
|
||||
// @ts-ignore
|
||||
onChange('');
|
||||
} else {
|
||||
onChange(numE);
|
||||
}
|
||||
}
|
||||
if (register && name) {
|
||||
const event = {
|
||||
target: {
|
||||
name,
|
||||
value: numE
|
||||
}
|
||||
};
|
||||
register(name).onBlur(event);
|
||||
}
|
||||
}}
|
||||
onChange={(e) => {
|
||||
const numE = e === '' ? '' : e.endsWith('.') || /^\d+\.0+$/.test(e) ? e : Number(e);
|
||||
if (onChange) {
|
||||
if (numE === '') {
|
||||
// @ts-ignore
|
||||
onChange('');
|
||||
} else {
|
||||
// @ts-ignore
|
||||
onChange(numE);
|
||||
}
|
||||
}
|
||||
if (register && name) {
|
||||
const event = {
|
||||
target: {
|
||||
name,
|
||||
value: numE
|
||||
}
|
||||
};
|
||||
const numE = getSafeNumberValue(e.target.value);
|
||||
onBlur?.(numE);
|
||||
onChange?.(numE);
|
||||
|
||||
register(name).onChange(event);
|
||||
if (registeredField && name) {
|
||||
const registeredValue = getRegisteredValue(e.target.value);
|
||||
const target = {
|
||||
name,
|
||||
value: registeredValue
|
||||
};
|
||||
registeredField.onChange({
|
||||
target,
|
||||
type: 'change'
|
||||
});
|
||||
registeredField.onBlur({
|
||||
target,
|
||||
type: 'blur'
|
||||
});
|
||||
}
|
||||
}}
|
||||
>
|
||||
@@ -91,14 +115,7 @@ const MyNumberInput = (props: Props) => {
|
||||
placeholder={placeholder}
|
||||
h={restProps.h}
|
||||
defaultValue={restProps.defaultValue}
|
||||
{...(register && name
|
||||
? register(name, {
|
||||
required: props.isRequired,
|
||||
min: props.min,
|
||||
max: props.max,
|
||||
valueAsNumber: true
|
||||
})
|
||||
: {})}
|
||||
{...(inputFieldRegisterProps || {})}
|
||||
{...inputFieldProps}
|
||||
/>
|
||||
{!hideStepper && (
|
||||
|
||||
Reference in New Issue
Block a user