chore: add no available models notes

This commit is contained in:
jialin
2024-09-29 11:52:50 +08:00
parent bc921ff835
commit 5c2503b2a8
11 changed files with 131 additions and 31 deletions
@@ -161,14 +161,12 @@ const InstanceItem: React.FC<InstanceItemProps> = ({
}}
>
<span className="flex-center">
<AutoTooltip
title={renderWorkerInfo(item)}
ghost
showTitle={true}
>
<AutoTooltip title={item.name} ghost>
<span className="m-r-5">{item.name}</span>
</AutoTooltip>
<InfoCircleOutlined />
<Tooltip title={renderWorkerInfo(item)}>
<InfoCircleOutlined />
</Tooltip>
</span>
</Col>
<Col span={6}>
+10 -4
View File
@@ -8,6 +8,7 @@ import {
} from '@ant-design/icons';
import { useIntl } from '@umijs/max';
import { Button, Empty, Spin, Tag, Tooltip } from 'antd';
import { some } from 'lodash';
import 'overlayscrollbars/overlayscrollbars.css';
import React, { useCallback, useEffect, useRef, useState } from 'react';
import SimpleBar from 'simplebar-react';
@@ -74,8 +75,9 @@ const ModelCard: React.FC<{
setModelData(modelcard);
setReadmeText(readme);
setIsGGUF(modelcard.tags?.includes('gguf'));
setIsGGUFModel(modelcard.tags?.includes('gguf'));
const isGGUF = modelcard.tags?.includes('gguf');
setIsGGUF(isGGUF);
setIsGGUFModel(isGGUF);
} catch (error) {
setModelData(null);
setReadmeText(null);
@@ -99,8 +101,12 @@ const ModelCard: React.FC<{
name: `${data.Data?.Path}/${data.Data?.Name}`
});
setReadmeText(data?.Data?.ReadMeContent);
setIsGGUF(data.Data?.Tags?.includes('gguf'));
setIsGGUFModel(data.Data?.Tags?.includes('gguf'));
const isGGUF = some(
data?.Data?.Tags,
(tag: string) => tag?.indexOf('gguf') > -1
);
setIsGGUF(isGGUF);
setIsGGUFModel(isGGUF);
} catch (error) {
setModelData(null);
setReadmeText(null);
+18 -3
View File
@@ -1,6 +1,6 @@
import { BulbOutlined } from '@ant-design/icons';
import { BulbOutlined, InfoCircleOutlined } from '@ant-design/icons';
import { useIntl } from '@umijs/max';
import { Checkbox, Select } from 'antd';
import { Checkbox, Select, Tooltip } from 'antd';
import _ from 'lodash';
import React, { useCallback, useEffect, useRef, useState } from 'react';
import { queryHuggingfaceModels, queryModelScopeModels } from '../apis';
@@ -234,7 +234,22 @@ const SearchModel: React.FC<SearchInputProps> = (props) => {
className="m-r-5"
checked={filterGGUFRef.current}
>
GGUF
<Tooltip
overlayInnerStyle={{ width: 'max-content' }}
title={
<div>
<div>
{intl.formatMessage({ id: 'models.search.gguf.tips' })}
</div>
<div>
{intl.formatMessage({ id: 'models.search.vllm.tips' })}
</div>
</div>
}
>
GGUF
<InfoCircleOutlined className="m-l-4" />
</Tooltip>
</Checkbox>
<Select
allowClear
@@ -0,0 +1,42 @@
import { useIntl, useNavigate } from '@umijs/max';
import { Button, Empty, Typography } from 'antd';
import React from 'react';
const EmptyModels: React.FC<{
style?: React.CSSProperties;
}> = ({ style }) => {
const intl = useIntl();
const navigate = useNavigate();
const handleDeployModel = () => {
navigate('/models');
};
return (
<div
className="flex-center justify-center"
style={{
...style
}}
>
<Empty
image={Empty.PRESENTED_IMAGE_SIMPLE}
description={
<div className="flex-column">
<Typography.Text type="secondary">
{intl.formatMessage({ id: 'playground.model.noavailable' })}
</Typography.Text>
<Typography.Text type="secondary">
{intl.formatMessage({ id: 'playground.model.noavailable.tips' })}
</Typography.Text>
</div>
}
>
<Button type="primary" onClick={handleDeployModel}>
{intl.formatMessage({ id: 'models.button.deploy' })}
</Button>
</Empty>
</div>
);
};
export default EmptyModels;
@@ -1,3 +1,4 @@
import AutoTooltip from '@/components/auto-tooltip';
import IconFont from '@/components/icon-font';
import useOverlayScroller from '@/hooks/use-overlay-scroller';
import { fetchChunkedData, readStreamData } from '@/utils/fetch-chunk-data';
@@ -369,6 +370,19 @@ const ModelItem: React.FC<ModelItemProps> = forwardRef(
options={modelFullList}
onChange={handleModelChange}
value={params.model}
optionRender={(data) => {
return (
<AutoTooltip
title={data.label}
ghost
tooltipProps={{
placement: 'right'
}}
>
{data.label}
</AutoTooltip>
);
}}
></Select>
</span>
<ReferenceParams usage={tokenResult}></ReferenceParams>
+23 -13
View File
@@ -2,26 +2,24 @@ import IconFont from '@/components/icon-font';
import HotKeys from '@/config/hotkeys';
import { MessageOutlined, OneToOneOutlined } from '@ant-design/icons';
import { PageContainer } from '@ant-design/pro-components';
import { useIntl, useSearchParams } from '@umijs/max';
import { useIntl } from '@umijs/max';
import { Button, Segmented, Space, Tabs, TabsProps } from 'antd';
import classNames from 'classnames';
import _ from 'lodash';
import { useCallback, useEffect, useRef, useState } from 'react';
import { useHotkeys } from 'react-hotkeys-hook';
import { queryModelsList } from './apis';
import EmptyModels from './components/empty-models';
import GroundLeft from './components/ground-left';
import MultipleChat from './components/multiple-chat';
import './style/play-ground.less';
const Playground: React.FC = () => {
const intl = useIntl();
const [searchParams] = useSearchParams();
const selectModel = searchParams.get('model') || '';
const [params, setParams] = useState({});
const [collapse, setCollapse] = useState(false);
const [activeKey, setActiveKey] = useState('chat');
const groundLeftRef = useRef<any>(null);
const [modelList, setModelList] = useState<Global.BaseOption<string>[]>([]);
const [loaded, setLoaded] = useState(false);
const optionsList = [
{
label: intl.formatMessage({ id: 'menu.chat' }),
@@ -74,13 +72,15 @@ const Playground: React.FC = () => {
setModelList(list);
} catch (error) {
console.error(error);
} finally {
setLoaded(true);
}
};
getModelList();
}, []);
const renderExtra = () => {
if (activeKey === 'compare') {
if (activeKey === 'compare' || modelList.length === 0) {
return false;
}
return (
@@ -123,12 +123,14 @@ const Playground: React.FC = () => {
title: (
<div className="flex items-center">
{intl.formatMessage({ id: 'menu.playground' })}
<Segmented
options={optionsList}
size="middle"
className="m-l-40"
onChange={(key) => setActiveKey(key)}
></Segmented>
{modelList.length > 0 && (
<Segmented
options={optionsList}
size="middle"
className="m-l-40"
onChange={(key) => setActiveKey(key)}
></Segmented>
)}
</div>
)
}}
@@ -140,7 +142,15 @@ const Playground: React.FC = () => {
>
<div className="play-ground">
<div className="chat">
<Tabs items={items} activeKey={activeKey}></Tabs>
{modelList.length > 0 ? (
<Tabs items={items} activeKey={activeKey}></Tabs>
) : (
loaded && (
<EmptyModels
style={{ height: 'calc(100vh - 72px)', paddingBottom: 100 }}
></EmptyModels>
)
)}
</div>
</div>
</PageContainer>