import IconFont from '@/components/icon-font'; import PageTools from '@/components/page-tools'; import BaseSelect from '@/components/seal-form/base/select'; import CardList from '@/components/templates/card-list'; import useTableFetch from '@/hooks/use-table-fetch'; import { SyncOutlined } from '@ant-design/icons'; import { useIntl, useNavigate } from '@umijs/max'; import useMemoizedFn from 'ahooks/lib/useMemoizedFn'; import { Button, Input, Space } from 'antd'; import React, { useCallback, useMemo } from 'react'; import { ScrollerContext } from '../_components/infinite-scroller/use-scroller-context'; import NoResult from '../_components/no-result'; import PageBox from '../_components/page-box'; import { MY_MODELS_API, queryMyModels } from './apis'; import ModelItem from './components/model-item'; import { categoryOptions, modelCategoriesMap, MyModelsStatusValueMap } from './config'; import { categoryToPathMap } from './config/button-actions'; const Dot = ({ color }: { color: string }) => { return ( ); }; const optionRender = (item: any) => { return ( {item.label} ); }; const UserModels: React.FC = () => { const navigate = useNavigate(); const { dataSource, queryParams, fetchData, handleSearch, handleQueryChange, handleNameChange } = useTableFetch({ fetchAPI: queryMyModels, API: MY_MODELS_API, watch: false, isInfiniteScroll: true, defaultQueryParams: { perPage: 24 } }); const intl = useIntl(); const statusOptions = useMemo(() => { return [ { value: MyModelsStatusValueMap.Active, color: 'var(--ant-color-success)', label: intl.formatMessage({ id: 'models.mymodels.status.active' }) }, { value: MyModelsStatusValueMap.Inactive, color: 'var(--ant-color-fill)', label: intl.formatMessage({ id: 'models.mymodels.status.inactive' }) }, { value: MyModelsStatusValueMap.Degrade, color: 'var(--ant-color-warning)', label: intl.formatMessage({ id: 'models.mymodels.status.degrade' }) } ]; }, [intl]); const handleCategoryChange = (value: string) => { handleQueryChange({ categories: value }); }; const handleOnClick = (model: any) => { for (const [category, path] of Object.entries(categoryToPathMap)) { if ( model.categories?.includes(category) && [ modelCategoriesMap.text_to_speech, modelCategoriesMap.speech_to_text ].includes(category) ) { navigate(`${path}&model=${model.name}`); return; } if (model.categories?.includes(category)) { navigate(`${path}?model=${model.name}`); return; } } navigate(`/playground/chat?model=${model.name}`); }; const renderCard = (data: any) => { return ; }; const loadMore = useMemoizedFn((nextPage: number) => { fetchData({ query: { ...queryParams, page: nextPage }, loadmore: true }); }); const handleStatusChange = (value: string) => { handleQueryChange({ state: value }); }; const labelRender = (item: any) => { const current = statusOptions.find((option) => option.value === item.value); return ( {item.label} ); }; const getStatus = useCallback((model: any) => { if (!model.targets && !model.ready_targets) { return MyModelsStatusValueMap.Inactive; } if (model.targets > 0 && !model.ready_targets) { return MyModelsStatusValueMap.Degrade; } if (model.ready_targets > 0 && model.targets > 0) { return MyModelsStatusValueMap.Active; } return MyModelsStatusValueMap.Degrade; }, []); const dataList = useMemo(() => { const result = dataSource.dataList.map((item) => { return { ...item, status: getStatus(item) }; }); return result; }, [dataSource.dataList]); return ( handleNameChange({ target: { value: '' } }) } onChange={handleNameChange} > } > } filters={{ ...queryParams }} noFoundText={intl.formatMessage({ id: 'noresult.mymodels.nofound' })} title={intl.formatMessage({ id: 'noresult.mymodels.title' })} subTitle={intl.formatMessage({ id: 'noresult.mymodels.subTitle' })} > ); }; export default UserModels;