import { ContentTypes, Constants } from 'librechat-data-provider'; import type { TMessage, TMessageContentParts } from 'librechat-data-provider'; export const getLengthAndLastTenChars = (str?: string): string => { if (typeof str !== 'string' || str.length === 0) { return '0'; } const length = str.length; const lastTenChars = str.slice(-10); return `${length}${lastTenChars}`; }; export const getLatestText = (message?: TMessage | null, includeIndex?: boolean): string => { if (!message) { return ''; } if (message.text) { return message.text; } if (message.content && message.content.length > 0) { for (let i = message.content.length - 1; i >= 0; i--) { const part = message.content[i] as TMessageContentParts | undefined; if (part && part.type !== ContentTypes.TEXT) { continue; } const text = (typeof part?.text === 'string' ? part.text : part?.text.value) ?? ''; if (text.length > 0) { if (includeIndex === true) { return `${text}-${i}`; } else { return text; } } else { continue; } } } return ''; }; export const getAllContentText = (message?: TMessage | null): string => { if (!message) { return ''; } if (message.text) { return message.text; } if (message.content && message.content.length > 0) { return message.content .filter((part) => part.type === ContentTypes.TEXT) .map((part) => (typeof part.text === 'string' ? part.text : part.text.value) || '') .filter((text) => text.length > 0) .join('\n'); } return ''; }; export const getTextKey = (message?: TMessage | null, convoId?: string | null) => { if (!message) { return ''; } const text = getLatestText(message, true); return `${(message.messageId as string | null) ?? ''}${ Constants.COMMON_DIVIDER }${getLengthAndLastTenChars(text)}${Constants.COMMON_DIVIDER}${ message.conversationId ?? convoId }`; }; export const scrollToEnd = (callback?: () => void) => { const messagesEndElement = document.getElementById('messages-end'); if (messagesEndElement) { messagesEndElement.scrollIntoView({ behavior: 'instant' }); if (callback) { callback(); } } };