mirror of
				https://github.com/SillyTavern/SillyTavern.git
				synced 2025-06-05 21:59:27 +02:00 
			
		
		
		
	Spec v2: {{original}} macro for prompt overrides.
This commit is contained in:
		| @@ -2670,11 +2670,11 @@ | |||||||
|             <div class="inline-drawer-content"> |             <div class="inline-drawer-content"> | ||||||
|                 <div> |                 <div> | ||||||
|                     <h4>System Prompt</h4> |                     <h4>System Prompt</h4> | ||||||
|                     <textarea id="system_prompt_textarea" name="system_prompt" placeholder="(Overrides the main prompt for Chat Completion and/or system prompt for Instruct Mode if not empty)" form="form_create" class="text_pole" autocomplete="off" rows="3" maxlength="20000"></textarea> |                     <textarea id="system_prompt_textarea" name="system_prompt" placeholder="(Overrides the main prompt for Chat Completion and/or system prompt for Instruct Mode if not empty. Use {{original}} macro to insert the original prompt.)" form="form_create" class="text_pole" autocomplete="off" rows="3" maxlength="20000"></textarea> | ||||||
|                 </div> |                 </div> | ||||||
|                 <div> |                 <div> | ||||||
|                     <h4>Post History Instructions</h4> |                     <h4>Post History Instructions</h4> | ||||||
|                     <textarea id="post_history_instructions_textarea" name="post_history_instructions" placeholder="(Overrides the default jailbreak for Chat Completion if not empty)" form="form_create" class="text_pole" autocomplete="off" rows="3" maxlength="20000"></textarea> |                     <textarea id="post_history_instructions_textarea" name="post_history_instructions" placeholder="(Overrides the default jailbreak for Chat Completion if not empty. Use {{original}} macro to insert the original jailbreak.)" form="form_create" class="text_pole" autocomplete="off" rows="3" maxlength="20000"></textarea> | ||||||
|                 </div> |                 </div> | ||||||
|             </div> |             </div> | ||||||
|         </div> |         </div> | ||||||
|   | |||||||
| @@ -1377,13 +1377,20 @@ function scrollChatToBottom() { | |||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
| function substituteParams(content, _name1, _name2) { | function substituteParams(content, _name1, _name2, _original) { | ||||||
|     _name1 = _name1 ?? name1; |     _name1 = _name1 ?? name1; | ||||||
|     _name2 = _name2 ?? name2; |     _name2 = _name2 ?? name2; | ||||||
|     if (!content) { |     if (!content) { | ||||||
|         return '' |         return '' | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     // Replace {{original}} with the original message | ||||||
|  |     // Note: only replace the first instance of {{original}} | ||||||
|  |     // This will hopefully prevent the abuse | ||||||
|  |     if (_original) { | ||||||
|  |         content = content.replace(/{{original}}/i, _original); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     content = content.replace(/{{user}}/gi, _name1); |     content = content.replace(/{{user}}/gi, _name1); | ||||||
|     content = content.replace(/{{char}}/gi, _name2); |     content = content.replace(/{{char}}/gi, _name2); | ||||||
|     content = content.replace(/<USER>/gi, _name1); |     content = content.replace(/<USER>/gi, _name1); | ||||||
|   | |||||||
| @@ -338,7 +338,7 @@ async function prepareOpenAIMessages({ systemPrompt, name2, storyString, worldIn | |||||||
|     let whole_prompt = getSystemPrompt(systemPrompt, nsfw_toggle_prompt, enhance_definitions_prompt, wiBefore, storyString, wiAfter, extensionPrompt, isImpersonate); |     let whole_prompt = getSystemPrompt(systemPrompt, nsfw_toggle_prompt, enhance_definitions_prompt, wiBefore, storyString, wiAfter, extensionPrompt, isImpersonate); | ||||||
|  |  | ||||||
|     // Join by a space and replace placeholders with real user/char names |     // Join by a space and replace placeholders with real user/char names | ||||||
|     storyString = substituteParams(whole_prompt.join("\n")).replace(/\r/gm, '').trim(); |     storyString = substituteParams(whole_prompt.join("\n"), name1, name2, oai_settings.main_prompt).replace(/\r/gm, '').trim(); | ||||||
|  |  | ||||||
|     let prompt_msg = { "role": "system", "content": storyString } |     let prompt_msg = { "role": "system", "content": storyString } | ||||||
|     let examples_tosend = []; |     let examples_tosend = []; | ||||||
| @@ -387,7 +387,7 @@ async function prepareOpenAIMessages({ systemPrompt, name2, storyString, worldIn | |||||||
|  |  | ||||||
|     const jailbreak = power_user.prefer_character_jailbreak && jailbreakPrompt ? jailbreakPrompt : oai_settings.jailbreak_prompt; |     const jailbreak = power_user.prefer_character_jailbreak && jailbreakPrompt ? jailbreakPrompt : oai_settings.jailbreak_prompt; | ||||||
|     if (oai_settings.jailbreak_system && jailbreak) { |     if (oai_settings.jailbreak_system && jailbreak) { | ||||||
|         const jailbreakMessage = { "role": "system", "content": substituteParams(jailbreak) }; |         const jailbreakMessage = { "role": "system", "content": substituteParams(jailbreak, name1, name2, oai_settings.jailbreak_prompt) }; | ||||||
|         openai_msgs.push(jailbreakMessage); |         openai_msgs.push(jailbreakMessage); | ||||||
|  |  | ||||||
|         total_count += handler_instance.count([jailbreakMessage], true, 'jailbreak'); |         total_count += handler_instance.count([jailbreakMessage], true, 'jailbreak'); | ||||||
|   | |||||||
| @@ -12,6 +12,8 @@ import { | |||||||
|     eventSource, |     eventSource, | ||||||
|     event_types, |     event_types, | ||||||
|     getCurrentChatId, |     getCurrentChatId, | ||||||
|  |     name1, | ||||||
|  |     name2, | ||||||
| } from "../script.js"; | } from "../script.js"; | ||||||
| import { favsToHotswap } from "./RossAscends-mods.js"; | import { favsToHotswap } from "./RossAscends-mods.js"; | ||||||
| import { | import { | ||||||
| @@ -723,7 +725,7 @@ export function formatInstructStoryString(story, systemPrompt) { | |||||||
|     // If the character has a custom system prompt AND user has it preferred, use that instead of the default |     // If the character has a custom system prompt AND user has it preferred, use that instead of the default | ||||||
|     systemPrompt = power_user.prefer_character_prompt && systemPrompt ? systemPrompt : power_user.instruct.system_prompt; |     systemPrompt = power_user.prefer_character_prompt && systemPrompt ? systemPrompt : power_user.instruct.system_prompt; | ||||||
|     const sequence = power_user.instruct.system_sequence || ''; |     const sequence = power_user.instruct.system_sequence || ''; | ||||||
|     const prompt = substituteParams(systemPrompt) || ''; |     const prompt = substituteParams(systemPrompt, name1, name2, power_user.instruct.system_prompt) || ''; | ||||||
|     const separator = power_user.instruct.wrap ? '\n' : ''; |     const separator = power_user.instruct.wrap ? '\n' : ''; | ||||||
|     const textArray = [sequence, prompt + '\n' + story]; |     const textArray = [sequence, prompt + '\n' + story]; | ||||||
|     const text = textArray.filter(x => x).join(separator); |     const text = textArray.filter(x => x).join(separator); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user