diff --git a/.lintstagedrc b/.lintstagedrc index e0257748..5400ebd1 100644 --- a/.lintstagedrc +++ b/.lintstagedrc @@ -1,4 +1,5 @@ { + "concurrent": 2, "*.{md,json}": ["prettier --cache --write"], "*.{js,jsx}": ["max lint --fix --eslint-only", "prettier --cache --write"], "*.{css,less}": [ @@ -8,6 +9,5 @@ "*.ts?(x)": [ "max lint --fix --eslint-only", "prettier --cache --parser=typescript --write" - ], - "src/locales/**/*.ts": ["npx tsx src/locales/check.ts"] + ] } diff --git a/src/locales/en-US/resources.ts b/src/locales/en-US/resources.ts index a880b75d..43c59c19 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 --cache-dir.', + 'The default storage directory is /var/lib/gpustack/cache, or the directory specified by --cache-dir (preferred) or --data-dir.', 'resources.modelfiles.retry.download': 'Retry Download', 'resources.modelfiles.storagePath.holder': 'Waiting for the download to complete...', diff --git a/src/locales/ja-JP/resources.ts b/src/locales/ja-JP/resources.ts index 0f167323..5ac7492b 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 --cache-dir.', + 'The default storage directory is /var/lib/gpustack/cache, or the directory specified by --cache-dir (preferred) or --data-dir.', 'resources.modelfiles.retry.download': 'Retry Download', 'resources.modelfiles.storagePath.holder': 'Waiting for download to complete...', diff --git a/src/locales/ru-RU/resources.ts b/src/locales/ru-RU/resources.ts index f0c5a437..bf940488 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': - 'Каталог по умолчанию --cache-dir.', + 'The default storage directory is /var/lib/gpustack/cache, or the directory specified by --cache-dir (preferred) or --data-dir.', 'resources.modelfiles.retry.download': 'Повторить загрузку', 'resources.modelfiles.storagePath.holder': 'Ожидание завершения загрузки...', 'resources.filter.worker': 'Фильтровать по узлу', @@ -77,5 +77,6 @@ export default { // ========== To-Do: Translate Keys (Remove After Translation) ========== // 1. 'resources.worker.cann.tips', // 2. 'resources.worker.add.step2.tips', -// 3. 'resources.worker.driver.install' +// 3. 'resources.worker.driver.install', +// 4. 'resources.modelfiles.form.localdir.tips', // ========== End of To-Do List ========== diff --git a/src/locales/zh-CN/resources.ts b/src/locales/zh-CN/resources.ts index 742269e7..0b49c85a 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,或使用 --cache-dir 指定的目录', + '默认存储目录为 /var/lib/gpustack/cache,或使用 --cache-dir(优先)、--data-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 1615dcf9..7207fd57 100644 --- a/src/pages/llmodels/components/data-form.tsx +++ b/src/pages/llmodels/components/data-form.tsx @@ -82,7 +82,9 @@ const DataForm: React.FC = forwardRef((props, ref) => { const handleBackendChange = async (val: string) => { const updates = { - backend_version: '' + backend_version: '', + backend_parameters: [], + env: {} }; if (val === backendOptionsMap.llamaBox) { Object.assign(updates, { diff --git a/src/pages/llmodels/components/update-modal.tsx b/src/pages/llmodels/components/update-modal.tsx index 449e853d..4914504e 100644 --- a/src/pages/llmodels/components/update-modal.tsx +++ b/src/pages/llmodels/components/update-modal.tsx @@ -126,7 +126,9 @@ const UpdateModal: React.FC = (props) => { const handleBackendChange = (backend: string) => { const updates = { - backend_version: '' + backend_version: '', + backend_parameters: [], + env: {} }; if (backend === backendOptionsMap.llamaBox) { Object.assign(updates, { diff --git a/src/pages/llmodels/hooks/index.ts b/src/pages/llmodels/hooks/index.ts index 2bc12fe6..d4075731 100644 --- a/src/pages/llmodels/hooks/index.ts +++ b/src/pages/llmodels/hooks/index.ts @@ -353,14 +353,12 @@ export const useCheckCompatibility = () => { const isOllamaModel = localPath?.includes('ollama'); const isGGUFFile = localPath.endsWith('.gguf'); + const isOllamaModelFile = isBlobFile || isOllamaModel; + let warningMessage = ''; - if (isBlobFile && isOllamaModel && backend === backendOptionsMap.llamaBox) { + if (isOllamaModelFile && backend === backendOptionsMap.llamaBox) { warningMessage = ''; - } else if ( - isBlobFile && - isOllamaModel && - backend !== backendOptionsMap.llamaBox - ) { + } else if (isOllamaModelFile && backend !== backendOptionsMap.llamaBox) { warningMessage = intl.formatMessage({ id: 'models.form.ollama.warning' }); @@ -488,9 +486,7 @@ export const useCheckCompatibility = () => { source: source }); - if (res.show) { - setWarningStatus?.(res); - } + setWarningStatus?.(res); return res; }; diff --git a/src/pages/resources/components/container-install.tsx b/src/pages/resources/components/container-install.tsx index d0fc8e0e..fdc2e2af 100644 --- a/src/pages/resources/components/container-install.tsx +++ b/src/pages/resources/components/container-install.tsx @@ -137,13 +137,19 @@ const AddWorker: React.FC = (props) => { > ) : ( - + )}

