World Info: Add scanning with AN

Add support for adding extension prompts into WI scanning. Doing this
required adding a method to get extension prompts by name. Now, AN
and depth prompts can be added to world info scanning.

However, since scanning just looks for keys in the chatlog, append
the extension prompts on the top of scanned text.

Signed-off-by: kingbri <bdashore3@proton.me>
This commit is contained in:
kingbri
2023-10-11 23:44:52 -04:00
parent 84098ae933
commit 2c1a6ca67c
4 changed files with 46 additions and 4 deletions

View File

@ -4580,6 +4580,11 @@
Tokens: <span id="extension_floating_prompt_token_counter">0</span> Tokens: <span id="extension_floating_prompt_token_counter">0</span>
</div> </div>
<label class="checkbox_label" for="extension_floating_allow_wi_scan">
<input id="extension_floating_allow_wi_scan" type="checkbox" />
<span data-i18n="Include in World Info Scanning">Include in World Info Scanning</span>
</label>
<div class="floating_prompt_radio_group"> <div class="floating_prompt_radio_group">
<label> <label>
<input type="radio" name="extension_floating_position" value="2" /> <input type="radio" name="extension_floating_position" value="2" />

View File

@ -212,6 +212,7 @@ export {
saveChat, saveChat,
messageFormatting, messageFormatting,
getExtensionPrompt, getExtensionPrompt,
getExtensionPromptByName,
showSwipeButtons, showSwipeButtons,
hideSwipeButtons, hideSwipeButtons,
changeMainAPI, changeMainAPI,
@ -2069,6 +2070,15 @@ function getAllExtensionPrompts() {
return value.length ? substituteParams(value) : ''; return value.length ? substituteParams(value) : '';
} }
// Wrapper to fetch extension prompts by module name
function getExtensionPromptByName(moduleName) {
if (moduleName) {
return substituteParams(extension_prompts[moduleName]?.value);
} else {
return;
}
}
function getExtensionPrompt(position = 0, depth = undefined, separator = "\n") { function getExtensionPrompt(position = 0, depth = undefined, separator = "\n") {
let extension_prompt = Object.keys(extension_prompts) let extension_prompt = Object.keys(extension_prompts)
.sort() .sort()

View File

@ -235,6 +235,7 @@ function loadSettings() {
chat_metadata[metadata_keys.depth] = chat_metadata[metadata_keys.depth] ?? extension_settings.note.defaultDepth ?? DEFAULT_DEPTH; chat_metadata[metadata_keys.depth] = chat_metadata[metadata_keys.depth] ?? extension_settings.note.defaultDepth ?? DEFAULT_DEPTH;
$('#extension_floating_prompt').val(chat_metadata[metadata_keys.prompt]); $('#extension_floating_prompt').val(chat_metadata[metadata_keys.prompt]);
$('#extension_floating_interval').val(chat_metadata[metadata_keys.interval]); $('#extension_floating_interval').val(chat_metadata[metadata_keys.interval]);
$('#extension_floating_allow_wi_scan').prop('checked', extension_settings.note.allowWIScan ?? false);
$('#extension_floating_depth').val(chat_metadata[metadata_keys.depth]); $('#extension_floating_depth').val(chat_metadata[metadata_keys.depth]);
$(`input[name="extension_floating_position"][value="${chat_metadata[metadata_keys.position]}"]`).prop('checked', true); $(`input[name="extension_floating_position"][value="${chat_metadata[metadata_keys.position]}"]`).prop('checked', true);
@ -389,6 +390,11 @@ function onChatChanged() {
$('#extension_floating_default_token_counter').text(tokenCounter3); $('#extension_floating_default_token_counter').text(tokenCounter3);
} }
function onAllowWIScanCheckboxChanged() {
extension_settings.note.allowWIScan = !!$(this).prop('checked');
updateSettings();
}
/** /**
* Inject author's note options and setup event listeners. * Inject author's note options and setup event listeners.
*/ */
@ -402,6 +408,7 @@ export function initAuthorsNote() {
$('#extension_floating_default').on('input', onExtensionFloatingDefaultInput); $('#extension_floating_default').on('input', onExtensionFloatingDefaultInput);
$('#extension_default_depth').on('input', onDefaultDepthInput); $('#extension_default_depth').on('input', onDefaultDepthInput);
$('#extension_default_interval').on('input', onDefaultIntervalInput); $('#extension_default_interval').on('input', onDefaultIntervalInput);
$('#extension_floating_allow_wi_scan').on('input', onAllowWIScanCheckboxChanged);
$('input[name="extension_floating_position"]').on('change', onExtensionFloatingPositionInput); $('input[name="extension_floating_position"]').on('change', onExtensionFloatingPositionInput);
$('input[name="extension_default_position"]').on('change', onDefaultPositionInput); $('input[name="extension_default_position"]').on('change', onDefaultPositionInput);
$('input[name="extension_floating_char_position"]').on('change', onExtensionFloatingCharPositionInput); $('input[name="extension_floating_char_position"]').on('change', onExtensionFloatingCharPositionInput);

View File

@ -1,6 +1,6 @@
import { saveSettings, callPopup, substituteParams, getRequestHeaders, chat_metadata, this_chid, characters, saveCharacterDebounced, menu_type, eventSource, event_types } from "../script.js"; import { saveSettings, callPopup, substituteParams, getRequestHeaders, chat_metadata, this_chid, characters, saveCharacterDebounced, menu_type, eventSource, event_types, getExtensionPrompt, MAX_INJECTION_DEPTH, extension_prompt_types, getExtensionPromptByName } from "../script.js";
import { download, debounce, initScrollHeight, resetScrollHeight, parseJsonFile, extractDataFromPng, getFileBuffer, getCharaFilename, getSortableDelay, escapeRegex, PAGINATION_TEMPLATE, navigation_option, waitUntilCondition } from "./utils.js"; import { download, debounce, initScrollHeight, resetScrollHeight, parseJsonFile, extractDataFromPng, getFileBuffer, getCharaFilename, getSortableDelay, escapeRegex, PAGINATION_TEMPLATE, navigation_option, waitUntilCondition } from "./utils.js";
import { getContext } from "./extensions.js"; import { extension_settings, getContext } from "./extensions.js";
import { NOTE_MODULE_NAME, metadata_keys, shouldWIAddPrompt } from "./authors-note.js"; import { NOTE_MODULE_NAME, metadata_keys, shouldWIAddPrompt } from "./authors-note.js";
import { registerSlashCommand } from "./slash-commands.js"; import { registerSlashCommand } from "./slash-commands.js";
import { getDeviceInfo } from "./RossAscends-mods.js"; import { getDeviceInfo } from "./RossAscends-mods.js";
@ -581,8 +581,8 @@ function getWorldEntry(name, data, entry) {
data.entries[uid].selectiveLogic = !isNaN(value) ? value : 0; data.entries[uid].selectiveLogic = !isNaN(value) ? value : 0;
setOriginalDataValue(data, uid, "selectiveLogic", data.entries[uid].selectiveLogic); setOriginalDataValue(data, uid, "selectiveLogic", data.entries[uid].selectiveLogic);
saveWorldInfo(name, data); saveWorldInfo(name, data);
}); });
template template
.find(`select[name="entryLogicType"] option[value=${entry.selectiveLogic}]`) .find(`select[name="entryLogicType"] option[value=${entry.selectiveLogic}]`)
.prop("selected", true) .prop("selected", true)
@ -1341,7 +1341,27 @@ async function getSortedEntries() {
async function checkWorldInfo(chat, maxContext) { async function checkWorldInfo(chat, maxContext) {
const context = getContext(); const context = getContext();
const messagesToLookBack = world_info_depth * 2 || 1; const messagesToLookBack = world_info_depth * 2 || 1;
let textToScan = transformString(chat.slice(0, messagesToLookBack).join(""));
// Combine the chat
let textToScan = chat.slice(0, messagesToLookBack).join("");
// Add the depth or AN if enabled
// Put this code here since otherwise, the chat reference is modified
if (extension_settings.note.allowWIScan) {
let depthPrompt = getExtensionPromptByName("DEPTH_PROMPT")
if (depthPrompt) {
textToScan = `${depthPrompt}\n${textToScan}`
}
let anPrompt = getExtensionPromptByName(NOTE_MODULE_NAME);
if (anPrompt) {
textToScan = `${anPrompt}\n${textToScan}`
}
}
// Transform the resulting string
textToScan = transformString(textToScan);
let needsToScan = true; let needsToScan = true;
let count = 0; let count = 0;
let allActivatedEntries = new Set(); let allActivatedEntries = new Set();