Chat: Add AI reply prefixes

Experimentation yields that prefixing a reply with something drives
the AI to possibly produce more targeted and meaningful conversation.

The example I used is showing an AI's "thoughts" in a message via
the use of backticks. By automatically prefixing {{char}}'s thoughts,
the AI generates an internal monologue that the user can also use
for their own responses.

This feature is stable, but in an experimental state for now in terms
of expansion.

Signed-off-by: kingbri <bdashore3@proton.me>
This commit is contained in:
kingbri
2023-07-01 15:27:44 -04:00
parent 6c33dff0ba
commit 080ecec5f2
3 changed files with 63 additions and 24 deletions

View File

@ -1851,6 +1851,19 @@
</div> </div>
</div> </div>
<div> <div>
<h4>
<span data-i18n="Start Reply With">
Start Reply With
</span>
</h4>
<div>
<input id="start_reply_with" class="text_pole textarea_compact" type="text" placeholder="AI reply prefix" />
</div>
<label class="checkbox_label" for="chat-show-reply-prefix-checkbox"><input id="chat-show-reply-prefix-checkbox" type="checkbox" />
<span data-i18n="Show reply prefix in chat">
Show reply prefix in chat
</span>
</label>
<h4> <h4>
<span data-i18n="Pygmalion Formatting"> <span data-i18n="Pygmalion Formatting">
Pygmalion Formatting Pygmalion Formatting

View File

@ -1062,6 +1062,11 @@ function messageFormatting(mes, ch_name, isSystem, isUser) {
mes = ''; mes = '';
} }
// Prompt bias replacement should be applied on the raw message
if (!power_user.show_user_prompt_bias && ch_name && !isUser && !isSystem) {
mes = mes.replaceAll(substituteParams(power_user.user_prompt_bias), "");
}
if (power_user.auto_fix_generated_markdown) { if (power_user.auto_fix_generated_markdown) {
mes = fixMarkdown(mes); mes = fixMarkdown(mes);
} }
@ -1122,7 +1127,6 @@ function messageFormatting(mes, ch_name, isSystem, isUser) {
//console.log('mes after removed <tags>') //console.log('mes after removed <tags>')
//console.log(mes) //console.log(mes)
} */ } */
return mes; return mes;
} }
@ -2308,7 +2312,17 @@ async function Generate(type, { automatic_trigger, force_name2, resolve, reject,
if (!mesSendString.endsWith('\n')) { if (!mesSendString.endsWith('\n')) {
mesSendString += '\n'; mesSendString += '\n';
} }
mesSendString += (`${name2}:${promptBias || ''}`);
let addedPromptBias = promptBias || substituteParams(power_user.user_prompt_bias) || '';
// Add a leading space to the prompt bias if applicable
if (addedPromptBias.length !== 0 && !addedPromptBias.startsWith(' ')) {
addedPromptBias = ` ${addedPromptBias}`
}
mesSendString += (`${name2}:${addedPromptBias}`);
} else if (power_user.user_prompt_bias) {
mesSendString += substituteParams(power_user.user_prompt_bias);
} }
return mesSendString; return mesSendString;
@ -3309,32 +3323,29 @@ function extractTitleFromData(data) {
} }
function extractMessageFromData(data) { function extractMessageFromData(data) {
let getMessage = ""; switch (main_api) {
case 'kobold':
if (main_api == 'kobold') { return data.results[0].text;
getMessage = data.results[0].text; case 'koboldhorde':
return data.text;
case 'textgenerationwebui':
return data.results[0].text;
case 'novel':
return data.output;
case 'openai':
case 'poe':
return data;
default:
return ''
} }
if (main_api == 'koboldhorde') {
getMessage = data.text;
}
if (main_api == 'textgenerationwebui') {
getMessage = data.results[0].text;
}
if (main_api == 'novel') {
getMessage = data.output;
}
if (main_api == 'openai' || main_api == 'poe') {
getMessage = data;
}
return getMessage;
} }
function cleanUpMessage(getMessage, isImpersonate, displayIncompleteSentences = false) { function cleanUpMessage(getMessage, isImpersonate, displayIncompleteSentences = false) {
// Append the user bias first before trimming anything else
if (power_user.user_prompt_bias && power_user.user_prompt_bias.length !== 0) {
getMessage = substituteParams(power_user.user_prompt_bias) + getMessage;
}
if (!displayIncompleteSentences && power_user.trim_sentences) { if (!displayIncompleteSentences && power_user.trim_sentences) {
getMessage = end_trim_to_sentence(getMessage, power_user.include_newline); getMessage = end_trim_to_sentence(getMessage, power_user.include_newline);
} }

View File

@ -101,6 +101,8 @@ let power_user = {
trim_sentences: false, trim_sentences: false,
include_newline: false, include_newline: false,
always_force_name2: false, always_force_name2: false,
user_prompt_bias: '',
show_user_prompt_bias: true,
multigen: false, multigen: false,
multigen_first_chunk: 50, multigen_first_chunk: 50,
multigen_next_chunks: 30, multigen_next_chunks: 30,
@ -598,6 +600,8 @@ function loadPowerUserSettings(settings, data) {
$("#waifuMode").prop("checked", power_user.waifuMode); $("#waifuMode").prop("checked", power_user.waifuMode);
$("#movingUImode").prop("checked", power_user.movingUI); $("#movingUImode").prop("checked", power_user.movingUI);
$("#noShadowsmode").prop("checked", power_user.noShadows); $("#noShadowsmode").prop("checked", power_user.noShadows);
$("#start_reply_with").val(power_user.user_prompt_bias);
$("#chat-show-reply-prefix-checkbox").prop("checked", power_user.show_user_prompt_bias);
$("#multigen").prop("checked", power_user.multigen); $("#multigen").prop("checked", power_user.multigen);
$("#multigen_first_chunk").val(power_user.multigen_first_chunk); $("#multigen_first_chunk").val(power_user.multigen_first_chunk);
$("#multigen_next_chunks").val(power_user.multigen_next_chunks); $("#multigen_next_chunks").val(power_user.multigen_next_chunks);
@ -1074,6 +1078,17 @@ $(document).ready(() => {
reloadMarkdownProcessor(power_user.render_formulas); reloadMarkdownProcessor(power_user.render_formulas);
}); });
$("#start_reply_with").on('input', function() {
power_user.user_prompt_bias = $(this).val();
saveSettingsDebounced();
});
$("#chat-show-reply-prefix-checkbox").change(function () {
power_user.show_user_prompt_bias = !!$(this).prop("checked");
reloadCurrentChat();
saveSettingsDebounced();
})
$("#multigen").change(function () { $("#multigen").change(function () {
power_user.multigen = $(this).prop("checked"); power_user.multigen = $(this).prop("checked");
saveSettingsDebounced(); saveSettingsDebounced();