#336 Slash commands / bias adjustments

This commit is contained in:
SillyLossy
2023-05-19 23:05:22 +03:00
parent d74a920e19
commit df0734aac4
3 changed files with 75 additions and 32 deletions

View File

@@ -294,7 +294,7 @@ const system_messages = {
mes: [ mes: [
`Hi there! The following chat formatting commands are supported: `Hi there! The following chat formatting commands are supported:
<ul> <ul>
<li><tt>{{text}}</tt> - sets a one-time behavioral bias for the AI. Resets when you send the next message. <li><tt>{{text}}</tt> - sets a one-time behavioral bias for the AI. Resets when you send the next message.
</li> </li>
</ul> </ul>
Hotkeys/Keybinds: Hotkeys/Keybinds:
@@ -1027,6 +1027,11 @@ function messageFormatting(mes, ch_name, isSystem, isUser) {
}); });
} }
// Hides bias from empty messages send with slash commands
if (isSystem) {
mes = mes.replace(/{{(\*?.*\*?)}}/g, "");
}
if (!power_user.allow_name2_display && ch_name && !isUser && !isSystem) { if (!power_user.allow_name2_display && ch_name && !isUser && !isSystem) {
mes = mes.replaceAll(`${ch_name}:`, ""); mes = mes.replaceAll(`${ch_name}:`, "");
} }
@@ -1160,7 +1165,7 @@ function addOneMessage(mes, { type = "normal", insertAfter = null, scroll = true
newMessage.data("isSystem", isSystem); newMessage.data("isSystem", isSystem);
if (isSystem) { if (isSystem) {
newMessage.find(".mes_edit").hide(); // newMessage.find(".mes_edit").hide();
newMessage.find(".mes_prompt").hide(); //don't need prompt button for sys newMessage.find(".mes_prompt").hide(); //don't need prompt button for sys
} }
@@ -1320,7 +1325,7 @@ function processCommands(message, type) {
return result.interrupt; return result.interrupt;
} }
function sendSystemMessage(type, text) { function sendSystemMessage(type, text, extra = {}) {
const systemMessage = system_messages[type]; const systemMessage = system_messages[type];
if (!systemMessage) { if (!systemMessage) {
@@ -1341,6 +1346,7 @@ function sendSystemMessage(type, text) {
newMessage.extra = {}; newMessage.extra = {};
} }
newMessage.extra = Object.assign(newMessage.extra, extra);
newMessage.extra.type = type; newMessage.extra.type = type;
chat.push(newMessage); chat.push(newMessage);
@@ -1348,7 +1354,7 @@ function sendSystemMessage(type, text) {
is_send_press = false; is_send_press = false;
} }
function extractMessageBias(message) { export function extractMessageBias(message) {
if (!message) { if (!message) {
return null; return null;
} }
@@ -1744,8 +1750,14 @@ async function Generate(type, { automatic_trigger, force_name2, resolve, reject,
//for normal messages sent from user.. //for normal messages sent from user..
if (textareaText != "" && !automatic_trigger && type !== 'quiet') { if (textareaText != "" && !automatic_trigger && type !== 'quiet') {
// If user message contains no text other than bias - send as a system message
if (messageBias && replaceBiasMarkup(textareaText).trim().length === 0) {
sendSystemMessage(system_message_types.GENERIC, ' ', { bias: messageBias });
}
else {
sendMessageAsUser(textareaText, messageBias); sendMessageAsUser(textareaText, messageBias);
} }
}
//////////////////////////////////// ////////////////////////////////////
const scenarioText = chat_metadata['scenario'] || characters[this_chid].scenario; const scenarioText = chat_metadata['scenario'] || characters[this_chid].scenario;
let charDescription = baseChatReplace(characters[this_chid].description.trim(), name1, name2); let charDescription = baseChatReplace(characters[this_chid].description.trim(), name1, name2);
@@ -2360,8 +2372,8 @@ function getBiasStrings(textareaText) {
// gets bias of the latest message where it was applied // gets bias of the latest message where it was applied
for (let mes of chat.slice().reverse()) { for (let mes of chat.slice().reverse()) {
if (mes && mes.is_user) { if (mes && mes.extra && (mes.is_user || mes.is_system || mes.extra.type === system_message_types.NARRATOR)) {
if (mes.extra && mes.extra.bias && mes.extra.bias.trim().length > 0) { if (mes.extra.bias && mes.extra.bias.trim().length > 0) {
promptBias = mes.extra.bias; promptBias = mes.extra.bias;
} }
break; break;
@@ -2384,12 +2396,15 @@ function formatMessageHistoryItem(chatItem, isInstruct) {
textResult = formatInstructModeChat(itemName, chatItem.mes, chatItem.is_user, isNarratorType, chatItem.force_avatar); textResult = formatInstructModeChat(itemName, chatItem.mes, chatItem.is_user, isNarratorType, chatItem.force_avatar);
} }
// replace bias markup textResult = replaceBiasMarkup(textResult);
textResult = (textResult ?? '').replace(/{{(\*?.*\*?)}}/g, '');
return textResult; return textResult;
} }
export function replaceBiasMarkup(str) {
return (str ?? '').replace(/{{(\*?.*\*?)}}/g, '');
}
function sendMessageAsUser(textareaText, messageBias) { function sendMessageAsUser(textareaText, messageBias) {
chat[chat.length] = {}; chat[chat.length] = {};
chat[chat.length - 1]['name'] = name1; chat[chat.length - 1]['name'] = name1;
@@ -3882,22 +3897,30 @@ function messageEditAuto(div) {
let mesBlock = div.closest(".mes_block"); let mesBlock = div.closest(".mes_block");
var text = mesBlock.find(".edit_textarea").val().trim(); var text = mesBlock.find(".edit_textarea").val().trim();
const bias = extractMessageBias(text); const bias = extractMessageBias(text);
chat[this_edit_mes_id]["mes"] = text; const mes = chat[this_edit_mes_id];
if (chat[this_edit_mes_id]["swipe_id"] !== undefined) { mes["mes"] = text;
chat[this_edit_mes_id]["swipes"][chat[this_edit_mes_id]["swipe_id"]] = text; if (mes["swipe_id"] !== undefined) {
mes["swipes"][mes["swipe_id"]] = text;
} }
// editing old messages // editing old messages
if (!chat[this_edit_mes_id]["extra"]) { if (!mes["extra"]) {
chat[this_edit_mes_id]["extra"] = {}; mes["extra"] = {};
} }
chat[this_edit_mes_id]["extra"]["bias"] = bias ?? null;
if (mes.is_system || mes.is_user || mes.extra.type === system_message_types.NARRATOR) {
mes.extra.bias = bias ?? null;
}
else {
mes.extra.bias = null;
}
mesBlock.find(".mes_text").val(''); mesBlock.find(".mes_text").val('');
mesBlock.find(".mes_text").val(messageFormatting( mesBlock.find(".mes_text").val(messageFormatting(
text, text,
this_edit_mes_chname, this_edit_mes_chname,
chat[this_edit_mes_id].is_system, mes.is_system,
chat[this_edit_mes_id].is_user, mes.is_user,
)); ));
saveChatDebounced(); saveChatDebounced();
} }
@@ -3906,17 +3929,23 @@ function messageEditDone(div) {
let mesBlock = div.closest(".mes_block"); let mesBlock = div.closest(".mes_block");
var text = mesBlock.find(".edit_textarea").val().trim(); var text = mesBlock.find(".edit_textarea").val().trim();
const bias = extractMessageBias(text); const bias = extractMessageBias(text);
chat[this_edit_mes_id]["mes"] = text; const mes = chat[this_edit_mes_id];
if (chat[this_edit_mes_id]["swipe_id"] !== undefined) { mes["mes"] = text;
chat[this_edit_mes_id]["swipes"][chat[this_edit_mes_id]["swipe_id"]] = text; if (mes["swipe_id"] !== undefined) {
mes["swipes"][mes["swipe_id"]] = text;
} }
// editing old messages // editing old messages
if (!chat[this_edit_mes_id]["extra"]) { if (!mes.extra) {
chat[this_edit_mes_id]["extra"] = {}; mes.extra = {};
} }
chat[this_edit_mes_id]["extra"]["bias"] = bias ?? null; if (mes.is_system || mes.is_user || mes.extra.type === system_message_types.NARRATOR) {
mes.extra.bias = bias ?? null;
}
else {
mes.extra.bias = null;
}
mesBlock.find(".mes_text").empty(); mesBlock.find(".mes_text").empty();
mesBlock.find(".mes_edit_buttons").css("display", "none"); mesBlock.find(".mes_edit_buttons").css("display", "none");
@@ -3925,13 +3954,13 @@ function messageEditDone(div) {
messageFormatting( messageFormatting(
text, text,
this_edit_mes_chname, this_edit_mes_chname,
chat[this_edit_mes_id].is_system, mes.is_system,
chat[this_edit_mes_id].is_user, mes.is_user,
) )
); );
mesBlock.find(".mes_bias").empty(); mesBlock.find(".mes_bias").empty();
mesBlock.find(".mes_bias").append(messageFormatting(bias)); mesBlock.find(".mes_bias").append(messageFormatting(bias));
appendImageToMessage(chat[this_edit_mes_id], div.closest(".mes")); appendImageToMessage(mes, div.closest(".mes"));
addCopyToCodeBlocks(div.closest(".mes")); addCopyToCodeBlocks(div.closest(".mes"));
this_edit_mes_id = undefined; this_edit_mes_id = undefined;
saveChatConditional(); saveChatConditional();
@@ -5956,11 +5985,12 @@ $(document).ready(function () {
//***Message Editor*** //***Message Editor***
$(document).on("click", ".mes_edit", function () { $(document).on("click", ".mes_edit", function () {
if (this_chid !== undefined || selected_group) { if (this_chid !== undefined || selected_group) {
const message = $(this).closest(".mes"); // Previously system messages we're allowed to be edited
/*const message = $(this).closest(".mes");
if (message.data("isSystem")) { if (message.data("isSystem")) {
return; return;
} }*/
let chatScrollPosition = $("#chat").scrollTop(); let chatScrollPosition = $("#chat").scrollTop();
if (this_edit_mes_id !== undefined) { if (this_edit_mes_id !== undefined) {

View File

@@ -18,6 +18,7 @@ import {
callPopup, callPopup,
getRequestHeaders, getRequestHeaders,
system_message_types, system_message_types,
replaceBiasMarkup,
} from "../script.js"; } from "../script.js";
import { groups, selected_group } from "./group-chats.js"; import { groups, selected_group } from "./group-chats.js";
@@ -174,8 +175,7 @@ function setOpenAIMessages(chat) {
content = `${chat[j].name}: ${content}`; content = `${chat[j].name}: ${content}`;
} }
// replace bias markup content = replaceBiasMarkup(content);
content = (content ?? '').replace(/{{(\*?.*\*?)}}/g, '');
// remove caret return (waste of tokens) // remove caret return (waste of tokens)
content = content.replace(/\r/gm, ''); content = content.replace(/\r/gm, '');

View File

@@ -4,7 +4,9 @@ import {
chat, chat,
chat_metadata, chat_metadata,
default_avatar, default_avatar,
extractMessageBias,
getThumbnailUrl, getThumbnailUrl,
replaceBiasMarkup,
saveChatConditional, saveChatConditional,
sendSystemMessage, sendSystemMessage,
system_avatar, system_avatar,
@@ -117,6 +119,9 @@ function sendMessageAs(_, text) {
const name = parts.shift().trim(); const name = parts.shift().trim();
const mesText = parts.join('\n').trim(); const mesText = parts.join('\n').trim();
// Messages that do nothing but set bias will be hidden from the context
const bias = extractMessageBias(mesText);
const isSystem = replaceBiasMarkup(mesText).trim().length === 0;
const character = characters.find(x => x.name === name); const character = characters.find(x => x.name === name);
let force_avatar, original_avatar; let force_avatar, original_avatar;
@@ -134,11 +139,14 @@ function sendMessageAs(_, text) {
name: name, name: name,
is_user: false, is_user: false,
is_name: true, is_name: true,
is_system: false, is_system: isSystem,
send_date: humanizedDateTime(), send_date: humanizedDateTime(),
mes: mesText, mes: mesText,
force_avatar: force_avatar, force_avatar: force_avatar,
original_avatar: original_avatar, original_avatar: original_avatar,
extra: {
bias: bias.trim().length ? bias : null,
}
}; };
chat.push(message); chat.push(message);
@@ -152,16 +160,21 @@ function sendNarratorMessage(_, text) {
} }
const name = chat_metadata[NARRATOR_NAME_KEY] || NARRATOR_NAME_DEFAULT; const name = chat_metadata[NARRATOR_NAME_KEY] || NARRATOR_NAME_DEFAULT;
// Messages that do nothing but set bias will be hidden from the context
const bias = extractMessageBias(text);
const isSystem = replaceBiasMarkup(text).trim().length === 0;
const message = { const message = {
name: name, name: name,
is_user: false, is_user: false,
is_name: false, is_name: false,
is_system: false, is_system: isSystem,
send_date: humanizedDateTime(), send_date: humanizedDateTime(),
mes: text.trim(), mes: text.trim(),
force_avatar: system_avatar, force_avatar: system_avatar,
extra: { extra: {
type: system_message_types.NARRATOR, type: system_message_types.NARRATOR,
bias: bias.trim().length ? bias : null,
}, },
}; };