|
@@ -1484,14 +1484,23 @@
|
|
|
|
|
|
saveSessionSelectedModels();
|
|
|
|
|
|
- await sendPrompt(history, userPrompt, userMessageId, { newChat: true });
|
|
|
+ await sendMessage(history, userMessageId, { newChat: true });
|
|
|
};
|
|
|
|
|
|
- const sendPrompt = async (
|
|
|
+ const sendMessage = async (
|
|
|
_history,
|
|
|
- prompt: string,
|
|
|
parentId: string,
|
|
|
- { modelId = null, modelIdx = null, newChat = false } = {}
|
|
|
+ {
|
|
|
+ messages = null,
|
|
|
+ modelId = null,
|
|
|
+ modelIdx = null,
|
|
|
+ newChat = false
|
|
|
+ }: {
|
|
|
+ messages?: any[] | null;
|
|
|
+ modelId?: string | null;
|
|
|
+ modelIdx?: number | null;
|
|
|
+ newChat?: boolean;
|
|
|
+ } = {}
|
|
|
) => {
|
|
|
if (autoScroll) {
|
|
|
scrollToBottom();
|
|
@@ -1561,9 +1570,8 @@
|
|
|
const model = $models.filter((m) => m.id === modelId).at(0);
|
|
|
|
|
|
if (model) {
|
|
|
- const messages = createMessagesList(_history, parentId);
|
|
|
// If there are image files, check if model is vision capable
|
|
|
- const hasImages = messages.some((message) =>
|
|
|
+ const hasImages = createMessagesList(_history, parentId).some((message) =>
|
|
|
message.files?.some((file) => file.type === 'image')
|
|
|
);
|
|
|
|
|
@@ -1580,7 +1588,15 @@
|
|
|
const chatEventEmitter = await getChatEventEmitter(model.id, _chatId);
|
|
|
|
|
|
scrollToBottom();
|
|
|
- await sendPromptSocket(_history, model, responseMessageId, _chatId);
|
|
|
+ await sendMessageSocket(
|
|
|
+ model,
|
|
|
+ messages && messages.length > 0
|
|
|
+ ? messages
|
|
|
+ : createMessagesList(_history, responseMessageId),
|
|
|
+ _history,
|
|
|
+ responseMessageId,
|
|
|
+ _chatId
|
|
|
+ );
|
|
|
|
|
|
if (chatEventEmitter) clearInterval(chatEventEmitter);
|
|
|
} else {
|
|
@@ -1593,12 +1609,11 @@
|
|
|
chats.set(await getChatList(localStorage.token, $currentChatPage));
|
|
|
};
|
|
|
|
|
|
- const sendPromptSocket = async (_history, model, responseMessageId, _chatId) => {
|
|
|
- const chatMessages = createMessagesList(history, history.currentId);
|
|
|
+ const sendMessageSocket = async (model, _messages, _history, responseMessageId, _chatId) => {
|
|
|
const responseMessage = _history.messages[responseMessageId];
|
|
|
const userMessage = _history.messages[responseMessage.parentId];
|
|
|
|
|
|
- const chatMessageFiles = chatMessages
|
|
|
+ const chatMessageFiles = _messages
|
|
|
.filter((message) => message.files)
|
|
|
.flatMap((message) => message.files);
|
|
|
|
|
@@ -1652,7 +1667,7 @@
|
|
|
)}`
|
|
|
}
|
|
|
: undefined,
|
|
|
- ...createMessagesList(_history, responseMessageId).map((message) => ({
|
|
|
+ ..._messages.map((message) => ({
|
|
|
...message,
|
|
|
content: processDetails(message.content)
|
|
|
}))
|
|
@@ -1900,31 +1915,39 @@
|
|
|
scrollToBottom();
|
|
|
}
|
|
|
|
|
|
- await sendPrompt(history, userPrompt, userMessageId);
|
|
|
+ await sendMessage(history, userMessageId);
|
|
|
};
|
|
|
|
|
|
- const regenerateResponse = async (message) => {
|
|
|
+ const regenerateResponse = async (message, suggestionPrompt = null) => {
|
|
|
console.log('regenerateResponse');
|
|
|
|
|
|
if (history.currentId) {
|
|
|
let userMessage = history.messages[message.parentId];
|
|
|
- let userPrompt = userMessage.content;
|
|
|
|
|
|
if (autoScroll) {
|
|
|
scrollToBottom();
|
|
|
}
|
|
|
|
|
|
- if ((userMessage?.models ?? [...selectedModels]).length == 1) {
|
|
|
- // If user message has only one model selected, sendPrompt automatically selects it for regeneration
|
|
|
- await sendPrompt(history, userPrompt, userMessage.id);
|
|
|
- } else {
|
|
|
- // If there are multiple models selected, use the model of the response message for regeneration
|
|
|
- // e.g. many model chat
|
|
|
- await sendPrompt(history, userPrompt, userMessage.id, {
|
|
|
- modelId: message.model,
|
|
|
- modelIdx: message.modelIdx
|
|
|
- });
|
|
|
- }
|
|
|
+ await sendMessage(history, userMessage.id, {
|
|
|
+ ...(suggestionPrompt
|
|
|
+ ? {
|
|
|
+ messages: [
|
|
|
+ ...createMessagesList(history, message.id),
|
|
|
+ {
|
|
|
+ role: 'user',
|
|
|
+ content: suggestionPrompt
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ }
|
|
|
+ : {}),
|
|
|
+ ...((userMessage?.models ?? [...selectedModels]).length > 1
|
|
|
+ ? {
|
|
|
+ // If multiple models are selected, use the model from the message
|
|
|
+ modelId: message.model,
|
|
|
+ modelIdx: message.modelIdx
|
|
|
+ }
|
|
|
+ : {})
|
|
|
+ });
|
|
|
}
|
|
|
};
|
|
|
|
|
@@ -1942,7 +1965,13 @@
|
|
|
.at(0);
|
|
|
|
|
|
if (model) {
|
|
|
- await sendPromptSocket(history, model, responseMessage.id, _chatId);
|
|
|
+ await sendMessageSocket(
|
|
|
+ model,
|
|
|
+ createMessagesList(history, responseMessage.id),
|
|
|
+ history,
|
|
|
+ responseMessage.id,
|
|
|
+ _chatId
|
|
|
+ );
|
|
|
}
|
|
|
}
|
|
|
};
|
|
@@ -2171,7 +2200,7 @@
|
|
|
}}
|
|
|
{selectedModels}
|
|
|
{atSelectedModel}
|
|
|
- {sendPrompt}
|
|
|
+ {sendMessage}
|
|
|
{showMessage}
|
|
|
{submitMessage}
|
|
|
{continueResponse}
|