import { useRecoilState } from 'recoil'; import { EModelEndpoint, SettingsViews } from 'librechat-data-provider'; import type { ReactNode } from 'react'; import { MessagesSquared, GPTIcon, AssistantIcon, DataIcon } from '~/components/svg'; import { useChatContext } from '~/Providers'; import { Button } from '~/components/ui'; import { useLocalize } from '~/hooks'; import { cn } from '~/utils/'; import store from '~/store'; type TPopoverButton = { label: string; buttonClass: string; handler: () => void; type?: 'alternative'; icon: ReactNode; }; export default function PopoverButtons({ buttonClass, iconClass = '', endpoint: _overrideEndpoint, endpointType: overrideEndpointType, model: overrideModel, }: { buttonClass?: string; iconClass?: string; endpoint?: EModelEndpoint | string; endpointType?: EModelEndpoint | string; model?: string | null; }) { const { conversation, optionSettings, setOptionSettings, showAgentSettings, setShowAgentSettings, } = useChatContext(); const localize = useLocalize(); const [settingsView, setSettingsView] = useRecoilState(store.currentSettingsView); const { model: _model, endpoint: _endpoint, endpointType } = conversation ?? {}; const overrideEndpoint = overrideEndpointType ?? _overrideEndpoint; const endpoint = overrideEndpoint ?? endpointType ?? _endpoint ?? ''; const model = overrideModel ?? _model; const isGenerativeModel = /gemini|learnlm|gemma/.test(model ?? '') ?? false; const isChatModel = (!isGenerativeModel && model?.toLowerCase().includes('chat')) ?? false; const isTextModel = !isGenerativeModel && !isChatModel && /code|text/.test(model ?? ''); const { showExamples } = optionSettings; const showExamplesButton = !isGenerativeModel && !isTextModel && isChatModel; const triggerExamples = () => { setSettingsView(SettingsViews.default); setOptionSettings((prev) => ({ ...prev, showExamples: !(prev.showExamples ?? false) })); }; const endpointSpecificbuttons: { [key: string]: TPopoverButton[] } = { [EModelEndpoint.google]: [ { label: localize(showExamples === true ? 'com_hide_examples' : 'com_show_examples'), buttonClass: isGenerativeModel === true || isTextModel ? 'disabled' : '', handler: triggerExamples, icon: , }, ], [EModelEndpoint.gptPlugins]: [ { label: localize( showAgentSettings ? 'com_show_completion_settings' : 'com_show_agent_settings', ), buttonClass: '', handler: () => { setSettingsView(SettingsViews.default); setShowAgentSettings((prev) => !prev); }, icon: , }, ], }; if (!endpoint) { return null; } if (endpoint === EModelEndpoint.google && !showExamplesButton) { return null; } const additionalButtons: { [key: string]: TPopoverButton[] } = { [SettingsViews.default]: [ { label: 'Context Settings', buttonClass: '', type: 'alternative', handler: () => setSettingsView(SettingsViews.advanced), icon: , }, ], [SettingsViews.advanced]: [ { label: 'Model Settings', buttonClass: '', type: 'alternative', handler: () => setSettingsView(SettingsViews.default), icon: , }, ], }; const endpointButtons = (endpointSpecificbuttons[endpoint] as TPopoverButton[] | null) ?? []; const disabled = true; return (
{endpointButtons.map((button, index) => ( ))}
{disabled ? null : (
{additionalButtons[settingsView].map((button, index) => ( ))}
)}
); }