fix: kv cache support in builtin backend

This commit is contained in:
jialin
2025-10-27 14:13:47 +08:00
parent 6969cb0b9c
commit df65d3e2f6
15 changed files with 124 additions and 40 deletions
@@ -7,7 +7,8 @@ export const backendOptionsMap = {
vllm: 'vLLM',
voxBox: 'VoxBox',
ascendMindie: 'MindIE',
custom: 'Custom'
custom: 'Custom',
SGLang: 'SGLang'
};
export interface BackendParameter {
@@ -36,5 +37,6 @@ export default {
[backendOptionsMap.vllm]: generateBackendParameters(vllmParameters),
[backendOptionsMap.ascendMindie]: generateBackendParameters(mindieParameters),
[backendOptionsMap.voxBox]: [],
[backendOptionsMap.custom]: []
[backendOptionsMap.custom]: [],
[backendOptionsMap.SGLang]: []
};
+2
View File
@@ -260,6 +260,7 @@ export interface BackendOption {
label: string;
default_backend_param: string[];
default_version: string;
isBuiltIn: boolean;
versions: { label: string; value: string }[];
}
@@ -273,6 +274,7 @@ export interface BackendItem {
from_config: boolean;
default_version: string;
default_backend_param: string[];
is_built_in: boolean;
versions: {
version: string;
is_deprecated: boolean;
+15
View File
@@ -184,11 +184,26 @@ const DataForm: React.FC<DataFormProps> = forwardRef((props, ref) => {
};
};
const updateKVCacheConfig = (backend: string, option: BackendOption) => {
if (
!option.isBuiltIn &&
[backendOptionsMap.SGLang, backendOptionsMap.vllm].includes(backend)
) {
return {
extended_kv_cache: {
enabled: false
}
};
}
return {};
};
const handleBackendChange = async (val: string, option: BackendOption) => {
form.setFieldsValue({
env: null,
backend_version: option.default_version || '',
backend_parameters: option.default_backend_param || [],
...updateKVCacheConfig(val, option),
...updateGPUSelector(val)
});
onBackendChange?.(val);
+39 -1
View File
@@ -3,14 +3,17 @@ import SealInputNumber from '@/components/seal-form/input-number';
import SealInput from '@/components/seal-form/seal-input';
import { useIntl } from '@umijs/max';
import { Form } from 'antd';
import { useMemo } from 'react';
import { backendOptionsMap } from '../config/backend-parameters';
import { useFormContext } from '../config/form-context';
import { FormData } from '../config/types';
const KVCacheForm = () => {
const intl = useIntl();
const form = Form.useFormInstance();
const { onValuesChange } = useFormContext();
const { onValuesChange, backendOptions } = useFormContext();
const kvCacheEnabled = Form.useWatch(['extended_kv_cache', 'enabled'], form);
const backend = Form.useWatch('backend', form);
const handleOnChange = async (e: any) => {
if (e.target.checked) {
@@ -29,6 +32,19 @@ const KVCacheForm = () => {
onValuesChange?.({}, form.getFieldsValue());
};
const builtInBackend = useMemo(() => {
const currentBackend = backendOptions.find(
(item) => item.value === backend
);
return (
currentBackend?.isBuiltIn &&
[backendOptionsMap.SGLang, backendOptionsMap.vllm].includes(
backend as string
)
);
}, [backend, backendOptions]);
return (
<>
<div style={{ paddingBottom: 22 }}>
@@ -37,8 +53,21 @@ const KVCacheForm = () => {
name={['extended_kv_cache', 'enabled']}
valuePropName="checked"
style={{ padding: '0 10px', marginBottom: 0 }}
extra={
!builtInBackend && (
<span
dangerouslySetInnerHTML={{
__html: intl.formatMessage({ id: 'models.form.kvCache.tips' })
}}
></span>
)
}
>
<CheckboxField
description={intl.formatMessage({
id: 'models.form.kvCache.tips2'
})}
disabled={!builtInBackend}
onChange={handleOnChange}
label={intl.formatMessage({ id: 'models.form.extendedkvcache' })}
></CheckboxField>
@@ -65,6 +94,15 @@ const KVCacheForm = () => {
</Form.Item>
<Form.Item<FormData> name={['extended_kv_cache', 'remote_url']}>
<SealInput.Input
description={
<span
dangerouslySetInnerHTML={{
__html: intl.formatMessage({
id: 'models.form.remoteURL.tips'
})
}}
></span>
}
label={intl.formatMessage({ id: 'models.form.remoteURL' })}
min={0}
step={1}
@@ -14,6 +14,7 @@ export default function useQueryBackends() {
label: item.backend_name,
default_backend_param: item.default_backend_param || [],
default_version: item.default_version,
isBuiltIn: item.is_built_in,
versions: (item.versions || []).map((vItem) => ({
label: vItem.version,
value: vItem.version