| import { EarthIcon } from 'lucide-react'; |
| import { |
| FileSources, |
| alternateName, |
| EModelEndpoint, |
| EToolResources, |
| LocalStorageKeys, |
| defaultAgentFormValues, |
| } from 'librechat-data-provider'; |
| import type { Agent, TFile } from 'librechat-data-provider'; |
| import type { DropdownValueSetter, TAgentOption, ExtendedFile } from '~/common'; |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| export const createDropdownSetter = (setValue: (value: string) => void): DropdownValueSetter => { |
| return (value) => { |
| if (!value) { |
| setValue(''); |
| return; |
| } |
|
|
| if (typeof value === 'string') { |
| setValue(value); |
| return; |
| } |
|
|
| if (value.value) { |
| setValue(value.value + ''); |
| } |
| }; |
| }; |
|
|
| |
| |
| |
| export const createProviderOption = (provider: string) => ({ |
| label: (alternateName[provider] as string | undefined) ?? provider, |
| value: provider, |
| }); |
|
|
| |
| |
| |
| |
| export const getDefaultAgentFormValues = () => ({ |
| ...defaultAgentFormValues, |
| model: localStorage.getItem(LocalStorageKeys.LAST_AGENT_MODEL) ?? '', |
| provider: createProviderOption(localStorage.getItem(LocalStorageKeys.LAST_AGENT_PROVIDER) ?? ''), |
| avatar_file: null, |
| avatar_preview: '', |
| avatar_action: null, |
| }); |
|
|
| export const processAgentOption = ({ |
| agent: _agent, |
| fileMap, |
| }: { |
| agent?: Agent; |
| fileMap?: Record<string, TFile | undefined>; |
| }): TAgentOption => { |
| const isGlobal = _agent?.isPublic ?? false; |
|
|
| const context_files = _agent?.tool_resources?.context?.file_ids ?? []; |
| if (_agent?.tool_resources?.ocr?.file_ids) { |
| |
| context_files.push(..._agent.tool_resources.ocr.file_ids); |
| } |
|
|
| const agent: TAgentOption = { |
| ...(_agent ?? ({} as Agent)), |
| label: _agent?.name ?? '', |
| value: _agent?.id ?? '', |
| icon: isGlobal ? <EarthIcon className="icon-md text-green-400" /> : null, |
| context_files: context_files.length > 0 ? ([] as Array<[string, ExtendedFile]>) : undefined, |
| knowledge_files: _agent?.tool_resources?.file_search?.file_ids |
| ? ([] as Array<[string, ExtendedFile]>) |
| : undefined, |
| code_files: _agent?.tool_resources?.execute_code?.file_ids |
| ? ([] as Array<[string, ExtendedFile]>) |
| : undefined, |
| }; |
|
|
| if (!fileMap) { |
| return agent; |
| } |
|
|
| const handleFile = ({ |
| file_id, |
| tool_resource, |
| list, |
| }: { |
| file_id: string; |
| tool_resource: EToolResources; |
| list?: Array<[string, ExtendedFile]>; |
| }) => { |
| const file = fileMap[file_id]; |
| const source = |
| tool_resource === EToolResources.file_search |
| ? FileSources.vectordb |
| : (file?.source ?? FileSources.local); |
|
|
| if (file) { |
| list?.push([ |
| file_id, |
| { |
| file_id: file.file_id, |
| type: file.type, |
| filepath: file.filepath, |
| filename: file.filename, |
| width: file.width, |
| height: file.height, |
| size: file.bytes, |
| preview: file.filepath, |
| metadata: file.metadata, |
| progress: 1, |
| source, |
| }, |
| ]); |
| } else { |
| list?.push([ |
| file_id, |
| { |
| file_id, |
| type: '', |
| filename: '', |
| size: 1, |
| progress: 1, |
| filepath: EModelEndpoint.agents, |
| source, |
| }, |
| ]); |
| } |
| }; |
|
|
| if (agent.context_files && context_files.length > 0) { |
| context_files.forEach((file_id) => |
| handleFile({ |
| file_id, |
| list: agent.context_files, |
| tool_resource: EToolResources.context, |
| }), |
| ); |
| } |
|
|
| if (agent.knowledge_files && _agent?.tool_resources?.file_search?.file_ids) { |
| _agent.tool_resources.file_search.file_ids.forEach((file_id) => |
| handleFile({ |
| file_id, |
| list: agent.knowledge_files, |
| tool_resource: EToolResources.file_search, |
| }), |
| ); |
| } |
|
|
| if (agent.code_files && _agent?.tool_resources?.execute_code?.file_ids) { |
| _agent.tool_resources.execute_code.file_ids.forEach((file_id) => |
| handleFile({ file_id, list: agent.code_files, tool_resource: EToolResources.execute_code }), |
| ); |
| } |
|
|
| return agent; |
| }; |
|
|