| | const { HttpsProxyAgent } = require('https-proxy-agent'); |
| | const { |
| | AuthType, |
| | EModelEndpoint, |
| | bedrockInputParser, |
| | bedrockOutputParser, |
| | removeNullishValues, |
| | } = require('librechat-data-provider'); |
| | const { getUserKey, checkUserKeyExpiry } = require('~/server/services/UserService'); |
| |
|
| | const getOptions = async ({ req, overrideModel, endpointOption }) => { |
| | const { |
| | BEDROCK_AWS_SECRET_ACCESS_KEY, |
| | BEDROCK_AWS_ACCESS_KEY_ID, |
| | BEDROCK_AWS_SESSION_TOKEN, |
| | BEDROCK_REVERSE_PROXY, |
| | BEDROCK_AWS_DEFAULT_REGION, |
| | PROXY, |
| | } = process.env; |
| | const expiresAt = req.body.key; |
| | const isUserProvided = BEDROCK_AWS_SECRET_ACCESS_KEY === AuthType.USER_PROVIDED; |
| |
|
| | let credentials = isUserProvided |
| | ? await getUserKey({ userId: req.user.id, name: EModelEndpoint.bedrock }) |
| | : { |
| | accessKeyId: BEDROCK_AWS_ACCESS_KEY_ID, |
| | secretAccessKey: BEDROCK_AWS_SECRET_ACCESS_KEY, |
| | ...(BEDROCK_AWS_SESSION_TOKEN && { sessionToken: BEDROCK_AWS_SESSION_TOKEN }), |
| | }; |
| |
|
| | if (!credentials) { |
| | throw new Error('Bedrock credentials not provided. Please provide them again.'); |
| | } |
| |
|
| | if ( |
| | !isUserProvided && |
| | (credentials.accessKeyId === undefined || credentials.accessKeyId === '') && |
| | (credentials.secretAccessKey === undefined || credentials.secretAccessKey === '') |
| | ) { |
| | credentials = undefined; |
| | } |
| |
|
| | if (expiresAt && isUserProvided) { |
| | checkUserKeyExpiry(expiresAt, EModelEndpoint.bedrock); |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | |
| | const requestOptions = { |
| | model: overrideModel ?? endpointOption?.model, |
| | region: BEDROCK_AWS_DEFAULT_REGION, |
| | }; |
| |
|
| | const configOptions = {}; |
| | if (PROXY) { |
| | |
| | configOptions.httpAgent = new HttpsProxyAgent(PROXY); |
| | } |
| |
|
| | const llmConfig = bedrockOutputParser( |
| | bedrockInputParser.parse( |
| | removeNullishValues(Object.assign(requestOptions, endpointOption?.model_parameters ?? {})), |
| | ), |
| | ); |
| |
|
| | if (credentials) { |
| | llmConfig.credentials = credentials; |
| | } |
| |
|
| | if (BEDROCK_REVERSE_PROXY) { |
| | llmConfig.endpointHost = BEDROCK_REVERSE_PROXY; |
| | } |
| |
|
| | return { |
| | |
| | llmConfig, |
| | configOptions, |
| | }; |
| | }; |
| |
|
| | module.exports = getOptions; |
| |
|