| | 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); |
| | } |
| |
|