fix: init envs

This commit is contained in:
jialin
2026-01-30 20:48:55 +08:00
committed by Lawrence Li
parent 56985be26b
commit 507b0e44d5
9 changed files with 59 additions and 140 deletions
@@ -91,13 +91,6 @@ const BackendDetail: React.FC<{
return ( return (
<li key={key}> <li key={key}>
<div className="label">{_.upperCase(key)}</div> <div className="label">{_.upperCase(key)}</div>
{/* <Flex gap={8} wrap="wrap" style={{ marginBlock: 8 }}>
{value?.map?.((v: string, index: number) => (
<Tag key={index} style={{ margin: 0 }}>
{v}
</Tag>
))}
</Flex> */}
</li> </li>
); );
} }
@@ -141,21 +134,6 @@ const BackendDetail: React.FC<{
<Content>{renderSupportedFrameworks()}</Content> <Content>{renderSupportedFrameworks()}</Content>
</Section> </Section>
)} )}
{/* <Section>
<Subtitle>
<BulbOutlined className="icon" />
<span>
{intl.formatMessage({
id: 'backend.form.defaultExecuteCommand'
})}
</span>
</Subtitle>
<Content style={{ padding: 0, border: 'none' }}>
<HighlightCode
code={currentData?.default_run_command}
></HighlightCode>
</Content>
</Section> */}
{currentData?.description && ( {currentData?.description && (
<Section> <Section>
<Subtitle> <Subtitle>
+1 -89
View File
@@ -5,7 +5,7 @@ import TagWrapper from '@/components/tags-wrapper';
import ThemeTag from '@/components/tags-wrapper/theme-tag'; import ThemeTag from '@/components/tags-wrapper/theme-tag';
import Card from '@/components/templates/card'; import Card from '@/components/templates/card';
import { useIntl } from '@umijs/max'; import { useIntl } from '@umijs/max';
import { Button, Flex, Tag, Tooltip } from 'antd'; import { Button, Tag } from 'antd';
import _ from 'lodash'; import _ from 'lodash';
import { useMemo } from 'react'; import { useMemo } from 'react';
import semverCoerce from 'semver/functions/coerce'; import semverCoerce from 'semver/functions/coerce';
@@ -32,23 +32,6 @@ const StyledCard = styled(Card)`
} }
`; `;
const SourceWrapper = styled.div`
display: grid;
width: 100%;
grid-template-columns: max-content 1fr;
align-items: center;
gap: 0px;
.dot {
display: flex;
height: 4px;
width: 4px;
background-color: var(--ant-color-text-quaternary);
border-radius: 50%;
margin-inline: 8px;
}
`;
// add height props // add height props
const TagInner = styled(Tag)<{ height?: number }>` const TagInner = styled(Tag)<{ height?: number }>`
display: flex; display: flex;
@@ -237,16 +220,6 @@ const BackendCard: React.FC<BackendCardProps> = ({
); );
}; };
const renderModel = (item: any) => {
return (
<AutoTooltip ghost minWidth={20} showTitle title={item}>
<ThemeTag key={item} style={{ marginRight: 0 }}>
{item}
</ThemeTag>
</AutoTooltip>
);
};
const renderFrameworks = () => { const renderFrameworks = () => {
const frameworks = _.keys(data.framework_index_map || {}); const frameworks = _.keys(data.framework_index_map || {});
@@ -267,35 +240,6 @@ const BackendCard: React.FC<BackendCardProps> = ({
); );
}; };
const renderRecommendModels = () => {
const recommendedModels = data.recommend_models || [];
if (recommendedModels.length === 0) {
return null;
}
return (
<div className="flex-center">
<span className="dot"></span>
<Tooltip
title={
<Flex gap={4} wrap="wrap">
{recommendedModels.map((item) => (
<Tag style={{ margin: 0 }} key={item}>
{item}
</Tag>
))}
</Flex>
}
>
<span>
<ThemeTag color="default">
{intl.formatMessage({ id: 'backend.recommendModels' })}
</ThemeTag>
</span>
</Tooltip>
</div>
);
};
const renderSource = () => { const renderSource = () => {
if (layout === 'community') { if (layout === 'community') {
return null; return null;
@@ -330,28 +274,6 @@ const BackendCard: React.FC<BackendCardProps> = ({
); );
}; };
const renderEnabledTag = () => {
if (data.backend_source !== BackendSourceValueMap.COMMUNITY) {
return null;
}
return (
<ThemeTag
className="font-400"
variant="outlined"
color={data.enabled ? 'green' : 'default'}
style={{
borderRadius: 'var(--ant-border-radius)',
margin: 0,
width: 'max-content'
}}
>
{data.enabled
? `${intl.formatMessage({ id: 'common.status.enabled' })}`
: `${intl.formatMessage({ id: 'common.status.disabled' })}`}
</ThemeTag>
);
};
const renderActions = () => { const renderActions = () => {
return actionsRenderer ? ( return actionsRenderer ? (
actionsRenderer(data) actionsRenderer(data)
@@ -398,16 +320,6 @@ const BackendCard: React.FC<BackendCardProps> = ({
</span> </span>
{renderSource()} {renderSource()}
</CardName> </CardName>
{/* <SourceWrapper>
<InfoItem>
<span className="label">
<IconFont type="icon-source" className="icon" />
<span>{intl.formatMessage({ id: 'models.form.source' })}:</span>
</span>
{renderEnabledTag()}
</InfoItem>
{renderRecommendModels()}
</SourceWrapper> */}
{renderFrameworks()} {renderFrameworks()}
</Content> </Content>
</StyledCard> </StyledCard>
+1 -1
View File
@@ -31,7 +31,7 @@ export const builtInBackendLogos: Record<string, string> = {
export const BackendSourceValueMap = { export const BackendSourceValueMap = {
CUSTOM: 'custom', CUSTOM: 'custom',
BUILTIN: 'built-in', BUILTIN: 'built_in',
COMMUNITY: 'community', COMMUNITY: 'community',
USER_DEFINED: 'user_defined' USER_DEFINED: 'user_defined'
}; };
+26 -5
View File
@@ -135,6 +135,7 @@ const AddModal: FC<AddModalProps> = (props) => {
}); });
const requestModelIdRef = useRef<number>(0); const requestModelIdRef = useRef<number>(0);
const currentSelectedModel = useRef<any>({}); const currentSelectedModel = useRef<any>({});
const flatBackendOptionsRef = useRef<any[]>([]);
const { run: fetchModelFiles } = useDeferredRequest( const { run: fetchModelFiles } = useDeferredRequest(
() => modelFileRef.current?.fetchModelFiles?.(), () => modelFileRef.current?.fetchModelFiles?.(),
@@ -259,7 +260,8 @@ const AddModal: FC<AddModalProps> = (props) => {
const modelInfo = onSelectModel(selectedModel, { const modelInfo = onSelectModel(selectedModel, {
source: props.source, source: props.source,
defaultBackend: form.current?.getFieldValue?.('backend') defaultBackend: form.current?.getFieldValue?.('backend'),
flatBackendOptions: flatBackendOptionsRef.current
}); });
form.current?.setFieldsValue?.({ form.current?.setFieldsValue?.({
@@ -269,7 +271,9 @@ const AddModal: FC<AddModalProps> = (props) => {
backend_parameters: [], backend_parameters: [],
backend_version: '', backend_version: '',
backend: modelInfo.backend, backend: modelInfo.backend,
env: {}, env: {
...modelInfo.env
},
categories: getCategory(item) categories: getCategory(item)
}); });
@@ -326,11 +330,16 @@ const AddModal: FC<AddModalProps> = (props) => {
// TODO // TODO
form.current?.resetFields(resetFields); form.current?.resetFields(resetFields);
const modelInfo = onSelectModel(item, { const modelInfo = onSelectModel(item, {
source: props.source source: props.source,
flatBackendOptions: flatBackendOptionsRef.current
}); });
form.current?.setFieldsValue?.({ form.current?.setFieldsValue?.({
...defaultFormValues, ...defaultFormValues,
...modelInfo, ...modelInfo,
env: {
...modelInfo.env
},
name: generateNameValue(item, modelInfo.name, manual),
categories: getCategory(item) categories: getCategory(item)
}); });
@@ -366,21 +375,27 @@ const AddModal: FC<AddModalProps> = (props) => {
}); });
handleCancelFiles(); handleCancelFiles();
const modelInfo = onSelectModel(item, { const modelInfo = onSelectModel(item, {
source: props.source source: props.source,
flatBackendOptions: flatBackendOptionsRef.current
}); });
if ( if (
evaluateStateRef.current.state === EvaluateProccess.model && evaluateStateRef.current.state === EvaluateProccess.model &&
item.evaluated item.evaluated
) { ) {
const defaultSpec = getDefaultSpec(item);
const newFormValues = { const newFormValues = {
...(manual ...(manual
? { ...defaultFormValues } ? { ...defaultFormValues }
: _.omit(form.current?.form?.getFieldsValue?.(), [ : _.omit(form.current?.form?.getFieldsValue?.(), [
...dropFieldsFromForm ...dropFieldsFromForm
])), ])),
...getDefaultSpec(item), ...defaultSpec,
...modelInfo, ...modelInfo,
env: {
...modelInfo.env,
...defaultSpec.env
},
name: generateNameValue(item, modelInfo.name, manual), name: generateNameValue(item, modelInfo.name, manual),
categories: getCategory(item) categories: getCategory(item)
}; };
@@ -464,6 +479,8 @@ const AddModal: FC<AddModalProps> = (props) => {
}) })
]); ]);
flatBackendOptionsRef.current = backendOptions;
if (props.deploymentType === 'modelFiles') { if (props.deploymentType === 'modelFiles') {
form.current?.form?.setFieldsValue({ form.current?.form?.setFieldsValue({
...props.initialValues ...props.initialValues
@@ -487,8 +504,12 @@ const AddModal: FC<AddModalProps> = (props) => {
versions: { label: string; value: string }[]; versions: { label: string; value: string }[];
}) => item.value === backend }) => item.value === backend
); );
form.current?.setFieldsValue?.({ form.current?.setFieldsValue?.({
backend, backend,
env: {
...currentDefaultBackend?.default_env
},
default_version: currentDefaultBackend?.default_version, default_version: currentDefaultBackend?.default_version,
backend_parameters: currentDefaultBackend?.default_backend_param || [], backend_parameters: currentDefaultBackend?.default_backend_param || [],
cluster_id: initClusterId() cluster_id: initClusterId()
+4 -2
View File
@@ -4,7 +4,7 @@ import '../style/separator.less';
const Separator: React.FC<{ const Separator: React.FC<{
showArrow?: boolean; showArrow?: boolean;
styles: { styles?: {
arrow?: React.CSSProperties; arrow?: React.CSSProperties;
}; };
}> = ({ showArrow = true, styles }) => { }> = ({ showArrow = true, styles }) => {
@@ -14,7 +14,9 @@ const Separator: React.FC<{
orientation="vertical" orientation="vertical"
style={{ height: 'calc(100vh - 89px)', marginInline: '0px' }} style={{ height: 'calc(100vh - 89px)', marginInline: '0px' }}
></Divider> ></Divider>
{showArrow && <span className="shape" style={styles.arrow}></span>} {showArrow && (
<span className="shape" style={{ ...styles?.arrow }}></span>
)}
</div> </div>
); );
}; };
+4 -3
View File
@@ -316,7 +316,7 @@ export interface BackendGroupItem {
label: string; label: string;
value: string; value: string;
title?: string; title?: string;
environment?: Record<string, any>; env?: Record<string, any>;
is_deprecated: boolean; is_deprecated: boolean;
}[]; }[];
} }
@@ -329,12 +329,13 @@ export interface BackendOption {
default_version: string; default_version: string;
isBuiltIn: boolean; isBuiltIn: boolean;
backend_source: string; backend_source: string;
default_env?: Record<string, any>;
enabled: boolean; enabled: boolean;
versions: { versions: {
label: string; label: string;
value: string; value: string;
title?: string; title?: string;
environment?: Record<string, any>; env?: Record<string, any>;
is_deprecated: boolean; is_deprecated: boolean;
}[]; }[];
} }
@@ -354,7 +355,7 @@ export interface BackendItem {
enabled: boolean; enabled: boolean;
versions: { versions: {
version: string; version: string;
environment?: Record<string, any>; env?: Record<string, any>;
is_deprecated: boolean; is_deprecated: boolean;
}[]; }[];
} }
+7 -13
View File
@@ -44,12 +44,8 @@ const BackendFields: React.FC = () => {
React.useState<BackendOption | null>(null); React.useState<BackendOption | null>(null);
const handleBackendVersionOnChange = (value: any, option: any) => { const handleBackendVersionOnChange = (value: any, option: any) => {
if (Object.keys(option.data.environment || {}).length > 0) { if (Object.keys(option.data.env || {}).length > 0) {
form.setFieldsValue({ form.setFieldValue('env', { ...(option?.data?.env || {}) });
env: {
...(option?.data?.environment || {})
}
});
} }
onValuesChange?.({}, form.getFieldsValue()); onValuesChange?.({}, form.getFieldsValue());
@@ -141,17 +137,15 @@ const BackendFields: React.FC = () => {
); );
}; };
const handleOnBackendChange = (value: any[], option: any) => { const handleOnBackendChange = (value: any[], option: any[]) => {
const selectedBackend = value?.[1]; const selectedBackend = value?.[1];
const selectedOption = option?.[1] || {}; const selectedOption = option?.[1] || {};
console.log('handleOnBackendChange selectedOption:', selectedOption);
form.setFieldsValue({ form.setFieldsValue({
backend: selectedBackend, backend: selectedBackend
env: { });
...(selectedOption.environment || {}) form.setFieldValue('env', {
} ...(selectedOption.default_env || {})
}); });
onBackendChange?.(selectedBackend, selectedOption); onBackendChange?.(selectedBackend, selectedOption);
setSelectedBackend(selectedOption); setSelectedBackend(selectedOption);
+13 -2
View File
@@ -511,9 +511,13 @@ export const useSelectModel = (data: { gpuOptions: any[] }) => {
const onSelectModel = ( const onSelectModel = (
selectModel: any, selectModel: any,
options: { source: string; defaultBackend?: string } options: {
source: string;
defaultBackend?: string;
flatBackendOptions?: any[];
}
) => { ) => {
const { source, defaultBackend } = options; const { source, defaultBackend, flatBackendOptions } = options;
let name = _.split(selectModel.name, '/').slice(-1)[0]; let name = _.split(selectModel.name, '/').slice(-1)[0];
const reg = /(-gguf)$/i; const reg = /(-gguf)$/i;
name = _.toLower(name).replace(reg, ''); name = _.toLower(name).replace(reg, '');
@@ -527,6 +531,10 @@ export const useSelectModel = (data: { gpuOptions: any[] }) => {
gpuOptions: gpuOptions gpuOptions: gpuOptions
}); });
const selectedBackend = flatBackendOptions?.find(
(item) => item.value === backend
);
return { return {
...(source === modelSourceMap.huggingface_value ...(source === modelSourceMap.huggingface_value
? { huggingface_repo_id: selectModel.name } ? { huggingface_repo_id: selectModel.name }
@@ -535,6 +543,9 @@ export const useSelectModel = (data: { gpuOptions: any[] }) => {
? { model_scope_model_id: selectModel.name } ? { model_scope_model_id: selectModel.name }
: {}), : {}),
...modelTaskData, ...modelTaskData,
env: {
...(selectedBackend?.default_env || {})
},
name: name, name: name,
source: source, source: source,
backend: backend backend: backend
@@ -61,7 +61,7 @@ export default function useQueryBackends() {
'backend_source', 'backend_source',
'is_built_in', 'is_built_in',
'default_backend_param', 'default_backend_param',
'environment' 'default_env'
]), ]),
backend_source: item.backend_source || BackendSourceValueMap.CUSTOM, backend_source: item.backend_source || BackendSourceValueMap.CUSTOM,
value: item.backend_name, value: item.backend_name,
@@ -79,7 +79,7 @@ export default function useQueryBackends() {
label: vItem.version, label: vItem.version,
value: vItem.version, value: vItem.version,
is_deprecated: vItem.is_deprecated, is_deprecated: vItem.is_deprecated,
environment: vItem.environment || {}, env: vItem.env || {},
title: vItem.version.replace(/-custom$/, '') title: vItem.version.replace(/-custom$/, '')
})) }))
}; };
@@ -91,7 +91,7 @@ export default function useQueryBackends() {
console.log('Fetched backend options:', list, groupList); console.log('Fetched backend options:', list, groupList);
return groupList || []; return list || [];
} catch (error) { } catch (error) {
// ignore // ignore
setBackendOptions([]); setBackendOptions([]);