import { useRecoilState } from 'recoil'; import { useCallback, useEffect, useMemo } from 'react'; import { useQueryClient } from '@tanstack/react-query'; import { QueryKeys, isAgentsEndpoint } from 'librechat-data-provider'; import { Input, Label, OGDialog, OGDialogTitle, SelectDropDown, OGDialogContent, } from '@librechat/client'; import type { TModelsConfig, TEndpointsConfig } from 'librechat-data-provider'; import { cn, defaultTextProps, removeFocusOutlines, mapEndpoints, getConvoSwitchLogic, } from '~/utils'; import { useSetIndexOptions, useLocalize, useDebouncedInput } from '~/hooks'; import PopoverButtons from '~/components/Chat/Input/PopoverButtons'; import { EndpointSettings } from '~/components/Endpoints'; import { useGetEndpointsQuery } from '~/data-provider'; import { useChatContext } from '~/Providers'; import store from '~/store'; const EditPresetDialog = ({ exportPreset, submitPreset, }: { exportPreset: () => void; submitPreset: () => void; }) => { const localize = useLocalize(); const queryClient = useQueryClient(); const { preset, setPreset } = useChatContext(); const { setOption, setOptions } = useSetIndexOptions(preset); const [onTitleChange, title] = useDebouncedInput({ setOption, optionKey: 'title', initialValue: preset?.title, }); const [presetModalVisible, setPresetModalVisible] = useRecoilState(store.presetModalVisible); const { data: _endpoints = [] } = useGetEndpointsQuery({ select: mapEndpoints, }); const availableEndpoints = useMemo(() => { return _endpoints.filter((endpoint) => !isAgentsEndpoint(endpoint)); }, [_endpoints]); useEffect(() => { if (!preset) { return; } if (isAgentsEndpoint(preset.endpoint)) { return; } const presetEndpoint = preset.endpoint ?? ''; if (!presetEndpoint) { return; } const modelsConfig = queryClient.getQueryData([QueryKeys.models]); if (!modelsConfig) { return; } const models = modelsConfig[presetEndpoint] as string[] | undefined; if (!models) { return; } if (!models.length) { return; } if (preset.model === models[0]) { return; } if (!models.includes(preset.model ?? '')) { console.log('setting model', models[0]); setOption('model')(models[0]); } }, [preset, queryClient, setOption]); const switchEndpoint = useCallback( (newEndpoint: string) => { if (!setOptions) { return console.warn('setOptions is not defined'); } const { newEndpointType } = getConvoSwitchLogic({ newEndpoint, modularChat: true, conversation: null, endpointsConfig: queryClient.getQueryData([QueryKeys.endpoints]) ?? {}, }); setOptions({ endpoint: newEndpoint, endpointType: newEndpointType, }); }, [queryClient, setOptions], ); const handleOpenChange = (open: boolean) => { setPresetModalVisible(open); if (!open) { setPreset(null); } }; const { endpoint: _endpoint, endpointType, model } = preset || {}; const endpoint = _endpoint ?? ''; if (!endpoint) { return null; } if (isAgentsEndpoint(endpoint)) { return null; } return ( {localize('com_ui_edit_preset_title', { title: preset?.title })}
{/* Header section with preset name and endpoint */}
{/* PopoverButtons section */}
{/* Separator */}
{/* Settings section */}
{/* Action buttons */}
); }; export default EditPresetDialog;