mirror of
https://github.com/danny-avila/LibreChat.git
synced 2025-09-22 06:00:56 +02:00

* fix: Ensure safe access to agent capabilities in AgentConfig * fix: don't show agent builder if agents endpoint is not enabled * fix: Improve error logging for MCP tool calls * fix: Enhance error message for MCP tool failures * feat: Add optional spec and iconURL properties to TEndpointOption type * chore: Update condition to use constant for new conversation parameter * feat: Enhance abort error handling with additional endpoint options to properly render error message fields * fix: Throw error instead of returning message for failed MCP tool calls * refactor: separate logic to generate new S3 URLs for expired links * feat: Implement S3 URL refresh for user avatars with error handling * fix: authcontext error in chats where agent chain is used * refactor: streamline balance configuration logic in getBalanceConfig function * fix: enhance icon resolution logic in SpecIcon component * fix: allow null values for spec and iconURL in TEndpointOption type * fix: update balance check to allow null tokenCredits
63 lines
1.8 KiB
JavaScript
63 lines
1.8 KiB
JavaScript
const { CacheKeys, EModelEndpoint } = require('librechat-data-provider');
|
|
const { normalizeEndpointName, isEnabled } = require('~/server/utils');
|
|
const loadCustomConfig = require('./loadCustomConfig');
|
|
const getLogStores = require('~/cache/getLogStores');
|
|
|
|
/**
|
|
* Retrieves the configuration object
|
|
* @function getCustomConfig
|
|
* @returns {Promise<TCustomConfig | null>}
|
|
* */
|
|
async function getCustomConfig() {
|
|
const cache = getLogStores(CacheKeys.CONFIG_STORE);
|
|
let customConfig = await cache.get(CacheKeys.CUSTOM_CONFIG);
|
|
|
|
if (!customConfig) {
|
|
customConfig = await loadCustomConfig();
|
|
}
|
|
|
|
if (!customConfig) {
|
|
return null;
|
|
}
|
|
|
|
return customConfig;
|
|
}
|
|
|
|
/**
|
|
* Retrieves the configuration object
|
|
* @function getBalanceConfig
|
|
* @returns {Promise<TCustomConfig['balance'] | null>}
|
|
* */
|
|
async function getBalanceConfig() {
|
|
const isLegacyEnabled = isEnabled(process.env.CHECK_BALANCE);
|
|
const startBalance = process.env.START_BALANCE;
|
|
/** @type {TCustomConfig['balance']} */
|
|
const config = {
|
|
enabled: isLegacyEnabled,
|
|
startBalance: startBalance != null && startBalance ? parseInt(startBalance, 10) : undefined,
|
|
};
|
|
const customConfig = await getCustomConfig();
|
|
if (!customConfig) {
|
|
return config;
|
|
}
|
|
return { ...config, ...(customConfig?.['balance'] ?? {}) };
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @param {string | EModelEndpoint} endpoint
|
|
*/
|
|
const getCustomEndpointConfig = async (endpoint) => {
|
|
const customConfig = await getCustomConfig();
|
|
if (!customConfig) {
|
|
throw new Error(`Config not found for the ${endpoint} custom endpoint.`);
|
|
}
|
|
|
|
const { endpoints = {} } = customConfig;
|
|
const customEndpoints = endpoints[EModelEndpoint.custom] ?? [];
|
|
return customEndpoints.find(
|
|
(endpointConfig) => normalizeEndpointName(endpointConfig.name) === endpoint,
|
|
);
|
|
};
|
|
|
|
module.exports = { getCustomConfig, getBalanceConfig, getCustomEndpointConfig };
|