import { Tools, ContentTypes, ToolCallTypes, imageGenTools, isImageVisionTool, } from 'librechat-data-provider'; import { memo } from 'react'; import type { TMessageContentParts, TAttachment } from 'librechat-data-provider'; import { ErrorMessage } from './MessageContent'; import ExecuteCode from './Parts/ExecuteCode'; import RetrievalCall from './RetrievalCall'; import CodeAnalyze from './CodeAnalyze'; import Container from './Container'; import ToolCall from './ToolCall'; import ImageGen from './ImageGen'; import Text from './Parts/Text'; import Image from './Image'; type PartProps = { part?: TMessageContentParts; isSubmitting: boolean; showCursor: boolean; isCreatedByUser: boolean; attachments?: TAttachment[]; }; const Part = memo(({ part, isSubmitting, attachments, showCursor, isCreatedByUser }: PartProps) => { if (!part) { return null; } if (part.type === ContentTypes.ERROR) { return ; } else if (part.type === ContentTypes.TEXT) { const text = typeof part.text === 'string' ? part.text : part.text.value; if (typeof text !== 'string') { return null; } if (part.tool_call_ids != null && !text) { return null; } return ( ); } else if (part.type === ContentTypes.TOOL_CALL) { const toolCall = part[ContentTypes.TOOL_CALL]; if (!toolCall) { return null; } const isToolCall = 'args' in toolCall && (!toolCall.type || toolCall.type === ToolCallTypes.TOOL_CALL); if (isToolCall && toolCall.name === Tools.execute_code) { return ( ); } else if (isToolCall) { return ( ); } else if (toolCall.type === ToolCallTypes.CODE_INTERPRETER) { const code_interpreter = toolCall[ToolCallTypes.CODE_INTERPRETER]; return ( ); } else if ( toolCall.type === ToolCallTypes.RETRIEVAL || toolCall.type === ToolCallTypes.FILE_SEARCH ) { return ( ); } else if ( toolCall.type === ToolCallTypes.FUNCTION && ToolCallTypes.FUNCTION in toolCall && imageGenTools.has(toolCall.function.name) ) { return ( ); } else if (toolCall.type === ToolCallTypes.FUNCTION && ToolCallTypes.FUNCTION in toolCall) { if (isImageVisionTool(toolCall)) { if (isSubmitting && showCursor) { return ( ); } return null; } return ( ); } } else if (part.type === ContentTypes.IMAGE_FILE) { const imageFile = part[ContentTypes.IMAGE_FILE]; const height = imageFile.height ?? 1920; const width = imageFile.width ?? 1080; return ( ); } return null; }); export default Part;