mirror of
https://github.com/SillyTavern/SillyTavern.git
synced 2025-06-05 21:59:27 +02:00
#336 Slash commands / bias adjustments
This commit is contained in:
@@ -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,7 +1750,13 @@ 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') {
|
||||||
sendMessageAsUser(textareaText, messageBias);
|
// 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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
////////////////////////////////////
|
////////////////////////////////////
|
||||||
const scenarioText = chat_metadata['scenario'] || characters[this_chid].scenario;
|
const scenarioText = chat_metadata['scenario'] || characters[this_chid].scenario;
|
||||||
@@ -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) {
|
||||||
|
@@ -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, '');
|
||||||
|
@@ -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,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user