import { Spin } from 'antd'; import 'overlayscrollbars/overlayscrollbars.css'; import React, { forwardRef, useImperativeHandle, useMemo, useRef, useState } from 'react'; import { CHAT_API } from '../apis'; import MessageInput from '../components/message-input'; import MessageContent from '../components/multiple-chat/message-content'; import SystemMessage from '../components/multiple-chat/system-message'; import ReferenceParams from '../components/reference-params'; import RightContainer from '../components/right-container'; import ViewCommonCode from '../components/view-common-code'; import { Roles, generateMessagesByListContent } from '../config'; import { MessageItem } from '../config/types'; import { LLM_METAKEYS, llmInitialValues } from '../hooks/config'; import useChatCompletion from '../hooks/use-chat-completion'; import { useInitLLmMeta } from '../hooks/use-init-llm'; import '../style/ground-llm.less'; import '../style/system-message-wrap.less'; import { generateLLMCode } from '../view-code/llm'; import DataForm from './forms'; import { ChatParamsConfig } from './params-config'; interface MessageProps { modelList: Global.BaseOption[]; loaded?: boolean; ref?: any; } const GroundLeft: React.FC = forwardRef((props, ref) => { const { modelList } = props; const [systemMessage, setSystemMessage] = useState(''); const [show, setShow] = useState(false); const [collapse, setCollapse] = useState(false); const scroller = useRef(null); const { submitMessage, handleStopConversation, handleAddNewMessage, handleClear, setMessageList, tokenResult, messageList, loading } = useChatCompletion(scroller); const { handleOnValuesChange, formRef, paramsConfig, parameters } = useInitLLmMeta( { modelList, isChat: true }, { defaultValues: llmInitialValues, defaultParamsConfig: ChatParamsConfig, metaKeys: LLM_METAKEYS } ); useImperativeHandle(ref, () => { return { viewCode() { setShow(true); }, setCollapse() { setCollapse(!collapse); }, collapse: collapse }; }); const viewCodeContent = useMemo(() => { const resultList = systemMessage ? [{ role: Roles.System, content: systemMessage }] : []; const list = generateMessagesByListContent([...messageList]); return generateLLMCode({ api: CHAT_API, parameters: { ...parameters, messages: [...resultList, ...list] } }); }, [messageList, systemMessage, parameters]); const generateValidMessage = (message: Omit) => { if (!message.content && !message.imgs?.length && !message.audio?.length) { return undefined; } return message; }; const handleSendMessage = async (message: Omit) => { const currentMessage = generateValidMessage(message); submitMessage({ system: systemMessage ? { role: Roles.System, content: systemMessage } : undefined, current: currentMessage, parameters }); }; const handleCloseViewCode = () => { setShow(false); }; return (
<>
{loading && (
)}
{tokenResult && !loading && (
)}
); }); export default GroundLeft;