| import React, { useMemo } from 'react'; | |
| import { getEndpointField } from 'librechat-data-provider'; | |
| import type * as t from 'librechat-data-provider'; | |
| import { getIconKey, getEntity, getIconEndpoint } from '~/utils'; | |
| import ConvoIconURL from '~/components/Endpoints/ConvoIconURL'; | |
| import { icons } from '~/hooks/Endpoint/Icons'; | |
| 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') ? ( | |
| <ConvoIconURL | |
| iconURL={iconURL} | |
| modelLabel={conversation?.chatGptLabel ?? conversation?.modelLabel ?? ''} | |
| endpointIconURL={endpointIconURL} | |
| assistantAvatar={avatar} | |
| assistantName={name} | |
| agentAvatar={avatar} | |
| agentName={name} | |
| context={context} | |
| /> | |
| ) : ( | |
| <div className={containerClassName}> | |
| {endpoint && Icon != null && ( | |
| <Icon | |
| size={size} | |
| context={context} | |
| endpoint={endpoint} | |
| className={className} | |
| iconURL={endpointIconURL} | |
| assistantName={name} | |
| agentName={name} | |
| avatar={avatar} | |
| /> | |
| )} | |
| </div> | |
| )} | |
| </> | |
| ); | |
| } | |