Merge pull request #1307 from aisu-wata0/regexScript_promptOnly

Regex script: prompt only checkbox
This commit is contained in:
Cohee 2023-11-04 22:37:41 +02:00 committed by GitHub
commit 2f9b247c46
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 36 additions and 12 deletions

View File

@ -2632,6 +2632,13 @@ async function Generate(type, { automatic_trigger, force_name2, resolve, reject,
coreChat.pop(); coreChat.pop();
} }
coreChat = coreChat.map(x => ({
...x,
mes: getRegexedString(x.mes, x.is_user ? regex_placement.USER_INPUT : regex_placement.AI_OUTPUT, {
isPrompt: true,
}),
}))
// Determine token limit // Determine token limit
let this_max_context = getMaxContextSize(); let this_max_context = getMaxContextSize();

View File

@ -33,7 +33,7 @@
<small data-i18n="Replace With">Replace With</small> <small data-i18n="Replace With">Replace With</small>
</label> </label>
<div> <div>
<textarea <textarea
class="regex_replace_string text_pole wide100p textarea_compact" class="regex_replace_string text_pole wide100p textarea_compact"
placeholder="Use {{match}} to include the matched text from the Find Regex" placeholder="Use {{match}} to include the matched text from the Find Regex"
rows="2" rows="2"
@ -45,7 +45,7 @@
<small data-i18n="Trim Out">Trim Out</small> <small data-i18n="Trim Out">Trim Out</small>
</label> </label>
<div> <div>
<textarea <textarea
class="regex_trim_strings text_pole wide100p textarea_compact" class="regex_trim_strings text_pole wide100p textarea_compact"
placeholder="Globally trims any unwanted parts from a regex match before replacement. Separate each element by an enter." placeholder="Globally trims any unwanted parts from a regex match before replacement. Separate each element by an enter."
rows="3" rows="3"
@ -86,6 +86,10 @@
<input type="checkbox" name="only_format_display" /> <input type="checkbox" name="only_format_display" />
<span data-i18n="Only Format Display">Only Format Display</span> <span data-i18n="Only Format Display">Only Format Display</span>
</label> </label>
<label class="checkbox flex-container" title="Chat history won't change, only the prompt as the request is sent (on generation)">
<input type="checkbox" name="only_format_prompt"/>
<span data-i18n="Only Format Prompt (?)">Only Format Prompt (?)</span>
</label>
<label class="checkbox flex-container"> <label class="checkbox flex-container">
<input type="checkbox" name="run_on_edit" /> <input type="checkbox" name="run_on_edit" />
<span data-i18n="Run On Edit">Run On Edit</span> <span data-i18n="Run On Edit">Run On Edit</span>

View File

@ -24,12 +24,12 @@ function regexFromString(input) {
try { try {
// Parse input // Parse input
var m = input.match(/(\/?)(.+)\1([a-z]*)/i); var m = input.match(/(\/?)(.+)\1([a-z]*)/i);
// Invalid flags // Invalid flags
if (m[3] && !/^(?!.*?(.).*?\1)[gmixXsuUAJ]+$/.test(m[3])) { if (m[3] && !/^(?!.*?(.).*?\1)[gmixXsuUAJ]+$/.test(m[3])) {
return RegExp(input); return RegExp(input);
} }
// Create the regular expression // Create the regular expression
return new RegExp(m[2], m[3]); return new RegExp(m[2], m[3]);
} catch { } catch {
@ -38,19 +38,24 @@ function regexFromString(input) {
} }
// Parent function to fetch a regexed version of a raw string // Parent function to fetch a regexed version of a raw string
function getRegexedString(rawString, placement, { characterOverride, isMarkdown } = {}) { function getRegexedString(rawString, placement, { characterOverride, isMarkdown, isPrompt } = {}) {
let finalString = rawString; let finalString = rawString;
if (extension_settings.disabledExtensions.includes("regex") || !rawString || placement === undefined) { if (extension_settings.disabledExtensions.includes("regex") || !rawString || placement === undefined) {
return finalString; return finalString;
} }
extension_settings.regex.forEach((script) => { extension_settings.regex.forEach((script) => {
if ((script.markdownOnly && !isMarkdown) || (!script.markdownOnly && isMarkdown)) { if (
return; // Script applies to Markdown and input is Markdown
} (script.markdownOnly && isMarkdown) ||
// Script applies to Generate and input is Generate
if (script.placement.includes(placement)) { (script.promptOnly && isPrompt) ||
finalString = runRegexScript(script, finalString, { characterOverride }); // Script applies to all cases when neither "only"s are true, but there's no need to do it when `isMarkdown`, the as source (chat history) should already be changed beforehand
(!script.markdownOnly && !script.promptOnly && !isMarkdown)
) {
if (script.placement.includes(placement)) {
finalString = runRegexScript(script, finalString, { characterOverride });
}
} }
}); });
@ -91,7 +96,7 @@ function runRegexScript(regexScript, rawString, { characterOverride } = {}) {
const subReplaceString = substituteRegexParams( const subReplaceString = substituteRegexParams(
regexScript.replaceString, regexScript.replaceString,
trimCapturedMatch ?? trimFencedMatch, trimCapturedMatch ?? trimFencedMatch,
{ {
characterOverride, characterOverride,
replaceStrategy: regexScript.replaceStrategy ?? regex_replace_strategy.REPLACE replaceStrategy: regexScript.replaceStrategy ?? regex_replace_strategy.REPLACE
} }

View File

@ -113,6 +113,9 @@ async function onRegexEditorOpenClick(existingId) {
editorHtml editorHtml
.find(`input[name="only_format_display"]`) .find(`input[name="only_format_display"]`)
.prop("checked", existingScript.markdownOnly ?? false); .prop("checked", existingScript.markdownOnly ?? false);
editorHtml
.find(`input[name="only_format_prompt"]`)
.prop("checked", existingScript.promptOnly ?? false);
editorHtml editorHtml
.find(`input[name="run_on_edit"]`) .find(`input[name="run_on_edit"]`)
.prop("checked", existingScript.runOnEdit ?? false); .prop("checked", existingScript.runOnEdit ?? false);
@ -165,6 +168,10 @@ async function onRegexEditorOpenClick(existingId) {
editorHtml editorHtml
.find(`input[name="only_format_display"]`) .find(`input[name="only_format_display"]`)
.prop("checked"), .prop("checked"),
promptOnly:
editorHtml
.find(`input[name="only_format_prompt"]`)
.prop("checked"),
runOnEdit: runOnEdit:
editorHtml editorHtml
.find(`input[name="run_on_edit"]`) .find(`input[name="run_on_edit"]`)
@ -197,6 +204,7 @@ function migrateSettings() {
script.placement = script.placement.filter((e) => e !== regex_placement.MD_DISPLAY); script.placement = script.placement.filter((e) => e !== regex_placement.MD_DISPLAY);
script.markdownOnly = true script.markdownOnly = true
script.promptOnly = true
performSave = true; performSave = true;
} }