server fix: code refactor

This commit is contained in:
Wentao Lyu 2023-04-04 01:10:50 +08:00
parent ea88e9b981
commit dae0c2d5e3
4 changed files with 90 additions and 51 deletions

View file

@ -1,33 +1,60 @@
const Message = require('./schema/messageSchema');
module.exports = {
Message,
saveMessage: async ({ messageId, conversationId, parentMessageId, sender, text, isCreatedByUser=false, error }) => {
saveMessage: async ({
messageId,
newMessageId,
conversationId,
parentMessageId,
sender,
text,
isCreatedByUser = false,
error
}) => {
try {
await Message.findOneAndUpdate({ messageId }, {
await Message.findOneAndUpdate(
{ messageId },
{
messageId: newMessageId || messageId,
conversationId,
parentMessageId,
sender,
text,
isCreatedByUser,
error
}, { upsert: true, new: true });
},
{ upsert: true, new: true }
);
return { messageId, conversationId, parentMessageId, sender, text, isCreatedByUser };
} catch (error) {
console.error(error);
return { message: 'Error saving message' };
}
},
saveBingMessage: async ({ messageId, oldMessageId = messageId, conversationId, parentMessageId, sender, text, isCreatedByUser=false, error }) => {
try {
await Message.findOneAndUpdate({ messageId: oldMessageId }, {
saveBingMessage: async ({
messageId,
newMessageId,
conversationId,
parentMessageId,
sender,
text,
isCreatedByUser = false,
error
}) => {
try {
await Message.findOneAndUpdate(
{ messageId },
{
messageId: newMessageId || messageId,
conversationId,
parentMessageId,
sender,
text,
isCreatedByUser,
error
}, { upsert: true, new: true });
},
{ upsert: true, new: true }
);
return { messageId, conversationId, parentMessageId, sender, text, isCreatedByUser };
} catch (error) {
console.error(error);
@ -36,29 +63,31 @@ module.exports = {
},
deleteMessagesSince: async ({ messageId, conversationId }) => {
try {
const message = await Message.findOne({ messageId }).exec()
const message = await Message.findOne({ messageId }).exec();
if (message)
return await Message.find({ conversationId }).deleteMany({ createdAt: { $gt: message.createdAt } }).exec();
return await Message.find({ conversationId })
.deleteMany({ createdAt: { $gt: message.createdAt } })
.exec();
} catch (error) {
console.error(error);
return { message: 'Error deleting messages' };
}
},
getMessages: async (filter) => {
getMessages: async filter => {
try {
return await Message.find(filter).sort({createdAt: 1}).exec()
return await Message.find(filter).sort({ createdAt: 1 }).exec();
} catch (error) {
console.error(error);
return { message: 'Error getting messages' };
}
},
deleteMessages: async (filter) => {
deleteMessages: async filter => {
try {
return await Message.deleteMany(filter).exec()
return await Message.deleteMany(filter).exec();
} catch (error) {
console.error(error);
return { message: 'Error deleting messages' };
}
}
}
};

View file

@ -111,23 +111,31 @@ const ask = async ({
console.log('BING RESPONSE', response);
userMessage.conversationSignature =
endpointOption.conversationSignature || response.conversationSignature;
userMessage.conversationId = response.conversationId || conversationId;
userMessage.invocationId = endpointOption.invocationId;
userMessage.messageId = response.details.requestId || userMessageId;
if (!overrideParentMessageId) await saveBingMessage({ oldMessageId: userMessageId, ...userMessage });
// STEP1 update the convosation
// Bing API will not use our conversationId at the first time,
// so change the placeholder conversationId to the real one.
// Attition: the api will also create new conversationId while using invalid userMessage.parentMessageId,
// but in this situation, don't change the conversationId, but create new convo.
if (conversationId != userMessage.conversationId && isNewConversation)
if (conversationId != response.conversationId && isNewConversation)
await saveConvo(req?.session?.user?.username, {
conversationId: conversationId,
newConversationId: userMessage.conversationId
newConversationId: response.conversationId || conversationId
});
conversationId = userMessage.conversationId;
conversationId = response.conversationId || conversationId;
// STEP2 update the user message
userMessage.conversationSignature =
endpointOption.conversationSignature || response.conversationSignature;
userMessage.conversationId = conversationId;
userMessage.invocationId = endpointOption.invocationId;
userMessage.messageId = response.details.requestId || userMessageId;
// If response has parentMessageId, the fake userMessage.messageId should be updated to the real one.
if (!overrideParentMessageId) {
const oldUserMessageId = userMessageId;
userMessageId = response.details.requestId;
await saveBingMessage({ ...userMessage, messageId: oldUserMessageId, newMessageId: userMessageId });
}
response.text = response.response || response.details.spokenText || '**Bing refused to answer.**';
// delete response.response;

View file

@ -77,7 +77,7 @@ const ask = async ({
req,
res
}) => {
const { text, parentMessageId: userParentMessageId, messageId: userMessageId } = userMessage;
let { text, parentMessageId: userParentMessageId, messageId: userMessageId } = userMessage;
const client = askClient;
@ -107,23 +107,22 @@ const ask = async ({
gptResponse.text = gptResponse.response;
console.log('CLIENT RESPONSE', gptResponse);
if (!gptResponse.parentMessageId) {
gptResponse.parentMessageId = overrideParentMessageId || userMessageId;
if (gptResponse.parentMessageId) {
// If gptResponse has parentMessageId, the fake userMessage.messageId should be updated to the real one.
if (!overrideParentMessageId) {
const oldUserMessageId = userMessageId;
userMessageId = gptResponse.parentMessageId;
userMessage.messageId = userMessageId;
await saveMessage({ ...userMessage, messageId: oldUserMessageId, newMessageId: userMessageId });
}
} else {
delete gptResponse.response;
}
gptResponse.parentMessageId = overrideParentMessageId || userMessageId;
gptResponse.sender = endpointOption?.chatGptLabel || 'ChatGPT';
// gptResponse.model = model;
gptResponse.text = await handleText(gptResponse);
// if (convo.chatGptLabel?.length > 0 && model === 'chatgptCustom') {
// gptResponse.chatGptLabel = convo.chatGptLabel;
// }
// if (convo.promptPrefix?.length > 0 && model === 'chatgptCustom') {
// gptResponse.promptPrefix = convo.promptPrefix;
// }
gptResponse.parentMessageId = overrideParentMessageId || userMessageId;
await saveMessage(gptResponse);
await updateConvo(req?.session?.user?.username, {

View file

@ -29,10 +29,13 @@ router.post('/', async (req, res) => {
});
router.post('/delete', async (req, res) => {
const { arg } = req.body;
let filter = {};
const { presetId } = req.body.arg || {};
if (presetId) filter = { presetId };
try {
await deletePresets(req?.session?.user?.username, arg);
await deletePresets(req?.session?.user?.username, filter);
const presets = (await getPresets(req?.session?.user?.username)).map(preset => {
return preset.toObject();