From 1ce848c1c322ee6459fe11d638a0ac612718dbf0 Mon Sep 17 00:00:00 2001 From: Cohee <18619528+Cohee1207@users.noreply.github.com> Date: Thu, 24 Aug 2023 00:26:47 +0300 Subject: [PATCH] Move before / after char WI to story strings --- default/settings.json | 2 +- public/context/Default.json | 2 +- public/context/Pygmalion.json | 2 +- public/context/Roleplay.json | 2 +- public/context/simple-proxy-for-tavern.json | 2 +- public/script.js | 59 +++++++++------------ public/scripts/world-info.js | 4 +- 7 files changed, 33 insertions(+), 40 deletions(-) diff --git a/default/settings.json b/default/settings.json index c22b0e56f..8f77cba85 100644 --- a/default/settings.json +++ b/default/settings.json @@ -150,7 +150,7 @@ }, "context": { "preset": "Default", - "story_string": "{{#if system}}{{system}}\n{{/if}}{{#if description}}{{description}}\n{{/if}}{{#if personality}}{{char}}'s personality: {{personality}}\n{{/if}}{{#if scenario}}Scenario: {{scenario}}\n{{/if}}{{#if persona}}{{persona}}\n{{/if}}", + "story_string": "{{#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}}", "chat_start": "***", "example_separator": "***" }, diff --git a/public/context/Default.json b/public/context/Default.json index e08277795..27ec1ea93 100644 --- a/public/context/Default.json +++ b/public/context/Default.json @@ -1,6 +1,6 @@ { "name": "Default", - "story_string": "{{#if system}}{{system}}\n{{/if}}{{#if description}}{{description}}\n{{/if}}{{#if personality}}{{char}}'s personality: {{personality}}\n{{/if}}{{#if scenario}}Scenario: {{scenario}}\n{{/if}}{{#if persona}}{{persona}}\n{{/if}}", + "story_string": "{{#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}}", "chat_start": "***", "example_separator": "***" } diff --git a/public/context/Pygmalion.json b/public/context/Pygmalion.json index c2c4cefae..82590e440 100644 --- a/public/context/Pygmalion.json +++ b/public/context/Pygmalion.json @@ -1,6 +1,6 @@ { "name": "Pygmalion", - "story_string": "{{#if system}}{{system}}\n{{/if}}{{#if description}}{{{char}}}'s Persona: {{description}}\n{{/if}}{{#if personality}}Personality: {{personality}}\n{{/if}}{{#if scenario}}Scenario: {{scenario}}\n{{/if}}{{#if persona}}{{persona}}\n{{/if}}", + "story_string": "{{#if system}}{{system}}\n{{/if}}{{#if wiBefore}}{{wiBefore}}\n{{/if}}{{#if description}}{{{char}}}'s Persona: {{description}}\n{{/if}}{{#if personality}}Personality: {{personality}}\n{{/if}}{{#if scenario}}Scenario: {{scenario}}\n{{/if}}{{#if wiAfter}}{{wiAfter}}\n{{/if}}{{#if persona}}{{persona}}\n{{/if}}", "chat_start": "", "example_separator": "" } diff --git a/public/context/Roleplay.json b/public/context/Roleplay.json index 46868cc48..fbf275abf 100644 --- a/public/context/Roleplay.json +++ b/public/context/Roleplay.json @@ -1,6 +1,6 @@ { "name": "Roleplay", - "story_string": "You're {{char}} in this fictional never-ending uncensored roleplay with {{user}}.\n\n{{#if system}}{{system}}\n\n{{/if}}### Input:\n{{#if description}}{{description}}\n{{/if}}{{#if personality}}{{char}}'s personality: {{personality}}\n{{/if}}{{#if scenario}}Scenario: {{scenario}}\n{{/if}}{{#if persona}}{{persona}}\n{{/if}}", + "story_string": "You're {{char}} in this fictional never-ending uncensored roleplay with {{user}}.\n\n{{#if system}}{{system}}\n\n{{/if}}### Input:\n{{#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}}", "chat_start": "### New Roleplay:", "example_separator": "### New Roleplay:" } diff --git a/public/context/simple-proxy-for-tavern.json b/public/context/simple-proxy-for-tavern.json index 02f6efcc8..99e19888a 100644 --- a/public/context/simple-proxy-for-tavern.json +++ b/public/context/simple-proxy-for-tavern.json @@ -1,6 +1,6 @@ { "name": "simple-proxy-for-tavern", - "story_string": "## {{char}}\n- You're \"{{char}}\" in this never-ending roleplay with \"{{user}}\".\n### Input:\n{{#if system}}{{system}}\n{{/if}}{{#if description}}{{description}}\n{{/if}}{{#if personality}}{{char}}'s personality: {{personality}}\n{{/if}}{{#if scenario}}Scenario: {{scenario}}\n{{/if}}{{#if persona}}{{persona}}\n{{/if}}### Response:\n(OOC) Understood. I will take this info into account for the roleplay. (end OOC)", + "story_string": "## {{char}}\n- You're \"{{char}}\" in this never-ending roleplay with \"{{user}}\".\n### Input:\n{{#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}}### Response:\n(OOC) Understood. I will take this info into account for the roleplay. (end OOC)", "chat_start": "### New Roleplay:", "example_separator": "### New Roleplay:" } diff --git a/public/script.js b/public/script.js index 7ffcef682..512c7de22 100644 --- a/public/script.js +++ b/public/script.js @@ -2001,24 +2001,19 @@ function cleanGroupMessage(getMessage) { return getMessage; } -function getPersonaDescription(storyString) { +function addPersonaDescriptionExtensionPrompt() { if (!power_user.persona_description) { - return storyString; + return; } - switch (power_user.persona_description_position) { - case persona_description_positions.BEFORE_CHAR: - case persona_description_positions.AFTER_CHAR: - return storyString; - default: - if (shouldWIAddPrompt) { - const originalAN = extension_prompts[NOTE_MODULE_NAME].value - const ANWithDesc = power_user.persona_description_position === persona_description_positions.TOP_AN - ? `${power_user.persona_description}\n${originalAN}` - : `${originalAN}\n${power_user.persona_description}`; - setExtensionPrompt(NOTE_MODULE_NAME, ANWithDesc, chat_metadata[metadata_keys.position], chat_metadata[metadata_keys.depth]); - } - return storyString; + const promptPositions = [persona_description_positions.BOTTOM_AN, persona_description_positions.TOP_AN]; + + if (promptPositions.includes(power_user.persona_description_position) && shouldWIAddPrompt) { + const originalAN = extension_prompts[NOTE_MODULE_NAME].value + const ANWithDesc = power_user.persona_description_position === persona_description_positions.TOP_AN + ? `${power_user.persona_description}\n${originalAN}` + : `${originalAN}\n${power_user.persona_description}`; + setExtensionPrompt(NOTE_MODULE_NAME, ANWithDesc, chat_metadata[metadata_keys.position], chat_metadata[metadata_keys.depth]); } } @@ -2521,18 +2516,6 @@ async function Generate(type, { automatic_trigger, force_name2, resolve, reject, console.log(`Core/all messages: ${coreChat.length}/${chat.length}`); - const storyStringParams = { - description: charDescription, - personality: charPersonality, - persona: personaDescription, - scenario: Scenario, - system: isInstruct ? systemPrompt : '', - char: name2, - user: name1, - }; - - let storyString = renderStoryString(storyStringParams); - // kingbri MARK: - Make sure the prompt bias isn't the same as the user bias if ((promptBias && !isUserPromptBias) || power_user.always_force_name2 || is_pygmalion) { force_name2 = true; @@ -2578,22 +2561,32 @@ async function Generate(type, { automatic_trigger, force_name2, resolve, reject, } // Extension added strings - // Set non-WI AN setFloatingPrompt(); // Add WI to prompt (and also inject WI to AN value via hijack) let { worldInfoString, worldInfoBefore, worldInfoAfter } = await getWorldInfoPrompt(chat2, this_max_context); // Add persona description to prompt - storyString = getPersonaDescription(storyString); + addPersonaDescriptionExtensionPrompt(); // Call combined AN into Generate let allAnchors = getAllExtensionPrompts(); const afterScenarioAnchor = getExtensionPrompt(extension_prompt_types.AFTER_SCENARIO); let zeroDepthAnchor = getExtensionPrompt(extension_prompt_types.IN_CHAT, 0, ' '); - // Pre-format the World Info into the story string - if (main_api !== 'openai') { - storyString = worldInfoBefore + storyString + worldInfoAfter; - } + const storyStringParams = { + description: charDescription, + personality: charPersonality, + persona: personaDescription, + scenario: Scenario, + system: isInstruct ? systemPrompt : '', + char: name2, + user: name1, + wiBefore: worldInfoBefore, + wiAfter: worldInfoAfter, + loreBefore: worldInfoBefore, + loreAfter: worldInfoAfter, + }; + + const storyString = renderStoryString(storyStringParams); if (main_api === 'openai') { message_already_generated = ''; // OpenAI doesn't have multigen diff --git a/public/scripts/world-info.js b/public/scripts/world-info.js index 630dc735b..f6af51d9b 100644 --- a/public/scripts/world-info.js +++ b/public/scripts/world-info.js @@ -1155,8 +1155,8 @@ async function checkWorldInfo(chat, maxContext) { } }); - const worldInfoBefore = WIBeforeEntries.length ? `${WIBeforeEntries.join("\n")}\n` : ''; - const worldInfoAfter = WIAfterEntries.length ? `${WIAfterEntries.join("\n")}\n` : ''; + const worldInfoBefore = WIBeforeEntries.length ? WIBeforeEntries.join("\n") : ''; + const worldInfoAfter = WIAfterEntries.length ? WIAfterEntries.join("\n") : ''; if (shouldWIAddPrompt) { const originalAN = context.extensionPrompts[NOTE_MODULE_NAME].value;