chore: refactor titleConvo

This commit is contained in:
Danny Avila 2023-03-15 15:21:04 -04:00
parent a8aad30fc8
commit a0c94715ce
5 changed files with 47 additions and 71 deletions

View file

@ -16,33 +16,44 @@ const proxyEnvToAxiosProxy = (proxyString) => {
return proxyConfig;
};
const titleConvo = async ({ message, response, model }) => {
const configuration = new Configuration({
apiKey: process.env.OPENAI_KEY
});
const openai = new OpenAIApi(configuration);
const completion = await openai.createChatCompletion(
{
model: 'gpt-3.5-turbo',
messages: [
{
role: 'system',
content:
'You are a title-generator with one job: giving a conversation, detect the language and titling the conversation provided by a user in title case, using the same language.'
},
{
role: 'user',
content: `In 5 words or less, summarize the conversation below with a title in title case using the language the user writes in. Don't refer to the participants of the conversation by name. Do not include punctuation or quotation marks. Your response should be in title case, exclusively containing the title. Conversation:\n\nUser: "${message}"\n\n${model}: "${response}"\n\nTitle: `
}
]
},
{ proxy: proxyEnvToAxiosProxy(process.env.PROXY || null) }
);
const titleConvo = async ({ model, text, response }) => {
let title = 'New Chat';
try {
const configuration = new Configuration({
apiKey: process.env.OPENAI_KEY
});
const openai = new OpenAIApi(configuration);
const completion = await openai.createChatCompletion(
{
model: 'gpt-3.5-turbo',
messages: [
{
role: 'system',
content:
'You are a title-generator with one job: giving a conversation, detect the language and titling the conversation provided by a user in title case, using the same language.'
},
{
role: 'user',
content: `In 5 words or less, summarize the conversation below with a title in title case using the language the user writes in. Don't refer to the participants of the conversation by name. Do not include punctuation or quotation marks. Your response should be in title case, exclusively containing the title. Conversation:\n\nUser: "${text}"\n\n${model}: "${JSON.stringify(
response?.text
)}"\n\nTitle: `
}
]
},
{ proxy: proxyEnvToAxiosProxy(process.env.PROXY || null) }
);
//eslint-disable-next-line
return completion.data.choices[0].message.content.replace(/["\.]/g, '');
//eslint-disable-next-line
title = completion.data.choices[0].message.content.replace(/["\.]/g, '');
} catch (e) {
console.error(e);
console.log('There was an issue generating title, see error above');
}
console.log('CONVERSATION TITLE', title);
return title;
};
const debouncedTitleConvo = _.debounce(titleConvo, 500);
const throttledTitleConvo = _.throttle(titleConvo, 1000);
module.exports = debouncedTitleConvo;
module.exports = throttledTitleConvo;

View file

@ -3,15 +3,9 @@ const crypto = require('crypto');
const router = express.Router();
const askBing = require('./askBing');
const askSydney = require('./askSydney');
const { askClient, browserClient, customClient } = require('../../app/');
const { titleConvo, askClient, browserClient, customClient } = require('../../app/');
const { getConvo, saveMessage, getConvoTitle, saveConvo } = require('../../models');
const {
handleError,
sendMessage,
createOnProgress,
genTitle,
handleText
} = require('./handlers');
const { handleError, sendMessage, createOnProgress, handleText } = require('./handlers');
const { getMessages } = require('../../models/Message');
router.use('/bing', askBing);
@ -192,7 +186,7 @@ const ask = async ({
res.end();
if (userParentMessageId == '00000000-0000-0000-0000-000000000000') {
const title = await genTitle({ model, text, response: gptResponse });
const title = await titleConvo({ model, text, response: gptResponse });
await saveConvo({
conversationId,

View file

@ -1,15 +1,9 @@
const express = require('express');
const crypto = require('crypto');
const router = express.Router();
const { getCitations, citeText, askBing } = require('../../app/');
const { titleConvo, getCitations, citeText, askBing } = require('../../app/');
const { saveMessage, getConvoTitle, saveConvo } = require('../../models');
const {
handleError,
sendMessage,
createOnProgress,
genTitle,
handleText
} = require('./handlers');
const { handleError, sendMessage, createOnProgress, handleText } = require('./handlers');
const citationRegex = /\[\^\d+?\^]/g;
router.post('/', async (req, res) => {
@ -152,7 +146,7 @@ const ask = async ({
res.end();
if (userParentMessageId == '00000000-0000-0000-0000-000000000000') {
const title = await genTitle({ model, text, response });
const title = await titleConvo({ model, text, response });
await saveConvo({
conversationId,

View file

@ -1,15 +1,9 @@
const express = require('express');
const crypto = require('crypto');
const router = express.Router();
const { getCitations, citeText, askSydney } = require('../../app/');
const { titleConvo, getCitations, citeText, askSydney } = require('../../app/');
const { saveMessage, saveConvo, getConvoTitle } = require('../../models');
const {
handleError,
sendMessage,
createOnProgress,
genTitle,
handleText
} = require('./handlers');
const { handleError, sendMessage, createOnProgress, handleText } = require('./handlers');
const citationRegex = /\[\^\d+?\^]/g;
router.post('/', async (req, res) => {
@ -164,7 +158,7 @@ const ask = async ({
res.end();
if (userParentMessageId == '00000000-0000-0000-0000-000000000000') {
const title = await genTitle({ model, text, response });
const title = await titleConvo({ model, text, response });
await saveConvo({
conversationId,

View file

@ -15,23 +15,6 @@ const sendMessage = (res, message) => {
res.write(`event: message\ndata: ${JSON.stringify(message)}\n\n`);
};
const genTitle = async ({ model, text, response }) => {
let title = 'New Chat';
try {
title = await titleConvo({
model,
message: text,
response: JSON.stringify(response?.text)
});
} catch (e) {
console.error(e);
console.log('There was an issue generating title, see error above');
}
console.log('CONVERSATION TITLE', title);
return title;
};
const createOnProgress = () => {
let i = 0;
let tokens = '';
@ -82,4 +65,4 @@ const handleText = async (input) => {
return text;
};
module.exports = { handleError, sendMessage, createOnProgress, genTitle, handleText };
module.exports = { handleError, sendMessage, createOnProgress, handleText };