mirror of
https://github.com/danny-avila/LibreChat.git
synced 2025-12-16 16:30:15 +01:00
* 🏗️ refactor: Extract reasoning key logic into separate function
* refactor: Ensure `overrideProvider` is always defined in `getProviderConfig` result, and only used in `initializeAgent` if different from `agent.provider`
* feat: new title configuration options across services
- titlePrompt
- titleEndpoint
- titlePromptTemplate
- new "completion" titleMethod (new default)
* chore: update @librechat/agents and conform openai version to prevent SDK errors
* chore: add form-data package as a dependency and override to v4.0.4 to address CVE-2025-7783
* feat: add support for 'all' endpoint configuration in AppService and corresponding tests
* refactor: replace HttpsProxyAgent with ProxyAgent from undici for improved proxy handling in assistant initialization
* chore: update frontend review workflow to limit package paths to data-provider
* chore: update backend review workflow to include all package paths
75 lines
2.6 KiB
JavaScript
75 lines
2.6 KiB
JavaScript
const { Providers } = require('@librechat/agents');
|
|
const { EModelEndpoint } = require('librechat-data-provider');
|
|
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');
|
|
const { getCustomEndpointConfig } = require('~/server/services/Config');
|
|
|
|
/** 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) {
|
|
return [Providers.XAI, Providers.OLLAMA, Providers.DEEPSEEK, Providers.OPENROUTER].includes(
|
|
provider?.toLowerCase() || '',
|
|
);
|
|
}
|
|
|
|
const providerConfigMap = {
|
|
[Providers.XAI]: initCustom,
|
|
[Providers.OLLAMA]: 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
|
|
* @param {string} provider - The provider string
|
|
* @returns {Promise<{
|
|
* getOptions: Function,
|
|
* overrideProvider: string,
|
|
* customEndpointConfig?: TEndpoint
|
|
* }>}
|
|
*/
|
|
async function getProviderConfig(provider) {
|
|
let getOptions = providerConfigMap[provider];
|
|
let overrideProvider = provider;
|
|
/** @type {TEndpoint | undefined} */
|
|
let customEndpointConfig;
|
|
|
|
if (!getOptions && providerConfigMap[provider.toLowerCase()] != null) {
|
|
overrideProvider = provider.toLowerCase();
|
|
getOptions = providerConfigMap[overrideProvider];
|
|
} else if (!getOptions) {
|
|
customEndpointConfig = await getCustomEndpointConfig(provider);
|
|
if (!customEndpointConfig) {
|
|
throw new Error(`Provider ${provider} not supported`);
|
|
}
|
|
getOptions = initCustom;
|
|
overrideProvider = Providers.OPENAI;
|
|
}
|
|
|
|
if (isKnownCustomProvider(overrideProvider) && !customEndpointConfig) {
|
|
customEndpointConfig = await getCustomEndpointConfig(provider);
|
|
if (!customEndpointConfig) {
|
|
throw new Error(`Provider ${provider} not supported`);
|
|
}
|
|
}
|
|
|
|
return {
|
|
getOptions,
|
|
overrideProvider,
|
|
customEndpointConfig,
|
|
};
|
|
}
|
|
|
|
module.exports = {
|
|
getProviderConfig,
|
|
};
|