Download client/src/hooks/Messages/useMessageProcess.tsx from Zhitomir/chat: direct link, hf CLI and curl.
- Browser
- Download file 2.63 kB
-
https://huggingface.co/spaces/Zhitomir/chat/resolve/main/client/src/hooks/Messages/useMessageProcess.tsx
- Command line
-
hf download hf://spaces/Zhitomir/chat/client/src/hooks/Messages/useMessageProcess.tsx
-
curl -L -o useMessageProcess.tsx https://huggingface.co/spaces/Zhitomir/chat/resolve/main/client/src/hooks/Messages/useMessageProcess.tsx
2.63 kB
| import { useRecoilValue } from 'recoil'; | |
| import { useEffect, useRef, useCallback, useMemo, useState } from 'react'; | |
| import type { TMessage } from 'librechat-data-provider'; | |
| import { useChatContext, useAddedChatContext } from '~/Providers'; | |
| import { getLatestText, getLengthAndFirstFiveChars } from '~/utils'; | |
| import store from '~/store'; | |
| export default function useMessageProcess({ message }: { message?: TMessage | null }) { | |
| const latestText = useRef<string | number>(''); | |
| const hasNoChildren = useMemo(() => !message?.children?.length, [message]); | |
| const [siblingMessage, setSiblingMessage] = useState<TMessage | null>(null); | |
| const { | |
| index, | |
| conversation, | |
| latestMessage, | |
| setAbortScroll, | |
| setLatestMessage, | |
| isSubmitting: isSubmittingRoot, | |
| } = useChatContext(); | |
| const { isSubmitting: isSubmittingAdditional } = useAddedChatContext(); | |
| const latestMultiMessage = useRecoilValue(store.latestMessageFamily(index + 1)); | |
| const isSubmittingFamily = useMemo( | |
| () => isSubmittingRoot || isSubmittingAdditional, | |
| [isSubmittingRoot, isSubmittingAdditional], | |
| ); | |
| useEffect(() => { | |
| if (conversation?.conversationId === 'new') { | |
| return; | |
| } | |
| if (!message) { | |
| return; | |
| } | |
| if (!hasNoChildren) { | |
| return; | |
| } | |
| const text = getLatestText(message); | |
| const textKey = `${message?.messageId ?? ''}${getLengthAndFirstFiveChars(text)}`; | |
| if (textKey === latestText.current) { | |
| return; | |
| } | |
| latestText.current = textKey; | |
| setLatestMessage({ ...message }); | |
| }, [hasNoChildren, message, setLatestMessage, conversation?.conversationId]); | |
| const handleScroll = useCallback(() => { | |
| if (isSubmittingFamily) { | |
| setAbortScroll(true); | |
| } else { | |
| setAbortScroll(false); | |
| } | |
| }, [isSubmittingFamily, setAbortScroll]); | |
| const showSibling = useMemo( | |
| () => | |
| (hasNoChildren && latestMultiMessage && !latestMultiMessage?.children?.length) || | |
| siblingMessage, | |
| [hasNoChildren, latestMultiMessage, siblingMessage], | |
| ); | |
| useEffect(() => { | |
| if ( | |
| hasNoChildren && | |
| latestMultiMessage && | |
| latestMultiMessage.conversationId === message?.conversationId | |
| ) { | |
| const newSibling = Object.assign({}, latestMultiMessage, { | |
| parentMessageId: message?.parentMessageId, | |
| depth: message?.depth, | |
| }); | |
| setSiblingMessage(newSibling); | |
| } | |
| }, [hasNoChildren, latestMultiMessage, message, setSiblingMessage, latestMessage]); | |
| return { | |
| showSibling, | |
| handleScroll, | |
| conversation, | |
| siblingMessage, | |
| setSiblingMessage, | |
| isSubmittingFamily, | |
| latestMultiMessage, | |
| }; | |
| } | |