| import { useCallback } from 'react'; | |
| import { isAssistantsEndpoint } from 'librechat-data-provider'; | |
| import type { AssistantsEndpoint, TConversation, TPreset } from 'librechat-data-provider'; | |
| import useDefaultConvo from '~/hooks/Conversations/useDefaultConvo'; | |
| import { useChatContext } from '~/Providers/ChatContext'; | |
| import useAssistantListMap from './useAssistantListMap'; | |
| import { mapAssistants, logger } from '~/utils'; | |
| export default function useSelectAssistant(endpoint: AssistantsEndpoint) { | |
| const getDefaultConversation = useDefaultConvo(); | |
| const { conversation, newConversation } = useChatContext(); | |
| const assistantMap = useAssistantListMap((res) => mapAssistants(res.data)); | |
| const onSelect = useCallback( | |
| (value: string) => { | |
| const assistant = assistantMap[endpoint]?.[value]; | |
| if (!assistant) { | |
| return; | |
| } | |
| const template: Partial<TPreset | TConversation> = { | |
| endpoint, | |
| assistant_id: assistant.id, | |
| model: assistant.model, | |
| conversationId: 'new', | |
| }; | |
| logger.log('conversation', 'Updating conversation with assistant', assistant); | |
| if (isAssistantsEndpoint(conversation?.endpoint)) { | |
| const currentConvo = getDefaultConversation({ | |
| conversation: { ...(conversation ?? {}) }, | |
| preset: template, | |
| }); | |
| newConversation({ | |
| template: currentConvo, | |
| preset: template as Partial<TPreset>, | |
| keepLatestMessage: true, | |
| }); | |
| return; | |
| } | |
| newConversation({ | |
| template: { ...(template as Partial<TConversation>) }, | |
| preset: template as Partial<TPreset>, | |
| }); | |
| }, | |
| [endpoint, assistantMap, conversation, getDefaultConversation, newConversation], | |
| ); | |
| return { onSelect }; | |
| } | |