import { useMemo } from 'react'; import { EModelEndpoint, Constants } from 'librechat-data-provider'; import { useGetEndpointsQuery, useGetStartupConfig } from 'librechat-data-provider/react-query'; import type * as t from 'librechat-data-provider'; import type { ReactNode } from 'react'; import { useChatContext, useAgentsMapContext, useAssistantsMapContext } from '~/Providers'; import { useGetAssistantDocsQuery } from '~/data-provider'; import ConvoIcon from '~/components/Endpoints/ConvoIcon'; import { getIconEndpoint, getEntity, cn } from '~/utils'; import { useLocalize, useSubmitMessage } from '~/hooks'; import { TooltipAnchor } from '~/components/ui'; import { BirthdayIcon } from '~/components/svg'; import ConvoStarter from './ConvoStarter'; export default function Landing({ Header }: { Header?: ReactNode }) { const { conversation } = useChatContext(); const agentsMap = useAgentsMapContext(); const assistantMap = useAssistantsMapContext(); const { data: startupConfig } = useGetStartupConfig(); const { data: endpointsConfig } = useGetEndpointsQuery(); const localize = useLocalize(); let { endpoint = '' } = conversation ?? {}; if ( endpoint === EModelEndpoint.chatGPTBrowser || endpoint === EModelEndpoint.azureOpenAI || endpoint === EModelEndpoint.gptPlugins ) { endpoint = EModelEndpoint.openAI; } const iconURL = conversation?.iconURL; endpoint = getIconEndpoint({ endpointsConfig, iconURL, endpoint }); const { data: documentsMap = new Map() } = useGetAssistantDocsQuery(endpoint, { select: (data) => new Map(data.map((dbA) => [dbA.assistant_id, dbA])), }); const { entity, isAgent, isAssistant } = getEntity({ endpoint, agentsMap, assistantMap, agent_id: conversation?.agent_id, assistant_id: conversation?.assistant_id, }); const name = entity?.name ?? ''; const description = entity?.description ?? ''; const avatar = isAgent ? (entity as t.Agent | undefined)?.avatar?.filepath ?? '' : ((entity as t.Assistant | undefined)?.metadata?.avatar as string | undefined) ?? ''; const conversation_starters = useMemo(() => { /* The user made updates, use client-side cache, or they exist in an Agent */ if (entity && (entity.conversation_starters?.length ?? 0) > 0) { return entity.conversation_starters; } if (isAgent) { return entity?.conversation_starters ?? []; } /* If none in cache, we use the latest assistant docs */ const entityDocs = documentsMap.get(entity?.id ?? ''); return entityDocs?.conversation_starters ?? []; }, [documentsMap, isAgent, entity]); const containerClassName = 'shadow-stroke relative flex h-full items-center justify-center rounded-full bg-white text-black'; const { submitMessage } = useSubmitMessage(); const sendConversationStarter = (text: string) => submitMessage({ text }); const getWelcomeMessage = () => { const greeting = conversation?.greeting ?? ''; if (greeting) { return greeting; } if (isAssistant) { return localize('com_nav_welcome_assistant'); } if (isAgent) { return localize('com_nav_welcome_agent'); } return localize('com_nav_welcome_message'); }; return (
{Header != null ? Header : null}
{startupConfig?.showBirthdayIcon === true ? ( ) : null}
{name ? (
{name}
{description ? description : localize('com_nav_welcome_message')}
{/*
By Daniel Avila
*/}
) : (

{getWelcomeMessage()}

)}
{conversation_starters.length > 0 && conversation_starters .slice(0, Constants.MAX_CONVO_STARTERS) .map((text: string, index: number) => ( sendConversationStarter(text)} /> ))}
); }