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:
Archer
2026-03-30 10:05:42 +08:00
committed by GitHub
parent 03dd9c00a8
commit 3f4400a500
108 changed files with 3774 additions and 1469 deletions
@@ -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 && (