import { useState, useRef } from 'react'; import { useFormContext } from 'react-hook-form'; import { EModelEndpoint, EToolResources, mergeFileConfig, AgentCapabilities, fileConfig as defaultFileConfig, } from 'librechat-data-provider'; import type { ExtendedFile, AgentForm } from '~/common'; import { useFileHandling, useLocalize, useLazyEffect } from '~/hooks'; import FileRow from '~/components/Chat/Input/Files/FileRow'; import FileSearchCheckbox from './FileSearchCheckbox'; import { useGetFileConfig } from '~/data-provider'; import { AttachmentIcon } from '~/components/svg'; import { useChatContext } from '~/Providers'; export default function FileSearch({ agent_id, files: _files, }: { agent_id: string; files?: [string, ExtendedFile][]; }) { const localize = useLocalize(); const { setFilesLoading } = useChatContext(); const { watch } = useFormContext(); const fileInputRef = useRef(null); const [files, setFiles] = useState>(new Map()); const { data: fileConfig = defaultFileConfig } = useGetFileConfig({ select: (data) => mergeFileConfig(data), }); const { handleFileChange } = useFileHandling({ overrideEndpoint: EModelEndpoint.agents, additionalMetadata: { agent_id, tool_resource: EToolResources.file_search }, fileSetter: setFiles, }); useLazyEffect( () => { if (_files) { setFiles(new Map(_files)); } }, [_files], 750, ); const fileSearchChecked = watch(AgentCapabilities.file_search); const endpointFileConfig = fileConfig.endpoints[EModelEndpoint.agents]; const isUploadDisabled = endpointFileConfig.disabled ?? false; if (isUploadDisabled) { return null; } const handleButtonClick = () => { // necessary to reset the input if (fileInputRef.current) { fileInputRef.current.value = ''; } fileInputRef.current?.click(); }; return (
{/* File Search (RAG API) Files */}
{children}
} />
{/* Disabled Message */} {agent_id ? null : (
{localize('com_agents_file_search_disabled')}
)}
); }