chore: set source as local_path deploy from model files

This commit is contained in:
jialin
2025-03-25 21:24:03 +08:00
parent 8f6c1d0e47
commit 3bc10291c4
8 changed files with 28 additions and 17 deletions
+1 -1
View File
@@ -2,7 +2,7 @@ import { createFromIconfontCN } from '@ant-design/icons';
// import './iconfont/iconfont.js'; // import './iconfont/iconfont.js';
const IconFont = createFromIconfontCN({ const IconFont = createFromIconfontCN({
scriptUrl: '//at.alicdn.com/t/c/font_4613488_s7szfcrvqw.js' scriptUrl: '//at.alicdn.com/t/c/font_4613488_ivr9tor4zfm.js'
}); });
export default IconFont; export default IconFont;
+1 -1
View File
@@ -68,5 +68,5 @@ export default {
'resources.modelfiles.storagePath.holder': 'resources.modelfiles.storagePath.holder':
'Waiting for download to complete...', 'Waiting for download to complete...',
'resources.filter.worker': 'Filter by Worker', 'resources.filter.worker': 'Filter by Worker',
'resources.filter.file': 'Filter by File' 'resources.filter.source': 'Filter by Source'
}; };
+2 -2
View File
@@ -68,7 +68,7 @@ export default {
'resources.modelfiles.storagePath.holder': 'resources.modelfiles.storagePath.holder':
'Waiting for download to complete...', 'Waiting for download to complete...',
'resources.filter.worker': 'Filter by Worker', 'resources.filter.worker': 'Filter by Worker',
'resources.filter.file': 'Filter by File' 'resources.filter.source': 'Filter by Source'
}; };
// ========== To-Do: Translate Keys (Remove After Translation) ========== // ========== To-Do: Translate Keys (Remove After Translation) ==========
@@ -82,5 +82,5 @@ export default {
//8. 'resources.modelfiles.form.localdir.tips', //8. 'resources.modelfiles.form.localdir.tips',
//9. 'resources.modelfiles.storagePath.holder', //9. 'resources.modelfiles.storagePath.holder',
//10. 'resources.filter.worker', //10. 'resources.filter.worker',
//11. 'resources.filter.file', //11. 'resources.filter.source',
// ========== End of To-Do List ========== // ========== End of To-Do List ==========
+1 -1
View File
@@ -66,5 +66,5 @@ export default {
'resources.modelfiles.retry.download': '重新下载', 'resources.modelfiles.retry.download': '重新下载',
'resources.modelfiles.storagePath.holder': '等待下载完成...', 'resources.modelfiles.storagePath.holder': '等待下载完成...',
'resources.filter.worker': '按 worker 筛选', 'resources.filter.worker': '按 worker 筛选',
'resources.filter.file': '按文件筛选' 'resources.filter.source': '按来源筛选'
}; };
@@ -236,6 +236,7 @@ const DataForm: React.FC<DataFormProps> = forwardRef((props, ref) => {
]} ]}
> >
<SealAutoComplete <SealAutoComplete
allowClear
filterOption filterOption
defaultActiveFirstOption defaultActiveFirstOption
disabled={false} disabled={false}
@@ -280,6 +281,7 @@ const DataForm: React.FC<DataFormProps> = forwardRef((props, ref) => {
]} ]}
> >
<SealAutoComplete <SealAutoComplete
allowClear
required required
filterOption filterOption
defaultActiveFirstOption defaultActiveFirstOption
+3 -2
View File
@@ -23,7 +23,8 @@ const icons = {
HF: React.createElement(IconFont, { type: 'icon-huggingface' }), HF: React.createElement(IconFont, { type: 'icon-huggingface' }),
Ollama: React.createElement(IconFont, { type: 'icon-ollama' }), Ollama: React.createElement(IconFont, { type: 'icon-ollama' }),
ModelScope: React.createElement(IconFont, { type: 'icon-tu2' }), ModelScope: React.createElement(IconFont, { type: 'icon-tu2' }),
LocalPath: React.createElement(IconFont, { type: 'icon-hard-disk' }) LocalPath: React.createElement(IconFont, { type: 'icon-hard-disk' }),
Launch: React.createElement(IconFont, { type: 'icon-rocket-launch' })
}; };
export const modalConfig: Record< export const modalConfig: Record<
@@ -192,7 +193,7 @@ export const modelFileActions = [
{ {
label: 'common.button.deploy', label: 'common.button.deploy',
key: 'deploy', key: 'deploy',
icon: icons.ThunderboltOutlined icon: icons.Launch
}, },
{ {
label: 'resources.modelfiles.retry.download', label: 'resources.modelfiles.retry.download',
+12 -2
View File
@@ -2,12 +2,19 @@ import IconFont from '@/components/icon-font';
import SealAutoComplete from '@/components/seal-form/auto-complete'; import SealAutoComplete from '@/components/seal-form/auto-complete';
import SealInput from '@/components/seal-form/seal-input'; import SealInput from '@/components/seal-form/seal-input';
import SealSelect from '@/components/seal-form/seal-select'; import SealSelect from '@/components/seal-form/seal-select';
import TooltipList from '@/components/tooltip-list';
import useAppUtils from '@/hooks/use-app-utils'; import useAppUtils from '@/hooks/use-app-utils';
import { ModelFileFormData as FormData } from '@/pages/resources/config/types'; import { ModelFileFormData as FormData } from '@/pages/resources/config/types';
import { useIntl } from '@umijs/max'; import { useIntl } from '@umijs/max';
import { Form, Typography } from 'antd'; import { Form, Typography } from 'antd';
import _ from 'lodash';
import React, { forwardRef, useImperativeHandle, useMemo } from 'react'; import React, { forwardRef, useImperativeHandle, useMemo } from 'react';
import { modelSourceMap, ollamaModelOptions, sourceOptions } from '../config'; import {
localPathTipsList,
modelSourceMap,
ollamaModelOptions,
sourceOptions
} from '../config';
interface TargetFormProps { interface TargetFormProps {
ref?: any; ref?: any;
@@ -27,7 +34,8 @@ const TargetForm: React.FC<TargetFormProps> = forwardRef((props, ref) => {
})); }));
const handleOk = (values: any) => { const handleOk = (values: any) => {
onOk(values); const data = _.pickBy(values, (val: string) => val);
onOk(data);
}; };
const renderLocalPathFields = () => { const renderLocalPathFields = () => {
@@ -46,6 +54,7 @@ const TargetForm: React.FC<TargetFormProps> = forwardRef((props, ref) => {
<SealInput.Input <SealInput.Input
required required
label={intl.formatMessage({ id: 'models.form.filePath' })} label={intl.formatMessage({ id: 'models.form.filePath' })}
description={<TooltipList list={localPathTipsList}></TooltipList>}
></SealInput.Input> ></SealInput.Input>
</Form.Item> </Form.Item>
</> </>
@@ -66,6 +75,7 @@ const TargetForm: React.FC<TargetFormProps> = forwardRef((props, ref) => {
]} ]}
> >
<SealAutoComplete <SealAutoComplete
allowClear
filterOption filterOption
defaultActiveFirstOption defaultActiveFirstOption
disabled={false} disabled={false}
@@ -227,14 +227,13 @@ const ModelFiles = () => {
const result = setSourceRepoConfigValue(record.source, record); const result = setSourceRepoConfigValue(record.source, record);
return { return {
...result.values, source: modelSourceMap.local_path_value,
local_path: record.resolved_paths?.[0],
worker_selector: targetWorker worker_selector: targetWorker
? { ? {
'worker-name': targetWorker 'worker-name': targetWorker
} }
: {}, : {},
source: record.source,
local_path: record.local_path,
name: extractFileName(name), name: extractFileName(name),
backend: backend:
isGGUF || isOllama isGGUF || isOllama
@@ -290,8 +289,6 @@ const ModelFiles = () => {
const initialValues = generateInitialValues(record); const initialValues = generateInitialValues(record);
setOpenDeployModal({ setOpenDeployModal({
...openDeployModal, ...openDeployModal,
source: record.source,
width: 600,
modelFileOptions: dataList, modelFileOptions: dataList,
gpuOptions: gpuList, gpuOptions: gpuList,
initialValues: initialValues, initialValues: initialValues,
@@ -400,7 +397,7 @@ const ModelFiles = () => {
dataIndex: 'worker_name', dataIndex: 'worker_name',
render: (text: string, record: ListItem) => { render: (text: string, record: ListItem) => {
return ( return (
<AutoTooltip ghost maxWidth={240}> <AutoTooltip ghost>
<span>{getWorkerName(record.worker_id, workersList)}</span> <span>{getWorkerName(record.worker_id, workersList)}</span>
</AutoTooltip> </AutoTooltip>
); );
@@ -417,6 +414,7 @@ const ModelFiles = () => {
{ {
title: intl.formatMessage({ id: 'resources.modelfiles.form.path' }), title: intl.formatMessage({ id: 'resources.modelfiles.form.path' }),
dataIndex: 'resolved_paths', dataIndex: 'resolved_paths',
width: '35%',
render: (text: string, record: ListItem) => { render: (text: string, record: ListItem) => {
if ( if (
!record.resolved_paths.length && !record.resolved_paths.length &&
@@ -433,7 +431,7 @@ const ModelFiles = () => {
return ( return (
record.resolved_paths?.length > 0 && ( record.resolved_paths?.length > 0 && (
<span className="flex-center"> <span className="flex-center">
<AutoTooltip ghost maxWidth={'100%'}> <AutoTooltip ghost>
<span>{record.resolved_paths?.[0]}</span> <span>{record.resolved_paths?.[0]}</span>
</AutoTooltip> </AutoTooltip>
<CopyButton <CopyButton
@@ -492,7 +490,7 @@ const ModelFiles = () => {
<Space> <Space>
<Input <Input
placeholder={intl.formatMessage({ placeholder={intl.formatMessage({
id: 'resources.filter.file' id: 'resources.filter.source'
})} })}
style={{ width: 230 }} style={{ width: 230 }}
allowClear allowClear