e115934061
Publish `@librechat/data-schemas` to NPM / pack (push) Failing after 8s
Publish `@librechat/client` to NPM / pack (push) Failing after 0s
GitNexus Index / index (push) Failing after 1s
Sync Locize Translations & Create Translation PR / Create Translation PR on Version Published (push) Has been skipped
Sync Helm Chart Tags / Sync chart tags (push) Failing after 2s
Publish `librechat-data-provider` to NPM / pack (push) Failing after 1s
Docker Dev Images Build / build (Dockerfile, librechat-dev, node) (push) Failing after 1s
Docker Dev Images Build / build (Dockerfile.multi, librechat-dev-api, api-build) (push) Failing after 0s
Sync Helm Chart Tags / Ignore non-main push (push) Has been skipped
Sync Locize Translations & Create Translation PR / Sync Translation Keys with Locize (push) Failing after 1s
Publish `@librechat/client` to NPM / publish-npm (push) Has been cancelled
Publish `librechat-data-provider` to NPM / publish-npm (push) Has been cancelled
GitNexus Index / post-index (push) Has been cancelled
Publish `@librechat/data-schemas` to NPM / publish-npm (push) Has been cancelled
63 lines
2.1 KiB
JavaScript
63 lines
2.1 KiB
JavaScript
const { CacheKeys } = require('librechat-data-provider');
|
|
const { AppService, logger } = require('@librechat/data-schemas');
|
|
const { createAppConfigService, clearMcpConfigCache } = require('@librechat/api');
|
|
const { setCachedTools, invalidateCachedTools } = require('./getCachedTools');
|
|
const { loadAndFormatTools } = require('~/server/services/start/tools');
|
|
const loadCustomConfig = require('./loadCustomConfig');
|
|
const getLogStores = require('~/cache/getLogStores');
|
|
const paths = require('~/config/paths');
|
|
const db = require('~/models');
|
|
|
|
const loadBaseConfig = async () => {
|
|
/** @type {TCustomConfig} */
|
|
const config = (await loadCustomConfig()) ?? {};
|
|
/** @type {Record<string, FunctionTool>} */
|
|
const systemTools = loadAndFormatTools({
|
|
adminFilter: config.filteredTools,
|
|
adminIncluded: config.includedTools,
|
|
directory: paths.structuredTools,
|
|
});
|
|
return AppService({ config, paths, systemTools });
|
|
};
|
|
|
|
const { getAppConfig, clearAppConfigCache, clearOverrideCache } = createAppConfigService({
|
|
loadBaseConfig,
|
|
setCachedTools,
|
|
getCache: getLogStores,
|
|
cacheKeys: CacheKeys,
|
|
getApplicableConfigs: db.getApplicableConfigs,
|
|
getUserPrincipals: db.getUserPrincipals,
|
|
});
|
|
|
|
/**
|
|
* Invalidate all config-related caches after an admin config mutation.
|
|
* Clears the base config, per-principal override caches, tool caches,
|
|
* and the MCP config-source server cache.
|
|
* @param {string} [tenantId] - Optional tenant ID to scope override cache clearing.
|
|
*/
|
|
async function invalidateConfigCaches(tenantId) {
|
|
const results = await Promise.allSettled([
|
|
clearAppConfigCache(),
|
|
clearOverrideCache(tenantId),
|
|
invalidateCachedTools({ invalidateGlobal: true }),
|
|
clearMcpConfigCache(),
|
|
]);
|
|
const labels = [
|
|
'clearAppConfigCache',
|
|
'clearOverrideCache',
|
|
'invalidateCachedTools',
|
|
'clearMcpConfigCache',
|
|
];
|
|
for (let i = 0; i < results.length; i++) {
|
|
if (results[i].status === 'rejected') {
|
|
logger.error(`[invalidateConfigCaches] ${labels[i]} failed:`, results[i].reason);
|
|
}
|
|
}
|
|
}
|
|
|
|
module.exports = {
|
|
getAppConfig,
|
|
clearAppConfigCache,
|
|
invalidateConfigCaches,
|
|
};
|