import { excludedKeys } from 'librechat-data-provider'; import { useGetModelsQuery } from 'librechat-data-provider/react-query'; import type { TEndpointsConfig, TModelsConfig, TConversation, TPreset, } from 'librechat-data-provider'; import { getDefaultEndpoint, buildDefaultConvo } from '~/utils'; import { useGetEndpointsQuery } from '~/data-provider'; type TDefaultConvo = { conversation: Partial; preset?: Partial | null; cleanInput?: boolean; cleanOutput?: boolean; }; const exceptions = new Set(['spec', 'iconURL']); const useDefaultConvo = () => { const { data: endpointsConfig = {} as TEndpointsConfig } = useGetEndpointsQuery(); const { data: modelsConfig = {} as TModelsConfig } = useGetModelsQuery(); const getDefaultConversation = ({ conversation: _convo, preset, cleanInput, cleanOutput, }: TDefaultConvo) => { const endpoint = getDefaultEndpoint({ convoSetup: preset as TPreset, endpointsConfig, }); const models = modelsConfig[endpoint ?? ''] || []; const conversation = { ..._convo }; if (cleanInput === true) { for (const key in conversation) { if (excludedKeys.has(key) && !exceptions.has(key)) { continue; } if (conversation[key] == null) { continue; } conversation[key] = undefined; } } const defaultConvo = buildDefaultConvo({ conversation: conversation as TConversation, endpoint, lastConversationSetup: preset as TConversation, models, }); if (!cleanOutput) { return defaultConvo; } for (const key in defaultConvo) { if (excludedKeys.has(key) && !exceptions.has(key)) { continue; } if (defaultConvo[key] == null) { continue; } defaultConvo[key] = undefined; } return defaultConvo; }; return getDefaultConversation; }; export default useDefaultConvo;