From b8084eac65a1d82d37bbfd8eecf7d94d9c7f3c23 Mon Sep 17 00:00:00 2001 From: Cohee Date: Thu, 8 Jun 2023 23:12:58 +0300 Subject: [PATCH] Add per-character override of JB prompts. --- public/script.js | 14 +++++++++++++- public/scripts/openai.js | 7 ++++--- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/public/script.js b/public/script.js index c873505a2..887d5c092 100644 --- a/public/script.js +++ b/public/script.js @@ -1900,6 +1900,7 @@ async function Generate(type, { automatic_trigger, force_name2, resolve, reject, let Scenario = baseChatReplace(scenarioText.trim(), name1, name2); let mesExamples = baseChatReplace(characters[this_chid].mes_example.trim(), name1, name2); let systemPrompt = baseChatReplace(characters[this_chid].data?.system_prompt?.trim(), name1, name2); + let jailbreakPrompt = baseChatReplace(characters[this_chid].data?.post_history_instructions?.trim(), name1, name2); // Parse example messages if (!mesExamples.startsWith('')) { @@ -2280,7 +2281,18 @@ async function Generate(type, { automatic_trigger, force_name2, resolve, reject, generate_data = getNovelGenerationData(finalPromt, this_settings, this_amount_gen); } else if (main_api == 'openai') { - let [prompt, counts] = await prepareOpenAIMessages(systemPrompt, name2, storyString, worldInfoBefore, worldInfoAfter, afterScenarioAnchor, promptBias, type, quiet_prompt); + let [prompt, counts] = await prepareOpenAIMessages({ + systemPrompt: systemPrompt, + name2: name2, + storyString: storyString, + worldInfoBefore: worldInfoBefore, + worldInfoAfter: worldInfoAfter, + extensionPrompt: afterScenarioAnchor, + bias: promptBias, + type: type, + quietPrompt: quiet_prompt, + jailbreakPrompt: jailbreakPrompt, + }); generate_data = { prompt: prompt }; // counts will return false if the user has not enabled the token breakdown feature diff --git a/public/scripts/openai.js b/public/scripts/openai.js index b6b2fe366..e5d3ff108 100644 --- a/public/scripts/openai.js +++ b/public/scripts/openai.js @@ -310,7 +310,7 @@ function formatWorldInfo(value) { return stringFormat(oai_settings.wi_format, value); } -async function prepareOpenAIMessages(systemPrompt, name2, storyString, worldInfoBefore, worldInfoAfter, extensionPrompt, bias, type, quietPrompt) { +async function prepareOpenAIMessages({ systemPrompt, name2, storyString, worldInfoBefore, worldInfoAfter, extensionPrompt, bias, type, quietPrompt, jailbreakPrompt } = {}) { const isImpersonate = type == "impersonate"; let this_max_context = oai_settings.openai_max_context; let enhance_definitions_prompt = ""; @@ -374,8 +374,9 @@ async function prepareOpenAIMessages(systemPrompt, name2, storyString, worldInfo total_count += start_chat_count; } - if (oai_settings.jailbreak_system && oai_settings.jailbreak_prompt) { - const jailbreakMessage = { "role": "system", "content": substituteParams(oai_settings.jailbreak_prompt) }; + const jailbreak = power_user.prefer_character_jailbreak && jailbreakPrompt ? jailbreakPrompt : oai_settings.jailbreak_prompt; + if (oai_settings.jailbreak_system && jailbreak) { + const jailbreakMessage = { "role": "system", "content": substituteParams(jailbreak) }; openai_msgs.push(jailbreakMessage); total_count += handler_instance.count([jailbreakMessage], true, 'jailbreak');