diff --git a/src/components/alert-info/block.less b/src/components/alert-info/block.less
index 042ecb86..1f6dbaa5 100644
--- a/src/components/alert-info/block.less
+++ b/src/components/alert-info/block.less
@@ -30,15 +30,10 @@
&.success {
border: 1px solid var(--color-progress-green);
color: var(--color-progress-green);
-
- .title-text {
- color: var(--color-progress-green);
- }
+ background: var(--ant-green-1);
.content.success {
- color: var(--color-progress-green);
font-weight: var(--font-weight-normal);
- opacity: 0.85;
}
}
diff --git a/src/locales/en-US/models.ts b/src/locales/en-US/models.ts
index a632879c..65ea2741 100644
--- a/src/locales/en-US/models.ts
+++ b/src/locales/en-US/models.ts
@@ -127,7 +127,7 @@ export default {
'models.form.restart.onerror.tips':
'When an error occurs, it will automatically attempt to restart.',
'models.form.check.params': 'Checking configuration...',
- 'models.form.check.passed': 'Check Compatibility Passed',
+ 'models.form.check.passed': 'Compatibility Check Passed',
'models.form.check.claims':
'The model requires approximately {vram} VRAM and {ram} RAM.'
};
diff --git a/src/locales/en-US/resources.ts b/src/locales/en-US/resources.ts
index 7792902e..0c165407 100644
--- a/src/locales/en-US/resources.ts
+++ b/src/locales/en-US/resources.ts
@@ -64,7 +64,7 @@ export default {
'resources.modelfiles.selecttarget': 'Select Target',
'resources.modelfiles.form.localdir': 'Local Directory',
'resources.modelfiles.form.localdir.tips':
- 'The default storage directory is /var/lib/gpustack/cache or the directory specified with --data-dir.',
+ 'The default storage directory is /var/lib/gpustack/cache or the directory specified with --cache-dir.',
'resources.modelfiles.retry.download': 'Retry Download',
'resources.modelfiles.storagePath.holder':
'Waiting for the download to complete...',
diff --git a/src/locales/ja-JP/models.ts b/src/locales/ja-JP/models.ts
index 57ac9117..dd38ee2c 100644
--- a/src/locales/ja-JP/models.ts
+++ b/src/locales/ja-JP/models.ts
@@ -124,7 +124,7 @@ export default {
'models.form.restart.onerror.tips':
'When an error occurs, it will automatically attempt to restart.',
'models.form.check.params': 'Checking configuration...',
- 'models.form.check.passed': 'Check Compatibility Passed',
+ 'models.form.check.passed': 'Compatibility Check Passed',
'models.form.check.claims':
'The model requires approximately {vram} VRAM and {ram} RAM.'
};
diff --git a/src/locales/ja-JP/resources.ts b/src/locales/ja-JP/resources.ts
index 6c36a16f..87df6ae2 100644
--- a/src/locales/ja-JP/resources.ts
+++ b/src/locales/ja-JP/resources.ts
@@ -65,7 +65,7 @@ export default {
'resources.modelfiles.selecttarget': 'Select Target',
'resources.modelfiles.form.localdir': 'Local Directory',
'resources.modelfiles.form.localdir.tips':
- 'The default storage directory is /var/lib/gpustack/cache or the directory specified with --data-dir.',
+ 'The default storage directory is /var/lib/gpustack/cache or the directory specified with --cache-dir.',
'resources.modelfiles.retry.download': 'Retry Download',
'resources.modelfiles.storagePath.holder':
'Waiting for download to complete...',
diff --git a/src/locales/ru-RU/models.ts b/src/locales/ru-RU/models.ts
index 02059ecf..5aa191e3 100644
--- a/src/locales/ru-RU/models.ts
+++ b/src/locales/ru-RU/models.ts
@@ -127,11 +127,10 @@ export default {
'models.form.restart.onerror.tips':
'При возникновении ошибки система автоматически попытается перезапуститься.',
'models.form.check.params': 'Проверка конфигурации...',
- 'models.form.check.passed': 'Проверка совместимости: успешно пройдена',
- 'models.form.check.claims':
- 'Модель требует примерно {vram} VRAM и {ram} RAM.'
+ 'models.form.check.passed': 'Compatibility Check Passed',
+ 'models.form.check.claims': 'Модель требует примерно {vram} VRAM и {ram} RAM.'
};
// ========== To-Do: Translate Keys (Remove After Translation) ==========
-
+// 1. 'models.form.check.passed'
// ========== End of To-Do List ==========
diff --git a/src/locales/ru-RU/resources.ts b/src/locales/ru-RU/resources.ts
index b68b89df..c0a69153 100644
--- a/src/locales/ru-RU/resources.ts
+++ b/src/locales/ru-RU/resources.ts
@@ -64,7 +64,7 @@ export default {
'resources.modelfiles.selecttarget': 'Выбрать назначение',
'resources.modelfiles.form.localdir': 'Локальный каталог',
'resources.modelfiles.form.localdir.tips':
- 'Каталог по умолчанию --data-dir.',
+ 'Каталог по умолчанию --cache-dir.',
'resources.modelfiles.retry.download': 'Повторить загрузку',
'resources.modelfiles.storagePath.holder': 'Ожидание завершения загрузки...',
'resources.filter.worker': 'Фильтровать по узлу',
diff --git a/src/locales/zh-CN/models.ts b/src/locales/zh-CN/models.ts
index 1515374b..3189c071 100644
--- a/src/locales/zh-CN/models.ts
+++ b/src/locales/zh-CN/models.ts
@@ -122,5 +122,5 @@ export default {
'models.form.restart.onerror.tips': '当发生错误时,将自动尝试恢复',
'models.form.check.params': '正在校验配置...',
'models.form.check.passed': '兼容性检查通过',
- 'models.form.check.claims': '该模型大约需要 {vram} 显存和 {ram} 内存.'
+ 'models.form.check.claims': '该模型大约需要 {vram} 显存和 {ram} 内存。'
};
diff --git a/src/locales/zh-CN/resources.ts b/src/locales/zh-CN/resources.ts
index 8fd977ac..8e2814fa 100644
--- a/src/locales/zh-CN/resources.ts
+++ b/src/locales/zh-CN/resources.ts
@@ -63,7 +63,7 @@ export default {
'resources.modelfiles.selecttarget': '选择目标位置',
'resources.modelfiles.form.localdir': '本地目录',
'resources.modelfiles.form.localdir.tips':
- '默认存储目录为 /var/lib/gpustack/cache,或使用 --data-dir 指定的目录',
+ '默认存储目录为 /var/lib/gpustack/cache,或使用 --cache-dir 指定的目录',
'resources.modelfiles.retry.download': '重新下载',
'resources.modelfiles.storagePath.holder': '等待下载完成...',
'resources.filter.worker': '按 worker 筛选',
diff --git a/src/pages/llmodels/components/data-form.tsx b/src/pages/llmodels/components/data-form.tsx
index 8ec80884..f0e4d8aa 100644
--- a/src/pages/llmodels/components/data-form.tsx
+++ b/src/pages/llmodels/components/data-form.tsx
@@ -7,18 +7,14 @@ import useAppUtils from '@/hooks/use-app-utils';
import { useIntl } from '@umijs/max';
import { Form } from 'antd';
import _ from 'lodash';
-import React, { forwardRef, useImperativeHandle, useState } from 'react';
+import React, { forwardRef, useImperativeHandle } from 'react';
import {
- HuggingFaceTaskMap,
- ModelscopeTaskMap,
backendOptionsMap,
backendTipsList,
excludeFields,
modelSourceMap,
- modelTaskMap,
sourceOptions
} from '../config';
-import { identifyModelTask } from '../config/audio-catalog';
import { FormInnerContext } from '../config/form-context';
import { FormData, SourceType } from '../config/types';
import CatalogFrom from '../forms/catalog';
@@ -70,68 +66,11 @@ const DataForm: React.FC = forwardRef((props, ref) => {
const { getRuleMessage } = useAppUtils();
const [form] = Form.useForm();
const intl = useIntl();
- const [modelTask, setModelTask] = useState>({
- type: '',
- value: '',
- text2speech: false,
- speech2text: false
- });
const handleSumit = () => {
form.submit();
};
- const handleRecognizeAudioModel = (selectModel: any) => {
- const modelTaskType = identifyModelTask(props.source, selectModel.name);
-
- const modelTask =
- HuggingFaceTaskMap.audio.includes(selectModel.task) ||
- ModelscopeTaskMap.audio.includes(selectModel.task)
- ? modelTaskMap.audio
- : '';
-
- const modelTaskData = {
- value: selectModel.task,
- type: modelTaskType || modelTask,
- text2speech:
- HuggingFaceTaskMap[modelTaskMap.textToSpeech] === selectModel.task ||
- ModelscopeTaskMap[modelTaskMap.textToSpeech] === selectModel.task,
- speech2text:
- HuggingFaceTaskMap[modelTaskMap.speechToText] === selectModel.task ||
- ModelscopeTaskMap[modelTaskMap.speechToText] === selectModel.task
- };
- return modelTaskData;
- };
-
- // just for setting the model name or repo_id, and the backend, Since the model type is fixed.
- const handleOnSelectModel = (selectModel: any) => {
- let name = _.split(selectModel.name, '/').slice(-1)[0];
- const reg = /(-gguf)$/i;
- name = _.toLower(name).replace(reg, '');
-
- const modelTaskData = handleRecognizeAudioModel(selectModel);
- setModelTask(modelTaskData);
-
- if (SEARCH_SOURCE.includes(props.source)) {
- form.setFieldsValue({
- repo_id: selectModel.name,
- name: name,
- backend:
- modelTaskData.type === modelTaskMap.audio
- ? backendOptionsMap.voxBox
- : selectModel.isGGUF
- ? backendOptionsMap.llamaBox
- : backendOptionsMap.vllm
- });
- } else {
- form.setFieldsValue({
- ollama_library_model_name: selectModel.name,
- name: name,
- backend: backendOptionsMap.llamaBox
- });
- }
- };
-
// voxbox is not support multi gpu
const handleSetGPUIds = (backend: string) => {
const gpuids = form.getFieldValue(['gpu_selector', 'gpu_ids']) || [];
@@ -184,6 +123,7 @@ const DataForm: React.FC = forwardRef((props, ref) => {
};
};
+ // generate the data is available for the backend including the gpu_ids
const handleOk = async (formdata: FormData) => {
let data = _.cloneDeep(formdata);
data.categories = Array.isArray(data.categories)
@@ -217,7 +157,6 @@ const DataForm: React.FC = forwardRef((props, ref) => {
() => {
return {
form: form,
- handleOnSelectModel: handleOnSelectModel,
submit: handleSumit,
setFieldsValue: (values: FormData) => {
form.setFieldsValue(values);
diff --git a/src/pages/llmodels/components/deploy-modal.tsx b/src/pages/llmodels/components/deploy-modal.tsx
index 04055d1b..9f6102ad 100644
--- a/src/pages/llmodels/components/deploy-modal.tsx
+++ b/src/pages/llmodels/components/deploy-modal.tsx
@@ -13,7 +13,7 @@ import {
} from '../config';
import { FormContext } from '../config/form-context';
import { FormData, SourceType } from '../config/types';
-import { useCheckCompatibility } from '../hooks';
+import { useCheckCompatibility, useSelectModel } from '../hooks';
import ColumnWrapper from './column-wrapper';
import CompatibilityAlert from './compatible-alert';
import DataForm from './data-form';
@@ -84,6 +84,7 @@ const AddModal: FC = (props) => {
warningStatus,
submitAnyway
} = useCheckCompatibility();
+ const { onSelectModel } = useSelectModel();
const form = useRef({});
const intl = useIntl();
const [selectedModel, setSelectedModel] = useState({});
@@ -91,25 +92,28 @@ const AddModal: FC = (props) => {
const [isGGUF, setIsGGUF] = useState(props.isGGUF || false);
const modelFileRef = useRef(null);
- const handleSelectModelFile = useCallback((item: any) => {
+ const handleSelectModelFile = (item: any) => {
+ const modelInfo = onSelectModel(selectedModel, props.source);
form.current?.setFieldsValue?.({
file_name: item.fakeName,
- backend: backendOptionsMap.llamaBox,
- ...item.evaluateResult?.default_spec
+ ...item.evaluateResult?.default_spec,
+ ...modelInfo
});
+
if (item.fakeName) {
handleShowCompatibleAlert(item.evaluateResult);
}
- }, []);
+ };
const handleOnSelectModel = (item: any) => {
setSelectedModel(item);
- form.current?.handleOnSelectModel?.(item);
if (!item.isGGUF) {
setIsGGUF(false);
+ const modelInfo = onSelectModel(item, props.source);
handleShowCompatibleAlert(item.evaluateResult);
form.current?.setFieldsValue?.({
- ...item.evaluateResult?.default_spec
+ ...item.evaluateResult?.default_spec,
+ ...modelInfo
});
}
};
diff --git a/src/pages/llmodels/forms/local-path.tsx b/src/pages/llmodels/forms/local-path.tsx
index 7bda70da..2179eaf3 100644
--- a/src/pages/llmodels/forms/local-path.tsx
+++ b/src/pages/llmodels/forms/local-path.tsx
@@ -1,4 +1,4 @@
-import SealAutoComplete from '@/components/seal-form/auto-complete';
+import SealInput from '@/components/seal-form/seal-input';
import TooltipList from '@/components/tooltip-list';
import useAppUtils from '@/hooks/use-app-utils';
import { useIntl } from '@umijs/max';
@@ -60,17 +60,14 @@ const LocalPathForm: React.FC = () => {
}
]}
>
- }
- >
+ >
>
);
diff --git a/src/pages/llmodels/hooks/index.ts b/src/pages/llmodels/hooks/index.ts
index 143e171e..16d2425f 100644
--- a/src/pages/llmodels/hooks/index.ts
+++ b/src/pages/llmodels/hooks/index.ts
@@ -8,11 +8,15 @@ import _ from 'lodash';
import { useEffect, useRef, useState } from 'react';
import { evaluationsModelSpec, queryGPUList } from '../apis';
import {
+ HuggingFaceTaskMap,
+ ModelscopeTaskMap,
backendOptionsMap,
getSourceRepoConfigValue,
modelSourceMap,
+ modelTaskMap,
setSourceRepoConfigValue
} from '../config';
+import { identifyModelTask } from '../config/audio-catalog';
import {
EvaluateResult,
FormData,
@@ -317,7 +321,6 @@ export const useCheckCompatibility = () => {
return {
show: !compatible || hasClaim,
type: !compatible ? 'warning' : 'success',
- isHtml: hasClaim,
...msgData
};
};
@@ -495,3 +498,50 @@ export const useCheckCompatibility = () => {
submitAnyway
};
};
+
+export const useSelectModel = () => {
+ const handleRecognizeAudioModel = (selectModel: any, source: string) => {
+ const modelTaskType = identifyModelTask(source, selectModel.name);
+
+ const modelTask =
+ HuggingFaceTaskMap.audio.includes(selectModel.task) ||
+ ModelscopeTaskMap.audio.includes(selectModel.task)
+ ? modelTaskMap.audio
+ : '';
+
+ const modelTaskData = {
+ value: selectModel.task,
+ type: modelTaskType || modelTask,
+ text2speech:
+ HuggingFaceTaskMap[modelTaskMap.textToSpeech] === selectModel.task ||
+ ModelscopeTaskMap[modelTaskMap.textToSpeech] === selectModel.task,
+ speech2text:
+ HuggingFaceTaskMap[modelTaskMap.speechToText] === selectModel.task ||
+ ModelscopeTaskMap[modelTaskMap.speechToText] === selectModel.task
+ };
+ return modelTaskData;
+ };
+
+ // just for setting the model name or repo_id, and the backend, Since the model type is fixed.
+ const onSelectModel = (selectModel: any, source: string) => {
+ let name = _.split(selectModel.name, '/').slice(-1)[0];
+ const reg = /(-gguf)$/i;
+ name = _.toLower(name).replace(reg, '');
+
+ const modelTaskData = handleRecognizeAudioModel(selectModel, source);
+ return {
+ repo_id: selectModel.name,
+ name: name,
+ backend:
+ modelTaskData.type === modelTaskMap.audio
+ ? backendOptionsMap.voxBox
+ : selectModel.isGGUF
+ ? backendOptionsMap.llamaBox
+ : backendOptionsMap.vllm
+ };
+ };
+
+ return {
+ onSelectModel
+ };
+};