@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
JavaScript
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]);
};