3. {intl.formatMessage({ id: 'resources.worker.add.step3' })} diff --git a/src/pages/resources/components/styles/installation.less b/src/pages/resources/components/styles/installation.less index 7447278b..eb6ae8a3 100644 --- a/src/pages/resources/components/styles/installation.less +++ b/src/pages/resources/components/styles/installation.less @@ -17,7 +17,7 @@ } .code-pre { - white-space: pre-line !important; + white-space: normal !important; } .ant-radio-button-wrapper { diff --git a/src/pages/resources/config/index.ts b/src/pages/resources/config/index.ts index 286334ad..da5fe8d5 100644 --- a/src/pages/resources/config/index.ts +++ b/src/pages/resources/config/index.ts @@ -41,13 +41,13 @@ export const addWorkerGuide: Record = { token: string; workerip: string; }) { - return `docker run -d --name gpustack \ - --restart=unless-stopped \ - --gpus all \ - --network=host \ - --ipc=host \ - -v gpustack-data:/var/lib/gpustack \ - gpustack/gpustack:${params.tag} \ + return `docker run -d --name gpustack \\ + --restart=unless-stopped \\ + --gpus all \\ + --network=host \\ + --ipc=host \\ + -v gpustack-data:/var/lib/gpustack \\ + gpustack/gpustack:${params.tag} \\ --server-url ${params.server} --token ${params.token} --worker-ip ${params.workerip}`; } }, @@ -60,22 +60,22 @@ export const addWorkerGuide: Record = { token: string; workerip: string; }) { - return `docker run -d --name gpustack \ - --restart=unless-stopped \ - --device /dev/davinci0 \ - --device /dev/davinci1 \ - --device /dev/davinci_manager \ - --device /dev/devmm_svm \ - --device /dev/hisi_hdc \ - -v /usr/local/dcmi:/usr/local/dcmi \ - -v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \ - -v /usr/local/Ascend/driver/lib64/:/usr/local/Ascend/driver/lib64/ \ - -v /usr/local/Ascend/driver/version.info:/usr/local/Ascend/driver/version.info \ - -v /etc/ascend_install.info:/etc/ascend_install.info \ - --network=host \ - --ipc=host \ - -v gpustack-data:/var/lib/gpustack \ - gpustack/gpustack:${params.tag} \ + return `docker run -d --name gpustack \\ + --restart=unless-stopped \\ + --device /dev/davinci0 \\ + --device /dev/davinci1 \\ + --device /dev/davinci_manager \\ + --device /dev/devmm_svm \\ + --device /dev/hisi_hdc \\ + -v /usr/local/dcmi:/usr/local/dcmi \\ + -v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \\ + -v /usr/local/Ascend/driver/lib64/:/usr/local/Ascend/driver/lib64/ \\ + -v /usr/local/Ascend/driver/version.info:/usr/local/Ascend/driver/version.info \\ + -v /etc/ascend_install.info:/etc/ascend_install.info \\ + --network=host \\ + --ipc=host \\ + -v gpustack-data:/var/lib/gpustack \\ + gpustack/gpustack:${params.tag} \\ --server-url ${params.server} --token ${params.token} --worker-ip ${params.workerip}`; } }, @@ -88,22 +88,22 @@ export const addWorkerGuide: Record = { token: string; workerip: string; }) { - return `docker run -d --name gpustack \ - --restart=unless-stopped \ - --device /dev/davinci0 \ - --device /dev/davinci1 \ - --device /dev/davinci_manager \ - --device /dev/devmm_svm \ - --device /dev/hisi_hdc \ - -v /usr/local/dcmi:/usr/local/dcmi \ - -v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \ - -v /usr/local/Ascend/driver/lib64/:/usr/local/Ascend/driver/lib64/ \ - -v /usr/local/Ascend/driver/version.info:/usr/local/Ascend/driver/version.info \ - -v /etc/ascend_install.info:/etc/ascend_install.info \ - --network=host \ - --ipc=host \ - -v gpustack-data:/var/lib/gpustack \ - gpustack/gpustack:${params.tag}-310p \ + return `docker run -d --name gpustack \\ + --restart=unless-stopped \\ + --device /dev/davinci0 \\ + --device /dev/davinci1 \\ + --device /dev/davinci_manager \\ + --device /dev/devmm_svm \\ + --device /dev/hisi_hdc \\ + -v /usr/local/dcmi:/usr/local/dcmi \\ + -v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \\ + -v /usr/local/Ascend/driver/lib64/:/usr/local/Ascend/driver/lib64/ \\ + -v /usr/local/Ascend/driver/version.info:/usr/local/Ascend/driver/version.info \\ + -v /etc/ascend_install.info:/etc/ascend_install.info \\ + --network=host \\ + --ipc=host \\ + -v gpustack-data:/var/lib/gpustack \\ + gpustack/gpustack:${params.tag}-310p \\ --server-url ${params.server} --token ${params.token} --worker-ip ${params.workerip}`; } }, @@ -116,12 +116,12 @@ export const addWorkerGuide: Record = { token: string; workerip: string; }) { - return `docker run -d --name gpustack \ - --restart=unless-stopped \ - --network=host \ - --ipc=host \ - -v gpustack-data:/var/lib/gpustack \ - gpustack/gpustack:${params.tag} \ + return `docker run -d --name gpustack \\ + --restart=unless-stopped \\ + --network=host \\ + --ipc=host \\ + -v gpustack-data:/var/lib/gpustack \\ + gpustack/gpustack:${params.tag} \\ --server-url ${params.server} --token ${params.token} --worker-ip ${params.workerip}`; } }, @@ -134,11 +134,11 @@ export const addWorkerGuide: Record = { token: string; workerip: string; }) { - return `docker run -d --name gpustack \ - --restart=unless-stopped \ - --network=host \ - -v gpustack-data:/var/lib/gpustack \ - gpustack/gpustack:${params.tag} \ + return `docker run -d --name gpustack \\ + --restart=unless-stopped \\ + --network=host \\ + -v gpustack-data:/var/lib/gpustack \\ + gpustack/gpustack:${params.tag} \\ --server-url ${params.server} --token ${params.token} --worker-ip ${params.workerip}`; } }, @@ -149,17 +149,17 @@ export const addWorkerGuide: Record = { token: string; workerip: string; }) { - return `docker run -d --name gpustack \ - --restart=unless-stopped \ - --device=/dev/kfd \ - --device=/dev/dri \ - --network=host \ - --ipc=host \ - --group-add video \ - --cap-add=SYS_PTRACE \ - --security-opt seccomp=unconfined \ - -v gpustack-data:/var/lib/gpustack \ - gpustack/gpustack:${params.tag} \ + return `docker run -d --name gpustack \\ + --restart=unless-stopped \\ + --device=/dev/kfd \\ + --device=/dev/dri \\ + --network=host \\ + --ipc=host \\ + --group-add video \\ + --cap-add=SYS_PTRACE \\ + --security-opt seccomp=unconfined \\ + -v gpustack-data:/var/lib/gpustack \\ + gpustack/gpustack:${params.tag} \\ --server-url ${params.server} --token ${params.token} --worker-ip ${params.workerip}`; } }, @@ -170,19 +170,19 @@ export const addWorkerGuide: Record = { token: string; workerip: string; }) { - return `docker run -d --name gpustack \ - --restart=unless-stopped \ - --device=/dev/kfd \ - --device=/dev/mkfd \ - --device=/dev/dri \ - -v /opt/hyhal:/opt/hyhal:ro \ - --network=host \ - --ipc=host \ - --group-add video \ - --cap-add=SYS_PTRACE \ - --security-opt seccomp=unconfined \ - -v gpustack-data:/var/lib/gpustack \ - gpustack/gpustack:${params.tag} \ + return `docker run -d --name gpustack \\ + --restart=unless-stopped \\ + --device=/dev/kfd \\ + --device=/dev/mkfd \\ + --device=/dev/dri \\ + -v /opt/hyhal:/opt/hyhal:ro \\ + --network=host \\ + --ipc=host \\ + --group-add video \\ + --cap-add=SYS_PTRACE \\ + --security-opt seccomp=unconfined \\ + -v gpustack-data:/var/lib/gpustack \\ + gpustack/gpustack:${params.tag} \\ --server-url ${params.server} --token ${params.token} --worker-ip ${params.workerip}`; } },