const { CacheKeys, EModelEndpoint, orderEndpointsConfig } = require('librechat-data-provider'); const loadDefaultEndpointsConfig = require('./loadDefaultEConfig'); const loadConfigEndpoints = require('./loadConfigEndpoints'); const getLogStores = require('~/cache/getLogStores'); /** * * @param {ServerRequest} req * @returns {Promise} */ async function getEndpointsConfig(req) { const cache = getLogStores(CacheKeys.CONFIG_STORE); const cachedEndpointsConfig = await cache.get(CacheKeys.ENDPOINT_CONFIG); if (cachedEndpointsConfig) { return cachedEndpointsConfig; } const defaultEndpointsConfig = await loadDefaultEndpointsConfig(req); const customConfigEndpoints = await loadConfigEndpoints(req); /** @type {TEndpointsConfig} */ const mergedConfig = { ...defaultEndpointsConfig, ...customConfigEndpoints }; if (mergedConfig[EModelEndpoint.assistants] && req.app.locals?.[EModelEndpoint.assistants]) { const { disableBuilder, retrievalModels, capabilities, version, ..._rest } = req.app.locals[EModelEndpoint.assistants]; mergedConfig[EModelEndpoint.assistants] = { ...mergedConfig[EModelEndpoint.assistants], version, retrievalModels, disableBuilder, capabilities, }; } if (mergedConfig[EModelEndpoint.agents] && req.app.locals?.[EModelEndpoint.agents]) { const { disableBuilder, capabilities, ..._rest } = req.app.locals[EModelEndpoint.agents]; mergedConfig[EModelEndpoint.agents] = { ...mergedConfig[EModelEndpoint.agents], disableBuilder, capabilities, }; } if ( mergedConfig[EModelEndpoint.azureAssistants] && req.app.locals?.[EModelEndpoint.azureAssistants] ) { const { disableBuilder, retrievalModels, capabilities, version, ..._rest } = req.app.locals[EModelEndpoint.azureAssistants]; mergedConfig[EModelEndpoint.azureAssistants] = { ...mergedConfig[EModelEndpoint.azureAssistants], version, retrievalModels, disableBuilder, capabilities, }; } if (mergedConfig[EModelEndpoint.bedrock] && req.app.locals?.[EModelEndpoint.bedrock]) { const { availableRegions } = req.app.locals[EModelEndpoint.bedrock]; mergedConfig[EModelEndpoint.bedrock] = { ...mergedConfig[EModelEndpoint.bedrock], availableRegions, }; } const endpointsConfig = orderEndpointsConfig(mergedConfig); await cache.set(CacheKeys.ENDPOINT_CONFIG, endpointsConfig); return endpointsConfig; } module.exports = { getEndpointsConfig };