import { memo, useMemo } from 'react'; import { Constants, supportsFiles, EModelEndpoint, mergeFileConfig, isAgentsEndpoint, getEndpointField, isAssistantsEndpoint, getEndpointFileConfig, } from 'librechat-data-provider'; import type { TConversation } from 'librechat-data-provider'; import { useGetFileConfig, useGetEndpointsQuery } from '~/data-provider'; import AttachFileMenu from './AttachFileMenu'; import AttachFile from './AttachFile'; function AttachFileChat({ disableInputs, conversation, }: { disableInputs: boolean; conversation: TConversation | null; }) { const conversationId = conversation?.conversationId ?? Constants.NEW_CONVO; const { endpoint } = conversation ?? { endpoint: null }; const isAgents = useMemo(() => isAgentsEndpoint(endpoint), [endpoint]); const isAssistants = useMemo(() => isAssistantsEndpoint(endpoint), [endpoint]); const { data: fileConfig = null } = useGetFileConfig({ select: (data) => mergeFileConfig(data), }); const { data: endpointsConfig } = useGetEndpointsQuery(); const endpointType = useMemo(() => { return ( getEndpointField(endpointsConfig, endpoint, 'type') || (endpoint as EModelEndpoint | undefined) ); }, [endpoint, endpointsConfig]); const endpointFileConfig = useMemo( () => getEndpointFileConfig({ endpoint, fileConfig, endpointType, }), [endpoint, fileConfig, endpointType], ); const endpointSupportsFiles: boolean = useMemo( () => supportsFiles[endpointType ?? endpoint ?? ''] ?? false, [endpointType, endpoint], ); const isUploadDisabled = useMemo( () => (disableInputs || endpointFileConfig?.disabled) ?? false, [disableInputs, endpointFileConfig?.disabled], ); if (isAssistants && endpointSupportsFiles && !isUploadDisabled) { return ; } else if (isAgents || (endpointSupportsFiles && !isUploadDisabled)) { return ( ); } return null; } export default memo(AttachFileChat);