Skip to content
Snippets Groups Projects

Add ability to stream chat responses

Merged Nicolas Dular requested to merge nd/streaming-connect-fe-be into master
2 files
+ 89
11
Compare changes
  • Side-by-side
  • Inline
Files
2
@@ -10,6 +10,7 @@ export default {
}
if (newMessageData.chunkId) {
// when a new chunk comes in, we append the message if it already exists
const index = state.messages.findIndex(
(msg) =>
msg.requestId === newMessageData.requestId &&
@@ -17,8 +18,14 @@ export default {
);
if (index > -1) {
const prevMessage = state.messages[index];
// When the final response comes before the last chunk
if (prevMessage.chunkId === null) {
return;
}
const newMessage = {
...prevMessage,
...newMessageData,
content: prevMessage.content.concat(newMessageData.content),
};
state.messages.splice(index, 1, newMessage);
@@ -27,11 +34,7 @@ export default {
state.loading = false;
}
} else {
const index = state.messages.findIndex(
(msg) =>
msg.requestId === newMessageData.requestId &&
msg.role.toLowerCase() === newMessageData.role.toLowerCase(),
);
const index = state.messages.findIndex((msg) => msg.requestId === newMessageData.requestId);
const hasMsgWithRequestId = index > -1;
const msgWithRequestId = hasMsgWithRequestId && state.messages[index];
let isLastMessage = false;
@@ -39,14 +42,27 @@ export default {
if (hasMsgWithRequestId) {
if (msgWithRequestId.role.toLowerCase() === newMessageData.role.toLowerCase()) {
// We update the existing message object instead of pushing a new one
state.messages[index] = {
...msgWithRequestId,
const newMessage = {
...state.messages[index],
...newMessageData,
};
state.messages.splice(index, 1, newMessage);
} else {
// We add the new ASSISTANT message
isLastMessage = index === state.messages.length - 1;
state.messages.splice(index + 1, 0, newMessageData);
// We add the new ASSISTANT message. We check first if one already exists.
// This can happen when a the ASSISTANT message already got streamed
const assistantIndex = state.messages.findIndex(
(msg) =>
msg.requestId === newMessageData.requestId &&
msg.role.toLowerCase() === GENIE_CHAT_MODEL_ROLES.assistant.toLocaleLowerCase(),
);
if (assistantIndex > -1) {
state.messages.splice(assistantIndex, 1, newMessageData);
} else {
isLastMessage = index === state.messages.length - 1;
state.messages.splice(index + 1, 0, newMessageData);
}
}
} else {
// It's the new message, so just push it to the end of the Array
Loading