|
const Keyv = require('keyv'); |
|
const { KeyvFile } = require('keyv-file'); |
|
|
|
const addToCache = async ({ endpoint, endpointOption, userMessage, responseMessage }) => { |
|
try { |
|
const conversationsCache = new Keyv({ |
|
store: new KeyvFile({ filename: './data/cache.json' }), |
|
namespace: 'chatgpt', |
|
}); |
|
|
|
const { |
|
conversationId, |
|
messageId: userMessageId, |
|
parentMessageId: userParentMessageId, |
|
text: userText, |
|
} = userMessage; |
|
const { |
|
messageId: responseMessageId, |
|
parentMessageId: responseParentMessageId, |
|
text: responseText, |
|
} = responseMessage; |
|
|
|
let conversation = await conversationsCache.get(conversationId); |
|
|
|
|
|
if (!conversation) { |
|
conversation = { |
|
messages: [], |
|
createdAt: Date.now(), |
|
}; |
|
|
|
} |
|
|
|
const roles = (options) => { |
|
if (endpoint === 'openAI') { |
|
return options?.chatGptLabel || 'ChatGPT'; |
|
} else if (endpoint === 'bingAI') { |
|
return options?.jailbreak ? 'Sydney' : 'BingAI'; |
|
} |
|
}; |
|
|
|
let _userMessage = { |
|
id: userMessageId, |
|
parentMessageId: userParentMessageId, |
|
role: 'User', |
|
message: userText, |
|
}; |
|
|
|
let _responseMessage = { |
|
id: responseMessageId, |
|
parentMessageId: responseParentMessageId, |
|
role: roles(endpointOption), |
|
message: responseText, |
|
}; |
|
|
|
conversation.messages.push(_userMessage, _responseMessage); |
|
|
|
await conversationsCache.set(conversationId, conversation); |
|
} catch (error) { |
|
console.error('Trouble adding to cache', error); |
|
} |
|
}; |
|
|
|
module.exports = addToCache; |
|
|