mirror of
https://github.com/danny-avila/LibreChat.git
synced 2025-12-17 17:00:15 +01:00
feat: create conversation at the beginning then return the userMessage
This commit is contained in:
parent
5a409ccfa6
commit
8773878be2
6 changed files with 50 additions and 40 deletions
|
|
@ -17,11 +17,13 @@ router.use('/bing', askBing);
|
||||||
router.use('/sydney', askSydney);
|
router.use('/sydney', askSydney);
|
||||||
|
|
||||||
router.post('/', async (req, res) => {
|
router.post('/', async (req, res) => {
|
||||||
let { model, text, parentMessageId, conversationId, chatGptLabel, promptPrefix } = req.body;
|
let { model, text, parentMessageId, conversationId: oldConversationId , chatGptLabel, promptPrefix } = req.body;
|
||||||
if (text.length === 0) {
|
if (text.length === 0) {
|
||||||
return handleError(res, 'Prompt empty or too short');
|
return handleError(res, 'Prompt empty or too short');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const conversationId = oldConversationId || crypto.randomUUID();
|
||||||
|
|
||||||
const userMessageId = crypto.randomUUID();
|
const userMessageId = crypto.randomUUID();
|
||||||
const userParentMessageId = parentMessageId || '00000000-0000-0000-0000-000000000000'
|
const userParentMessageId = parentMessageId || '00000000-0000-0000-0000-000000000000'
|
||||||
let userMessage = {
|
let userMessage = {
|
||||||
|
|
@ -36,8 +38,6 @@ router.post('/', async (req, res) => {
|
||||||
console.log('ask log', {
|
console.log('ask log', {
|
||||||
model,
|
model,
|
||||||
...userMessage,
|
...userMessage,
|
||||||
parentMessageId: userParentMessageId,
|
|
||||||
conversationId,
|
|
||||||
chatGptLabel,
|
chatGptLabel,
|
||||||
promptPrefix
|
promptPrefix
|
||||||
});
|
});
|
||||||
|
|
@ -61,12 +61,6 @@ router.post('/', async (req, res) => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// if (messageId) {
|
|
||||||
// // existing conversation
|
|
||||||
// await saveMessage(userMessage);
|
|
||||||
// await deleteMessagesSince(userMessage);
|
|
||||||
// } else {}
|
|
||||||
|
|
||||||
res.writeHead(200, {
|
res.writeHead(200, {
|
||||||
Connection: 'keep-alive',
|
Connection: 'keep-alive',
|
||||||
'Content-Type': 'text/event-stream',
|
'Content-Type': 'text/event-stream',
|
||||||
|
|
@ -75,6 +69,10 @@ router.post('/', async (req, res) => {
|
||||||
'X-Accel-Buffering': 'no'
|
'X-Accel-Buffering': 'no'
|
||||||
});
|
});
|
||||||
|
|
||||||
|
await saveMessage(userMessage);
|
||||||
|
await saveConvo({ ...userMessage, model, chatGptLabel, promptPrefix });
|
||||||
|
sendMessage(res, { message: userMessage, created: true });
|
||||||
|
|
||||||
try {
|
try {
|
||||||
let i = 0;
|
let i = 0;
|
||||||
let tokens = '';
|
let tokens = '';
|
||||||
|
|
@ -165,7 +163,7 @@ router.post('/', async (req, res) => {
|
||||||
res.end();
|
res.end();
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.log(error);
|
console.log(error);
|
||||||
await deleteMessages({ messageId: userMessageId });
|
// await deleteMessages({ messageId: userMessageId });
|
||||||
handleError(res, error.message);
|
handleError(res, error.message);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -7,11 +7,13 @@ const { handleError, sendMessage } = require('./handlers');
|
||||||
const citationRegex = /\[\^\d+?\^]/g;
|
const citationRegex = /\[\^\d+?\^]/g;
|
||||||
|
|
||||||
router.post('/', async (req, res) => {
|
router.post('/', async (req, res) => {
|
||||||
const { model, text, parentMessageId, conversationId, ...convo } = req.body;
|
const { model, text, parentMessageId, conversationId: oldConversationId, ...convo } = req.body;
|
||||||
if (text.length === 0) {
|
if (text.length === 0) {
|
||||||
return handleError(res, 'Prompt empty or too short');
|
return handleError(res, 'Prompt empty or too short');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const conversationId = oldConversationId || crypto.randomUUID();
|
||||||
|
|
||||||
const userMessageId = messageId;
|
const userMessageId = messageId;
|
||||||
const userParentMessageId = parentMessageId || '00000000-0000-0000-0000-000000000000'
|
const userParentMessageId = parentMessageId || '00000000-0000-0000-0000-000000000000'
|
||||||
let userMessage = {
|
let userMessage = {
|
||||||
|
|
@ -26,17 +28,9 @@ router.post('/', async (req, res) => {
|
||||||
console.log('ask log', {
|
console.log('ask log', {
|
||||||
model,
|
model,
|
||||||
...userMessage,
|
...userMessage,
|
||||||
parentMessageId: userParentMessageId,
|
|
||||||
conversationId,
|
|
||||||
...convo
|
...convo
|
||||||
});
|
});
|
||||||
|
|
||||||
// if (messageId) {
|
|
||||||
// // existing conversation
|
|
||||||
// await saveMessage(userMessage);
|
|
||||||
// await deleteMessagesSince(userMessage);
|
|
||||||
// } else {}
|
|
||||||
|
|
||||||
res.writeHead(200, {
|
res.writeHead(200, {
|
||||||
Connection: 'keep-alive',
|
Connection: 'keep-alive',
|
||||||
'Content-Type': 'text/event-stream',
|
'Content-Type': 'text/event-stream',
|
||||||
|
|
@ -45,6 +39,10 @@ router.post('/', async (req, res) => {
|
||||||
'X-Accel-Buffering': 'no'
|
'X-Accel-Buffering': 'no'
|
||||||
});
|
});
|
||||||
|
|
||||||
|
await saveMessage(userMessage);
|
||||||
|
await saveConvo({ ...userMessage, model, chatGptLabel, promptPrefix });
|
||||||
|
sendMessage(res, { message: userMessage, created: true });
|
||||||
|
|
||||||
try {
|
try {
|
||||||
let tokens = '';
|
let tokens = '';
|
||||||
const progressCallback = async (partial) => {
|
const progressCallback = async (partial) => {
|
||||||
|
|
@ -107,7 +105,7 @@ router.post('/', async (req, res) => {
|
||||||
res.end();
|
res.end();
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.log(error);
|
console.log(error);
|
||||||
await deleteMessages({ messageId: userMessageId });
|
// await deleteMessages({ messageId: userMessageId });
|
||||||
handleError(res, error.message);
|
handleError(res, error.message);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -7,11 +7,13 @@ const { handleError, sendMessage } = require('./handlers');
|
||||||
const citationRegex = /\[\^\d+?\^]/g;
|
const citationRegex = /\[\^\d+?\^]/g;
|
||||||
|
|
||||||
router.post('/', async (req, res) => {
|
router.post('/', async (req, res) => {
|
||||||
const { model, text, parentMessageId, conversationId, ...convo } = req.body;
|
const { model, text, parentMessageId, conversationId: oldConversationId, ...convo } = req.body;
|
||||||
if (text.length === 0) {
|
if (text.length === 0) {
|
||||||
return handleError(res, 'Prompt empty or too short');
|
return handleError(res, 'Prompt empty or too short');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const conversationId = oldConversationId || crypto.randomUUID();
|
||||||
|
|
||||||
const userMessageId = messageId;
|
const userMessageId = messageId;
|
||||||
const userParentMessageId = parentMessageId || '00000000-0000-0000-0000-000000000000'
|
const userParentMessageId = parentMessageId || '00000000-0000-0000-0000-000000000000'
|
||||||
let userMessage = {
|
let userMessage = {
|
||||||
|
|
@ -27,17 +29,9 @@ router.post('/', async (req, res) => {
|
||||||
console.log('ask log', {
|
console.log('ask log', {
|
||||||
model,
|
model,
|
||||||
...userMessage,
|
...userMessage,
|
||||||
parentMessageId: userParentMessageId,
|
|
||||||
conversationId,
|
|
||||||
...convo
|
...convo
|
||||||
});
|
});
|
||||||
|
|
||||||
// if (messageId) {
|
|
||||||
// // existing conversation
|
|
||||||
// await saveMessage(userMessage);
|
|
||||||
// await deleteMessagesSince(userMessage);
|
|
||||||
// } else {}
|
|
||||||
|
|
||||||
res.writeHead(200, {
|
res.writeHead(200, {
|
||||||
Connection: 'keep-alive',
|
Connection: 'keep-alive',
|
||||||
'Content-Type': 'text/event-stream',
|
'Content-Type': 'text/event-stream',
|
||||||
|
|
@ -46,6 +40,10 @@ router.post('/', async (req, res) => {
|
||||||
'X-Accel-Buffering': 'no'
|
'X-Accel-Buffering': 'no'
|
||||||
});
|
});
|
||||||
|
|
||||||
|
await saveMessage(userMessage);
|
||||||
|
await saveConvo({ ...userMessage, model, chatGptLabel, promptPrefix });
|
||||||
|
sendMessage(res, { message: userMessage, created: true });
|
||||||
|
|
||||||
try {
|
try {
|
||||||
let tokens = '';
|
let tokens = '';
|
||||||
const progressCallback = async (partial) => {
|
const progressCallback = async (partial) => {
|
||||||
|
|
@ -117,7 +115,7 @@ router.post('/', async (req, res) => {
|
||||||
res.end();
|
res.end();
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.log(error);
|
console.log(error);
|
||||||
await deleteMessages({ messageId: userMessageId });
|
// await deleteMessages({ messageId: userMessageId });
|
||||||
handleError(res, error.message);
|
handleError(res, error.message);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,7 @@ import ConvoIcon from '../svg/ConvoIcon';
|
||||||
|
|
||||||
export default function Conversation({
|
export default function Conversation({
|
||||||
id,
|
id,
|
||||||
|
model,
|
||||||
parentMessageId,
|
parentMessageId,
|
||||||
conversationId,
|
conversationId,
|
||||||
title = 'New conversation',
|
title = 'New conversation',
|
||||||
|
|
@ -76,12 +77,12 @@ export default function Conversation({
|
||||||
if (chatGptLabel) {
|
if (chatGptLabel) {
|
||||||
dispatch(setModel('chatgptCustom'));
|
dispatch(setModel('chatgptCustom'));
|
||||||
} else {
|
} else {
|
||||||
dispatch(setModel(data[1].sender));
|
dispatch(setModel(model));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (modelMap[data[1].sender.toLowerCase()]) {
|
if (modelMap[model.toLowerCase()]) {
|
||||||
console.log('sender', data[1].sender);
|
console.log('sender', model);
|
||||||
dispatch(setCustomModel(data[1].sender.toLowerCase()));
|
dispatch(setCustomModel(model.toLowerCase()));
|
||||||
} else {
|
} else {
|
||||||
dispatch(setCustomModel(null));
|
dispatch(setCustomModel(null));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,7 @@ export default function Conversations({ conversations, conversationId, showMore
|
||||||
<Conversation
|
<Conversation
|
||||||
key={convo.conversationId}
|
key={convo.conversationId}
|
||||||
id={convo.conversationId}
|
id={convo.conversationId}
|
||||||
|
model={convo.model}
|
||||||
parentMessageId={convo.parentMessageId}
|
parentMessageId={convo.parentMessageId}
|
||||||
title={convo.title}
|
title={convo.title}
|
||||||
conversationId={conversationId}
|
conversationId={conversationId}
|
||||||
|
|
|
||||||
|
|
@ -28,14 +28,24 @@ export default function TextChat({ messages }) {
|
||||||
inputRef.current?.focus();
|
inputRef.current?.focus();
|
||||||
}, [convo?.conversationId, ])
|
}, [convo?.conversationId, ])
|
||||||
|
|
||||||
const messageHandler = (data, currentState) => {
|
const messageHandler = (data, currentState, currentMsg) => {
|
||||||
const { messages, currentMsg, message, sender } = currentState;
|
const { messages, _currentMsg, message, sender } = currentState;
|
||||||
|
|
||||||
dispatch(setMessages([...messages, currentMsg, { sender, text: data }]));
|
dispatch(setMessages([...messages, currentMsg, { sender, text: data }]));
|
||||||
};
|
};
|
||||||
|
|
||||||
const convoHandler = (data, currentState) => {
|
const createdHandler = (data, currentState, currentMsg) => {
|
||||||
|
const { conversationId } = currentMsg;
|
||||||
|
dispatch(
|
||||||
|
setConversation({
|
||||||
|
conversationId,
|
||||||
|
})
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
const convoHandler = (data, currentState, currentMsg) => {
|
||||||
const { requestMessage, responseMessage } = data;
|
const { requestMessage, responseMessage } = data;
|
||||||
const { messages, currentMsg, message, isCustomModel, sender } =
|
const { messages, _currentMsg, message, isCustomModel, sender } =
|
||||||
currentState;
|
currentState;
|
||||||
const { model, chatGptLabel, promptPrefix } = message;
|
const { model, chatGptLabel, promptPrefix } = message;
|
||||||
dispatch(
|
dispatch(
|
||||||
|
|
@ -210,6 +220,7 @@ export default function TextChat({ messages }) {
|
||||||
}
|
}
|
||||||
|
|
||||||
const currentState = submission;
|
const currentState = submission;
|
||||||
|
let currentMsg = currentState.currentMsg;
|
||||||
const { server, payload } = createPayload(submission);
|
const { server, payload } = createPayload(submission);
|
||||||
const onMessage = (e) => {
|
const onMessage = (e) => {
|
||||||
if (stopStream) {
|
if (stopStream) {
|
||||||
|
|
@ -223,12 +234,15 @@ export default function TextChat({ messages }) {
|
||||||
// }
|
// }
|
||||||
|
|
||||||
if (data.final) {
|
if (data.final) {
|
||||||
convoHandler(data, currentState);
|
convoHandler(data, currentState, currentMsg);
|
||||||
console.log('final', data);
|
console.log('final', data);
|
||||||
|
} if (data.created) {
|
||||||
|
currentMsg = data.message;
|
||||||
|
createdHandler(data, currentState, currentMsg);
|
||||||
} else {
|
} else {
|
||||||
let text = data.text || data.response;
|
let text = data.text || data.response;
|
||||||
if (data.message) {
|
if (data.message) {
|
||||||
messageHandler(text, currentState);
|
messageHandler(text, currentState, currentMsg);
|
||||||
}
|
}
|
||||||
// console.log('dataStream', data);
|
// console.log('dataStream', data);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue