| import { logger } from '@librechat/data-schemas'; |
| import { |
| EModelEndpoint, |
| removeNullishValues, |
| normalizeEndpointName, |
| } from 'librechat-data-provider'; |
| import type { TCustomConfig, TEndpoint, TTransactionsConfig } from 'librechat-data-provider'; |
| import type { AppConfig } from '@librechat/data-schemas'; |
| import { isEnabled } from '~/utils'; |
|
|
| |
| |
| |
| export function getBalanceConfig(appConfig?: AppConfig): Partial<TCustomConfig['balance']> | null { |
| const isLegacyEnabled = isEnabled(process.env.CHECK_BALANCE); |
| const startBalance = process.env.START_BALANCE; |
| |
| const config: Partial<TCustomConfig['balance']> = removeNullishValues({ |
| enabled: isLegacyEnabled, |
| startBalance: startBalance != null && startBalance ? parseInt(startBalance, 10) : undefined, |
| }); |
| if (!appConfig) { |
| return config; |
| } |
| return { ...config, ...(appConfig?.['balance'] ?? {}) }; |
| } |
|
|
| |
| |
| |
| export function getTransactionsConfig(appConfig?: AppConfig): Partial<TTransactionsConfig> { |
| const defaultConfig: TTransactionsConfig = { enabled: true }; |
|
|
| if (!appConfig) { |
| return defaultConfig; |
| } |
|
|
| const transactionsConfig = appConfig?.['transactions'] ?? defaultConfig; |
| const balanceConfig = getBalanceConfig(appConfig); |
|
|
| |
| |
| if (balanceConfig?.enabled && !transactionsConfig.enabled) { |
| logger.warn( |
| 'Configuration warning: transactions.enabled=false is incompatible with balance.enabled=true. ' + |
| 'Transactions will be enabled to ensure balance tracking works correctly.', |
| ); |
| return { ...transactionsConfig, enabled: true }; |
| } |
|
|
| return transactionsConfig; |
| } |
|
|
| export const getCustomEndpointConfig = ({ |
| endpoint, |
| appConfig, |
| }: { |
| endpoint: string | EModelEndpoint; |
| appConfig?: AppConfig; |
| }): Partial<TEndpoint> | undefined => { |
| if (!appConfig) { |
| throw new Error(`Config not found for the ${endpoint} custom endpoint.`); |
| } |
|
|
| const customEndpoints = appConfig.endpoints?.[EModelEndpoint.custom] ?? []; |
| return customEndpoints.find( |
| (endpointConfig) => normalizeEndpointName(endpointConfig.name) === endpoint, |
| ); |
| }; |
|
|
| export function hasCustomUserVars(appConfig?: AppConfig): boolean { |
| const mcpServers = appConfig?.mcpConfig; |
| return Object.values(mcpServers ?? {}).some((server) => server?.customUserVars); |
| } |
|
|