| import { Terminal, Type, Database } from 'lucide-react'; | |
| import { EModelEndpoint, FileSources } from 'librechat-data-provider'; | |
| import { MinimalIcon } from '~/components/Endpoints'; | |
| import { cn } from '~/utils'; | |
| const sourceToEndpoint = { | |
| [FileSources.openai]: EModelEndpoint.openAI, | |
| [FileSources.azure]: EModelEndpoint.azureOpenAI, | |
| }; | |
| const sourceToClassname = { | |
| [FileSources.openai]: 'bg-white/75 dark:bg-black/65', | |
| [FileSources.azure]: 'azure-bg-color', | |
| [FileSources.azure_blob]: 'azure-bg-color', | |
| [FileSources.execute_code]: 'bg-black text-white opacity-85', | |
| [FileSources.text]: 'bg-blue-500 dark:bg-blue-900 opacity-85 text-white', | |
| [FileSources.vectordb]: 'bg-yellow-700 dark:bg-yellow-900 opacity-85 text-white', | |
| }; | |
| const defaultClassName = | |
| 'absolute right-0 bottom-0 rounded-full p-[0.15rem] text-gray-600 transition-colors'; | |
| export default function SourceIcon({ | |
| source, | |
| isCodeFile, | |
| className = defaultClassName, | |
| }: { | |
| source?: FileSources; | |
| isCodeFile?: boolean; | |
| className?: string; | |
| }) { | |
| if (isCodeFile === true) { | |
| return ( | |
| <div className={cn(className, sourceToClassname[FileSources.execute_code] ?? '')}> | |
| <span className="flex items-center justify-center"> | |
| <Terminal className="h-3 w-3" /> | |
| </span> | |
| </div> | |
| ); | |
| } | |
| if (source === FileSources.text) { | |
| return ( | |
| <div className={cn(className, sourceToClassname[source] ?? '')}> | |
| <span className="flex items-center justify-center"> | |
| <Type className="h-3 w-3" /> | |
| </span> | |
| </div> | |
| ); | |
| } | |
| if (source === FileSources.vectordb) { | |
| return ( | |
| <div className={cn(className, sourceToClassname[source] ?? '')}> | |
| <span className="flex items-center justify-center"> | |
| <Database className="h-3 w-3" /> | |
| </span> | |
| </div> | |
| ); | |
| } | |
| const endpoint = sourceToEndpoint[source ?? '']; | |
| if (!endpoint) { | |
| return null; | |
| } | |
| return ( | |
| <div className={cn(className, sourceToClassname[source ?? ''] ?? '')}> | |
| <span className="flex items-center justify-center"> | |
| <MinimalIcon | |
| endpoint={endpoint} | |
| size={14} | |
| isCreatedByUser={false} | |
| iconClassName="h-3 w-3" | |
| /> | |
| </span> | |
| </div> | |
| ); | |
| } | |