import React, { useMemo } from 'react'; import type * as t from 'librechat-data-provider'; import { getEndpointField, getIconKey, getEntity, getIconEndpoint } from '~/utils'; import { icons } from '~/components/Chat/Menus/Endpoints/Icons'; import ConvoIconURL from '~/components/Endpoints/ConvoIconURL'; export default function ConvoIcon({ conversation, endpointsConfig, assistantMap, agentsMap, className = '', containerClassName = '', context, size, }: { conversation: t.TConversation | t.TPreset | null; endpointsConfig: t.TEndpointsConfig; assistantMap: t.TAssistantsMap | undefined; agentsMap: t.TAgentsMap | undefined; containerClassName?: string; context?: 'message' | 'nav' | 'landing' | 'menu-item'; className?: string; size?: number; }) { const iconURL = conversation?.iconURL ?? ''; let endpoint = conversation?.endpoint; endpoint = getIconEndpoint({ endpointsConfig, iconURL, endpoint }); const { entity, isAgent } = useMemo( () => getEntity({ endpoint, agentsMap, assistantMap, agent_id: conversation?.agent_id, assistant_id: conversation?.assistant_id, }), [endpoint, conversation?.agent_id, conversation?.assistant_id, agentsMap, assistantMap], ); const name = entity?.name ?? ''; const avatar = isAgent ? (entity as t.Agent | undefined)?.avatar?.filepath : ((entity as t.Assistant | undefined)?.metadata?.avatar as string); const endpointIconURL = getEndpointField(endpointsConfig, endpoint, 'iconURL'); const iconKey = getIconKey({ endpoint, endpointsConfig, endpointIconURL }); const Icon = icons[iconKey] ?? null; return ( <> {iconURL && iconURL.includes('http') ? ( ) : (
{endpoint && Icon != null && ( )}
)} ); }