|
require('dotenv').config(); |
|
const { KeyvFile } = require('keyv-file'); |
|
const { getUserKey, checkUserKeyExpiry } = require('../server/services/UserService'); |
|
|
|
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, |
|
'Your BingAI Cookies have expired. Please provide your cookies again.', |
|
); |
|
key = await getUserKey({ userId, name: 'bingAI' }); |
|
} |
|
|
|
const { BingAIClient } = await import('@waylaidwanderer/chatgpt-api'); |
|
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.conversationSignature = conversationSignature; |
|
options.clientId = clientId; |
|
options.invocationId = invocationId; |
|
} |
|
} |
|
|
|
console.log('bing options', options); |
|
|
|
const res = await bingAIClient.sendMessage(text, options); |
|
|
|
return res; |
|
|
|
|
|
|
|
}; |
|
|
|
module.exports = { askBing }; |
|
|