const { EModelEndpoint, getEnabledEndpoints } = require('librechat-data-provider'); const loadAsyncEndpoints = require('./loadAsyncEndpoints'); const { config } = require('./EndpointService'); /** * Load async endpoints and return a configuration object * @param {Express.Request} req - The request object * @returns {Promise>} An object whose keys are endpoint names and values are objects that contain the endpoint configuration and an order. */ async function loadDefaultEndpointsConfig(req) { const { google, gptPlugins } = await loadAsyncEndpoints(req); const { openAI, agents, assistants, azureAssistants, bingAI, anthropic, azureOpenAI, chatGPTBrowser, } = config; const enabledEndpoints = getEnabledEndpoints(); const endpointConfig = { [EModelEndpoint.openAI]: openAI, [EModelEndpoint.agents]: agents, [EModelEndpoint.assistants]: assistants, [EModelEndpoint.azureAssistants]: azureAssistants, [EModelEndpoint.azureOpenAI]: azureOpenAI, [EModelEndpoint.google]: google, [EModelEndpoint.bingAI]: bingAI, [EModelEndpoint.chatGPTBrowser]: chatGPTBrowser, [EModelEndpoint.gptPlugins]: gptPlugins, [EModelEndpoint.anthropic]: anthropic, }; const orderedAndFilteredEndpoints = enabledEndpoints.reduce((config, key, index) => { if (endpointConfig[key]) { config[key] = { ...(endpointConfig[key] ?? {}), order: index }; } return config; }, {}); return orderedAndFilteredEndpoints; } module.exports = loadDefaultEndpointsConfig;