File size: 1,949 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
const _ = require('lodash');
const { genAzureChatCompletion, getAzureCredentials } = require('../utils/');

const titleConvo = async ({ text, response, openAIApiKey, azure = false }) => {
  let title = 'New Chat';
  const ChatGPTClient = (await import('@waylaidwanderer/chatgpt-api')).default;

  try {
    const instructionsPayload = {
      role: 'system',
      content: `Detect user language and write in the same language an extremely concise title for this conversation, which you must accurately detect. Write in the detected language. Title in 5 Words or Less. No Punctuation or Quotation. All first letters of every word should be capitalized and complete only the title in User Language only.

    ||>User:
    "${text}"
    ||>Response:
    "${JSON.stringify(response?.text)}"
    
    ||>Title:`,
    };

    const options = {
      azure,
      reverseProxyUrl: process.env.OPENAI_REVERSE_PROXY || null,
      proxy: process.env.PROXY || null,
    };

    const titleGenClientOptions = JSON.parse(JSON.stringify(options));

    titleGenClientOptions.modelOptions = {
      model: 'gpt-3.5-turbo',
      temperature: 0,
      presence_penalty: 0,
      frequency_penalty: 0,
    };

    let apiKey = openAIApiKey ?? process.env.OPENAI_API_KEY;

    if (azure) {
      apiKey = process.env.AZURE_API_KEY;
      titleGenClientOptions.reverseProxyUrl = genAzureChatCompletion(getAzureCredentials());
    }

    const titleGenClient = new ChatGPTClient(apiKey, titleGenClientOptions);
    const result = await titleGenClient.getCompletion([instructionsPayload], null);
    title = result.choices[0].message.content.replace(/\s+/g, ' ').replaceAll('"', '').trim();
  } catch (e) {
    console.error(e);
    console.log('There was an issue generating title, see error above');
  }

  console.log('CONVERSATION TITLE', title);
  return title;
};

const throttledTitleConvo = _.throttle(titleConvo, 1000);

module.exports = throttledTitleConvo;