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:
Cohee
2024-09-16 00:46:03 +03:00
committed by GitHub
parent 08f2b73ab8
commit ca4d3c5ffe
33 changed files with 80 additions and 79 deletions

View File

@ -7,8 +7,7 @@
"stop_sequence": "", "stop_sequence": "",
"wrap": true, "wrap": true,
"macro": true, "macro": true,
"names": false, "names_behavior": "none",
"names_force_groups": false,
"activation_regex": "", "activation_regex": "",
"system_sequence_prefix": "", "system_sequence_prefix": "",
"system_sequence_suffix": "", "system_sequence_suffix": "",

View File

@ -7,8 +7,7 @@
"stop_sequence": "", "stop_sequence": "",
"wrap": true, "wrap": true,
"macro": true, "macro": true,
"names": true, "names_behavior": "always",
"names_force_groups": true,
"activation_regex": "", "activation_regex": "",
"system_sequence_prefix": "", "system_sequence_prefix": "",
"system_sequence_suffix": "", "system_sequence_suffix": "",

View File

@ -7,8 +7,7 @@
"stop_sequence": "", "stop_sequence": "",
"wrap": true, "wrap": true,
"macro": true, "macro": true,
"names": false, "names_behavior": "force",
"names_force_groups": true,
"activation_regex": "", "activation_regex": "",
"system_sequence_prefix": "", "system_sequence_prefix": "",
"system_sequence_suffix": "", "system_sequence_suffix": "",

View File

@ -7,8 +7,7 @@
"stop_sequence": "", "stop_sequence": "",
"wrap": true, "wrap": true,
"macro": true, "macro": true,
"names": false, "names_behavior": "force",
"names_force_groups": true,
"activation_regex": "", "activation_regex": "",
"system_sequence_prefix": "", "system_sequence_prefix": "",
"system_sequence_suffix": "", "system_sequence_suffix": "",

View File

@ -7,8 +7,7 @@
"stop_sequence": "<|im_end|>", "stop_sequence": "<|im_end|>",
"wrap": true, "wrap": true,
"macro": true, "macro": true,
"names": false, "names_behavior": "none",
"names_force_groups": false,
"activation_regex": "", "activation_regex": "",
"system_sequence_prefix": "", "system_sequence_prefix": "",
"system_sequence_suffix": "", "system_sequence_suffix": "",

View File

@ -7,8 +7,7 @@
"stop_sequence": "<|im_end|>", "stop_sequence": "<|im_end|>",
"wrap": true, "wrap": true,
"macro": true, "macro": true,
"names": true, "names_behavior": "always",
"names_force_groups": true,
"activation_regex": "", "activation_regex": "",
"system_sequence_prefix": "", "system_sequence_prefix": "",
"system_sequence_suffix": "", "system_sequence_suffix": "",

View File

@ -9,8 +9,7 @@
"stop_sequence": "<|END_OF_TURN_TOKEN|>", "stop_sequence": "<|END_OF_TURN_TOKEN|>",
"wrap": false, "wrap": false,
"macro": true, "macro": true,
"names": true, "names_behavior": "always",
"names_force_groups": true,
"activation_regex": "", "activation_regex": "",
"skip_examples": false, "skip_examples": false,
"output_suffix": "<|END_OF_TURN_TOKEN|>", "output_suffix": "<|END_OF_TURN_TOKEN|>",
@ -21,4 +20,4 @@
"last_system_sequence": "", "last_system_sequence": "",
"system_same_as_user": false, "system_same_as_user": false,
"name": "Command R" "name": "Command R"
} }

View File

@ -7,8 +7,7 @@
"stop_sequence": "\n<|im_start|>", "stop_sequence": "\n<|im_start|>",
"wrap": false, "wrap": false,
"macro": true, "macro": true,
"names": false, "names_behavior": "none",
"names_force_groups": false,
"activation_regex": "", "activation_regex": "",
"system_sequence_prefix": "", "system_sequence_prefix": "",
"system_sequence_suffix": "", "system_sequence_suffix": "",

