import { useRecoilState } from 'recoil'; import { Settings2 } from 'lucide-react'; import { useState, useEffect, useMemo } from 'react'; import { Root, Anchor } from '@radix-ui/react-popover'; import { PluginStoreDialog, TooltipAnchor } from '@librechat/client'; import { useUserKeyQuery } from 'librechat-data-provider/react-query'; import { EModelEndpoint, isParamEndpoint, tConvoUpdateSchema } from 'librechat-data-provider'; import type { TPreset, TInterfaceConfig } from 'librechat-data-provider'; import { EndpointSettings, SaveAsPresetDialog, AlternativeSettings } from '~/components/Endpoints'; import { useSetIndexOptions, useLocalize } from '~/hooks'; import { useGetEndpointsQuery } from '~/data-provider'; import OptionsPopover from './OptionsPopover'; import PopoverButtons from './PopoverButtons'; import { useChatContext } from '~/Providers'; import { getEndpointField } from '~/utils'; import store from '~/store'; export default function HeaderOptions({ interfaceConfig, }: { interfaceConfig?: Partial; }) { const { data: endpointsConfig } = useGetEndpointsQuery(); const [saveAsDialogShow, setSaveAsDialogShow] = useState(false); const [showPluginStoreDialog, setShowPluginStoreDialog] = useRecoilState( store.showPluginStoreDialog, ); const localize = useLocalize(); const { showPopover, conversation, setShowPopover } = useChatContext(); const { setOption } = useSetIndexOptions(); const { endpoint, conversationId } = conversation ?? {}; const { data: keyExpiry = { expiresAt: undefined } } = useUserKeyQuery(endpoint ?? ''); const userProvidesKey = useMemo( () => !!(endpointsConfig?.[endpoint ?? '']?.userProvide ?? false), [endpointsConfig, endpoint], ); const keyProvided = useMemo( () => (userProvidesKey ? !!(keyExpiry.expiresAt ?? '') : true), [keyExpiry.expiresAt, userProvidesKey], ); const noSettings = useMemo<{ [key: string]: boolean }>( () => ({ [EModelEndpoint.chatGPTBrowser]: true, }), [conversationId], ); useEffect(() => { if (endpoint && noSettings[endpoint]) { setShowPopover(false); } }, [endpoint, noSettings]); const saveAsPreset = () => { setSaveAsDialogShow(true); }; if (!endpoint) { return null; } const triggerAdvancedMode = () => setShowPopover((prev) => !prev); const endpointType = getEndpointField(endpointsConfig, endpoint, 'type'); const paramEndpoint = isParamEndpoint(endpoint, endpointType); return (
{!noSettings[endpoint] && interfaceConfig?.parameters === true && paramEndpoint === false && ( )}
{interfaceConfig?.parameters === true && paramEndpoint === false && ( } closePopover={() => setShowPopover(false)} >
)} {interfaceConfig?.presets === true && ( )} {interfaceConfig?.parameters === true && ( )}
); }