fix: add version holder for backend

This commit is contained in:
jialin
2025-05-12 15:13:44 +08:00
parent 2b7eb832ed
commit 2416fd1c71
13 changed files with 63 additions and 39 deletions
+15 -4
View File
@@ -8,22 +8,21 @@
border-spacing: 0; border-spacing: 0;
td { td {
border-bottom: 1px solid var(--ant-color-split); border-bottom: 1px solid var(--color-white-light-1);
} }
th { th {
border-bottom: 1px solid var(--ant-color-split); border-bottom: 1px solid var(--color-white-light-1);
} }
} }
th { th {
height: 36px; height: 36px;
font-weight: 600; font-weight: 600;
color: var(--ant-color-text);
} }
td { td {
color: var(--ant-color-text-secondary); color: var(--color-white-quaternary);
} }
.cell-span { .cell-span {
@@ -35,4 +34,16 @@
.cell-header { .cell-header {
font-weight: var(--font-weight-medium); font-weight: var(--font-weight-medium);
} }
&.light {
th {
color: var(--ant-color-text);
border-bottom: 1px solid var(--ant-color-split);
}
td {
color: var(--ant-color-text);
border-bottom: 1px solid var(--ant-color-split);
}
}
} }
+2 -2
View File
@@ -43,12 +43,12 @@ interface SimpleTableProps {
rowKey: string; rowKey: string;
} }
const SimpleTabel: React.FC<SimpleTableProps> = (props) => { const SimpleTabel: React.FC<SimpleTableProps> = (props) => {
const { columns, dataSource, rowKey, bordered = true } = props; const { columns, dataSource, rowKey, theme, bordered = true } = props;
return ( return (
<div> <div>
<table <table
className={classNames('simple-table', { className={classNames('simple-table', theme, {
'simple-table-bordered': bordered 'simple-table-bordered': bordered
})} })}
> >
+1 -1
View File
@@ -147,7 +147,7 @@ export default {
'common.copy.notSupport': 'Your browser does not support Clipboard API', 'common.copy.notSupport': 'Your browser does not support Clipboard API',
'common.title.basicInfo': 'Basic', 'common.title.basicInfo': 'Basic',
'common.help.need': 'Need help?', 'common.help.need': 'Need help?',
'common.help.eg': 'e.g.:', 'common.help.eg': 'e.g.,',
'common.filter.label': 'Filters', 'common.filter.label': 'Filters',
'common.filter.isrequired.holder': 'Optional', 'common.filter.isrequired.holder': 'Optional',
'common.filter.isrequired.true': 'Required', 'common.filter.isrequired.true': 'Required',
+1 -1
View File
@@ -80,7 +80,7 @@ export default {
'models.form.filePath': 'Model Path', 'models.form.filePath': 'Model Path',
'models.form.backendVersion': 'Backend Version', 'models.form.backendVersion': 'Backend Version',
'models.form.backendVersion.tips': 'models.form.backendVersion.tips':
'To use the desired version of {backend}, the system will automatically create a virtual environment in the online environment to install the corresponding version. After a GPUStack upgrade, the backend version will remain fixed. {link}', 'To use the desired version of {backend}{version}, the system will automatically create a virtual environment in the online environment to install the corresponding version. After a GPUStack upgrade, the backend version will remain fixed. {link}',
'models.form.gpuselector': 'GPU Selector', 'models.form.gpuselector': 'GPU Selector',
'models.form.backend.llamabox': 'models.form.backend.llamabox':
'For GGUF format models, supports Linux, macOS, and Windows.', 'For GGUF format models, supports Linux, macOS, and Windows.',
+1 -1
View File
@@ -79,7 +79,7 @@ export default {
'models.form.filePath': 'モデルパス', 'models.form.filePath': 'モデルパス',
'models.form.backendVersion': 'バックエンドバージョン', 'models.form.backendVersion': 'バックエンドバージョン',
'models.form.backendVersion.tips': 'models.form.backendVersion.tips':
'希望する{backend}バージョンを使用するには、システムがオンライン環境で対応するバージョンをインストールする仮想環境を自動的に作成します。GPUStackのアップグレード後もバックエンドバージョンは固定されます。{link}', '希望する{backend}{version}バージョンを使用するには、システムがオンライン環境で対応するバージョンをインストールする仮想環境を自動的に作成します。GPUStackのアップグレード後もバックエンドバージョンは固定されます。{link}',
'models.form.gpuselector': 'GPUセレクター', 'models.form.gpuselector': 'GPUセレクター',
'models.form.backend.llamabox': 'models.form.backend.llamabox':
'GGUF形式のモデル用(Linux、macOS、Windowsをサポート)。', 'GGUF形式のモデル用(Linux、macOS、Windowsをサポート)。',
+1 -1
View File
@@ -80,7 +80,7 @@ export default {
'models.form.filePath': 'Путь к модели', 'models.form.filePath': 'Путь к модели',
'models.form.backendVersion': 'Версия бэкенда', 'models.form.backendVersion': 'Версия бэкенда',
'models.form.backendVersion.tips': 'models.form.backendVersion.tips':
'Чтобы использовать желаемую версию {backend}, система автоматически создаст виртуальную среду в онлайн-окружении для установки соответствующей версии. После обновления GPUStack версия бэкенда останется зафиксированной. {link}', 'Чтобы использовать желаемую версию {backend} {version}, система автоматически создаст виртуальную среду в онлайн-окружении для установки соответствующей версии. После обновления GPUStack версия бэкенда останется зафиксированной. {link}',
'models.form.gpuselector': 'Селектор GPU', 'models.form.gpuselector': 'Селектор GPU',
'models.form.backend.llamabox': 'models.form.backend.llamabox':
'Для моделей формата GGUF. Поддержка Linux, macOS и Windows.', 'Для моделей формата GGUF. Поддержка Linux, macOS и Windows.',
+1 -1
View File
@@ -141,7 +141,7 @@ export default {
'common.copy.notSupport': '您的浏览器不支持剪贴板 API', 'common.copy.notSupport': '您的浏览器不支持剪贴板 API',
'common.title.basicInfo': '基本信息', 'common.title.basicInfo': '基本信息',
'common.help.need': '需要帮助?', 'common.help.need': '需要帮助?',
'common.help.eg': '例:', 'common.help.eg': '例:',
'common.filter.label': '筛选', 'common.filter.label': '筛选',
'common.filter.isrequired.holder': '是否必填', 'common.filter.isrequired.holder': '是否必填',
'common.filter.isrequired.true': '必填', 'common.filter.isrequired.true': '必填',
+1 -1
View File
@@ -79,7 +79,7 @@ export default {
'models.form.filePath': '模型路径', 'models.form.filePath': '模型路径',
'models.form.backendVersion': '后端版本', 'models.form.backendVersion': '后端版本',
'models.form.backendVersion.tips': 'models.form.backendVersion.tips':
'固定以使用期望的 {backend} 版本,在线环境会自动创建虚拟环境安装对应版本的 {backend}。在 GPUStack 升级后也将保持固定的后端版本。{link}', '固定以使用期望的 {backend} 版本 {version},在线环境会自动创建虚拟环境安装对应版本的 {backend}。在 GPUStack 升级后也将保持固定的后端版本。{link}',
'models.form.gpuselector': 'GPU 选择器', 'models.form.gpuselector': 'GPU 选择器',
'models.form.backend.llamabox': 'models.form.backend.llamabox':
'用于 GGUF 格式模型,支持 Linux, macOS 和 Windows。', '用于 GGUF 格式模型,支持 Linux, macOS 和 Windows。',
+1 -1
View File
@@ -42,7 +42,7 @@ const Catalog: React.FC = () => {
}); });
const [queryParams, setQueryParams] = useState({ const [queryParams, setQueryParams] = useState({
page: 1, page: 1,
perPage: 30, perPage: 24,
search: '', search: '',
categories: '' categories: ''
}); });
@@ -124,21 +124,24 @@ const AdvanceConfig: React.FC<AdvanceConfigProps> = (props) => {
return { return {
backend: 'llama-box', backend: 'llama-box',
releases: 'https://github.com/gpustack/llama-box/releases', releases: 'https://github.com/gpustack/llama-box/releases',
link: 'https://github.com/gpustack/llama-box?tab=readme-ov-file#usage' link: 'https://github.com/gpustack/llama-box?tab=readme-ov-file#usage',
version: 'v0.0.140'
}; };
} }
if (backend === backendOptionsMap.vllm) { if (backend === backendOptionsMap.vllm) {
return { return {
backend: 'vLLM', backend: 'vLLM',
releases: 'https://github.com/vllm-project/vllm/releases', releases: 'https://github.com/vllm-project/vllm/releases',
link: 'https://docs.vllm.ai/en/stable/serving/openai_compatible_server.html#cli-reference' link: 'https://docs.vllm.ai/en/stable/serving/openai_compatible_server.html#cli-reference',
version: 'v0.8.5'
}; };
} }
if (backend === backendOptionsMap.ascendMindie) { if (backend === backendOptionsMap.ascendMindie) {
return { return {
backend: 'Ascend MindIE', backend: 'Ascend MindIE',
releases: '', releases: '',
link: 'http://docs.gpustack.ai/latest/user-guide/inference-backends/#parameters-reference_2' link: 'http://docs.gpustack.ai/latest/user-guide/inference-backends/#parameters-reference_2',
version: 'v0.1.0'
}; };
} }
@@ -349,6 +352,11 @@ const AdvanceConfig: React.FC<AdvanceConfigProps> = (props) => {
<Form.Item name="backend_version"> <Form.Item name="backend_version">
<SealInput.Input <SealInput.Input
placeholder={
backendParamsTips?.version
? `${intl.formatMessage({ id: 'common.help.eg' })} ${backendParamsTips?.version}`
: ''
}
onBlur={handleBackendVersionOnBlur} onBlur={handleBackendVersionOnBlur}
label={intl.formatMessage({ id: 'models.form.backendVersion' })} label={intl.formatMessage({ id: 'models.form.backendVersion' })}
description={intl.formatMessage( description={intl.formatMessage(
@@ -357,6 +365,9 @@ const AdvanceConfig: React.FC<AdvanceConfigProps> = (props) => {
}, },
{ {
backend: backendLabelMap[backend], backend: backendLabelMap[backend],
version: backendParamsTips?.version
? `(${intl.formatMessage({ id: 'common.help.eg' })} ${backendParamsTips?.version})`
: '',
link: backendParamsTips?.releases && ( link: backendParamsTips?.releases && (
<span <span
style={{ style={{
@@ -145,12 +145,12 @@ const AddModal: FC<AddModalProps> = (props) => {
categories: getCategory(item) categories: getCategory(item)
}); });
if ( if (item.fakeName) {
item.fakeName && handleOnValuesChange?.({
!isHolderRef.current.model && changedValues: {},
!isHolderRef.current.file allValues: form.current?.form?.getFieldsValue?.(),
) { source: props.source
handleShowCompatibleAlert(item.evaluateResult); });
} }
}; };
@@ -353,7 +353,6 @@ const AddModal: FC<AddModalProps> = (props) => {
modelSource={props.source} modelSource={props.source}
onSelectFile={handleSelectModelFile} onSelectFile={handleSelectModelFile}
collapsed={collapsed} collapsed={collapsed}
displayEvaluateStatus={displayEvaluateStatus}
gpuOptions={props.gpuOptions} gpuOptions={props.gpuOptions}
></HFModelFile> ></HFModelFile>
)} )}
@@ -160,10 +160,8 @@ const RenderWorkerDownloading = (props: {
<Tooltip <Tooltip
arrow={true} arrow={true}
overlayInnerStyle={{ overlayInnerStyle={{
width: 300, width: 300
backgroundColor: 'var(--color-spotlight-bg)'
}} }}
overlayClassName="light-downloading-tooltip"
title={ title={
<RenderRayactorDownloading <RenderRayactorDownloading
severList={rayActors} severList={rayActors}
@@ -477,6 +475,7 @@ const InstanceItem: React.FC<InstanceItemProps> = ({
return ( return (
<TooltipOverlayScroller <TooltipOverlayScroller
toolTipProps={{ toolTipProps={{
trigger: 'click',
overlayInnerStyle: { overlayInnerStyle: {
width: 'max-content', width: 'max-content',
maxWidth: '520px', maxWidth: '520px',
+17 -13
View File
@@ -261,12 +261,17 @@ const SearchModel: React.FC<SearchInputProps> = (props) => {
const currentItem = resultList.find( const currentItem = resultList.find(
(item) => item.id === currentRef.current (item) => item.id === currentRef.current
); );
displayEvaluateStatus?.({
show: false, // if item is GGUF, the evaluating would be do after selecting the model file.
flag: { if (currentItem && !currentItem.isGGUF) {
model: false displayEvaluateStatus?.({
} show: false,
}); flag: {
model: false
}
});
}
if (currentItem) { if (currentItem) {
handleOnSelectModel(currentItem, true); handleOnSelectModel(currentItem, true);
} }
@@ -292,12 +297,6 @@ const SearchModel: React.FC<SearchInputProps> = (props) => {
return { ...pre }; return { ...pre };
}); });
setLoadingModel?.(true); setLoadingModel?.(true);
displayEvaluateStatus?.({
show: true,
flag: {
model: true
}
});
cacheRepoOptions.current = []; cacheRepoOptions.current = [];
let list: any[] = []; let list: any[] = [];
if (modelSource === modelSourceMap.huggingface_value) { if (modelSource === modelSourceMap.huggingface_value) {
@@ -306,7 +305,6 @@ const SearchModel: React.FC<SearchInputProps> = (props) => {
list = await getModelsFromModelscope(sort); list = await getModelsFromModelscope(sort);
} }
cacheRepoOptions.current = list; cacheRepoOptions.current = list;
console.log('list=========', list);
setDataSource({ setDataSource({
repoOptions: list, repoOptions: list,
@@ -314,6 +312,12 @@ const SearchModel: React.FC<SearchInputProps> = (props) => {
networkError: false, networkError: false,
sortType: sort sortType: sort
}); });
displayEvaluateStatus?.({
show: true,
flag: {
model: true
}
});
handleOnSelectModel(list[0]); handleOnSelectModel(list[0]);
setLoadingModel?.(false); setLoadingModel?.(false);