View File

@ -10,9 +10,8 @@
"separator_sequence": "", "separator_sequence": "",
"wrap": false, "wrap": false,
"macro": true, "macro": true,
"names": false, "names_behavior": "none",
"names_force_groups": false,
"activation_regex": "", "activation_regex": "",
"skip_examples": false, "skip_examples": false,
"name": "DreamGen Role-Play V1 Llama3" "name": "DreamGen Role-Play V1 Llama3"
} }

View File

@ -7,8 +7,7 @@
"stop_sequence": "<end_of_turn>", "stop_sequence": "<end_of_turn>",
"wrap": true, "wrap": true,
"macro": true, "macro": true,
"names": false, "names_behavior": "none",
"names_force_groups": false,
"activation_regex": "", "activation_regex": "",
"system_sequence_prefix": "", "system_sequence_prefix": "",
"system_sequence_suffix": "", "system_sequence_suffix": "",

View File

@ -7,8 +7,7 @@
"stop_sequence": "", "stop_sequence": "",
"wrap": false, "wrap": false,
"macro": true, "macro": true,
"names": false, "names_behavior": "force",
"names_force_groups": true,
"activation_regex": "", "activation_regex": "",
"system_sequence_prefix": "BEGINNING OF CONVERSATION: ", "system_sequence_prefix": "BEGINNING OF CONVERSATION: ",
"system_sequence_suffix": "", "system_sequence_suffix": "",

View File

@ -7,8 +7,7 @@
"stop_sequence": "", "stop_sequence": "",
"wrap": true, "wrap": true,
"macro": true, "macro": true,
"names": true, "names_behavior": "always",
"names_force_groups": true,
"activation_regex": "", "activation_regex": "",
"system_sequence_prefix": "", "system_sequence_prefix": "",
"system_sequence_suffix": "", "system_sequence_suffix": "",

View File

@ -7,8 +7,7 @@
"stop_sequence": "", "stop_sequence": "",
"wrap": true, "wrap": true,
"macro": true, "macro": true,
"names": false, "names_behavior": "force",
"names_force_groups": true,
"activation_regex": "", "activation_regex": "",
"system_sequence_prefix": "", "system_sequence_prefix": "",
"system_sequence_suffix": "", "system_sequence_suffix": "",

View File

@ -7,8 +7,7 @@
"stop_sequence": "", "stop_sequence": "",
"wrap": false, "wrap": false,
"macro": true, "macro": true,
"names": false, "names_behavior": "force",
"names_force_groups": true,
"activation_regex": "", "activation_regex": "",
"system_sequence_prefix": "", "system_sequence_prefix": "",
"system_sequence_suffix": "", "system_sequence_suffix": "",

View File

@ -7,8 +7,7 @@
"stop_sequence": "<|eot_id|>", "stop_sequence": "<|eot_id|>",
"wrap": false, "wrap": false,
"macro": true, "macro": true,
"names": true, "names_behavior": "always",
"names_force_groups": true,
"activation_regex": "", "activation_regex": "",
"system_sequence_prefix": "", "system_sequence_prefix": "",
"system_sequence_suffix": "", "system_sequence_suffix": "",

View File

@ -7,8 +7,7 @@
"stop_sequence": "<|eot_id|>", "stop_sequence": "<|eot_id|>",
"wrap": false, "wrap": false,
"macro": true, "macro": true,
"names": false, "names_behavior": "none",
"names_force_groups": false,
"activation_regex": "", "activation_regex": "",
"system_sequence_prefix": "", "system_sequence_prefix": "",
"system_sequence_suffix": "", "system_sequence_suffix": "",

View File

@ -7,8 +7,7 @@
"stop_sequence": "</s>", "stop_sequence": "</s>",
"wrap": false, "wrap": false,
"macro": true, "macro": true,
"names": false, "names_behavior": "force",
"names_force_groups": true,
"activation_regex": "", "activation_regex": "",
"system_sequence_prefix": "<|system|>", "system_sequence_prefix": "<|system|>",
"system_sequence_suffix": "", "system_sequence_suffix": "",

