| const { getLLMConfig } = require('@librechat/api'); |
| const { EModelEndpoint } = require('librechat-data-provider'); |
| const { getUserKey, checkUserKeyExpiry } = require('~/server/services/UserService'); |
| const AnthropicClient = require('~/app/clients/AnthropicClient'); |
|
|
| const initializeClient = async ({ req, res, endpointOption, overrideModel, optionsOnly }) => { |
| const appConfig = req.config; |
| const { ANTHROPIC_API_KEY, ANTHROPIC_REVERSE_PROXY, PROXY } = process.env; |
| const expiresAt = req.body.key; |
| const isUserProvided = ANTHROPIC_API_KEY === 'user_provided'; |
|
|
| const anthropicApiKey = isUserProvided |
| ? await getUserKey({ userId: req.user.id, name: EModelEndpoint.anthropic }) |
| : ANTHROPIC_API_KEY; |
|
|
| if (!anthropicApiKey) { |
| throw new Error('Anthropic API key not provided. Please provide it again.'); |
| } |
|
|
| if (expiresAt && isUserProvided) { |
| checkUserKeyExpiry(expiresAt, EModelEndpoint.anthropic); |
| } |
|
|
| let clientOptions = {}; |
|
|
| |
| const anthropicConfig = appConfig.endpoints?.[EModelEndpoint.anthropic]; |
|
|
| if (anthropicConfig) { |
| clientOptions._lc_stream_delay = anthropicConfig.streamRate; |
| clientOptions.titleModel = anthropicConfig.titleModel; |
| } |
|
|
| const allConfig = appConfig.endpoints?.all; |
| if (allConfig) { |
| clientOptions._lc_stream_delay = allConfig.streamRate; |
| } |
|
|
| if (optionsOnly) { |
| clientOptions = Object.assign( |
| { |
| proxy: PROXY ?? null, |
| reverseProxyUrl: ANTHROPIC_REVERSE_PROXY ?? null, |
| modelOptions: endpointOption?.model_parameters ?? {}, |
| }, |
| clientOptions, |
| ); |
| if (overrideModel) { |
| clientOptions.modelOptions.model = overrideModel; |
| } |
| clientOptions.modelOptions.user = req.user.id; |
| return getLLMConfig(anthropicApiKey, clientOptions); |
| } |
|
|
| const client = new AnthropicClient(anthropicApiKey, { |
| req, |
| res, |
| reverseProxyUrl: ANTHROPIC_REVERSE_PROXY ?? null, |
| proxy: PROXY ?? null, |
| ...clientOptions, |
| ...endpointOption, |
| }); |
|
|
| return { |
| client, |
| anthropicApiKey, |
| }; |
| }; |
|
|
| module.exports = initializeClient; |
|
|