| require('dotenv').config(); |
| const { KeyvFile } = require('keyv-file'); |
| const { EModelEndpoint } = require('librechat-data-provider'); |
| const { getUserKey, checkUserKeyExpiry } = require('~/server/services/UserService'); |
| const { logger } = require('~/config'); |
|
|
| const askBing = async ({ |
| text, |
| parentMessageId, |
| conversationId, |
| jailbreak, |
| jailbreakConversationId, |
| context, |
| systemMessage, |
| conversationSignature, |
| clientId, |
| invocationId, |
| toneStyle, |
| key: expiresAt, |
| onProgress, |
| userId, |
| }) => { |
| const isUserProvided = process.env.BINGAI_TOKEN === 'user_provided'; |
|
|
| let key = null; |
| if (expiresAt && isUserProvided) { |
| checkUserKeyExpiry(expiresAt, EModelEndpoint.bingAI); |
| key = await getUserKey({ userId, name: 'bingAI' }); |
| } |
|
|
| const { BingAIClient } = await import('nodejs-gpt'); |
| const store = { |
| store: new KeyvFile({ filename: './data/cache.json' }), |
| }; |
|
|
| const bingAIClient = new BingAIClient({ |
| |
| |
| |
| |
| cookies: isUserProvided ? key : process.env.BINGAI_TOKEN ?? null, |
| debug: false, |
| cache: store, |
| host: process.env.BINGAI_HOST || null, |
| proxy: process.env.PROXY || null, |
| }); |
|
|
| let options = {}; |
|
|
| if (jailbreakConversationId == 'false') { |
| jailbreakConversationId = false; |
| } |
|
|
| if (jailbreak) { |
| options = { |
| jailbreakConversationId: jailbreakConversationId || jailbreak, |
| context, |
| systemMessage, |
| parentMessageId, |
| toneStyle, |
| onProgress, |
| clientOptions: { |
| features: { |
| genImage: { |
| server: { |
| enable: true, |
| type: 'markdown_list', |
| }, |
| }, |
| }, |
| }, |
| }; |
| } else { |
| options = { |
| conversationId, |
| context, |
| systemMessage, |
| parentMessageId, |
| toneStyle, |
| onProgress, |
| clientOptions: { |
| features: { |
| genImage: { |
| server: { |
| enable: true, |
| type: 'markdown_list', |
| }, |
| }, |
| }, |
| }, |
| }; |
|
|
| |
| |
| if (conversationSignature) { |
| options.encryptedConversationSignature = conversationSignature; |
| options.clientId = clientId; |
| options.invocationId = invocationId; |
| } |
| } |
|
|
| logger.debug('bing options', options); |
|
|
| const res = await bingAIClient.sendMessage(text, options); |
|
|
| return res; |
|
|
| |
| |
| }; |
|
|
| module.exports = { askBing }; |
|
|