| 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 <AttachFile disabled={disableInputs} />; |
| } else if (isAgents || (endpointSupportsFiles && !isUploadDisabled)) { |
| return ( |
| <AttachFileMenu |
| endpoint={endpoint} |
| disabled={disableInputs} |
| endpointType={endpointType} |
| conversationId={conversationId} |
| agentId={conversation?.agent_id} |
| endpointFileConfig={endpointFileConfig} |
| /> |
| ); |
| } |
| return null; |
| } |
|
|
| export default memo(AttachFileChat); |
|
|