import type { TPreset, TConversation, EModelEndpoint, TEndpointsConfig, } from 'librechat-data-provider'; import { getLocalStorageItems } from './localStorage'; import { mapEndpoints } from './endpoints'; type TConvoSetup = Partial | Partial; type TDefaultEndpoint = { convoSetup: TConvoSetup; endpointsConfig: TEndpointsConfig }; const getEndpointFromSetup = ( convoSetup: TConvoSetup | null, endpointsConfig: TEndpointsConfig, ): EModelEndpoint | null => { let { endpoint: targetEndpoint = '' } = convoSetup || {}; targetEndpoint = targetEndpoint ?? ''; if (targetEndpoint && endpointsConfig?.[targetEndpoint]) { return targetEndpoint as EModelEndpoint; } else if (targetEndpoint) { console.warn(`Illegal target endpoint ${targetEndpoint}`, endpointsConfig); } return null; }; const getEndpointFromLocalStorage = (endpointsConfig: TEndpointsConfig) => { try { const { lastConversationSetup } = getLocalStorageItems(); const { endpoint } = lastConversationSetup ?? { endpoint: null }; const isDefaultConfig = Object.values(endpointsConfig ?? {}).every((value) => !value); if (isDefaultConfig && endpoint) { return endpoint; } if (isDefaultConfig && endpoint) { return endpoint; } return endpoint && endpointsConfig?.[endpoint] != null ? endpoint : null; } catch (error) { console.error(error); return null; } }; const getDefinedEndpoint = (endpointsConfig: TEndpointsConfig) => { const endpoints = mapEndpoints(endpointsConfig); return endpoints.find((e) => Object.hasOwn(endpointsConfig ?? {}, e)); }; const getDefaultEndpoint = ({ convoSetup, endpointsConfig, }: TDefaultEndpoint): EModelEndpoint | undefined => { return ( getEndpointFromSetup(convoSetup, endpointsConfig) || getEndpointFromLocalStorage(endpointsConfig) || getDefinedEndpoint(endpointsConfig) ); }; export default getDefaultEndpoint;