diff --git a/public/script.js b/public/script.js index 93a3f1d2f..3c5506212 100644 --- a/public/script.js +++ b/public/script.js @@ -66,6 +66,7 @@ import { pygmalion_options, tokenizers, formatInstructModeChat, + formatInstructModeExamples, formatInstructModePrompt, persona_description_positions, loadMovingUIState, @@ -2542,6 +2543,9 @@ async function Generate(type, { automatic_trigger, force_name2, resolve, reject, if (mesExamples.replace(//gi, '').trim().length === 0) { mesExamples = ''; } + if (mesExamples && isInstruct) { + mesExamples = formatInstructModeExamples(mesExamples, name1, name2) + } const exampleSeparator = power_user.context.example_separator ? `${power_user.context.example_separator}\n` : ''; const blockHeading = main_api === 'openai' ? '\n' : exampleSeparator; diff --git a/public/scripts/power-user.js b/public/scripts/power-user.js index 129609997..3620f7d93 100644 --- a/public/scripts/power-user.js +++ b/public/scripts/power-user.js @@ -1088,6 +1088,26 @@ export function formatInstructModeChat(name, mes, isUser, isNarrator, forceAvata return text; } +export function formatInstructModeExamples(mesExamples, name1, name2) { + const includeNames = power_user.instruct.names || (!!selected_group && power_user.instruct.names_force_groups); + + let inputSequence = power_user.instruct.input_sequence; + let outputSequence = power_user.instruct.output_sequence; + + if (power_user.instruct.macro) { + inputSequence = substituteParams(inputSequence, name1, name2); + outputSequence = substituteParams(outputSequence, name1, name2); + } + + const separator = power_user.instruct.wrap ? '\n' : ''; + const separatorSequence = power_user.instruct.separator_sequence ? power_user.instruct.separator_sequence : separator; + + mesExamples = mesExamples.replace(new RegExp(`\n${name1}: `, "gm"), separatorSequence + inputSequence + separator + (includeNames ? `${name1}: ` : '')); + mesExamples = mesExamples.replace(new RegExp(`\n${name2}: `, "gm"), separator + outputSequence + separator + (includeNames ? `${name2}: ` : '')); + + return mesExamples; +} + export function formatInstructModePrompt(name, isImpersonate, promptBias, name1, name2) { const includeNames = power_user.instruct.names || (!!selected_group && power_user.instruct.names_force_groups); const getOutputSequence = () => power_user.instruct.last_output_sequence || power_user.instruct.output_sequence;