import { useEffect } from 'react'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '~/components/ui/Select'; import { EModelEndpoint, defaultOrderQuery } from 'librechat-data-provider'; import { useSetIndexOptions, useSelectAssistant, useLocalize } from '~/hooks'; import { useChatContext, useAssistantsMapContext } from '~/Providers'; import { useListAssistantsQuery } from '~/data-provider'; import Icon from '~/components/Endpoints/Icon'; import { cn } from '~/utils'; interface SwitcherProps { isCollapsed: boolean; } export default function Switcher({ isCollapsed }: SwitcherProps) { const localize = useLocalize(); const { setOption } = useSetIndexOptions(); const { index, conversation } = useChatContext(); /* `selectedAssistant` must be defined with `null` to cause re-render on update */ const { assistant_id: selectedAssistant = null, endpoint } = conversation ?? {}; const { data: assistants = [] } = useListAssistantsQuery(defaultOrderQuery, { select: (res) => res.data.map(({ id, name, metadata }) => ({ id, name, metadata })), }); const assistantMap = useAssistantsMapContext(); const { onSelect } = useSelectAssistant(); useEffect(() => { if (!selectedAssistant && assistants && assistants.length && assistantMap) { const assistant_id = localStorage.getItem(`assistant_id__${index}`) ?? assistants[0]?.id ?? ''; const assistant = assistantMap?.[assistant_id]; if (!assistant) { return; } if (endpoint !== EModelEndpoint.assistants) { return; } setOption('model')(assistant.model); setOption('assistant_id')(assistant_id); } }, [index, assistants, selectedAssistant, assistantMap, endpoint, setOption]); const currentAssistant = assistantMap?.[selectedAssistant ?? '']; return ( ); }