import { useMemo, useCallback } from 'react'; import { EModelEndpoint, Constants } from 'librechat-data-provider'; import { useChatContext, useAgentsMapContext, useAssistantsMapContext } from '~/Providers'; import { useGetAssistantDocsQuery, useGetEndpointsQuery } from '~/data-provider'; import { getIconEndpoint, getEntity } from '~/utils'; import { useSubmitMessage } from '~/hooks'; const ConversationStarters = () => { const { conversation } = useChatContext(); const agentsMap = useAgentsMapContext(); const assistantMap = useAssistantsMapContext(); const { data: endpointsConfig } = useGetEndpointsQuery(); const endpointType = useMemo(() => { let ep = conversation?.endpoint ?? ''; if (ep === EModelEndpoint.azureOpenAI) { ep = EModelEndpoint.openAI; } return getIconEndpoint({ endpointsConfig, iconURL: conversation?.iconURL, endpoint: ep, }); }, [conversation?.endpoint, conversation?.iconURL, endpointsConfig]); const { data: documentsMap = new Map() } = useGetAssistantDocsQuery(endpointType, { select: (data) => new Map(data.map((dbA) => [dbA.assistant_id, dbA])), }); const { entity, isAgent } = getEntity({ endpoint: endpointType, agentsMap, assistantMap, agent_id: conversation?.agent_id, assistant_id: conversation?.assistant_id, }); const conversation_starters = useMemo(() => { if (entity?.conversation_starters?.length) { return entity.conversation_starters; } if (isAgent) { return []; } return documentsMap.get(entity?.id ?? '')?.conversation_starters ?? []; }, [documentsMap, isAgent, entity]); const { submitMessage } = useSubmitMessage(); const sendConversationStarter = useCallback( (text: string) => submitMessage({ text }), [submitMessage], ); if (!conversation_starters.length) { return null; } return (
{conversation_starters .slice(0, Constants.MAX_CONVO_STARTERS) .map((text: string, index: number) => ( ))}
); }; export default ConversationStarters;