import { useState, useRef, useEffect } from 'react'; import { EModelEndpoint, retrievalMimeTypes, fileConfig as defaultFileConfig, mergeFileConfig, } from 'librechat-data-provider'; import type { ExtendedFile } from '~/common'; import FileRow from '~/components/Chat/Input/Files/FileRow'; import { useGetFileConfig } from '~/data-provider'; import { useFileHandling } from '~/hooks/Files'; import useLocalize from '~/hooks/useLocalize'; import { useChatContext } from '~/Providers'; const CodeInterpreterFiles = ({ children }: { children: React.ReactNode }) => { const localize = useLocalize(); return (
{localize('com_assistants_code_interpreter_files')}
{/* Files available to Code Interpreter only */}
{children}
); }; export default function Knowledge({ assistant_id, files: _files, }: { assistant_id: string; files?: [string, ExtendedFile][]; }) { const localize = useLocalize(); const { setFilesLoading } = useChatContext(); const fileInputRef = useRef(null); const [files, setFiles] = useState>(new Map()); const { data: fileConfig = defaultFileConfig } = useGetFileConfig({ select: (data) => mergeFileConfig(data), }); const { handleFileChange } = useFileHandling({ overrideEndpoint: EModelEndpoint.assistants, additionalMetadata: { assistant_id }, fileSetter: setFiles, }); useEffect(() => { if (_files) { setFiles(new Map(_files)); } }, [_files]); const endpointFileConfig = fileConfig.endpoints[EModelEndpoint.assistants]; if (endpointFileConfig?.disabled) { return null; } const handleButtonClick = () => { // necessary to reset the input if (fileInputRef.current) { fileInputRef.current.value = ''; } fileInputRef.current?.click(); }; return (
{assistant_id ? localize('com_assistants_knowledge_info') : ''}
{/* Files available to both tools */} retrievalMimeTypes.some((regex) => regex.test(file.type ?? '')) } Wrapper={({ children }) =>
{children}
} /> !retrievalMimeTypes.some((regex) => regex.test(file.type ?? '')) } Wrapper={CodeInterpreterFiles} />
); }