diff --git a/default/content/presets/instruct/Adventure.json b/default/content/presets/instruct/Adventure.json index a4093dff7..ad9e86da8 100644 --- a/default/content/presets/instruct/Adventure.json +++ b/default/content/presets/instruct/Adventure.json @@ -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": "", diff --git a/default/content/presets/instruct/Alpaca-Roleplay.json b/default/content/presets/instruct/Alpaca-Roleplay.json index b5aec1c92..21891c340 100644 --- a/default/content/presets/instruct/Alpaca-Roleplay.json +++ b/default/content/presets/instruct/Alpaca-Roleplay.json @@ -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": "", diff --git a/default/content/presets/instruct/Alpaca-Single-Turn.json b/default/content/presets/instruct/Alpaca-Single-Turn.json index 9baca108c..3ed20775d 100644 --- a/default/content/presets/instruct/Alpaca-Single-Turn.json +++ b/default/content/presets/instruct/Alpaca-Single-Turn.json @@ -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": "", diff --git a/default/content/presets/instruct/Alpaca.json b/default/content/presets/instruct/Alpaca.json index 28b2065fb..830c87972 100644 --- a/default/content/presets/instruct/Alpaca.json +++ b/default/content/presets/instruct/Alpaca.json @@ -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": "", diff --git a/default/content/presets/instruct/ChatML-Names.json b/default/content/presets/instruct/ChatML-Names.json index d79682005..8237b3d31 100644 --- a/default/content/presets/instruct/ChatML-Names.json +++ b/default/content/presets/instruct/ChatML-Names.json @@ -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": "", diff --git a/default/content/presets/instruct/ChatML.json b/default/content/presets/instruct/ChatML.json index 513a72820..dd32badd3 100644 --- a/default/content/presets/instruct/ChatML.json +++ b/default/content/presets/instruct/ChatML.json @@ -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": "", diff --git a/default/content/presets/instruct/Command R.json b/default/content/presets/instruct/Command R.json index 1035ddb75..a70972d86 100644 --- a/default/content/presets/instruct/Command R.json +++ b/default/content/presets/instruct/Command R.json @@ -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|>", @@ -21,4 +20,4 @@ "last_system_sequence": "", "system_same_as_user": false, "name": "Command R" -} \ No newline at end of file +} diff --git a/default/content/presets/instruct/DreamGen Role-Play V1 ChatML.json b/default/content/presets/instruct/DreamGen Role-Play V1 ChatML.json index 0bca83455..08e4258d8 100644 --- a/default/content/presets/instruct/DreamGen Role-Play V1 ChatML.json +++ b/default/content/presets/instruct/DreamGen Role-Play V1 ChatML.json @@ -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": "", diff --git a/default/content/presets/instruct/DreamGen Role-Play V1 Llama3.json b/default/content/presets/instruct/DreamGen Role-Play V1 Llama3.json index ca1e285f3..08a659beb 100644 --- a/default/content/presets/instruct/DreamGen Role-Play V1 Llama3.json +++ b/default/content/presets/instruct/DreamGen Role-Play V1 Llama3.json @@ -10,9 +10,8 @@ "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" -} \ No newline at end of file +} diff --git a/default/content/presets/instruct/Gemma 2.json b/default/content/presets/instruct/Gemma 2.json index a399b8e89..cb777122e 100644 --- a/default/content/presets/instruct/Gemma 2.json +++ b/default/content/presets/instruct/Gemma 2.json @@ -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": "", diff --git a/default/content/presets/instruct/Koala.json b/default/content/presets/instruct/Koala.json index f5db8ff48..798bcafb4 100644 --- a/default/content/presets/instruct/Koala.json +++ b/default/content/presets/instruct/Koala.json @@ -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": "", diff --git a/default/content/presets/instruct/Libra-32B.json b/default/content/presets/instruct/Libra-32B.json index c665eb364..cde79d642 100644 --- a/default/content/presets/instruct/Libra-32B.json +++ b/default/content/presets/instruct/Libra-32B.json @@ -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": "", diff --git a/default/content/presets/instruct/Lightning 1.1.json b/default/content/presets/instruct/Lightning 1.1.json index 9f9bd7ccf..a4cc86ba4 100644 --- a/default/content/presets/instruct/Lightning 1.1.json +++ b/default/content/presets/instruct/Lightning 1.1.json @@ -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": "", diff --git a/default/content/presets/instruct/Llama 2 Chat.json b/default/content/presets/instruct/Llama 2 Chat.json index dc507b777..0a03a5444 100644 --- a/default/content/presets/instruct/Llama 2 Chat.json +++ b/default/content/presets/instruct/Llama 2 Chat.json @@ -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": "", diff --git a/default/content/presets/instruct/Llama 3 Instruct.json b/default/content/presets/instruct/Llama 3 Instruct.json index 0a84b852d..87e6e049e 100644 --- a/default/content/presets/instruct/Llama 3 Instruct.json +++ b/default/content/presets/instruct/Llama 3 Instruct.json @@ -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": "", diff --git a/default/content/presets/instruct/Llama-3-Instruct-Names.json b/default/content/presets/instruct/Llama-3-Instruct-Names.json index 0df661835..e44bc117b 100644 --- a/default/content/presets/instruct/Llama-3-Instruct-Names.json +++ b/default/content/presets/instruct/Llama-3-Instruct-Names.json @@ -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": "", diff --git a/default/content/presets/instruct/Metharme.json b/default/content/presets/instruct/Metharme.json index 195fe5260..c49f908aa 100644 --- a/default/content/presets/instruct/Metharme.json +++ b/default/content/presets/instruct/Metharme.json @@ -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": "", diff --git a/default/content/presets/instruct/Mistral.json b/default/content/presets/instruct/Mistral.json index bd3a9ff3c..2aeebbe44 100644 --- a/default/content/presets/instruct/Mistral.json +++ b/default/content/presets/instruct/Mistral.json @@ -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": "", diff --git a/default/content/presets/instruct/OpenOrca-OpenChat.json b/default/content/presets/instruct/OpenOrca-OpenChat.json index 04d526d4d..4ee8eae2f 100644 --- a/default/content/presets/instruct/OpenOrca-OpenChat.json +++ b/default/content/presets/instruct/OpenOrca-OpenChat.json @@ -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": "", diff --git a/default/content/presets/instruct/Phi.json b/default/content/presets/instruct/Phi.json index 79c320cab..6b5ade784 100644 --- a/default/content/presets/instruct/Phi.json +++ b/default/content/presets/instruct/Phi.json @@ -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", @@ -21,4 +20,4 @@ "last_system_sequence": "", "system_same_as_user": false, "name": "Phi" -} \ No newline at end of file +} diff --git a/default/content/presets/instruct/Pygmalion.json b/default/content/presets/instruct/Pygmalion.json index cb5b60d8a..d47aa4656 100644 --- a/default/content/presets/instruct/Pygmalion.json +++ b/default/content/presets/instruct/Pygmalion.json @@ -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": "", diff --git a/default/content/presets/instruct/Story.json b/default/content/presets/instruct/Story.json index 5c6b00cf0..1f6694946 100644 --- a/default/content/presets/instruct/Story.json +++ b/default/content/presets/instruct/Story.json @@ -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": "", diff --git a/default/content/presets/instruct/Synthia.json b/default/content/presets/instruct/Synthia.json index 21fa535c0..216ebbd70 100644 --- a/default/content/presets/instruct/Synthia.json +++ b/default/content/presets/instruct/Synthia.json @@ -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": "", diff --git a/default/content/presets/instruct/Vicuna 1.0.json b/default/content/presets/instruct/Vicuna 1.0.json index d96bf4cb2..b93f91a24 100644 --- a/default/content/presets/instruct/Vicuna 1.0.json +++ b/default/content/presets/instruct/Vicuna 1.0.json @@ -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": "", diff --git a/default/content/presets/instruct/Vicuna 1.1.json b/default/content/presets/instruct/Vicuna 1.1.json index a42e4fbfc..63a9340de 100644 --- a/default/content/presets/instruct/Vicuna 1.1.json +++ b/default/content/presets/instruct/Vicuna 1.1.json @@ -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": "", diff --git a/default/content/presets/instruct/WizardLM-13B.json b/default/content/presets/instruct/WizardLM-13B.json index b15fea56f..7f94b7dc2 100644 --- a/default/content/presets/instruct/WizardLM-13B.json +++ b/default/content/presets/instruct/WizardLM-13B.json @@ -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": "", diff --git a/default/content/presets/instruct/WizardLM.json b/default/content/presets/instruct/WizardLM.json index 18e808da4..2488310e3 100644 --- a/default/content/presets/instruct/WizardLM.json +++ b/default/content/presets/instruct/WizardLM.json @@ -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": "", diff --git a/default/content/presets/instruct/simple-proxy-for-tavern.json b/default/content/presets/instruct/simple-proxy-for-tavern.json index 986da1697..f184c8dfe 100644 --- a/default/content/presets/instruct/simple-proxy-for-tavern.json +++ b/default/content/presets/instruct/simple-proxy-for-tavern.json @@ -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": "", diff --git a/default/content/settings.json b/default/content/settings.json index f5c81f325..ebe51a22f 100644 --- a/default/content/settings.json +++ b/default/content/settings.json @@ -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": "", diff --git a/public/index.html b/public/index.html index 9d2b136e2..45053b2ce 100644 --- a/public/index.html +++ b/public/index.html @@ -3297,14 +3297,23 @@ Skip Example Dialogues Formatting - - +
+ + Include Names + + + + +
diff --git a/public/scripts/instruct-mode.js b/public/scripts/instruct-mode.js index d22c82ee2..193a9cbc3 100644 --- a/public/scripts/instruct-mode.js +++ b/public/scripts/instruct-mode.js @@ -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(/\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'); diff --git a/public/scripts/openai.js b/public/scripts/openai.js index 1c558e9ae..fd2d76559 100644 --- a/public/scripts/openai.js +++ b/public/scripts/openai.js @@ -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; diff --git a/public/scripts/power-user.js b/public/scripts/power-user.js index 4239b4fc9..ca0bfe4f9 100644 --- a/public/scripts/power-user.js +++ b/public/scripts/power-user.js @@ -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: '',