mirror of
https://github.com/SillyTavern/SillyTavern.git
synced 2025-06-05 21:59:27 +02:00
Refactor instruct names behavior controls (#2837)
* Refactor instruct names behavior controls Closes #2819 * Remove current persona from force names * Don't add current user name in groups * Revert to old text * Add titles to names behavior * Proper default for names_behavior
This commit is contained in:
@ -7,8 +7,7 @@
|
||||
"stop_sequence": "",
|
||||
"wrap": true,
|
||||
"macro": true,
|
||||
"names": false,
|
||||
"names_force_groups": false,
|
||||
"names_behavior": "none",
|
||||
"activation_regex": "",
|
||||
"system_sequence_prefix": "",
|
||||
"system_sequence_suffix": "",
|
||||
|
@ -7,8 +7,7 @@
|
||||
"stop_sequence": "",
|
||||
"wrap": true,
|
||||
"macro": true,
|
||||
"names": true,
|
||||
"names_force_groups": true,
|
||||
"names_behavior": "always",
|
||||
"activation_regex": "",
|
||||
"system_sequence_prefix": "",
|
||||
"system_sequence_suffix": "",
|
||||
|
@ -7,8 +7,7 @@
|
||||
"stop_sequence": "",
|
||||
"wrap": true,
|
||||
"macro": true,
|
||||
"names": false,
|
||||
"names_force_groups": true,
|
||||
"names_behavior": "force",
|
||||
"activation_regex": "",
|
||||
"system_sequence_prefix": "",
|
||||
"system_sequence_suffix": "",
|
||||
|
@ -7,8 +7,7 @@
|
||||
"stop_sequence": "",
|
||||
"wrap": true,
|
||||
"macro": true,
|
||||
"names": false,
|
||||
"names_force_groups": true,
|
||||
"names_behavior": "force",
|
||||
"activation_regex": "",
|
||||
"system_sequence_prefix": "",
|
||||
"system_sequence_suffix": "",
|
||||
|
@ -7,8 +7,7 @@
|
||||
"stop_sequence": "<|im_end|>",
|
||||
"wrap": true,
|
||||
"macro": true,
|
||||
"names": false,
|
||||
"names_force_groups": false,
|
||||
"names_behavior": "none",
|
||||
"activation_regex": "",
|
||||
"system_sequence_prefix": "",
|
||||
"system_sequence_suffix": "",
|
||||
|
@ -7,8 +7,7 @@
|
||||
"stop_sequence": "<|im_end|>",
|
||||
"wrap": true,
|
||||
"macro": true,
|
||||
"names": true,
|
||||
"names_force_groups": true,
|
||||
"names_behavior": "always",
|
||||
"activation_regex": "",
|
||||
"system_sequence_prefix": "",
|
||||
"system_sequence_suffix": "",
|
||||
|
@ -9,8 +9,7 @@
|
||||
"stop_sequence": "<|END_OF_TURN_TOKEN|>",
|
||||
"wrap": false,
|
||||
"macro": true,
|
||||
"names": true,
|
||||
"names_force_groups": true,
|
||||
"names_behavior": "always",
|
||||
"activation_regex": "",
|
||||
"skip_examples": false,
|
||||
"output_suffix": "<|END_OF_TURN_TOKEN|>",
|
||||
|
@ -7,8 +7,7 @@
|
||||
"stop_sequence": "\n<|im_start|>",
|
||||
"wrap": false,
|
||||
"macro": true,
|
||||
"names": false,
|
||||
"names_force_groups": false,
|
||||
"names_behavior": "none",
|
||||
"activation_regex": "",
|
||||
"system_sequence_prefix": "",
|
||||
"system_sequence_suffix": "",
|
||||
|
@ -10,8 +10,7 @@
|
||||
"separator_sequence": "",
|
||||
"wrap": false,
|
||||
"macro": true,
|
||||
"names": false,
|
||||
"names_force_groups": false,
|
||||
"names_behavior": "none",
|
||||
"activation_regex": "",
|
||||
"skip_examples": false,
|
||||
"name": "DreamGen Role-Play V1 Llama3"
|
||||
|
@ -7,8 +7,7 @@
|
||||
"stop_sequence": "<end_of_turn>",
|
||||
"wrap": true,
|
||||
"macro": true,
|
||||
"names": false,
|
||||
"names_force_groups": false,
|
||||
"names_behavior": "none",
|
||||
"activation_regex": "",
|
||||
"system_sequence_prefix": "",
|
||||
"system_sequence_suffix": "",
|
||||
|
@ -7,8 +7,7 @@
|
||||
"stop_sequence": "",
|
||||
"wrap": false,
|
||||
"macro": true,
|
||||
"names": false,
|
||||
"names_force_groups": true,
|
||||
"names_behavior": "force",
|
||||
"activation_regex": "",
|
||||
"system_sequence_prefix": "BEGINNING OF CONVERSATION: ",
|
||||
"system_sequence_suffix": "",
|
||||
|
@ -7,8 +7,7 @@
|
||||
"stop_sequence": "",
|
||||
"wrap": true,
|
||||
"macro": true,
|
||||
"names": true,
|
||||
"names_force_groups": true,
|
||||
"names_behavior": "always",
|
||||
"activation_regex": "",
|
||||
"system_sequence_prefix": "",
|
||||
"system_sequence_suffix": "",
|
||||
|
@ -7,8 +7,7 @@
|
||||
"stop_sequence": "",
|
||||
"wrap": true,
|
||||
"macro": true,
|
||||
"names": false,
|
||||
"names_force_groups": true,
|
||||
"names_behavior": "force",
|
||||
"activation_regex": "",
|
||||
"system_sequence_prefix": "",
|
||||
"system_sequence_suffix": "",
|
||||
|
@ -7,8 +7,7 @@
|
||||
"stop_sequence": "",
|
||||
"wrap": false,
|
||||
"macro": true,
|
||||
"names": false,
|
||||
"names_force_groups": true,
|
||||
"names_behavior": "force",
|
||||
"activation_regex": "",
|
||||
"system_sequence_prefix": "",
|
||||
"system_sequence_suffix": "",
|
||||
|
@ -7,8 +7,7 @@
|
||||
"stop_sequence": "<|eot_id|>",
|
||||
"wrap": false,
|
||||
"macro": true,
|
||||
"names": true,
|
||||
"names_force_groups": true,
|
||||
"names_behavior": "always",
|
||||
"activation_regex": "",
|
||||
"system_sequence_prefix": "",
|
||||
"system_sequence_suffix": "",
|
||||
|
@ -7,8 +7,7 @@
|
||||
"stop_sequence": "<|eot_id|>",
|
||||
"wrap": false,
|
||||
"macro": true,
|
||||
"names": false,
|
||||
"names_force_groups": false,
|
||||
"names_behavior": "none",
|
||||
"activation_regex": "",
|
||||
"system_sequence_prefix": "",
|
||||
"system_sequence_suffix": "",
|
||||
|
@ -7,8 +7,7 @@
|
||||
"stop_sequence": "</s>",
|
||||
"wrap": false,
|
||||
"macro": true,
|
||||
"names": false,
|
||||
"names_force_groups": true,
|
||||
"names_behavior": "force",
|
||||
"activation_regex": "",
|
||||
"system_sequence_prefix": "<|system|>",
|
||||
"system_sequence_suffix": "",
|
||||
|
@ -7,8 +7,7 @@
|
||||
"stop_sequence": "",
|
||||
"wrap": false,
|
||||
"macro": true,
|
||||
"names": true,
|
||||
"names_force_groups": true,
|
||||
"names_behavior": "always",
|
||||
"activation_regex": "",
|
||||
"system_sequence_prefix": "",
|
||||
"system_sequence_suffix": "",
|
||||
|
@ -7,8 +7,7 @@
|
||||
"stop_sequence": "",
|
||||
"wrap": false,
|
||||
"macro": true,
|
||||
"names": false,
|
||||
"names_force_groups": true,
|
||||
"names_behavior": "force",
|
||||
"activation_regex": "",
|
||||
"system_sequence_prefix": "",
|
||||
"system_sequence_suffix": "",
|
||||
|
@ -9,8 +9,7 @@
|
||||
"stop_sequence": "<|end|>",
|
||||
"wrap": false,
|
||||
"macro": true,
|
||||
"names": true,
|
||||
"names_force_groups": true,
|
||||
"names_behavior": "always",
|
||||
"activation_regex": "",
|
||||
"skip_examples": false,
|
||||
"output_suffix": "<|end|>\n",
|
||||
|
@ -7,8 +7,7 @@
|
||||
"stop_sequence": "<|user|>",
|
||||
"wrap": false,
|
||||
"macro": true,
|
||||
"names": true,
|
||||
"names_force_groups": true,
|
||||
"names_behavior": "always",
|
||||
"activation_regex": "",
|
||||
"system_sequence_prefix": "<|system|>",
|
||||
"system_sequence_suffix": "",
|
||||
|
@ -7,8 +7,7 @@
|
||||
"stop_sequence": "",
|
||||
"wrap": true,
|
||||
"macro": true,
|
||||
"names": false,
|
||||
"names_force_groups": false,
|
||||
"names_behavior": "none",
|
||||
"activation_regex": "",
|
||||
"system_sequence_prefix": "",
|
||||
"system_sequence_suffix": "",
|
||||
|
@ -7,8 +7,7 @@
|
||||
"stop_sequence": "",
|
||||
"wrap": false,
|
||||
"macro": true,
|
||||
"names": false,
|
||||
"names_force_groups": true,
|
||||
"names_behavior": "force",
|
||||
"activation_regex": "",
|
||||
"system_sequence_prefix": "SYSTEM: ",
|
||||
"system_sequence_suffix": "",
|
||||
|
@ -7,8 +7,7 @@
|
||||
"stop_sequence": "",
|
||||
"wrap": true,
|
||||
"macro": true,
|
||||
"names": false,
|
||||
"names_force_groups": true,
|
||||
"names_behavior": "force",
|
||||
"activation_regex": "",
|
||||
"system_sequence_prefix": "",
|
||||
"system_sequence_suffix": "",
|
||||
|
@ -7,8 +7,7 @@
|
||||
"stop_sequence": "",
|
||||
"wrap": false,
|
||||
"macro": true,
|
||||
"names": false,
|
||||
"names_force_groups": true,
|
||||
"names_behavior": "force",
|
||||
"activation_regex": "",
|
||||
"system_sequence_prefix": "BEGINNING OF CONVERSATION:",
|
||||
"system_sequence_suffix": "",
|
||||
|
@ -7,8 +7,7 @@
|
||||
"stop_sequence": "",
|
||||
"wrap": true,
|
||||
"macro": true,
|
||||
"names": false,
|
||||
"names_force_groups": true,
|
||||
"names_behavior": "force",
|
||||
"activation_regex": "",
|
||||
"system_sequence_prefix": "",
|
||||
"system_sequence_suffix": "",
|
||||
|
@ -7,8 +7,7 @@
|
||||
"stop_sequence": "",
|
||||
"wrap": true,
|
||||
"macro": true,
|
||||
"names": false,
|
||||
"names_force_groups": true,
|
||||
"names_behavior": "force",
|
||||
"activation_regex": "",
|
||||
"system_sequence_prefix": "",
|
||||
"system_sequence_suffix": "",
|
||||
|
@ -7,8 +7,7 @@
|
||||
"stop_sequence": "",
|
||||
"wrap": true,
|
||||
"macro": true,
|
||||
"names": false,
|
||||
"names_force_groups": false,
|
||||
"names_behavior": "none",
|
||||
"activation_regex": "",
|
||||
"system_sequence_prefix": "",
|
||||
"system_sequence_suffix": "",
|
||||
|
@ -162,8 +162,7 @@
|
||||
"stop_sequence": "",
|
||||
"wrap": true,
|
||||
"macro": true,
|
||||
"names": false,
|
||||
"names_force_groups": true,
|
||||
"names_behavior": "force",
|
||||
"activation_regex": "",
|
||||
"system_sequence_prefix": "",
|
||||
"system_sequence_suffix": "",
|
||||
|
@ -3297,14 +3297,23 @@
|
||||
<input id="instruct_skip_examples" type="checkbox" />
|
||||
<small data-i18n="Skip Example Dialogues Formatting">Skip Example Dialogues Formatting</small>
|
||||
</label>
|
||||
<label for="instruct_names" class="checkbox_label">
|
||||
<input id="instruct_names" type="checkbox" />
|
||||
<small data-i18n="Include Names">Include Names</small>
|
||||
<div id="instruct_names_behavior">
|
||||
<small data-i18n="Include Names">
|
||||
Include Names
|
||||
</small>
|
||||
<label for="instruct_names_behavior_none" class="checkbox_label" title="Do not add name prefixes before the message contents.">
|
||||
<input id="instruct_names_behavior_none" name="names_behavior" value="none" type="radio" />
|
||||
<small data-i18n="Never">Never</small>
|
||||
</label>
|
||||
<label for="instruct_names_force_groups" class="checkbox_label indent20p">
|
||||
<input id="instruct_names_force_groups" type="checkbox" />
|
||||
<small data-i18n="Force for Groups and Personas">Force for Groups and Personas</small>
|
||||
<label for="instruct_names_behavior_force" class="checkbox_label" title="Only add name prefixes to messages from group characters and past personas.">
|
||||
<input id="instruct_names_behavior_force" name="names_behavior" value="force" type="radio" />
|
||||
<small data-i18n="Groups and Past Personas">Groups and Past Personas</small>
|
||||
</label>
|
||||
<label for="instruct_names_behavior_always" class="checkbox_label" title="Always add name prefixes to messages.">
|
||||
<input id="instruct_names_behavior_always" name="names_behavior" value="always" type="radio" />
|
||||
<small data-i18n="Always">Always</small>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div name="tokenizerSettingsBlock">
|
||||
|
@ -14,6 +14,12 @@ import { regexFromString, resetScrollHeight } from './utils.js';
|
||||
*/
|
||||
export let instruct_presets = [];
|
||||
|
||||
export const names_behavior_types = {
|
||||
NONE: 'none',
|
||||
FORCE: 'force',
|
||||
ALWAYS: 'always',
|
||||
};
|
||||
|
||||
const controls = [
|
||||
{ id: 'instruct_enabled', property: 'enabled', isCheckbox: true },
|
||||
{ id: 'instruct_wrap', property: 'wrap', isCheckbox: true },
|
||||
@ -30,8 +36,6 @@ const controls = [
|
||||
{ id: 'instruct_user_alignment_message', property: 'user_alignment_message', isCheckbox: false },
|
||||
{ id: 'instruct_stop_sequence', property: 'stop_sequence', isCheckbox: false },
|
||||
{ id: 'instruct_names', property: 'names', isCheckbox: true },
|
||||
{ id: 'instruct_macro', property: 'macro', isCheckbox: true },
|
||||
{ id: 'instruct_names_force_groups', property: 'names_force_groups', isCheckbox: true },
|
||||
{ id: 'instruct_first_output_sequence', property: 'first_output_sequence', isCheckbox: false },
|
||||
{ id: 'instruct_last_output_sequence', property: 'last_output_sequence', isCheckbox: false },
|
||||
{ id: 'instruct_first_input_sequence', property: 'first_input_sequence', isCheckbox: false },
|
||||
@ -39,6 +43,7 @@ const controls = [
|
||||
{ id: 'instruct_activation_regex', property: 'activation_regex', isCheckbox: false },
|
||||
{ id: 'instruct_bind_to_context', property: 'bind_to_context', isCheckbox: true },
|
||||
{ id: 'instruct_skip_examples', property: 'skip_examples', isCheckbox: true },
|
||||
{ id: 'instruct_names_behavior input[name="names_behavior"]', property: 'names_behavior', isCheckbox: false },
|
||||
{ id: 'instruct_system_same_as_user', property: 'system_same_as_user', isCheckbox: true, trigger: true },
|
||||
];
|
||||
|
||||
@ -54,6 +59,15 @@ function migrateInstructModeSettings(settings) {
|
||||
delete settings.separator_sequence;
|
||||
}
|
||||
|
||||
// names, names_force_groups => names_behavior
|
||||
if (settings.names !== undefined) {
|
||||
settings.names_behavior = settings.names
|
||||
? names_behavior_types.ALWAYS
|
||||
: (settings.names_force_groups ? names_behavior_types.FORCE : names_behavior_types.NONE);
|
||||
delete settings.names;
|
||||
delete settings.names_force_groups;
|
||||
}
|
||||
|
||||
const defaults = {
|
||||
input_suffix: '',
|
||||
system_sequence: '',
|
||||
@ -65,6 +79,7 @@ function migrateInstructModeSettings(settings) {
|
||||
names_force_groups: true,
|
||||
skip_examples: false,
|
||||
system_same_as_user: false,
|
||||
names_behavior: names_behavior_types.FORCE,
|
||||
};
|
||||
|
||||
for (let key in defaults) {
|
||||
@ -94,6 +109,9 @@ export async function loadInstructMode(data) {
|
||||
|
||||
if (control.isCheckbox) {
|
||||
$element.prop('checked', power_user.instruct[control.property]);
|
||||
} else if (control.property === 'names_behavior') {
|
||||
const behavior = power_user.instruct[control.property];
|
||||
$element.filter(`[value="${behavior}"]`).prop('checked', true);
|
||||
} else {
|
||||
$element.val(power_user.instruct[control.property]);
|
||||
}
|
||||
@ -311,9 +329,9 @@ export const force_output_sequence = {
|
||||
* @returns {string} Formatted instruct mode chat message.
|
||||
*/
|
||||
export function formatInstructModeChat(name, mes, isUser, isNarrator, forceAvatar, name1, name2, forceOutputSequence) {
|
||||
let includeNames = isNarrator ? false : power_user.instruct.names;
|
||||
let includeNames = isNarrator ? false : power_user.instruct.names_behavior === names_behavior_types.ALWAYS;
|
||||
|
||||
if (!isNarrator && power_user.instruct.names_force_groups && (selected_group || forceAvatar)) {
|
||||
if (!isNarrator && power_user.instruct.names_behavior === names_behavior_types.FORCE && ((selected_group && name !== name1) || (forceAvatar && name !== name1))) {
|
||||
includeNames = true;
|
||||
}
|
||||
|
||||
@ -416,7 +434,7 @@ export function formatInstructModeExamples(mesExamplesArray, name1, name2) {
|
||||
return mesExamplesArray.map(x => x.replace(/<START>\n/i, blockHeading));
|
||||
}
|
||||
|
||||
const includeNames = power_user.instruct.names || (!!selected_group && power_user.instruct.names_force_groups);
|
||||
const includeNames = power_user.instruct.names_behavior === names_behavior_types.ALWAYS || (!!selected_group && power_user.instruct.names_behavior === names_behavior_types.FORCE);
|
||||
|
||||
let inputPrefix = power_user.instruct.input_sequence || '';
|
||||
let outputPrefix = power_user.instruct.output_sequence || '';
|
||||
@ -460,7 +478,7 @@ export function formatInstructModeExamples(mesExamplesArray, name1, name2) {
|
||||
|
||||
for (const example of blockExamples) {
|
||||
// If force group/persona names is set, we should override the include names for the user placeholder
|
||||
const includeThisName = includeNames || (power_user.instruct.names_force_groups && example.name == 'example_user');
|
||||
const includeThisName = includeNames || (power_user.instruct.names_behavior === names_behavior_types.FORCE && example.name == 'example_user');
|
||||
|
||||
const prefix = example.name == 'example_user' ? inputPrefix : outputPrefix;
|
||||
const suffix = example.name == 'example_user' ? inputSuffix : outputSuffix;
|
||||
@ -490,7 +508,7 @@ export function formatInstructModeExamples(mesExamplesArray, name1, name2) {
|
||||
* @returns {string} Formatted instruct mode last prompt line.
|
||||
*/
|
||||
export function formatInstructModePrompt(name, isImpersonate, promptBias, name1, name2, isQuiet, isQuietToLoud) {
|
||||
const includeNames = name && (power_user.instruct.names || (!!selected_group && power_user.instruct.names_force_groups)) && !(isQuiet && !isQuietToLoud);
|
||||
const includeNames = name && (power_user.instruct.names_behavior === names_behavior_types.ALWAYS || (!!selected_group && power_user.instruct.names_behavior === names_behavior_types.FORCE)) && !(isQuiet && !isQuietToLoud);
|
||||
|
||||
function getSequence() {
|
||||
// User impersonation prompt
|
||||
@ -668,6 +686,9 @@ jQuery(() => {
|
||||
|
||||
if (control.isCheckbox) {
|
||||
$element.prop('checked', power_user.instruct[control.property]).trigger('input');
|
||||
} else if (control.property === 'names_behavior') {
|
||||
const behavior = power_user.instruct[control.property];
|
||||
$element.filter(`[value="${behavior}"]`).prop('checked', true).trigger('input');
|
||||
} else {
|
||||
$element.val(power_user.instruct[control.property]);
|
||||
$element.trigger('input');
|
||||
|
@ -541,7 +541,7 @@ function setOpenAIMessages(chat) {
|
||||
case character_names_behavior.NONE:
|
||||
break;
|
||||
case character_names_behavior.DEFAULT:
|
||||
if (selected_group || (chat[j].force_avatar && chat[j].name !== name1 && chat[j].extra?.type !== system_message_types.NARRATOR)) {
|
||||
if ((selected_group && chat[j].name !== name1) || (chat[j].force_avatar && chat[j].name !== name1 && chat[j].extra?.type !== system_message_types.NARRATOR)) {
|
||||
content = `${chat[j].name}: ${content}`;
|
||||
}
|
||||
break;
|
||||
|
@ -32,6 +32,7 @@ import {
|
||||
import {
|
||||
instruct_presets,
|
||||
loadInstructMode,
|
||||
names_behavior_types,
|
||||
selectInstructPreset,
|
||||
} from './instruct-mode.js';
|
||||
|
||||
@ -224,8 +225,7 @@ let power_user = {
|
||||
stop_sequence: '',
|
||||
wrap: true,
|
||||
macro: true,
|
||||
names: false,
|
||||
names_force_groups: true,
|
||||
names_behavior: names_behavior_types.FORCE,
|
||||
activation_regex: '',
|
||||
bind_to_context: false,
|
||||
user_alignment_message: '',
|
||||
|
Reference in New Issue
Block a user