| import { useMemo } from 'react'; |
| import { UserIcon } from '@librechat/client'; |
| import type { TMessage, Assistant, Agent } from 'librechat-data-provider'; |
| import type { TMessageProps } from '~/common'; |
| import MessageEndpointIcon from '../Endpoints/MessageEndpointIcon'; |
| import ConvoIconURL from '~/components/Endpoints/ConvoIconURL'; |
| import { getIconEndpoint, logger } from '~/utils'; |
|
|
| export default function MessageIcon( |
| props: Pick<TMessageProps, 'message' | 'conversation'> & { |
| assistant?: false | Assistant; |
| agent?: false | Agent; |
| }, |
| ) { |
| const { message, conversation, assistant, agent } = props; |
|
|
| const messageSettings = useMemo( |
| () => ({ |
| ...(conversation ?? {}), |
| ...({ |
| ...message, |
| iconURL: message?.iconURL ?? '', |
| } as TMessage), |
| }), |
| [conversation, message], |
| ); |
|
|
| const iconURL = messageSettings.iconURL ?? ''; |
| let endpoint = messageSettings.endpoint; |
| endpoint = getIconEndpoint({ endpointsConfig: undefined, iconURL, endpoint }); |
| const assistantName = (assistant ? assistant.name : '') ?? ''; |
| const assistantAvatar = (assistant ? assistant.metadata?.avatar : '') ?? ''; |
| const agentName = (agent ? agent.name : '') ?? ''; |
| const agentAvatar = (agent ? agent?.avatar?.filepath : '') ?? ''; |
| const avatarURL = useMemo(() => { |
| let result = ''; |
| if (assistant) { |
| result = assistantAvatar; |
| } else if (agent) { |
| result = agentAvatar; |
| } |
| return result; |
| }, [assistant, agent, assistantAvatar, agentAvatar]); |
| logger.log('MessageIcon', { |
| endpoint, |
| iconURL, |
| assistantName, |
| assistantAvatar, |
| agentName, |
| agentAvatar, |
| }); |
| if (message?.isCreatedByUser !== true && iconURL && iconURL.includes('http')) { |
| return ( |
| <ConvoIconURL |
| iconURL={iconURL} |
| modelLabel={messageSettings.chatGptLabel ?? messageSettings.modelLabel ?? ''} |
| context="message" |
| assistantAvatar={assistantAvatar} |
| assistantName={assistantName} |
| agentAvatar={agentAvatar} |
| agentName={agentName} |
| /> |
| ); |
| } |
|
|
| if (message?.isCreatedByUser === true) { |
| return ( |
| <div |
| style={{ |
| backgroundColor: 'rgb(121, 137, 255)', |
| width: '20px', |
| height: '20px', |
| boxShadow: 'rgba(240, 246, 252, 0.1) 0px 0px 0px 1px', |
| }} |
| className="relative flex h-9 w-9 items-center justify-center rounded-sm p-1 text-white" |
| > |
| <UserIcon /> |
| </div> |
| ); |
| } |
|
|
| return ( |
| <MessageEndpointIcon |
| {...messageSettings} |
| endpoint={endpoint} |
| iconURL={avatarURL} |
| model={message?.model ?? conversation?.model} |
| assistantName={assistantName} |
| agentName={agentName} |
| size={28.8} |
| /> |
| ); |
| } |
|
|