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>
</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">
<label>
<input type="radio" name="extension_floating_position" value="2" />

View File

@ -212,6 +212,7 @@ export {
saveChat,
messageFormatting,
getExtensionPrompt,
getExtensionPromptByName,
showSwipeButtons,
hideSwipeButtons,
changeMainAPI,
@ -2069,6 +2070,15 @@ function getAllExtensionPrompts() {
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") {
let extension_prompt = Object.keys(extension_prompts)
.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;
$('#extension_floating_prompt').val(chat_metadata[metadata_keys.prompt]);
$('#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]);
$(`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);
}
function onAllowWIScanCheckboxChanged() {
extension_settings.note.allowWIScan = !!$(this).prop('checked');
updateSettings();
}
/**
* Inject author's note options and setup event listeners.
*/
@ -402,6 +408,7 @@ export function initAuthorsNote() {
$('#extension_floating_default').on('input', onExtensionFloatingDefaultInput);
$('#extension_default_depth').on('input', onDefaultDepthInput);
$('#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_default_position"]').on('change', onDefaultPositionInput);
$('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 { getContext } from "./extensions.js";
import { extension_settings, getContext } from "./extensions.js";
import { NOTE_MODULE_NAME, metadata_keys, shouldWIAddPrompt } from "./authors-note.js";
import { registerSlashCommand } from "./slash-commands.js";
import { getDeviceInfo } from "./RossAscends-mods.js";
@ -581,8 +581,8 @@ function getWorldEntry(name, data, entry) {
data.entries[uid].selectiveLogic = !isNaN(value) ? value : 0;
setOriginalDataValue(data, uid, "selectiveLogic", data.entries[uid].selectiveLogic);
saveWorldInfo(name, data);
});
template
.find(`select[name="entryLogicType"] option[value=${entry.selectiveLogic}]`)
.prop("selected", true)
@ -1341,7 +1341,27 @@ async function getSortedEntries() {
async function checkWorldInfo(chat, maxContext) {
const context = getContext();
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 count = 0;
let allActivatedEntries = new Set();