2025-06-23 19:44:24 -04:00
|
|
|
const { Providers } = require('@librechat/agents');
|
|
|
|
|
const { EModelEndpoint } = require('librechat-data-provider');
|
2025-08-26 12:10:18 -04:00
|
|
|
const { getCustomEndpointConfig } = require('@librechat/api');
|
2025-06-23 19:44:24 -04:00
|
|
|
const initAnthropic = require('~/server/services/Endpoints/anthropic/initialize');
|
|
|
|
|
const getBedrockOptions = require('~/server/services/Endpoints/bedrock/options');
|
|
|
|
|
const initOpenAI = require('~/server/services/Endpoints/openAI/initialize');
|
|
|
|
|
const initCustom = require('~/server/services/Endpoints/custom/initialize');
|
|
|
|
|
const initGoogle = require('~/server/services/Endpoints/google/initialize');
|
|
|
|
|
|
2025-07-01 15:43:10 -04:00
|
|
|
/** Check if the provider is a known custom provider
|
|
|
|
|
* @param {string | undefined} [provider] - The provider string
|
|
|
|
|
* @returns {boolean} - True if the provider is a known custom provider, false otherwise
|
|
|
|
|
*/
|
|
|
|
|
function isKnownCustomProvider(provider) {
|
2025-11-28 11:14:13 -05:00
|
|
|
return [Providers.XAI, Providers.DEEPSEEK, Providers.OPENROUTER].includes(
|
2025-07-05 15:53:08 -04:00
|
|
|
provider?.toLowerCase() || '',
|
2025-07-01 15:43:10 -04:00
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2025-06-23 19:44:24 -04:00
|
|
|
const providerConfigMap = {
|
|
|
|
|
[Providers.XAI]: initCustom,
|
|
|
|
|
[Providers.DEEPSEEK]: initCustom,
|
|
|
|
|
[Providers.OPENROUTER]: initCustom,
|
|
|
|
|
[EModelEndpoint.openAI]: initOpenAI,
|
|
|
|
|
[EModelEndpoint.google]: initGoogle,
|
|
|
|
|
[EModelEndpoint.azureOpenAI]: initOpenAI,
|
|
|
|
|
[EModelEndpoint.anthropic]: initAnthropic,
|
|
|
|
|
[EModelEndpoint.bedrock]: getBedrockOptions,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Get the provider configuration and override endpoint based on the provider string
|
2025-08-26 12:10:18 -04:00
|
|
|
* @param {Object} params
|
|
|
|
|
* @param {string} params.provider - The provider string
|
|
|
|
|
* @param {AppConfig} params.appConfig - The application configuration
|
|
|
|
|
* @returns {{
|
|
|
|
|
* getOptions: (typeof providerConfigMap)[keyof typeof providerConfigMap],
|
2025-07-21 17:37:37 -04:00
|
|
|
* overrideProvider: string,
|
2025-06-23 19:44:24 -04:00
|
|
|
* customEndpointConfig?: TEndpoint
|
2025-08-26 12:10:18 -04:00
|
|
|
* }}
|
2025-06-23 19:44:24 -04:00
|
|
|
*/
|
2025-08-26 12:10:18 -04:00
|
|
|
function getProviderConfig({ provider, appConfig }) {
|
2025-06-23 19:44:24 -04:00
|
|
|
let getOptions = providerConfigMap[provider];
|
2025-07-21 17:37:37 -04:00
|
|
|
let overrideProvider = provider;
|
2025-06-23 19:44:24 -04:00
|
|
|
/** @type {TEndpoint | undefined} */
|
|
|
|
|
let customEndpointConfig;
|
|
|
|
|
|
|
|
|
|
if (!getOptions && providerConfigMap[provider.toLowerCase()] != null) {
|
|
|
|
|
overrideProvider = provider.toLowerCase();
|
|
|
|
|
getOptions = providerConfigMap[overrideProvider];
|
|
|
|
|
} else if (!getOptions) {
|
2025-08-26 12:10:18 -04:00
|
|
|
customEndpointConfig = getCustomEndpointConfig({ endpoint: provider, appConfig });
|
2025-06-23 19:44:24 -04:00
|
|
|
if (!customEndpointConfig) {
|
|
|
|
|
throw new Error(`Provider ${provider} not supported`);
|
|
|
|
|
}
|
|
|
|
|
getOptions = initCustom;
|
|
|
|
|
overrideProvider = Providers.OPENAI;
|
|
|
|
|
}
|
|
|
|
|
|
2025-07-21 17:37:37 -04:00
|
|
|
if (isKnownCustomProvider(overrideProvider) && !customEndpointConfig) {
|
2025-08-26 12:10:18 -04:00
|
|
|
customEndpointConfig = getCustomEndpointConfig({ endpoint: provider, appConfig });
|
2025-07-01 15:43:10 -04:00
|
|
|
if (!customEndpointConfig) {
|
|
|
|
|
throw new Error(`Provider ${provider} not supported`);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-06-23 19:44:24 -04:00
|
|
|
return {
|
|
|
|
|
getOptions,
|
|
|
|
|
overrideProvider,
|
|
|
|
|
customEndpointConfig,
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
module.exports = {
|
|
|
|
|
getProviderConfig,
|
|
|
|
|
};
|