View File

@ -7,8 +7,7 @@
"stop_sequence": "", "stop_sequence": "",
"wrap": false, "wrap": false,
"macro": true, "macro": true,
"names": true, "names_behavior": "always",
"names_force_groups": true,
"activation_regex": "", "activation_regex": "",
"system_sequence_prefix": "", "system_sequence_prefix": "",
"system_sequence_suffix": "", "system_sequence_suffix": "",

View File

@ -7,8 +7,7 @@
"stop_sequence": "", "stop_sequence": "",
"wrap": false, "wrap": false,
"macro": true, "macro": true,
"names": false, "names_behavior": "force",
"names_force_groups": true,
"activation_regex": "", "activation_regex": "",
"system_sequence_prefix": "", "system_sequence_prefix": "",
"system_sequence_suffix": "", "system_sequence_suffix": "",

View File

@ -9,8 +9,7 @@
"stop_sequence": "<|end|>", "stop_sequence": "<|end|>",
"wrap": false, "wrap": false,
"macro": true, "macro": true,
"names": true, "names_behavior": "always",
"names_force_groups": true,
"activation_regex": "", "activation_regex": "",
"skip_examples": false, "skip_examples": false,
"output_suffix": "<|end|>\n", "output_suffix": "<|end|>\n",
@ -21,4 +20,4 @@
"last_system_sequence": "", "last_system_sequence": "",
"system_same_as_user": false, "system_same_as_user": false,
"name": "Phi" "name": "Phi"
} }

View File

@ -7,8 +7,7 @@
"stop_sequence": "<|user|>", "stop_sequence": "<|user|>",
"wrap": false, "wrap": false,
"macro": true, "macro": true,
"names": true, "names_behavior": "always",
"names_force_groups": true,
"activation_regex": "", "activation_regex": "",
"system_sequence_prefix": "<|system|>", "system_sequence_prefix": "<|system|>",
"system_sequence_suffix": "", "system_sequence_suffix": "",

View File

@ -7,8 +7,7 @@
"stop_sequence": "", "stop_sequence": "",
"wrap": true, "wrap": true,
"macro": true, "macro": true,
"names": false, "names_behavior": "none",
"names_force_groups": false,
"activation_regex": "", "activation_regex": "",
"system_sequence_prefix": "", "system_sequence_prefix": "",
"system_sequence_suffix": "", "system_sequence_suffix": "",

View File

@ -7,8 +7,7 @@
"stop_sequence": "", "stop_sequence": "",
"wrap": false, "wrap": false,
"macro": true, "macro": true,
"names": false, "names_behavior": "force",
"names_force_groups": true,
"activation_regex": "", "activation_regex": "",
"system_sequence_prefix": "SYSTEM: ", "system_sequence_prefix": "SYSTEM: ",
"system_sequence_suffix": "", "system_sequence_suffix": "",

View File

@ -7,8 +7,7 @@
"stop_sequence": "", "stop_sequence": "",
"wrap": true, "wrap": true,
"macro": true, "macro": true,
"names": false, "names_behavior": "force",
"names_force_groups": true,
"activation_regex": "", "activation_regex": "",
"system_sequence_prefix": "", "system_sequence_prefix": "",
"system_sequence_suffix": "", "system_sequence_suffix": "",

View File

@ -7,8 +7,7 @@
"stop_sequence": "", "stop_sequence": "",
"wrap": false, "wrap": false,
"macro": true, "macro": true,
"names": false, "names_behavior": "force",
"names_force_groups": true,
"activation_regex": "", "activation_regex": "",
"system_sequence_prefix": "BEGINNING OF CONVERSATION:", "system_sequence_prefix": "BEGINNING OF CONVERSATION:",
"system_sequence_suffix": "", "system_sequence_suffix": "",

