diff --git a/public/index.html b/public/index.html index 9c2a469ee..8232f488c 100644 --- a/public/index.html +++ b/public/index.html @@ -3302,6 +3302,7 @@
+
diff --git a/public/script.js b/public/script.js index ff21505ee..e631461e1 100644 --- a/public/script.js +++ b/public/script.js @@ -100,7 +100,10 @@ import { nai_settings, } from "./scripts/nai-settings.js"; -import { showBookmarksButtons } from "./scripts/bookmarks.js"; +import { + createNewBookmark, + showBookmarksButtons +} from "./scripts/bookmarks.js"; import { horde_settings, @@ -3815,7 +3818,7 @@ async function renamePastChats(newAvatar, newValue) { } } -async function saveChat(chat_name, withMetadata) { +async function saveChat(chat_name, withMetadata, mesId) { const metadata = { ...chat_metadata, ...(withMetadata || {}) }; let file_name = chat_name ?? characters[this_chid].chat; characters[this_chid]['date_last_chat'] = Date.now(); @@ -3836,6 +3839,11 @@ async function saveChat(chat_name, withMetadata) { } */ }); + + const trimmed_chat = (mesId !== undefined && mesId >= 0 && mesId < chat.length) + ? chat.slice(0, parseInt(mesId) + 1) + : chat; + var save_chat = [ { user_name: name1, @@ -3843,7 +3851,7 @@ async function saveChat(chat_name, withMetadata) { create_date: chat_create_date, chat_metadata: metadata, }, - ...chat, + ...trimmed_chat, ]; return jQuery.ajax({ type: "POST", @@ -7883,6 +7891,13 @@ $(document).ready(function () { $("#load_select_chat_div").css("display", "block"); }); + $(document).on("click", ".mes_create_bookmark", async function () { + var selected_mes_id = $(this).closest(".mes").attr("mesid"); + if (selected_mes_id !== undefined) { + createNewBookmark(selected_mes_id); + } + }); + $(document).on("click", ".mes_stop", function () { if (streamingProcessor) { streamingProcessor.abortController.abort(); diff --git a/public/scripts/bookmarks.js b/public/scripts/bookmarks.js index b69dbc1ff..5cb4a70a8 100644 --- a/public/scripts/bookmarks.js +++ b/public/scripts/bookmarks.js @@ -32,6 +32,7 @@ import { } from "./utils.js"; export { + createNewBookmark, showBookmarksButtons, } @@ -123,13 +124,14 @@ function showBookmarksButtons() { } } -async function createNewBookmark() { +async function createNewBookmark(mesId) { if (!chat.length) { toastr.warning('The chat is empty.', 'Bookmark creation failed'); return; } - const mesId = chat.length - 1; + // Default to last message in chat if no mesId given. + mesId = mesId || chat.length - 1; const lastMes = chat[mesId]; if (typeof lastMes.extra !== 'object') { @@ -155,9 +157,9 @@ async function createNewBookmark() { const newMetadata = { main_chat: mainChat }; if (selected_group) { - await saveGroupBookmarkChat(selected_group, name, newMetadata); + await saveGroupBookmarkChat(selected_group, name, newMetadata, mesId); } else { - await saveChat(name, newMetadata); + await saveChat(name, newMetadata, mesId); } lastMes.extra['bookmark_link'] = name; diff --git a/public/scripts/group-chats.js b/public/scripts/group-chats.js index f6a9e08fd..821b4b212 100644 --- a/public/scripts/group-chats.js +++ b/public/scripts/group-chats.js @@ -1440,7 +1440,7 @@ export async function importGroupChat(formData) { }); } -export async function saveGroupBookmarkChat(groupId, name, metadata) { +export async function saveGroupBookmarkChat(groupId, name, metadata, mesId) { const group = groups.find(x => x.id === groupId); if (!group) { @@ -1450,12 +1450,16 @@ export async function saveGroupBookmarkChat(groupId, name, metadata) { group.past_metadata[name] = { ...chat_metadata, ...(metadata || {}) }; group.chats.push(name); + const trimmed_chat = (mesId !== undefined && mesId >= 0 && mesId < chat.length) + ? chat.slice(0, parseInt(mesId) + 1) + : chat; + await editGroup(groupId, true); await fetch("/savegroupchat", { method: "POST", headers: getRequestHeaders(), - body: JSON.stringify({ id: name, chat: [...chat] }), + body: JSON.stringify({ id: name, chat: [...trimmed_chat] }), }); } diff --git a/public/style.css b/public/style.css index 98081553e..1ec94ca31 100644 --- a/public/style.css +++ b/public/style.css @@ -2470,6 +2470,7 @@ input[type="range"]::-webkit-slider-thumb { .mes_buttons .mes_edit, .mes_buttons .mes_bookmark, +.mes_buttons .mes_create_bookmark, .extraMesButtonsHint, .tagListHint, .extraMesButtons div { @@ -2481,6 +2482,7 @@ input[type="range"]::-webkit-slider-thumb { .mes_buttons .mes_edit:hover, .mes_buttons .mes_bookmark:hover, +.mes_buttons .mes_create_bookmark:hover, .extraMesButtonsHint:hover, .tagListHint:hover, .extraMesButtons div:hover {