diff --git a/default/content/index.json b/default/content/index.json index de5316875..c8ebfa3b1 100644 --- a/default/content/index.json +++ b/default/content/index.json @@ -511,10 +511,6 @@ "filename": "presets/context/Minimalist.json", "type": "context" }, - { - "filename": "presets/context/Mistral.json", - "type": "context" - }, { "filename": "presets/context/NovelAI.json", "type": "context" @@ -599,10 +595,6 @@ "filename": "presets/instruct/Metharme.json", "type": "instruct" }, - { - "filename": "presets/instruct/Mistral.json", - "type": "instruct" - }, { "filename": "presets/instruct/OpenOrca-OpenChat.json", "type": "instruct" @@ -686,5 +678,29 @@ { "filename": "presets/instruct/Gemma 2.json", "type": "instruct" + }, + { + "filename": "presets/instruct/Mistral V1.json", + "type": "instruct" + }, + { + "filename": "presets/context/Mistral V1.json", + "type": "context" + }, + { + "filename": "presets/instruct/Mistral V2 & V3.json", + "type": "instruct" + }, + { + "filename": "presets/context/Mistral V2 & V3.json", + "type": "context" + }, + { + "filename": "presets/instruct/Mistral V3-Tekken.json", + "type": "instruct" + }, + { + "filename": "presets/context/Mistral V3-Tekken.json", + "type": "context" } ] diff --git a/default/content/presets/context/Mistral V1.json b/default/content/presets/context/Mistral V1.json new file mode 100644 index 000000000..75bb82cb1 --- /dev/null +++ b/default/content/presets/context/Mistral V1.json @@ -0,0 +1,12 @@ +{ + "story_string": " [INST] {{#if system}}{{system}}\n{{/if}}{{#if wiBefore}}{{wiBefore}}\n{{/if}}{{#if description}}{{description}}\n{{/if}}{{#if personality}}{{personality}}\n{{/if}}{{#if scenario}}{{scenario}}\n{{/if}}{{#if wiAfter}}{{wiAfter}}\n{{/if}}{{#if persona}}{{persona}}\n{{/if}}{{trim}} [/INST] Understood.", + "example_separator": "", + "chat_start": "", + "use_stop_strings": false, + "allow_jailbreak": false, + "always_force_name2": true, + "trim_sentences": false, + "include_newline": false, + "single_line": false, + "name": "Mistral V1" +} diff --git a/default/content/presets/context/Mistral.json b/default/content/presets/context/Mistral V2 & V3.json similarity index 54% rename from default/content/presets/context/Mistral.json rename to default/content/presets/context/Mistral V2 & V3.json index d9551afe8..3102e1112 100644 --- a/default/content/presets/context/Mistral.json +++ b/default/content/presets/context/Mistral V2 & V3.json @@ -1,6 +1,6 @@ { - "story_string": "[INST] {{#if system}}{{system}}\n{{/if}}{{#if wiBefore}}{{wiBefore}}\n{{/if}}{{#if description}}{{description}}\n{{/if}}{{#if personality}}{{char}}'s personality: {{personality}}\n{{/if}}{{#if scenario}}Scenario: {{scenario}}\n{{/if}}{{#if wiAfter}}{{wiAfter}}\n{{/if}}{{#if persona}}{{persona}}\n{{/if}}{{trim}} [/INST]", - "example_separator": "Examples:", + "story_string": "[INST] {{#if system}}{{system}}\n{{/if}}{{#if wiBefore}}{{wiBefore}}\n{{/if}}{{#if description}}{{description}}\n{{/if}}{{#if personality}}{{personality}}\n{{/if}}{{#if scenario}}{{scenario}}\n{{/if}}{{#if wiAfter}}{{wiAfter}}\n{{/if}}{{#if persona}}{{persona}}\n{{/if}}{{trim}}[/INST] Understood.", + "example_separator": "", "chat_start": "", "use_stop_strings": false, "allow_jailbreak": false, @@ -8,5 +8,5 @@ "trim_sentences": false, "include_newline": false, "single_line": false, - "name": "Mistral" + "name": "Mistral V2 & V3" } diff --git a/default/content/presets/context/Mistral V3-Tekken.json b/default/content/presets/context/Mistral V3-Tekken.json new file mode 100644 index 000000000..26e196b5b --- /dev/null +++ b/default/content/presets/context/Mistral V3-Tekken.json @@ -0,0 +1,12 @@ +{ + "story_string": "[INST]{{#if system}}{{system}}\n{{/if}}{{#if wiBefore}}{{wiBefore}}\n{{/if}}{{#if description}}{{description}}\n{{/if}}{{#if personality}}{{personality}}\n{{/if}}{{#if scenario}}{{scenario}}\n{{/if}}{{#if wiAfter}}{{wiAfter}}\n{{/if}}{{#if persona}}{{persona}}\n{{/if}}{{trim}}[/INST]Understood.", + "example_separator": "", + "chat_start": "", + "use_stop_strings": false, + "allow_jailbreak": false, + "always_force_name2": true, + "trim_sentences": false, + "include_newline": false, + "single_line": false, + "name": "Mistral V3-Tekken" +} diff --git a/default/content/presets/instruct/Mistral V1.json b/default/content/presets/instruct/Mistral V1.json new file mode 100644 index 000000000..5a680a6f3 --- /dev/null +++ b/default/content/presets/instruct/Mistral V1.json @@ -0,0 +1,23 @@ +{ + "system_prompt": "Write {{char}}'s next reply in this fictional roleplay with {{user}}.", + "input_sequence": " [INST] ", + "output_sequence": " [/INST] ", + "last_output_sequence": " [/INST]", + "system_sequence": "", + "stop_sequence": "", + "wrap": false, + "macro": true, + "names_behavior": "always", + "activation_regex": "", + "system_sequence_prefix": "", + "system_sequence_suffix": "", + "first_output_sequence": "", + "skip_examples": false, + "output_suffix": "", + "input_suffix": "", + "system_suffix": "", + "user_alignment_message": "Let's get started. Please respond based on the information and instructions provided above.", + "system_same_as_user": true, + "last_system_sequence": "", + "name": "Mistral V1" +} diff --git a/default/content/presets/instruct/Mistral V2 & V3.json b/default/content/presets/instruct/Mistral V2 & V3.json new file mode 100644 index 000000000..6c7819689 --- /dev/null +++ b/default/content/presets/instruct/Mistral V2 & V3.json @@ -0,0 +1,23 @@ +{ + "system_prompt": "Write {{char}}'s next reply in this fictional roleplay with {{user}}.", + "input_sequence": "[INST] ", + "output_sequence": "[/INST] ", + "last_output_sequence": "[/INST]", + "system_sequence": "", + "stop_sequence": "", + "wrap": false, + "macro": true, + "names_behavior": "always", + "activation_regex": "", + "system_sequence_prefix": "", + "system_sequence_suffix": "", + "first_output_sequence": "", + "skip_examples": false, + "output_suffix": "", + "input_suffix": "", + "system_suffix": "", + "user_alignment_message": "Let's get started. Please respond based on the information and instructions provided above.", + "system_same_as_user": true, + "last_system_sequence": "", + "name": "Mistral V2 & V3" +} diff --git a/default/content/presets/instruct/Mistral.json b/default/content/presets/instruct/Mistral V3-Tekken.json similarity index 80% rename from default/content/presets/instruct/Mistral.json rename to default/content/presets/instruct/Mistral V3-Tekken.json index 2aeebbe44..a82a53705 100644 --- a/default/content/presets/instruct/Mistral.json +++ b/default/content/presets/instruct/Mistral V3-Tekken.json @@ -1,7 +1,7 @@ { "system_prompt": "Write {{char}}'s next reply in this fictional roleplay with {{user}}.", - "input_sequence": "[INST] ", - "output_sequence": "", + "input_sequence": "[INST]", + "output_sequence": "[/INST]", "last_output_sequence": "", "system_sequence": "", "stop_sequence": "", @@ -13,11 +13,11 @@ "system_sequence_suffix": "", "first_output_sequence": "", "skip_examples": false, - "output_suffix": "\n", - "input_suffix": " [/INST]\n", + "output_suffix": "", + "input_suffix": "", "system_suffix": "", "user_alignment_message": "Let's get started. Please respond based on the information and instructions provided above.", "system_same_as_user": true, "last_system_sequence": "", - "name": "Mistral" + "name": "Mistral V3-Tekken" } diff --git a/public/scripts/instruct-mode.js b/public/scripts/instruct-mode.js index 193a9cbc3..74cf26962 100644 --- a/public/scripts/instruct-mode.js +++ b/public/scripts/instruct-mode.js @@ -532,6 +532,19 @@ export function formatInstructModePrompt(name, isImpersonate, promptBias, name1, } let sequence = getSequence() || ''; + let nameFiller = ''; + + // A hack for Mistral's formatting that has a normal output sequence ending with a space + if ( + includeNames && + power_user.instruct.last_output_sequence && + power_user.instruct.output_sequence && + sequence === power_user.instruct.last_output_sequence && + /\s$/.test(power_user.instruct.output_sequence) && + !/\s$/.test(power_user.instruct.last_output_sequence) + ) { + nameFiller = power_user.instruct.output_sequence.slice(-1); + } if (power_user.instruct.macro) { sequence = substituteParams(sequence, name1, name2); @@ -539,7 +552,7 @@ export function formatInstructModePrompt(name, isImpersonate, promptBias, name1, } const separator = power_user.instruct.wrap ? '\n' : ''; - let text = includeNames ? (separator + sequence + separator + `${name}:`) : (separator + sequence); + let text = includeNames ? (separator + sequence + separator + nameFiller + `${name}:`) : (separator + sequence); // Quiet prompt already has a newline at the end if (isQuiet && separator) {