File size: 1,776 Bytes
3b6afc0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
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', // should be 'bing' for bing/sydney
    });

    const {
      conversationId,
      messageId: userMessageId,
      parentMessageId: userParentMessageId,
      text: userText,
    } = userMessage;
    const {
      messageId: responseMessageId,
      parentMessageId: responseParentMessageId,
      text: responseText,
    } = responseMessage;

    let conversation = await conversationsCache.get(conversationId);
    // used to generate a title for the conversation if none exists
    // let isNewConversation = false;
    if (!conversation) {
      conversation = {
        messages: [],
        createdAt: Date.now(),
      };
      // isNewConversation = true;
    }

    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;