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') ? (