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 } 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 GroundLeft from './components/ground-left'; import GroundReranker from './components/ground-reranker'; import MultipleChat from './components/multiple-chat'; import './style/play-ground.less'; const Playground: React.FC = () => { const intl = useIntl(); const [activeKey, setActiveKey] = useState('chat'); const groundLeftRef = useRef(null); const groundRerankerRef = useRef(null); const [modelList, setModelList] = useState[]>([]); const [rerankerModelList, setRerankerModelList] = useState< Global.BaseOption[] >([]); const [loaded, setLoaded] = useState(false); const optionsList = [ { label: intl.formatMessage({ id: 'menu.chat' }), value: 'chat', icon: }, { label: intl.formatMessage({ id: 'menu.compare' }), value: 'compare', icon: } // { // label: 'Rerank', // value: 'reranker', // icon: // } ]; const handleViewCode = useCallback(() => { groundLeftRef.current?.viewCode?.(); }, [groundLeftRef]); const handleToggleCollapse = useCallback(() => { if (activeKey === 'reranker') { groundRerankerRef.current?.setCollapse?.(); return; } groundLeftRef.current?.setCollapse?.(); }, [groundLeftRef, groundRerankerRef, activeKey]); const items: TabsProps['items'] = [ { key: 'chat', label: 'Chat', children: ( ) }, { key: 'compare', label: 'Compare', children: }, { key: 'reranker', label: 'Reranker', children: ( ) } ]; useEffect(() => { const getModelList = async () => { try { const params = { embedding_only: false }; const res = await queryModelsList(params); const list = _.map(res.data || [], (item: any) => { return { value: item.id, label: item.id }; }) as Global.BaseOption[]; return list; } catch (error) { console.error(error); return []; } }; const getModelListByReranker = async () => { try { const params = { reranker: true }; const res = await queryModelsList(params); const list = _.map(res.data || [], (item: any) => { return { value: item.id, label: item.id }; }) as Global.BaseOption[]; return list; } catch (error) { console.error(error); return []; } }; const fetchData = async () => { try { const [modelist, rerankerModelList] = await Promise.all([ getModelList(), getModelListByReranker() ]); setModelList(modelist); setRerankerModelList(rerankerModelList); } catch (error) { setLoaded(true); } }; fetchData(); }, []); const renderExtra = () => { if (activeKey === 'compare') { return false; } return ( ); }; useHotkeys( HotKeys.RIGHT.join(','), () => { groundLeftRef.current?.setCollapse?.(); }, { preventDefault: true } ); return ( {intl.formatMessage({ id: 'menu.playground' })} { setActiveKey(key)} > } ) }} extra={renderExtra()} className={classNames('playground-container', { compare: activeKey === 'compare', chat: activeKey !== 'compare' })} >
); }; export default Playground;