From 6dd09858d4e9c910cdfbc636b612cd79b213effc Mon Sep 17 00:00:00 2001 From: Cohee <18619528+Cohee1207@users.noreply.github.com> Date: Fri, 15 Sep 2023 23:32:01 +0300 Subject: [PATCH] Don't remove names from the past chat. Fix non-streaming auto-continue. We took fair criticism from the NovelAI dev. --- public/script.js | 75 ++++++------------- public/scripts/bookmarks.js | 1 - public/scripts/extensions/caption/index.js | 1 - .../extensions/infinity-context/index.js | 5 -- .../extensions/speech-recognition/index.js | 1 - .../extensions/stable-diffusion/index.js | 1 - public/scripts/group-chats.js | 1 - public/scripts/slash-commands.js | 3 - server.js | 3 - 9 files changed, 23 insertions(+), 68 deletions(-) diff --git a/public/script.js b/public/script.js index 0aaab00c3..6fe1e0262 100644 --- a/public/script.js +++ b/public/script.js @@ -322,7 +322,6 @@ let safetychat = [ { name: systemUserName, is_user: false, - is_name: true, create_date: 0, mes: "You deleted a character/chat and arrived back here for safety reasons! Pick another character!", }, @@ -398,7 +397,6 @@ function getSystemMessages() { force_avatar: system_avatar, is_user: false, is_system: true, - is_name: true, mes: renderTemplate("help"), }, slash_commands: { @@ -406,7 +404,6 @@ function getSystemMessages() { force_avatar: system_avatar, is_user: false, is_system: true, - is_name: true, mes: '', }, hotkeys: { @@ -414,7 +411,6 @@ function getSystemMessages() { force_avatar: system_avatar, is_user: false, is_system: true, - is_name: true, mes: renderTemplate("hotkeys"), }, formatting: { @@ -422,7 +418,6 @@ function getSystemMessages() { force_avatar: system_avatar, is_user: false, is_system: true, - is_name: true, mes: renderTemplate("formatting"), }, macros: { @@ -430,7 +425,6 @@ function getSystemMessages() { force_avatar: system_avatar, is_user: false, is_system: true, - is_name: true, mes: renderTemplate("macros"), }, welcome: @@ -439,7 +433,6 @@ function getSystemMessages() { force_avatar: system_avatar, is_user: false, is_system: true, - is_name: true, mes: renderTemplate("welcome"), }, group: { @@ -447,7 +440,6 @@ function getSystemMessages() { force_avatar: system_avatar, is_user: false, is_system: true, - is_name: true, is_group: true, mes: "Group chat created. Say 'Hi' to lovely people!", }, @@ -456,7 +448,6 @@ function getSystemMessages() { force_avatar: system_avatar, is_user: false, is_system: true, - is_name: true, mes: "No one hears you. Hint: add more members to the group!", }, generic: { @@ -464,7 +455,6 @@ function getSystemMessages() { force_avatar: system_avatar, is_user: false, is_system: true, - is_name: true, mes: "Generic system message. User `text` parameter to override the contents", }, bookmark_created: { @@ -472,7 +462,6 @@ function getSystemMessages() { force_avatar: system_avatar, is_user: false, is_system: true, - is_name: true, mes: `Bookmark created! Click here to open the bookmark chat: {1}`, }, bookmark_back: { @@ -480,7 +469,6 @@ function getSystemMessages() { force_avatar: system_avatar, is_user: false, is_system: true, - is_name: true, mes: `Click here to return to the previous chat: Return`, }, }; @@ -2125,9 +2113,6 @@ class StreamingProcessor { const isContinue = this.type == "continue"; text = this.removePrefix(text); let processedText = cleanUpMessage(text, isImpersonate, isContinue, !isFinal); - let result = extractNameFromMessage(processedText, this.force_name2, isImpersonate); - let isName = result.this_mes_is_name; - processedText = result.getMessage; // Predict unbalanced asterisks / quotes during streaming const charsToBalance = ['*', '"']; @@ -2146,7 +2131,6 @@ class StreamingProcessor { // Don't waste time calculating token count for streaming let currentTokenCount = isFinal && power_user.message_token_count_enabled ? getTokenCount(processedText, 0) : 0; const timePassed = formatGenerationTimer(this.timeStarted, currentTime, currentTokenCount); - chat[messageId]['is_name'] = isName; chat[messageId]['mes'] = processedText; chat[messageId]['gen_started'] = this.timeStarted; chat[messageId]['gen_finished'] = currentTime; @@ -2502,7 +2486,7 @@ async function Generate(type, { automatic_trigger, force_name2, resolve, reject, console.log(`Core/all messages: ${coreChat.length}/${chat.length}`); // kingbri MARK: - Make sure the prompt bias isn't the same as the user bias - if ((promptBias && !isUserPromptBias) || power_user.always_force_name2) { + if ((promptBias && !isUserPromptBias) || power_user.always_force_name2 || main_api == 'novel') { force_name2 = true; } @@ -3093,7 +3077,7 @@ async function Generate(type, { automatic_trigger, force_name2, resolve, reject, if (isStreamingEnabled() && type !== 'quiet') { hideSwipeButtons(); let getMessage = await streamingProcessor.generate(); - let messageChunk = extractNameFromMessage(cleanUpMessage(getMessage, isImpersonate, isContinue, false), force_name2, isImpersonate).getMessage; + let messageChunk = cleanUpMessage(getMessage, isImpersonate, isContinue, false); if (isContinue) { getMessage = continue_mag + getMessage; @@ -3121,6 +3105,8 @@ async function Generate(type, { automatic_trigger, force_name2, resolve, reject, let title = extractTitleFromData(data); kobold_horde_model = title; + messageChunk = cleanUpMessage(getMessage, isImpersonate, isContinue, false); + if (isContinue) { getMessage = continue_mag + getMessage; } @@ -3129,8 +3115,6 @@ async function Generate(type, { automatic_trigger, force_name2, resolve, reject, const displayIncomplete = type == 'quiet'; getMessage = cleanUpMessage(getMessage, isImpersonate, isContinue, displayIncomplete); - let this_mes_is_name; - ({ this_mes_is_name, getMessage } = extractNameFromMessage(getMessage, force_name2, isImpersonate)); if (getMessage.length > 0) { if (isImpersonate) { $('#send_textarea').val(getMessage).trigger('input'); @@ -3143,10 +3127,10 @@ async function Generate(type, { automatic_trigger, force_name2, resolve, reject, else { // Without streaming we'll be having a full message on continuation. Treat it as a last chunk. if (originalType !== 'continue') { - ({ type, getMessage } = await saveReply(type, getMessage, this_mes_is_name, title)); + ({ type, getMessage } = await saveReply(type, getMessage, true, title)); } else { - ({ type, getMessage } = await saveReply('appendFinal', getMessage, this_mes_is_name, title)); + ({ type, getMessage } = await saveReply('appendFinal', getMessage, true, title)); } } activateSendButtons(); @@ -3196,8 +3180,6 @@ async function Generate(type, { automatic_trigger, force_name2, resolve, reject, return } } - - messageChunk = getMessage; } else { generatedPromptCache = ''; activateSendButtons(); @@ -3352,7 +3334,7 @@ function formatMessageHistoryItem(chatItem, isInstruct, forceOutputSequence) { const isNarratorType = chatItem?.extra?.type === system_message_types.NARRATOR; const characterName = (selected_group || chatItem.force_avatar) ? chatItem.name : name2; const itemName = chatItem.is_user ? chatItem['name'] : characterName; - const shouldPrependName = (chatItem.is_name || chatItem.force_avatar || selected_group) && !isNarratorType; + const shouldPrependName = !isNarratorType; let textResult = shouldPrependName ? `${itemName}: ${chatItem.mes}\n` : `${chatItem.mes}\n`; @@ -3375,7 +3357,6 @@ export async function sendMessageAsUser(textareaText, messageBias) { chat[chat.length] = {}; chat[chat.length - 1]['name'] = name1; chat[chat.length - 1]['is_user'] = true; - chat[chat.length - 1]['is_name'] = true; chat[chat.length - 1]['send_date'] = getMessageTimeStamp(); chat[chat.length - 1]['mes'] = substituteParams(textareaText); chat[chat.length - 1]['extra'] = {}; @@ -3709,25 +3690,6 @@ function getGenerateUrl() { return generate_url; } -function extractNameFromMessage(getMessage, force_name2, isImpersonate) { - const nameToTrim = isImpersonate ? name1 : name2; - let this_mes_is_name = true; - if (getMessage.startsWith(nameToTrim + ":")) { - getMessage = getMessage.replace(nameToTrim + ':', ''); - getMessage = getMessage.trimStart(); - } else { - this_mes_is_name = false; - } - if (force_name2 || power_user.instruct.enabled) - this_mes_is_name = true; - - if (isImpersonate) { - getMessage = getMessage.trim(); - } - - return { this_mes_is_name, getMessage }; -} - function throwCircuitBreakerError() { callPopup(`Could not extract reply in ${MAX_GENERATION_LOOPS} attempts. Try generating again`, 'text'); generate_loop_counter = 0; @@ -3877,10 +3839,22 @@ function cleanUpMessage(getMessage, isImpersonate, isContinue, displayIncomplete if (power_user.auto_fix_generated_markdown) { getMessage = fixMarkdown(getMessage, false); } + + const nameToTrim2 = isImpersonate ? name1 : name2; + + if (getMessage.startsWith(nameToTrim2 + ":")) { + getMessage = getMessage.replace(nameToTrim2 + ':', ''); + getMessage = getMessage.trimStart(); + } + + if (isImpersonate) { + getMessage = getMessage.trim(); + } + return getMessage; } -async function saveReply(type, getMessage, this_mes_is_name, title) { +async function saveReply(type, getMessage, _, title) { if (type != 'append' && type != 'continue' && type != 'appendFinal' && chat.length && (chat[chat.length - 1]['swipe_id'] === undefined || chat[chat.length - 1]['is_user'])) { type = 'normal'; @@ -3953,7 +3927,6 @@ async function saveReply(type, getMessage, this_mes_is_name, title) { chat[chat.length - 1]['extra'] = {}; chat[chat.length - 1]['name'] = name2; chat[chat.length - 1]['is_user'] = false; - chat[chat.length - 1]['is_name'] = this_mes_is_name; chat[chat.length - 1]['send_date'] = getMessageTimeStamp(); chat[chat.length - 1]["extra"]["api"] = getGeneratingApi(); chat[chat.length - 1]["extra"]["model"] = getGeneratingModel(); @@ -3975,7 +3948,6 @@ async function saveReply(type, getMessage, this_mes_is_name, title) { if (characters[this_chid].avatar != 'none') { avatarImg = getThumbnailUrl('avatar', characters[this_chid].avatar); } - chat[chat.length - 1]['is_name'] = true; chat[chat.length - 1]['force_avatar'] = avatarImg; chat[chat.length - 1]['original_avatar'] = characters[this_chid].avatar; chat[chat.length - 1]['extra']['gen_id'] = group_generation_id; @@ -4463,7 +4435,6 @@ function getFirstMessage() { name: name2, is_user: false, is_system: false, - is_name: true, send_date: getMessageTimeStamp(), mes: getRegexedString(firstMes, regex_placement.AI_OUTPUT), extra: {}, @@ -5046,11 +5017,11 @@ function updateMessage(div) { const mes = chat[this_edit_mes_id]; let regexPlacement; - if (mes.is_name && mes.is_user) { + if (mes.is_user) { regexPlacement = regex_placement.USER_INPUT; - } else if (mes.is_name && mes.name === name2) { + } else if (mes.name === name2) { regexPlacement = regex_placement.AI_OUTPUT; - } else if (mes.is_name && mes.name !== name2 || mes.extra?.type === "narrator") { + } else if (mes.name !== name2 || mes.extra?.type === "narrator") { regexPlacement = regex_placement.SLASH_COMMAND; } diff --git a/public/scripts/bookmarks.js b/public/scripts/bookmarks.js index 294f0266e..e22b135fd 100644 --- a/public/scripts/bookmarks.js +++ b/public/scripts/bookmarks.js @@ -280,7 +280,6 @@ async function convertSoloToGroupChat() { message.name = character.name; message.original_avatar = character.avatar; message.force_avatar = getThumbnailUrl('avatar', character.avatar); - message.is_name = true; // Allow regens of a single message in group if (typeof message.extra !== 'object') { diff --git a/public/scripts/extensions/caption/index.js b/public/scripts/extensions/caption/index.js index c199c3c2a..5a610033b 100644 --- a/public/scripts/extensions/caption/index.js +++ b/public/scripts/extensions/caption/index.js @@ -53,7 +53,6 @@ async function sendCaptionedMessage(caption, image) { const message = { name: context.name1, is_user: true, - is_name: true, send_date: getMessageTimeStamp(), mes: messageText, extra: { diff --git a/public/scripts/extensions/infinity-context/index.js b/public/scripts/extensions/infinity-context/index.js index 303b2eee0..d1c761925 100644 --- a/public/scripts/extensions/infinity-context/index.js +++ b/public/scripts/extensions/infinity-context/index.js @@ -508,7 +508,6 @@ async function onSelectInjectFile(e) { meta: JSON.stringify({ name: file.name, is_user: false, - is_name: false, is_system: false, send_date: humanizedDateTime(), mes: m, @@ -686,7 +685,6 @@ window.chromadb_interceptGeneration = async (chat, maxContext) => { const charname = context.name2; newChat.push( { - is_name: false, is_user: false, mes: `[Use these past chat exchanges to inform ${charname}'s next response:`, name: "system", @@ -696,7 +694,6 @@ window.chromadb_interceptGeneration = async (chat, maxContext) => { newChat.push(...queriedMessages.map(m => m.meta).filter(onlyUnique).map(JSON.parse)); newChat.push( { - is_name: false, is_user: false, mes: `]\n`, name: "system", @@ -752,7 +749,6 @@ window.chromadb_interceptGeneration = async (chat, maxContext) => { newChat.push( { - is_name: false, is_user: false, mes: recallStart, name: "system", @@ -762,7 +758,6 @@ window.chromadb_interceptGeneration = async (chat, maxContext) => { newChat.push(...queriedMessages.map(m => m.meta).filter(onlyUnique).map(JSON.parse)); newChat.push( { - is_name: false, is_user: false, mes: recallEnd + `\n`, name: "system", diff --git a/public/scripts/extensions/speech-recognition/index.js b/public/scripts/extensions/speech-recognition/index.js index 1ac098f36..3ac3df229 100644 --- a/public/scripts/extensions/speech-recognition/index.js +++ b/public/scripts/extensions/speech-recognition/index.js @@ -165,7 +165,6 @@ async function processTranscript(transcript) { const message = { name: context.name1, is_user: true, - is_name: true, send_date: getMessageTimeStamp(), mes: messageText, }; diff --git a/public/scripts/extensions/stable-diffusion/index.js b/public/scripts/extensions/stable-diffusion/index.js index 886cb8141..a03b71e60 100644 --- a/public/scripts/extensions/stable-diffusion/index.js +++ b/public/scripts/extensions/stable-diffusion/index.js @@ -1246,7 +1246,6 @@ async function sendMessage(prompt, image) { name: context.groupId ? systemUserName : context.name2, is_user: false, is_system: true, - is_name: true, send_date: getMessageTimeStamp(), mes: context.groupId ? p(messageText) : messageText, extra: { diff --git a/public/scripts/group-chats.js b/public/scripts/group-chats.js index 6a8b2d2e4..7b43eb17a 100644 --- a/public/scripts/group-chats.js +++ b/public/scripts/group-chats.js @@ -205,7 +205,6 @@ function getFirstCharacterMessage(character) { mes["is_user"] = false; mes["is_system"] = false; mes["name"] = character.name; - mes["is_name"] = true; mes["send_date"] = getMessageTimeStamp(); mes["original_avatar"] = character.avatar; mes["extra"] = { "gen_id": Date.now() * Math.random() * 1000000 }; diff --git a/public/scripts/slash-commands.js b/public/scripts/slash-commands.js index 5d189f56d..9abe252fb 100644 --- a/public/scripts/slash-commands.js +++ b/public/scripts/slash-commands.js @@ -325,7 +325,6 @@ async function sendMessageAs(_, text) { const message = { name: name, is_user: false, - is_name: true, is_system: isSystem, send_date: getMessageTimeStamp(), mes: substituteParams(mesText), @@ -357,7 +356,6 @@ async function sendNarratorMessage(_, text) { const message = { name: name, is_user: false, - is_name: false, is_system: isSystem, send_date: getMessageTimeStamp(), mes: substituteParams(text.trim()), @@ -384,7 +382,6 @@ async function sendCommentMessage(_, text) { const message = { name: COMMENT_NAME_DEFAULT, is_user: false, - is_name: true, is_system: true, send_date: getMessageTimeStamp(), mes: substituteParams(text.trim()), diff --git a/server.js b/server.js index 951a10399..832601f9d 100644 --- a/server.js +++ b/server.js @@ -2299,7 +2299,6 @@ app.post("/importchat", urlencodedParser, function (request, response) { (message) => ({ name: message.src.is_human ? user_name : ch_name, is_user: message.src.is_human, - is_name: true, send_date: humanizedISO8601DateTime(), mes: message.text, }) @@ -2344,7 +2343,6 @@ app.post("/importchat", urlencodedParser, function (request, response) { const userMessage = { name: user_name, is_user: true, - is_name: true, send_date: humanizedISO8601DateTime(), mes: arr[0], }; @@ -2354,7 +2352,6 @@ app.post("/importchat", urlencodedParser, function (request, response) { const charMessage = { name: ch_name, is_user: false, - is_name: true, send_date: humanizedISO8601DateTime(), mes: arr[1], };