| | import { EModelEndpoint, extractEnvVariable, normalizeEndpointName } from 'librechat-data-provider'; |
| | import type { TCustomEndpoints, TEndpoint, TConfig } from 'librechat-data-provider'; |
| | import type { TCustomEndpointsConfig } from '~/types/endpoints'; |
| | import { isUserProvided } from '~/utils'; |
| |
|
| | |
| | |
| | |
| | |
| | export function loadCustomEndpointsConfig( |
| | customEndpoints?: TCustomEndpoints, |
| | ): TCustomEndpointsConfig | undefined { |
| | if (!customEndpoints) { |
| | return; |
| | } |
| |
|
| | const customEndpointsConfig: TCustomEndpointsConfig = {}; |
| |
|
| | if (Array.isArray(customEndpoints)) { |
| | const filteredEndpoints = customEndpoints.filter( |
| | (endpoint) => |
| | endpoint.baseURL && |
| | endpoint.apiKey && |
| | endpoint.name && |
| | endpoint.models && |
| | (endpoint.models.fetch || endpoint.models.default), |
| | ); |
| |
|
| | for (let i = 0; i < filteredEndpoints.length; i++) { |
| | const endpoint = filteredEndpoints[i] as TEndpoint; |
| | const { |
| | baseURL, |
| | apiKey, |
| | name: configName, |
| | iconURL, |
| | modelDisplayLabel, |
| | customParams, |
| | } = endpoint; |
| | const name = normalizeEndpointName(configName); |
| |
|
| | const resolvedApiKey = extractEnvVariable(apiKey ?? ''); |
| | const resolvedBaseURL = extractEnvVariable(baseURL ?? ''); |
| |
|
| | customEndpointsConfig[name] = { |
| | type: EModelEndpoint.custom, |
| | userProvide: isUserProvided(resolvedApiKey), |
| | userProvideURL: isUserProvided(resolvedBaseURL), |
| | customParams: customParams as TConfig['customParams'], |
| | modelDisplayLabel, |
| | iconURL, |
| | }; |
| | } |
| | } |
| |
|
| | return customEndpointsConfig; |
| | } |
| |
|