View File

@ -7,8 +7,7 @@
"stop_sequence": "", "stop_sequence": "",
"wrap": true, "wrap": true,
"macro": true, "macro": true,
"names": false, "names_behavior": "force",
"names_force_groups": true,
"activation_regex": "", "activation_regex": "",
"system_sequence_prefix": "", "system_sequence_prefix": "",
"system_sequence_suffix": "", "system_sequence_suffix": "",

View File

@ -7,8 +7,7 @@
"stop_sequence": "", "stop_sequence": "",
"wrap": true, "wrap": true,
"macro": true, "macro": true,
"names": false, "names_behavior": "force",
"names_force_groups": true,
"activation_regex": "", "activation_regex": "",
"system_sequence_prefix": "", "system_sequence_prefix": "",
"system_sequence_suffix": "", "system_sequence_suffix": "",

View File

@ -7,8 +7,7 @@
"stop_sequence": "", "stop_sequence": "",
"wrap": true, "wrap": true,
"macro": true, "macro": true,
"names": false, "names_behavior": "none",
"names_force_groups": false,
"activation_regex": "", "activation_regex": "",
"system_sequence_prefix": "", "system_sequence_prefix": "",
"system_sequence_suffix": "", "system_sequence_suffix": "",

View File

@ -162,8 +162,7 @@
"stop_sequence": "", "stop_sequence": "",
"wrap": true, "wrap": true,
"macro": true, "macro": true,
"names": false, "names_behavior": "force",
"names_force_groups": true,
"activation_regex": "", "activation_regex": "",
"system_sequence_prefix": "", "system_sequence_prefix": "",
"system_sequence_suffix": "", "system_sequence_suffix": "",

View File

@ -3297,14 +3297,23 @@
<input id="instruct_skip_examples" type="checkbox" /> <input id="instruct_skip_examples" type="checkbox" />
<small data-i18n="Skip Example Dialogues Formatting">Skip Example Dialogues Formatting</small> <small data-i18n="Skip Example Dialogues Formatting">Skip Example Dialogues Formatting</small>
</label> </label>
<label for="instruct_names" class="checkbox_label"> <div id="instruct_names_behavior">
<input id="instruct_names" type="checkbox" /> <small data-i18n="Include Names">
<small data-i18n="Include Names">Include Names</small> Include Names
</label> </small>
<label for="instruct_names_force_groups" class="checkbox_label indent20p"> <label for="instruct_names_behavior_none" class="checkbox_label" title="Do not add name prefixes before the message contents.">
<input id="instruct_names_force_groups" type="checkbox" /> <input id="instruct_names_behavior_none" name="names_behavior" value="none" type="radio" />
<small data-i18n="Force for Groups and Personas">Force for Groups and Personas</small> <small data-i18n="Never">Never</small>
</label> </label>
<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> </div>
<div name="tokenizerSettingsBlock"> <div name="tokenizerSettingsBlock">

View File

