style: display target model name

This commit is contained in:
jialin
2026-02-03 18:21:08 +08:00
parent 04c25ab0f7
commit dcda9be50b
7 changed files with 91 additions and 50 deletions
+1 -1
View File
@@ -1,4 +1,4 @@
type PageActionType = 'create' | 'update' | 'view' | 'edit'; type PageActionType = 'create' | 'update' | 'view' | 'edit' | 'copy';
declare namespace Global { declare namespace Global {
type WithFalse<T> = T | false; type WithFalse<T> = T | false;
interface Pagination { interface Pagination {
@@ -2,16 +2,17 @@ import AlertBlockInfo from '@/components/alert-info/block';
import ModalFooter from '@/components/modal-footer'; import ModalFooter from '@/components/modal-footer';
import { PageActionType } from '@/config/types'; import { PageActionType } from '@/config/types';
import FormDrawer from '@/pages/_components/form-drawer'; import FormDrawer from '@/pages/_components/form-drawer';
import { RouteItem } from '@/pages/model-routes/config/types';
import { useIntl } from '@umijs/max'; import { useIntl } from '@umijs/max';
import { message } from 'antd'; import { message } from 'antd';
import _ from 'lodash'; import _ from 'lodash';
import { useEffect, useRef, useState } from 'react'; import { useEffect, useRef, useState } from 'react';
import { updateModelAccessUser } from '../../apis'; import { updateModelAccessUser } from '../../apis';
import { AccessControlFormData, ListItem } from '../../config/types'; import { AccessControlFormData } from '../../config/types';
import AccessControlForm from './form'; import AccessControlForm from './form';
const AccessControlModal: React.FC< const AccessControlModal: React.FC<
Global.ScrollerModalProps<ListItem, AccessControlFormData> Global.ScrollerModalProps<RouteItem, AccessControlFormData>
> = ({ open, title, currentData, action, onCancel }) => { > = ({ open, title, currentData, action, onCancel }) => {
const intl = useIntl(); const intl = useIntl();
const form = useRef<any>(null); const form = useRef<any>(null);
@@ -1,3 +1,4 @@
import GPUStackLogo from '@/assets/images/small-logo-200x200.png';
import ai360 from '@/assets/providers-logo/ai360.svg'; import ai360 from '@/assets/providers-logo/ai360.svg';
import azure from '@/assets/providers-logo/azureai.svg'; import azure from '@/assets/providers-logo/azureai.svg';
import baichuan from '@/assets/providers-logo/baichuan.svg'; import baichuan from '@/assets/providers-logo/baichuan.svg';
@@ -66,7 +67,8 @@ const ProviderLogoMap: Record<string, string> = {
[ProviderEnum.TOGETHERAI]: togetherai, [ProviderEnum.TOGETHERAI]: togetherai,
[ProviderEnum.ZHIPUAI]: zhipuai, [ProviderEnum.ZHIPUAI]: zhipuai,
[ProviderEnum.GITHUB]: github, [ProviderEnum.GITHUB]: github,
[ProviderEnum.TRITON]: triton [ProviderEnum.TRITON]: triton,
['deployments']: GPUStackLogo
}; };
const ProviderLogo: React.FC<{ const ProviderLogo: React.FC<{
@@ -21,7 +21,6 @@ const ProviderModels: React.FC<ProviderModelProps> = ({ dataList }) => {
none: <WarningOutlined /> none: <WarningOutlined />
}; };
return ( return (
<div style={{ paddingInline: 16 }}>
<Flex gap="8px" wrap="wrap"> <Flex gap="8px" wrap="wrap">
{dataList.map((model) => ( {dataList.map((model) => (
<Tag <Tag
@@ -59,7 +58,6 @@ const ProviderModels: React.FC<ProviderModelProps> = ({ dataList }) => {
</Tag> </Tag>
))} ))}
</Flex> </Flex>
</div>
); );
}; };
@@ -2,6 +2,7 @@ import AutoTooltip from '@/components/auto-tooltip';
import DropdownButtons from '@/components/drop-down-buttons'; import DropdownButtons from '@/components/drop-down-buttons';
import RowChildren from '@/components/seal-table/components/row-children'; import RowChildren from '@/components/seal-table/components/row-children';
import StatusTag from '@/components/status-tag'; import StatusTag from '@/components/status-tag';
import ProviderLogo from '@/pages/maas-provider/components/provider-logo';
import { DeleteOutlined } from '@ant-design/icons'; import { DeleteOutlined } from '@ant-design/icons';
import { useIntl } from '@umijs/max'; import { useIntl } from '@umijs/max';
import { Col, Row } from 'antd'; import { Col, Row } from 'antd';
@@ -10,6 +11,7 @@ import React from 'react';
import styled from 'styled-components'; import styled from 'styled-components';
import { TargetStatus, TargetStatusLabelMap } from '../config'; import { TargetStatus, TargetStatusLabelMap } from '../config';
import { RouteTarget } from '../config/types'; import { RouteTarget } from '../config/types';
const CellContent = styled.div` const CellContent = styled.div`
display: flex; display: flex;
align-items: center; align-items: center;
@@ -20,12 +22,14 @@ interface ProviderModelProps {
dataList: RouteTarget[]; dataList: RouteTarget[];
onSelect: (val: any, record: any) => void; onSelect: (val: any, record: any) => void;
sourceModels: any[]; sourceModels: any[];
modelList?: Global.BaseOption<number>[];
} }
interface AccessItemProps { interface TargetItemProps {
onSelect: (val: any, record: any) => void; onSelect: (val: any, record: any) => void;
data: any; data: any;
sourceModels: any[]; sourceModels: any[];
modelList?: Global.BaseOption<number>[];
} }
export const childActionList = [ export const childActionList = [
@@ -44,10 +48,11 @@ export const childActionList = [
} }
]; ];
const RouteItem: React.FC<AccessItemProps> = ({ const RouteItem: React.FC<TargetItemProps> = ({
onSelect, onSelect,
data, data,
sourceModels sourceModels,
modelList
}) => { }) => {
const intl = useIntl(); const intl = useIntl();
@@ -58,8 +63,19 @@ const RouteItem: React.FC<AccessItemProps> = ({
} }
return item.value === data.provider_id; return item.value === data.provider_id;
}); });
console.log('renderProviderSource model:', data, sourceModels); if (!model) {
return model?.label || '-'; return '-';
}
return (
<span className="flex-center" style={{ gap: 8, width: '100%' }}>
<ProviderLogo provider={model.providerType}></ProviderLogo>
<AutoTooltip ghost minWidth={20}>
{data.model_id
? modelList?.find((m) => m.value === data.model_id)?.label
: data.provider_model_name}
</AutoTooltip>
</span>
);
}; };
return ( return (
<div style={{ borderRadius: 'var(--ant-table-header-border-radius)' }}> <div style={{ borderRadius: 'var(--ant-table-header-border-radius)' }}>
@@ -74,7 +90,7 @@ const RouteItem: React.FC<AccessItemProps> = ({
<AutoTooltip ghost>{data.name}</AutoTooltip> <AutoTooltip ghost>{data.name}</AutoTooltip>
</CellContent> </CellContent>
</Col> </Col>
<Col span={4} style={{ paddingLeft: 56 }}> <Col span={5} style={{ paddingLeft: 56 }}>
<CellContent>{renderProviderSource()}</CellContent> <CellContent>{renderProviderSource()}</CellContent>
</Col> </Col>
<Col span={3}> <Col span={3}>
@@ -101,7 +117,7 @@ const RouteItem: React.FC<AccessItemProps> = ({
)} )}
</CellContent> </CellContent>
</Col> </Col>
<Col span={3}> <Col span={2}>
<CellContent> <CellContent>
<AutoTooltip ghost> <AutoTooltip ghost>
<StatusTag <StatusTag
@@ -142,6 +158,7 @@ const RouteItem: React.FC<AccessItemProps> = ({
const RouteTargets: React.FC<ProviderModelProps> = ({ const RouteTargets: React.FC<ProviderModelProps> = ({
dataList, dataList,
onSelect, onSelect,
modelList,
sourceModels sourceModels
}) => { }) => {
return ( return (
@@ -152,6 +169,7 @@ const RouteTargets: React.FC<ProviderModelProps> = ({
key={index} key={index}
onSelect={onSelect} onSelect={onSelect}
sourceModels={sourceModels} sourceModels={sourceModels}
modelList={modelList}
></RouteItem> ></RouteItem>
))} ))}
</div> </div>
@@ -50,6 +50,7 @@ const useTargetSourceModels = () => {
</OptionWrapper> </OptionWrapper>
), ),
value: 'deployments', value: 'deployments',
providerType: 'deployments',
parent: true, parent: true,
children: models.items?.map?.((model: ModelListItem) => ({ children: models.items?.map?.((model: ModelListItem) => ({
label: model.name, label: model.name,
@@ -73,6 +74,7 @@ const useTargetSourceModels = () => {
), ),
value: provider.id, value: provider.id,
parent: true, parent: true,
providerType: provider.config?.type,
children: provider.models?.map?.((model) => ({ children: provider.models?.map?.((model) => ({
label: model.name, label: model.name,
value: model.name, value: model.name,
+22 -2
View File
@@ -15,9 +15,10 @@ import { useMemoizedFn } from 'ahooks';
import { message } from 'antd'; import { message } from 'antd';
import { useAtom } from 'jotai'; import { useAtom } from 'jotai';
import _ from 'lodash'; import _ from 'lodash';
import { useEffect } from 'react'; import { useEffect, useState } from 'react';
import NoResult from '../_components/no-result'; import NoResult from '../_components/no-result';
import PageBox from '../_components/page-box'; import PageBox from '../_components/page-box';
import { queryModelsList } from '../llmodels/apis';
import AccessControlModal from '../llmodels/components/access-control-modal'; import AccessControlModal from '../llmodels/components/access-control-modal';
import { import {
MODEL_ROUTES, MODEL_ROUTES,
@@ -72,6 +73,24 @@ const Accesses: React.FC = () => {
openAccessControlModalStatus openAccessControlModalStatus
} = useAccessControl(); } = useAccessControl();
const { sourceModels, fetchSourceModels } = useTargetSourceModels(); const { sourceModels, fetchSourceModels } = useTargetSourceModels();
const [modelList, setModelsList] = useState<Global.BaseOption<number>[]>([]);
useEffect(() => {
const fetchModels = async () => {
try {
const res = await queryModelsList({ page: -1 });
const models =
res.items?.map((model) => ({
label: model.name,
value: model.id
})) || [];
setModelsList(models);
} catch (error) {
setModelsList([]);
}
};
fetchModels();
}, []);
const handleClickDropdown = () => { const handleClickDropdown = () => {
openRouteModal( openRouteModal(
@@ -193,6 +212,7 @@ const Accesses: React.FC = () => {
) => { ) => {
return ( return (
<RouteTargets <RouteTargets
modelList={modelList}
dataList={list} dataList={list}
onSelect={onChildSelect} onSelect={onChildSelect}
sourceModels={sourceModels} sourceModels={sourceModels}
@@ -289,7 +309,7 @@ const Accesses: React.FC = () => {
onCancel={closeAccessControlModal} onCancel={closeAccessControlModal}
title={openAccessControlModalStatus.title} title={openAccessControlModalStatus.title}
open={openAccessControlModalStatus.open} open={openAccessControlModalStatus.open}
currentData={openAccessControlModalStatus.currentData || null} currentData={openAccessControlModalStatus.currentData}
action={openAccessControlModalStatus.action} action={openAccessControlModalStatus.action}
></AccessControlModal> ></AccessControlModal>
<DeleteModal ref={modalRef}></DeleteModal> <DeleteModal ref={modalRef}></DeleteModal>