- This allows use APP_CONFIG in FORCED_IN_MEMORY_CACHE_NAMESPACES - Remove the complexity of nested namespace (e.g. we no longer have to worry about the prefix of every role key)
71 lines
2.0 KiB
JavaScript
71 lines
2.0 KiB
JavaScript
const { logger } = require('@librechat/data-schemas');
|
|
const { CacheKeys } = require('librechat-data-provider');
|
|
const AppService = require('~/server/services/AppService');
|
|
const { setCachedTools } = require('./getCachedTools');
|
|
const getLogStores = require('~/cache/getLogStores');
|
|
|
|
const BASE_CONFIG_KEY = '_BASE_';
|
|
|
|
/**
|
|
* Get the app configuration based on user context
|
|
* @param {Object} [options]
|
|
* @param {string} [options.role] - User role for role-based config
|
|
* @param {boolean} [options.refresh] - Force refresh the cache
|
|
* @returns {Promise<AppConfig>}
|
|
*/
|
|
async function getAppConfig(options = {}) {
|
|
const { role, refresh } = options;
|
|
|
|
const cache = getLogStores(CacheKeys.APP_CONFIG);
|
|
const cacheKey = role ? role : BASE_CONFIG_KEY;
|
|
|
|
if (!refresh) {
|
|
const cached = await cache.get(cacheKey);
|
|
if (cached) {
|
|
return cached;
|
|
}
|
|
}
|
|
|
|
let baseConfig = await cache.get(BASE_CONFIG_KEY);
|
|
if (!baseConfig) {
|
|
logger.info('[getAppConfig] App configuration not initialized. Initializing AppService...');
|
|
baseConfig = await AppService();
|
|
|
|
if (!baseConfig) {
|
|
throw new Error('Failed to initialize app configuration through AppService.');
|
|
}
|
|
|
|
if (baseConfig.availableTools) {
|
|
await setCachedTools(baseConfig.availableTools, { isGlobal: true });
|
|
}
|
|
|
|
await cache.set(BASE_CONFIG_KEY, baseConfig);
|
|
}
|
|
|
|
// For now, return the base config
|
|
// In the future, this is where we'll apply role-based modifications
|
|
if (role) {
|
|
// TODO: Apply role-based config modifications
|
|
// const roleConfig = await applyRoleBasedConfig(baseConfig, role);
|
|
// await cache.set(cacheKey, roleConfig);
|
|
// return roleConfig;
|
|
}
|
|
|
|
return baseConfig;
|
|
}
|
|
|
|
/**
|
|
* Clear the app configuration cache
|
|
* @returns {Promise<boolean>}
|
|
*/
|
|
async function clearAppConfigCache() {
|
|
const cache = getLogStores(CacheKeys.CONFIG_STORE);
|
|
const cacheKey = CacheKeys.APP_CONFIG;
|
|
return await cache.delete(cacheKey);
|
|
}
|
|
|
|
module.exports = {
|
|
getAppConfig,
|
|
clearAppConfigCache,
|
|
};
|