@ -14,6 +14,12 @@ import { regexFromString, resetScrollHeight } from './utils.js';
*/ */
export let instruct_presets = []; export let instruct_presets = [];
export const names_behavior_types = {
NONE: 'none',
FORCE: 'force',
ALWAYS: 'always',
};
const controls = [ const controls = [
{ id: 'instruct_enabled', property: 'enabled', isCheckbox: true }, { id: 'instruct_enabled', property: 'enabled', isCheckbox: true },
{ id: 'instruct_wrap', property: 'wrap', 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_user_alignment_message', property: 'user_alignment_message', isCheckbox: false },
{ id: 'instruct_stop_sequence', property: 'stop_sequence', isCheckbox: false }, { id: 'instruct_stop_sequence', property: 'stop_sequence', isCheckbox: false },
{ id: 'instruct_names', property: 'names', isCheckbox: true }, { 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_first_output_sequence', property: 'first_output_sequence', isCheckbox: false },
{ id: 'instruct_last_output_sequence', property: 'last_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 }, { 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_activation_regex', property: 'activation_regex', isCheckbox: false },
{ id: 'instruct_bind_to_context', property: 'bind_to_context', isCheckbox: true }, { id: 'instruct_bind_to_context', property: 'bind_to_context', isCheckbox: true },
{ id: 'instruct_skip_examples', property: 'skip_examples', 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 }, { 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; 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 = { const defaults = {
input_suffix: '', input_suffix: '',
system_sequence: '', system_sequence: '',
@ -65,6 +79,7 @@ function migrateInstructModeSettings(settings) {
names_force_groups: true, names_force_groups: true,
skip_examples: false, skip_examples: false,
system_same_as_user: false, system_same_as_user: false,
names_behavior: names_behavior_types.FORCE,
}; };
for (let key in defaults) { for (let key in defaults) {
@ -94,6 +109,9 @@ export async function loadInstructMode(data) {
if (control.isCheckbox) { if (control.isCheckbox) {
$element.prop('checked', power_user.instruct[control.property]); $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 { } else {
$element.val(power_user.instruct[control.property]); $element.val(power_user.instruct[control.property]);
} }
@ -311,9 +329,9 @@ export const force_output_sequence = {
* @returns {string} Formatted instruct mode chat message. * @returns {string} Formatted instruct mode chat message.
*/ */
export function formatInstructModeChat(name, mes, isUser, isNarrator, forceAvatar, name1, name2, forceOutputSequence) { 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; includeNames = true;
} }
@ -416,7 +434,7 @@ export function formatInstructModeExamples(mesExamplesArray, name1, name2) {
return mesExamplesArray.map(x => x.replace(/<START>\n/i, blockHeading)); 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 inputPrefix = power_user.instruct.input_sequence || '';
let outputPrefix = power_user.instruct.output_sequence || ''; let outputPrefix = power_user.instruct.output_sequence || '';
@ -460,7 +478,7 @@ export function formatInstructModeExamples(mesExamplesArray, name1, name2) {
for (const example of blockExamples) { for (const example of blockExamples) {
// If force group/persona names is set, we should override the include names for the user placeholder // 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 prefix = example.name == 'example_user' ? inputPrefix : outputPrefix;
const suffix = example.name == 'example_user' ? inputSuffix : outputSuffix; 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. * @returns {string} Formatted instruct mode last prompt line.
*/ */
export function formatInstructModePrompt(name, isImpersonate, promptBias, name1, name2, isQuiet, isQuietToLoud) { 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() { function getSequence() {
// User impersonation prompt // User impersonation prompt
@ -668,6 +686,9 @@ jQuery(() => {
if (control.isCheckbox) { if (control.isCheckbox) {
$element.prop('checked', power_user.instruct[control.property]).trigger('input'); $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 { } else {
$element.val(power_user.instruct[control.property]); $element.val(power_user.instruct[control.property]);
$element.trigger('input'); $element.trigger('input');

View File

@ -541,7 +541,7 @@ function setOpenAIMessages(chat) {
case character_names_behavior.NONE: case character_names_behavior.NONE:
break; break;
case character_names_behavior.DEFAULT: 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}`; content = `${chat[j].name}: ${content}`;
} }
break; break;

View File

@ -32,6 +32,7 @@ import {
import { import {
instruct_presets, instruct_presets,
loadInstructMode, loadInstructMode,
names_behavior_types,
selectInstructPreset, selectInstructPreset,
} from './instruct-mode.js'; } from './instruct-mode.js';
@ -224,8 +225,7 @@ let power_user = {
stop_sequence: '', stop_sequence: '',
wrap: true, wrap: true,
macro: true, macro: true,
names: false, names_behavior: names_behavior_types.FORCE,
names_force_groups: true,
activation_regex: '', activation_regex: '',
bind_to_context: false, bind_to_context: false,
user_alignment_message: '', user_alignment_message: '',