import React, { useMemo, useState, useCallback } from 'react'; import { useGetEndpointsQuery } from 'librechat-data-provider/react-query'; import { getSettingsKeys, tPresetUpdateSchema } from 'librechat-data-provider'; import type { TPreset } from 'librechat-data-provider'; import { SaveAsPresetDialog } from '~/components/Endpoints'; import { useSetIndexOptions, useLocalize } from '~/hooks'; import { componentMapping } from './components'; import { useChatContext } from '~/Providers'; import { settings } from './settings'; export default function Parameters() { const localize = useLocalize(); const { conversation } = useChatContext(); const { setOption } = useSetIndexOptions(); const [isDialogOpen, setIsDialogOpen] = useState(false); const [preset, setPreset] = useState(null); const { data: endpointsConfig } = useGetEndpointsQuery(); const bedrockRegions = useMemo(() => { return endpointsConfig?.[conversation?.endpoint ?? '']?.availableRegions ?? []; }, [endpointsConfig, conversation?.endpoint]); const parameters = useMemo(() => { const [combinedKey, endpointKey] = getSettingsKeys( conversation?.endpoint ?? '', conversation?.model ?? '', ); return settings[combinedKey] ?? settings[endpointKey]; }, [conversation]); const openDialog = useCallback(() => { const newPreset = tPresetUpdateSchema.parse({ ...conversation, }) as TPreset; setPreset(newPreset); setIsDialogOpen(true); }, [conversation]); if (!parameters) { return null; } return (
{' '} {/* This is the parent element containing all settings */} {/* Below is an example of an applied dynamic setting, each be contained by a div with the column span specified */} {parameters.map((setting) => { const Component = componentMapping[setting.component]; const { key, default: defaultValue, ...rest } = setting; if (key === 'region' && bedrockRegions.length) { rest.options = bedrockRegions; } return ( ); })}
{preset && ( )}
); }