const { FileSources, EModelEndpoint, getConfigDefaults } = require('librechat-data-provider'); const { checkVariables, checkHealth, checkConfig, checkAzureVariables } = require('./start/checks'); const { azureAssistantsDefaults, assistantsConfigSetup } = require('./start/assistants'); const { initializeFirebase } = require('./Files/Firebase/initialize'); const loadCustomConfig = require('./Config/loadCustomConfig'); const handleRateLimits = require('./Config/handleRateLimits'); const { loadDefaultInterface } = require('./start/interface'); const { azureConfigSetup } = require('./start/azureOpenAI'); const { loadAndFormatTools } = require('./ToolService'); const { agentsConfigSetup } = require('./start/agents'); const { initializeRoles } = require('~/models/Role'); const { getMCPManager } = require('~/config'); const paths = require('~/config/paths'); /** * * Loads custom config and initializes app-wide variables. * @function AppService * @param {Express.Application} app - The Express application object. */ const AppService = async (app) => { await initializeRoles(); /** @type {TCustomConfig}*/ const config = (await loadCustomConfig()) ?? {}; const configDefaults = getConfigDefaults(); const filteredTools = config.filteredTools; const includedTools = config.includedTools; const fileStrategy = config.fileStrategy ?? configDefaults.fileStrategy; const imageOutputType = config?.imageOutputType ?? configDefaults.imageOutputType; process.env.CDN_PROVIDER = fileStrategy; checkVariables(); await checkHealth(); if (fileStrategy === FileSources.firebase) { initializeFirebase(); } /** @type {Record { if (endpoints?.[key]) { endpointLocals[key] = endpoints[key]; } }); app.locals = { ...defaultLocals, modelSpecs: config.modelSpecs, fileConfig: config?.fileConfig, secureImageLinks: config?.secureImageLinks, ...endpointLocals, }; }; module.exports = AppService;