UNPKG

@plteam/chat-ui

Version:

CUI Kit is a free and open-source library for creating AI assistant chat interfaces, built with React, Material UI, and TypeScript

41 lines (40 loc) 2.23 kB
import * as React from 'react'; import { useMessageProgressStatus } from './useMessageProgressStatus'; import { getThreadListeners } from '../utils/getThreadListeners'; import { useConversationBlockHeightCallback } from './useConversationBlockHeightCallback'; export const useThreadApiInitialization = (thread, apiManager, onMessageSend, onEditMessage, getConversationBlockHeightMin) => { const handleChangeStreamStatus = useMessageProgressStatus(thread); const getConversationBlockHeight = useConversationBlockHeightCallback(getConversationBlockHeightMin); React.useMemo(() => { apiManager.setMethod('setProgressStatus', handleChangeStreamStatus); }, [handleChangeStreamStatus]); React.useMemo(() => { apiManager.setMethod('sendUserMessage', onMessageSend); apiManager.setPrivateMethod('onEditMessage', onEditMessage); }, [onMessageSend]); React.useMemo(() => { if (!thread) return; const messages = thread.messages; apiManager.setMethods({ getAllMessages: () => messages.allMessages.value.map(v => v.data), getBranchMessages: () => messages.currentMessages.value.map(v => v.data), handleChangeBranch: messages.handleChangeBranch, setProgressStatus: handleChangeStreamStatus, }); const setMessageText = (messageId, text) => { const message = thread.messages.allMessages.value.find(v => v.id === messageId); if (message?.texts?.value?.length) { message.texts.value[message.texts.value.length - 1].text = text; } }; apiManager.setPrivateMethod('allMessages', messages.allMessages); apiManager.setPrivateMethod('branch', messages.currentMessages); apiManager.setPrivateMethod('getListener', getThreadListeners(thread)); apiManager.setMethod('getProgressStatus', () => thread.streamStatus.value ?? ''); apiManager.setMethod('setMessageText', setMessageText); }, [thread]); React.useMemo(() => { apiManager.setPrivateMethod('getConversationBlockHeight', getConversationBlockHeight); }, [getConversationBlockHeight]); };