| import { isAssistantsEndpoint } from 'librechat-data-provider'; |
| import type { |
| TConversation, |
| TEndpointsConfig, |
| TPreset, |
| TAssistantsMap, |
| } from 'librechat-data-provider'; |
| import ConvoIconURL from '~/components/Endpoints/ConvoIconURL'; |
| import MinimalIcon from '~/components/Endpoints/MinimalIcon'; |
| import { getEndpointField, getIconEndpoint } from '~/utils'; |
|
|
| export default function EndpointIcon({ |
| conversation, |
| endpointsConfig, |
| className = 'mr-0', |
| assistantMap, |
| context, |
| }: { |
| conversation: TConversation | TPreset | null; |
| endpointsConfig: TEndpointsConfig; |
| containerClassName?: string; |
| context?: 'message' | 'nav' | 'landing' | 'menu-item'; |
| assistantMap?: TAssistantsMap; |
| className?: string; |
| size?: number; |
| }) { |
| const convoIconURL = conversation?.iconURL ?? ''; |
| let endpoint = conversation?.endpoint; |
| endpoint = getIconEndpoint({ endpointsConfig, iconURL: convoIconURL, endpoint }); |
|
|
| const endpointType = getEndpointField(endpointsConfig, endpoint, 'type'); |
| const endpointIconURL = getEndpointField(endpointsConfig, endpoint, 'iconURL'); |
|
|
| const assistant = |
| isAssistantsEndpoint(endpoint) && assistantMap?.[endpoint]?.[conversation?.assistant_id ?? '']; |
| const assistantAvatar = (assistant && (assistant?.metadata?.avatar as string)) || ''; |
| const assistantName = (assistant && assistant?.name) || ''; |
|
|
| const iconURL = assistantAvatar || convoIconURL; |
|
|
| let icon: React.ReactNode | null = null; |
| if (iconURL && (iconURL.includes('http') || iconURL.startsWith('/images/'))) { |
| icon = ConvoIconURL({ |
| preset: { |
| ...(conversation as TPreset), |
| iconURL, |
| }, |
| context, |
| endpointIconURL, |
| assistantAvatar, |
| assistantName, |
| }); |
| } else { |
| icon = MinimalIcon({ |
| size: 20, |
| iconURL: endpointIconURL, |
| endpoint, |
| endpointType, |
| model: conversation?.model, |
| error: false, |
| className, |
| isCreatedByUser: false, |
| chatGptLabel: undefined, |
| modelLabel: undefined, |
| jailbreak: undefined, |
| }); |
| } |
|
|
| return icon; |
| } |
|
|