fix(style): unify casing of system terms
This commit is contained in:
@@ -12,7 +12,6 @@ interface NoteInfoProps {
|
|||||||
const NoteInfo: React.FC<NoteInfoProps> = (props) => {
|
const NoteInfo: React.FC<NoteInfoProps> = (props) => {
|
||||||
const { required, description, label, labelExtra } = props || {};
|
const { required, description, label, labelExtra } = props || {};
|
||||||
if (!label) return null;
|
if (!label) return null;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<span className="label-text">
|
<span className="label-text">
|
||||||
{description ? (
|
{description ? (
|
||||||
|
|||||||
@@ -10,6 +10,9 @@ import {
|
|||||||
const InputWrapper = styled.div`
|
const InputWrapper = styled.div`
|
||||||
.seal-input-number {
|
.seal-input-number {
|
||||||
padding-right: 0;
|
padding-right: 0;
|
||||||
|
.isfoucs-has-value {
|
||||||
|
top: 9px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
.seal-input-wrapper-disabled {
|
.seal-input-wrapper-disabled {
|
||||||
background-color: var(--ant-color-bg-container-disabled);
|
background-color: var(--ant-color-bg-container-disabled);
|
||||||
@@ -82,7 +85,7 @@ const InputWrapper = styled.div`
|
|||||||
input.ant-input-number-input {
|
input.ant-input-number-input {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
height: ${INPUTHEIGHT}px !important;
|
height: ${INPUTHEIGHT}px !important;
|
||||||
padding-block: 5px;
|
padding-block: 5px 4px;
|
||||||
padding-inline: ${INPUT_INNER_PADDING}px;
|
padding-inline: ${INPUT_INNER_PADDING}px;
|
||||||
}
|
}
|
||||||
.ant-input-group {
|
.ant-input-group {
|
||||||
|
|||||||
@@ -1,6 +1,26 @@
|
|||||||
import { useIntl } from '@umijs/max';
|
import { useIntl } from '@umijs/max';
|
||||||
import { Typography } from 'antd';
|
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
import styled from 'styled-components';
|
||||||
|
|
||||||
|
const UL = styled.ul`
|
||||||
|
list-style: none;
|
||||||
|
padding-left: 0;
|
||||||
|
margin: 0;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
li {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
.title {
|
||||||
|
font-weight: 600;
|
||||||
|
color: var(--ant-color-text-light-solid);
|
||||||
|
}
|
||||||
|
.content {
|
||||||
|
color: var(--color-white-tertiary);
|
||||||
|
display: inline-flex;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
|
||||||
interface TooltipListProps {
|
interface TooltipListProps {
|
||||||
list: { title: any; tips: string }[];
|
list: { title: any; tips: string }[];
|
||||||
@@ -10,36 +30,23 @@ const TooltipList: React.FC<TooltipListProps> = (props) => {
|
|||||||
const intl = useIntl();
|
const intl = useIntl();
|
||||||
const { list } = props;
|
const { list } = props;
|
||||||
return (
|
return (
|
||||||
<ul className="tips-desc-list">
|
<UL>
|
||||||
{list.map((item, index: number) => {
|
{list.map((item, index: number) => {
|
||||||
return (
|
return (
|
||||||
<li className="m-b-8" key={index}>
|
<li key={index}>
|
||||||
<Typography.Title
|
<span className="title">
|
||||||
level={5}
|
|
||||||
style={{
|
|
||||||
color: 'var(--color-white-1)',
|
|
||||||
marginRight: 10,
|
|
||||||
marginBottom: 0
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
{item.title?.locale
|
{item.title?.locale
|
||||||
? intl.formatMessage({ id: item.title?.text || '' })
|
? intl.formatMessage({ id: item.title?.text || '' })
|
||||||
: item.title}
|
: item.title}
|
||||||
:
|
:
|
||||||
</Typography.Title>
|
</span>
|
||||||
<Typography.Text
|
<span className="content">
|
||||||
style={{
|
|
||||||
color: 'var(--color-white-1)',
|
|
||||||
display: 'inline-flex',
|
|
||||||
lineHeight: 1.5
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
{intl.formatMessage({ id: item.tips })}
|
{intl.formatMessage({ id: item.tips })}
|
||||||
</Typography.Text>
|
</span>
|
||||||
</li>
|
</li>
|
||||||
);
|
);
|
||||||
})}
|
})}
|
||||||
</ul>
|
</UL>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ export default {
|
|||||||
'resources.form.spread.tips':
|
'resources.form.spread.tips':
|
||||||
'Make the resources of the entire cluster relatively evenly distributed among all workers. It may produce more resource fragmentation on a single worker.',
|
'Make the resources of the entire cluster relatively evenly distributed among all workers. It may produce more resource fragmentation on a single worker.',
|
||||||
'resources.form.binpack.tips':
|
'resources.form.binpack.tips':
|
||||||
'Prioritize the overall utilization of cluster resources, reducing resource fragmentation on Workers/GPUs.',
|
'Prioritize the overall utilization of cluster resources, reducing resource fragmentation on GPUs/Workers.',
|
||||||
'resources.form.workerSelector.description':
|
'resources.form.workerSelector.description':
|
||||||
'The system selects the most suitable GPU or Worker for deploying model instances based on predefined labels.',
|
'The system selects the most suitable GPU or Worker for deploying model instances based on predefined labels.',
|
||||||
'resources.table.ip': 'IP',
|
'resources.table.ip': 'IP',
|
||||||
@@ -39,16 +39,16 @@ export default {
|
|||||||
'resources.table.used': 'Used',
|
'resources.table.used': 'Used',
|
||||||
'resources.table.allocated': 'Allocated',
|
'resources.table.allocated': 'Allocated',
|
||||||
'resources.table.wokers': 'workers',
|
'resources.table.wokers': 'workers',
|
||||||
'resources.worker.linuxormaxos': 'Linux or MacOS',
|
'resources.worker.linuxormaxos': 'Linux or macOS',
|
||||||
'resources.table.unified': 'Unified Memory',
|
'resources.table.unified': 'Unified Memory',
|
||||||
'resources.worker.add.step1':
|
'resources.worker.add.step1':
|
||||||
'Get Token <span class="note-text">(Run on the server)</span>',
|
'Get Token <span class="note-text">(Run on the server)</span>',
|
||||||
'resources.worker.add.step2': 'Register Worker',
|
'resources.worker.add.step2': 'Register Worker',
|
||||||
'resources.worker.add.step2.tips':
|
'resources.worker.add.step2.tips':
|
||||||
'Note: run on the worker to be added, <span style="color: #000;font-weight: 600">mytoken</span> is the token obtained in the first step.',
|
'(Run on the worker to be added, <span style="color: #000;font-weight: 600">mytoken</span> is the token obtained in the first step.)',
|
||||||
'resources.worker.add.step3':
|
'resources.worker.add.step3':
|
||||||
'After success, refresh the workers list to see the new worker.',
|
'After success, refresh the workers list to view the new worker.',
|
||||||
'resources.worker.container.supported': 'Do not support MacOS or Windows.',
|
'resources.worker.container.supported': 'Do not support macOS or Windows.',
|
||||||
'resources.worker.current.version': 'Current version is {version}.',
|
'resources.worker.current.version': 'Current version is {version}.',
|
||||||
'resources.worker.driver.install':
|
'resources.worker.driver.install':
|
||||||
'Ensure all necessary drivers and libraries are installed on the system prior to installing GPUStack.',
|
'Ensure all necessary drivers and libraries are installed on the system prior to installing GPUStack.',
|
||||||
@@ -68,9 +68,9 @@ export default {
|
|||||||
'resources.modelfiles.retry.download': 'Retry Download',
|
'resources.modelfiles.retry.download': 'Retry Download',
|
||||||
'resources.modelfiles.storagePath.holder':
|
'resources.modelfiles.storagePath.holder':
|
||||||
'Waiting for the download to complete...',
|
'Waiting for the download to complete...',
|
||||||
'resources.filter.worker': 'Filter by Worker',
|
'resources.filter.worker': 'Filter by worker',
|
||||||
'resources.filter.source': 'Filter by Source',
|
'resources.filter.source': 'Filter by Source',
|
||||||
'resources.modelfiles.delete.tips': 'Also delete the file from disk!',
|
'resources.modelfiles.delete.tips': 'Also delete the file from disk!',
|
||||||
'resources.modelfiles.copy.tips': 'Copy Full Path',
|
'resources.modelfiles.copy.tips': 'Copy Full Path',
|
||||||
'resources.filter.path': 'Filter by Path'
|
'resources.filter.path': 'Filter by path'
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ export default {
|
|||||||
'Get Token <span class="note-text">(Run on the server)</span>',
|
'Get Token <span class="note-text">(Run on the server)</span>',
|
||||||
'resources.worker.add.step2': 'ワーカーを登録',
|
'resources.worker.add.step2': 'ワーカーを登録',
|
||||||
'resources.worker.add.step2.tips':
|
'resources.worker.add.step2.tips':
|
||||||
'Note: run on the worker to be added, <span style="color: #000;font-weight: 600">mytoken</span> is the token obtained in the first step.',
|
'(Run on the worker to be added, <span style="color: #000;font-weight: 600">mytoken</span> is the token obtained in the first step.)',
|
||||||
'resources.worker.add.step3':
|
'resources.worker.add.step3':
|
||||||
'成功後、ワーカーリストを更新して新しいワーカーを確認してください。',
|
'成功後、ワーカーリストを更新して新しいワーカーを確認してください。',
|
||||||
'resources.worker.container.supported':
|
'resources.worker.container.supported':
|
||||||
@@ -69,11 +69,11 @@ export default {
|
|||||||
'resources.modelfiles.retry.download': 'Retry Download',
|
'resources.modelfiles.retry.download': 'Retry Download',
|
||||||
'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.source': 'Filter by Source',
|
'resources.filter.source': 'Filter by Source',
|
||||||
'resources.modelfiles.delete.tips': 'Also delete the file from disk!',
|
'resources.modelfiles.delete.tips': 'Also delete the file from disk!',
|
||||||
'resources.modelfiles.copy.tips': 'Copy Full Path',
|
'resources.modelfiles.copy.tips': 'Copy Full Path',
|
||||||
'resources.filter.path': 'Filter by Path'
|
'resources.filter.path': 'Filter by path'
|
||||||
};
|
};
|
||||||
|
|
||||||
// ========== To-Do: Translate Keys (Remove After Translation) ==========
|
// ========== To-Do: Translate Keys (Remove After Translation) ==========
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ export default {
|
|||||||
'Получить токен <span class="note-text">(Запустить на сервере)</span>',
|
'Получить токен <span class="note-text">(Запустить на сервере)</span>',
|
||||||
'resources.worker.add.step2': 'Зарегистрировать воркер',
|
'resources.worker.add.step2': 'Зарегистрировать воркер',
|
||||||
'resources.worker.add.step2.tips':
|
'resources.worker.add.step2.tips':
|
||||||
'Примечание: выполнить на подключаемом воркере, <span style="color: #000;font-weight: 600">mytoken</span> это токен, полученный на первом шаге',
|
'(выполнить на подключаемом воркере, <span style="color: #000;font-weight: 600">mytoken</span> это токен, полученный на первом шаге)',
|
||||||
'resources.worker.add.step3':
|
'resources.worker.add.step3':
|
||||||
'После успешной регистрации обновите список воркеров.',
|
'После успешной регистрации обновите список воркеров.',
|
||||||
'resources.worker.container.supported': 'Только для Linux.',
|
'resources.worker.container.supported': 'Только для Linux.',
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ export default {
|
|||||||
'models.form.partialoffload.tips':
|
'models.form.partialoffload.tips':
|
||||||
'启用 CPU 卸载时,如果 GPU 资源不足,则模型的一部分层将被卸载到 CPU 上,在没有 GPU 可用时,会使用纯 CPU 推理。',
|
'启用 CPU 卸载时,如果 GPU 资源不足,则模型的一部分层将被卸载到 CPU 上,在没有 GPU 可用时,会使用纯 CPU 推理。',
|
||||||
'models.form.distribution.tips':
|
'models.form.distribution.tips':
|
||||||
'允许在单个 worker 资源不足时,将部分计算卸载到一个或多个远程 worker。',
|
'允许在单个 Worker 资源不足时,将部分计算卸载到一个或多个远程 Worker。',
|
||||||
'models.openinplayground': '在 Playground 中打开',
|
'models.openinplayground': '在 Playground 中打开',
|
||||||
'models.instances': '实例',
|
'models.instances': '实例',
|
||||||
'models.table.replicas.edit': '调整副本数',
|
'models.table.replicas.edit': '调整副本数',
|
||||||
@@ -54,7 +54,7 @@ export default {
|
|||||||
'models.form.manual.schedule': '手动调度',
|
'models.form.manual.schedule': '手动调度',
|
||||||
'models.table.gpuindex': 'GPU 序号',
|
'models.table.gpuindex': 'GPU 序号',
|
||||||
'models.table.backend': '后端',
|
'models.table.backend': '后端',
|
||||||
'models.table.acrossworker': '跨 worker 推理',
|
'models.table.acrossworker': '跨 Worker 推理',
|
||||||
'models.table.cpuoffload': 'CPU 卸载',
|
'models.table.cpuoffload': 'CPU 卸载',
|
||||||
'models.table.layers': '层',
|
'models.table.layers': '层',
|
||||||
'models.form.backend': '后端',
|
'models.form.backend': '后端',
|
||||||
@@ -85,7 +85,7 @@ export default {
|
|||||||
'models.form.backend.vllm': '用于非 GGUF 格式模型,仅支持 x86 Linux',
|
'models.form.backend.vllm': '用于非 GGUF 格式模型,仅支持 x86 Linux',
|
||||||
'models.form.backend.voxbox': '用于非 GGUF 格式的音频模型',
|
'models.form.backend.voxbox': '用于非 GGUF 格式的音频模型',
|
||||||
'models.form.search.gguftips':
|
'models.form.search.gguftips':
|
||||||
'当 macOS 或 Windows 作 worker 时勾选 GGUF(搜索音频模型时取消勾选)',
|
'当 macOS 或 Windows 作 Worker 时勾选 GGUF(搜索音频模型时取消勾选)',
|
||||||
'models.form.button.addlabel': '添加标签',
|
'models.form.button.addlabel': '添加标签',
|
||||||
'models.filter.category': '按类别筛选',
|
'models.filter.category': '按类别筛选',
|
||||||
'models.list.more.logs': '查看更多',
|
'models.list.more.logs': '查看更多',
|
||||||
|
|||||||
@@ -14,11 +14,11 @@ export default {
|
|||||||
'resources.form.placementStrategy': '放置策略',
|
'resources.form.placementStrategy': '放置策略',
|
||||||
'resources.form.workerSelector': 'Worker 选择器',
|
'resources.form.workerSelector': 'Worker 选择器',
|
||||||
'resources.form.enableDistributedInferenceAcrossWorkers':
|
'resources.form.enableDistributedInferenceAcrossWorkers':
|
||||||
'允许跨 worker 分布式推理',
|
'允许跨 Worker 分布式推理',
|
||||||
'resources.form.spread.tips':
|
'resources.form.spread.tips':
|
||||||
'使得集群整体的资源在所有 Worker 之间分配得相对均匀。可能会在单个 Worker 上产生较多资源碎片。',
|
'使得集群整体的资源在所有 Worker 之间分配得相对均匀。可能会在单个 Worker 上产生较多资源碎片。',
|
||||||
'resources.form.binpack.tips':
|
'resources.form.binpack.tips':
|
||||||
'优先考虑整体集群的资源最大化利用,减少 Worker/GPU 上的资源碎片。',
|
'优先考虑整体集群的资源最大化利用,减少 GPU/Worker 上的资源碎片。',
|
||||||
'resources.form.workerSelector.description':
|
'resources.form.workerSelector.description':
|
||||||
'系统在部署模型实例时,会根据预定义的标签来选择最符合要求的 GPU 或 Worker。',
|
'系统在部署模型实例时,会根据预定义的标签来选择最符合要求的 GPU 或 Worker。',
|
||||||
'resources.table.ip': 'IP',
|
'resources.table.ip': 'IP',
|
||||||
@@ -40,14 +40,14 @@ export default {
|
|||||||
'resources.table.allocated': '已分配',
|
'resources.table.allocated': '已分配',
|
||||||
'resources.table.wokers': 'workers',
|
'resources.table.wokers': 'workers',
|
||||||
'resources.table.unified': '统一内存',
|
'resources.table.unified': '统一内存',
|
||||||
'resources.worker.linuxormaxos': 'Linux 或 MacOS',
|
'resources.worker.linuxormaxos': 'Linux 或 macOS',
|
||||||
'resources.worker.add.step1':
|
'resources.worker.add.step1':
|
||||||
'获取 Token <span class="note-text">(在 server 上运行)</span>',
|
'获取 token<span class="note-text">(在 Server 上运行)</span>',
|
||||||
'resources.worker.add.step2': '注册 Worker',
|
'resources.worker.add.step2': '注册 Worker',
|
||||||
'resources.worker.add.step2.tips':
|
'resources.worker.add.step2.tips':
|
||||||
'注意:在需要添加的 worker 上运行,<span style="color: #000;font-weight: 600">mytoken</span> 为第一步获取到的 Token',
|
'(在需要添加的 Worker 上运行,<span style="color: #000;font-weight: 600">mytoken</span> 为第一步获取到的 token)',
|
||||||
'resources.worker.add.step3': '成功后,刷新 worker 列表即可看到新的 worker',
|
'resources.worker.add.step3': '成功后,刷新 Worker 列表即可看到新的 Worker',
|
||||||
'resources.worker.container.supported': '不支持 MacOS 和 Windows',
|
'resources.worker.container.supported': '不支持 macOS 和 Windows',
|
||||||
'resources.worker.current.version': '当前版本为 {version}',
|
'resources.worker.current.version': '当前版本为 {version}',
|
||||||
'resources.worker.select.command': '选择一个标签生成命令并使用复制按钮复制',
|
'resources.worker.select.command': '选择一个标签生成命令并使用复制按钮复制',
|
||||||
'resources.worker.driver.install':
|
'resources.worker.driver.install':
|
||||||
@@ -66,7 +66,7 @@ export default {
|
|||||||
'默认存储目录为 <span class="desc-block">/var/lib/gpustack/cache</span>,或使用 <span class="desc-block">--cache-dir</span> 指定的目录',
|
'默认存储目录为 <span class="desc-block">/var/lib/gpustack/cache</span>,或使用 <span class="desc-block">--cache-dir</span> 指定的目录',
|
||||||
'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.source': '按来源筛选',
|
'resources.filter.source': '按来源筛选',
|
||||||
'resources.modelfiles.delete.tips': '同时从磁盘删除文件!',
|
'resources.modelfiles.delete.tips': '同时从磁盘删除文件!',
|
||||||
'resources.modelfiles.copy.tips': '复制完整路径',
|
'resources.modelfiles.copy.tips': '复制完整路径',
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ import { CheckboxChangeEvent } from 'antd/es/checkbox';
|
|||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
import React, { useCallback, useMemo } from 'react';
|
import React, { useCallback, useMemo } from 'react';
|
||||||
import {
|
import {
|
||||||
|
backendLabelMap,
|
||||||
backendOptionsMap,
|
backendOptionsMap,
|
||||||
backendParamsHolderTips,
|
backendParamsHolderTips,
|
||||||
modelCategories,
|
modelCategories,
|
||||||
@@ -327,7 +328,7 @@ const AdvanceConfig: React.FC<AdvanceConfigProps> = (props) => {
|
|||||||
id: 'models.form.backendVersion.tips'
|
id: 'models.form.backendVersion.tips'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
backend: backend,
|
backend: backendLabelMap[backend],
|
||||||
link: backendParamsTips?.releases && (
|
link: backendParamsTips?.releases && (
|
||||||
<span
|
<span
|
||||||
style={{
|
style={{
|
||||||
@@ -336,7 +337,7 @@ const AdvanceConfig: React.FC<AdvanceConfigProps> = (props) => {
|
|||||||
>
|
>
|
||||||
<Typography.Link
|
<Typography.Link
|
||||||
className="flex-center"
|
className="flex-center"
|
||||||
style={{ lineHeight: 1 }}
|
style={{ display: 'inline' }}
|
||||||
href={backendParamsTips?.releases}
|
href={backendParamsTips?.releases}
|
||||||
target="_blank"
|
target="_blank"
|
||||||
>
|
>
|
||||||
@@ -375,12 +376,13 @@ const AdvanceConfig: React.FC<AdvanceConfigProps> = (props) => {
|
|||||||
options={paramsConfig}
|
options={paramsConfig}
|
||||||
description={
|
description={
|
||||||
backendParamsTips && (
|
backendParamsTips && (
|
||||||
<span>
|
<span style={{ marginLeft: 5 }}>
|
||||||
{intl.formatMessage(
|
{intl.formatMessage(
|
||||||
{ id: 'models.form.backend_parameters.vllm.tips' },
|
{ id: 'models.form.backend_parameters.vllm.tips' },
|
||||||
{ backend: backendParamsTips.backend || '' }
|
{ backend: backendParamsTips.backend || '' }
|
||||||
)}{' '}
|
)}{' '}
|
||||||
<Typography.Link
|
<Typography.Link
|
||||||
|
style={{ display: 'inline' }}
|
||||||
className="flex-center"
|
className="flex-center"
|
||||||
href={backendParamsTips.link}
|
href={backendParamsTips.link}
|
||||||
target="_blank"
|
target="_blank"
|
||||||
|
|||||||
@@ -85,7 +85,8 @@ const CompatibilityAlert: React.FC<CompatibilityAlertProps> = (props) => {
|
|||||||
}, [type]);
|
}, [type]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
show && (
|
show &&
|
||||||
|
!!message && (
|
||||||
<DivWrapper>
|
<DivWrapper>
|
||||||
<AlertBlockInfo
|
<AlertBlockInfo
|
||||||
ellipsis={false}
|
ellipsis={false}
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import { Form } from 'antd';
|
|||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
import React, { forwardRef, useImperativeHandle } from 'react';
|
import React, { forwardRef, useImperativeHandle } from 'react';
|
||||||
import {
|
import {
|
||||||
|
backendLabelMap,
|
||||||
backendOptionsMap,
|
backendOptionsMap,
|
||||||
backendTipsList,
|
backendTipsList,
|
||||||
excludeFields,
|
excludeFields,
|
||||||
@@ -259,7 +260,7 @@ const DataForm: React.FC<DataFormProps> = forwardRef((props, ref) => {
|
|||||||
options={
|
options={
|
||||||
backendOptions ?? [
|
backendOptions ?? [
|
||||||
{
|
{
|
||||||
label: `llama-box`,
|
label: backendLabelMap[backendOptionsMap.llamaBox],
|
||||||
value: backendOptionsMap.llamaBox,
|
value: backendOptionsMap.llamaBox,
|
||||||
disabled:
|
disabled:
|
||||||
props.source === modelSourceMap.local_path_value
|
props.source === modelSourceMap.local_path_value
|
||||||
@@ -267,7 +268,7 @@ const DataForm: React.FC<DataFormProps> = forwardRef((props, ref) => {
|
|||||||
: !isGGUF
|
: !isGGUF
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: 'vLLM',
|
label: backendLabelMap[backendOptionsMap.vllm],
|
||||||
value: backendOptionsMap.vllm,
|
value: backendOptionsMap.vllm,
|
||||||
disabled:
|
disabled:
|
||||||
props.source === modelSourceMap.local_path_value
|
props.source === modelSourceMap.local_path_value
|
||||||
@@ -275,7 +276,7 @@ const DataForm: React.FC<DataFormProps> = forwardRef((props, ref) => {
|
|||||||
: isGGUF
|
: isGGUF
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: 'Ascend Mindie',
|
label: backendLabelMap[backendOptionsMap.ascendMindie],
|
||||||
value: backendOptionsMap.ascendMindie,
|
value: backendOptionsMap.ascendMindie,
|
||||||
disabled:
|
disabled:
|
||||||
props.source === modelSourceMap.local_path_value
|
props.source === modelSourceMap.local_path_value
|
||||||
@@ -283,7 +284,7 @@ const DataForm: React.FC<DataFormProps> = forwardRef((props, ref) => {
|
|||||||
: isGGUF
|
: isGGUF
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: 'vox-box',
|
label: backendLabelMap[backendOptionsMap.voxBox],
|
||||||
value: backendOptionsMap.voxBox,
|
value: backendOptionsMap.voxBox,
|
||||||
disabled:
|
disabled:
|
||||||
props.source === modelSourceMap.local_path_value
|
props.source === modelSourceMap.local_path_value
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import React, {
|
|||||||
useRef,
|
useRef,
|
||||||
useState
|
useState
|
||||||
} from 'react';
|
} from 'react';
|
||||||
|
import styled from 'styled-components';
|
||||||
import {
|
import {
|
||||||
evaluationsModelSpec,
|
evaluationsModelSpec,
|
||||||
queryHuggingfaceModels,
|
queryHuggingfaceModels,
|
||||||
@@ -26,6 +27,12 @@ import SearchStyle from '../style/search-result.less';
|
|||||||
import SearchInput from './search-input';
|
import SearchInput from './search-input';
|
||||||
import SearchResult from './search-result';
|
import SearchResult from './search-result';
|
||||||
|
|
||||||
|
const UL = styled.ul`
|
||||||
|
list-style: decimal;
|
||||||
|
padding-left: 16px;
|
||||||
|
margin: 0;
|
||||||
|
`;
|
||||||
|
|
||||||
interface SearchInputProps {
|
interface SearchInputProps {
|
||||||
hasLinuxWorker?: boolean;
|
hasLinuxWorker?: boolean;
|
||||||
modelSource: string;
|
modelSource: string;
|
||||||
@@ -315,7 +322,7 @@ const SearchModel: React.FC<SearchInputProps> = (props) => {
|
|||||||
<Tooltip
|
<Tooltip
|
||||||
overlayInnerStyle={{ width: 'max-content' }}
|
overlayInnerStyle={{ width: 'max-content' }}
|
||||||
title={
|
title={
|
||||||
<ul className="tips-desc-list">
|
<UL>
|
||||||
<li>{intl.formatMessage({ id: 'models.search.gguf.tips' })}</li>
|
<li>{intl.formatMessage({ id: 'models.search.gguf.tips' })}</li>
|
||||||
<li>{intl.formatMessage({ id: 'models.search.vllm.tips' })}</li>
|
<li>{intl.formatMessage({ id: 'models.search.vllm.tips' })}</li>
|
||||||
<li>
|
<li>
|
||||||
@@ -323,7 +330,7 @@ const SearchModel: React.FC<SearchInputProps> = (props) => {
|
|||||||
id: 'models.search.voxbox.tips'
|
id: 'models.search.voxbox.tips'
|
||||||
})}
|
})}
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</UL>
|
||||||
}
|
}
|
||||||
>
|
>
|
||||||
GGUF
|
GGUF
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import { Button, Form, Modal, Typography } from 'antd';
|
|||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
import React, { useEffect, useMemo, useRef } from 'react';
|
import React, { useEffect, useMemo, useRef } from 'react';
|
||||||
import {
|
import {
|
||||||
|
backendLabelMap,
|
||||||
backendOptionsMap,
|
backendOptionsMap,
|
||||||
backendTipsList,
|
backendTipsList,
|
||||||
excludeFields,
|
excludeFields,
|
||||||
@@ -504,7 +505,7 @@ const UpdateModal: React.FC<AddModalProps> = (props) => {
|
|||||||
description={<TooltipList list={backendTipsList}></TooltipList>}
|
description={<TooltipList list={backendTipsList}></TooltipList>}
|
||||||
options={[
|
options={[
|
||||||
{
|
{
|
||||||
label: `llama-box`,
|
label: backendLabelMap[backendOptionsMap.llamaBox],
|
||||||
value: backendOptionsMap.llamaBox,
|
value: backendOptionsMap.llamaBox,
|
||||||
disabled:
|
disabled:
|
||||||
formData?.source === modelSourceMap.local_path_value
|
formData?.source === modelSourceMap.local_path_value
|
||||||
@@ -512,7 +513,7 @@ const UpdateModal: React.FC<AddModalProps> = (props) => {
|
|||||||
: !isGGUF
|
: !isGGUF
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: 'vLLM',
|
label: backendLabelMap[backendOptionsMap.vllm],
|
||||||
value: backendOptionsMap.vllm,
|
value: backendOptionsMap.vllm,
|
||||||
disabled:
|
disabled:
|
||||||
formData?.source === modelSourceMap.local_path_value
|
formData?.source === modelSourceMap.local_path_value
|
||||||
@@ -520,7 +521,7 @@ const UpdateModal: React.FC<AddModalProps> = (props) => {
|
|||||||
: isGGUF
|
: isGGUF
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: 'Ascend Mindie',
|
label: backendLabelMap[backendOptionsMap.ascendMindie],
|
||||||
value: backendOptionsMap.ascendMindie,
|
value: backendOptionsMap.ascendMindie,
|
||||||
disabled:
|
disabled:
|
||||||
formData?.source === modelSourceMap.local_path_value
|
formData?.source === modelSourceMap.local_path_value
|
||||||
@@ -528,7 +529,7 @@ const UpdateModal: React.FC<AddModalProps> = (props) => {
|
|||||||
: isGGUF
|
: isGGUF
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: 'vox-box',
|
label: backendLabelMap[backendOptionsMap.voxBox],
|
||||||
value: backendOptionsMap.voxBox,
|
value: backendOptionsMap.voxBox,
|
||||||
disabled:
|
disabled:
|
||||||
formData?.source === modelSourceMap.local_path_value
|
formData?.source === modelSourceMap.local_path_value
|
||||||
|
|||||||
@@ -135,6 +135,13 @@ export const backendOptionsMap = {
|
|||||||
ascendMindie: 'ascend-mindie'
|
ascendMindie: 'ascend-mindie'
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const backendLabelMap = {
|
||||||
|
[backendOptionsMap.llamaBox]: 'llama-box',
|
||||||
|
[backendOptionsMap.vllm]: 'vLLM',
|
||||||
|
[backendOptionsMap.voxBox]: 'vox-box',
|
||||||
|
[backendOptionsMap.ascendMindie]: 'Ascend MindIE'
|
||||||
|
};
|
||||||
|
|
||||||
export const backendParamsHolderTips = {
|
export const backendParamsHolderTips = {
|
||||||
[backendOptionsMap.llamaBox]: {
|
[backendOptionsMap.llamaBox]: {
|
||||||
holder: 'models.form.backend_parameters.llamabox.placeholder',
|
holder: 'models.form.backend_parameters.llamabox.placeholder',
|
||||||
|
|||||||
@@ -307,8 +307,8 @@ export const useCheckCompatibility = () => {
|
|||||||
: compatibility_messages?.join(' ')
|
: compatibility_messages?.join(' ')
|
||||||
};
|
};
|
||||||
if (hasClaim) {
|
if (hasClaim) {
|
||||||
const ram = convertFileSize(resource_claim.ram, 1);
|
const ram = convertFileSize(resource_claim.ram, 2);
|
||||||
const vram = convertFileSize(resource_claim.vram, 1);
|
const vram = convertFileSize(resource_claim.vram, 2);
|
||||||
msgData = {
|
msgData = {
|
||||||
title: intl.formatMessage({ id: 'models.form.check.passed' }),
|
title: intl.formatMessage({ id: 'models.form.check.passed' }),
|
||||||
message: intl.formatMessage(
|
message: intl.formatMessage(
|
||||||
|
|||||||
@@ -88,6 +88,21 @@ const ParamsSettings: React.FC<ParamsSettingsProps> = forwardRef(
|
|||||||
[onValuesChange]
|
[onValuesChange]
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const renderDescription = useCallback(
|
||||||
|
(description: any) => {
|
||||||
|
let desc = description?.text;
|
||||||
|
if (description?.isLocalized) {
|
||||||
|
desc = intl.formatMessage({ id: description?.text });
|
||||||
|
}
|
||||||
|
if (description?.html) {
|
||||||
|
return <div dangerouslySetInnerHTML={{ __html: desc }}></div>;
|
||||||
|
}
|
||||||
|
|
||||||
|
return desc;
|
||||||
|
},
|
||||||
|
[intl]
|
||||||
|
);
|
||||||
|
|
||||||
const renderFields = useMemo(() => {
|
const renderFields = useMemo(() => {
|
||||||
if (!paramsConfig?.length) {
|
if (!paramsConfig?.length) {
|
||||||
return null;
|
return null;
|
||||||
@@ -108,11 +123,7 @@ const ParamsSettings: React.FC<ParamsSettingsProps> = forwardRef(
|
|||||||
? item.disabledConfig?.when?.(formValues)
|
? item.disabledConfig?.when?.(formValues)
|
||||||
: item.disabled
|
: item.disabled
|
||||||
}
|
}
|
||||||
description={
|
description={renderDescription(item.description)}
|
||||||
item.description?.isLocalized
|
|
||||||
? intl.formatMessage({ id: item.description.text })
|
|
||||||
: item.description?.text
|
|
||||||
}
|
|
||||||
onChange={null}
|
onChange={null}
|
||||||
{..._.omit(item, [
|
{..._.omit(item, [
|
||||||
'name',
|
'name',
|
||||||
|
|||||||
@@ -64,5 +64,6 @@ export interface ParamsSchema {
|
|||||||
text: string;
|
text: string;
|
||||||
html?: boolean;
|
html?: boolean;
|
||||||
isLocalized?: boolean;
|
isLocalized?: boolean;
|
||||||
|
isLink?: boolean;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -99,9 +99,9 @@ const AddWorker: React.FC<ViewModalProps> = (props) => {
|
|||||||
className="font-size-12"
|
className="font-size-12"
|
||||||
style={{ color: 'var(--ant-color-text-tertiary)' }}
|
style={{ color: 'var(--ant-color-text-tertiary)' }}
|
||||||
dangerouslySetInnerHTML={{
|
dangerouslySetInnerHTML={{
|
||||||
__html: `(${intl.formatMessage({
|
__html: `${intl.formatMessage({
|
||||||
id: 'resources.worker.add.step2.tips'
|
id: 'resources.worker.add.step2.tips'
|
||||||
})})`
|
})}`
|
||||||
}}
|
}}
|
||||||
></span>
|
></span>
|
||||||
</h3>
|
</h3>
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ const AddWorker: React.FC<ViewModalProps> = (props) => {
|
|||||||
className="font-size-12"
|
className="font-size-12"
|
||||||
style={{ color: 'var(--ant-color-text-tertiary)' }}
|
style={{ color: 'var(--ant-color-text-tertiary)' }}
|
||||||
dangerouslySetInnerHTML={{
|
dangerouslySetInnerHTML={{
|
||||||
__html: `(${labels.step2Tips})`
|
__html: `${labels.step2Tips}`
|
||||||
}}
|
}}
|
||||||
></span>
|
></span>
|
||||||
</h3>
|
</h3>
|
||||||
|
|||||||
Reference in New Issue
Block a user