#230 Make recursive scanning of WI entries optional

This commit is contained in:
SillyLossy
2023-05-04 20:28:01 +03:00
parent 1f1a9a9e04
commit 19a4534d78
4 changed files with 82 additions and 18 deletions

View File

@ -1257,19 +1257,50 @@
<div id="world_info_edit_button" class="menu_button fa-solid fa-pencil" title="Details"></div> <div id="world_info_edit_button" class="menu_button fa-solid fa-pencil" title="Details"></div>
</div> </div>
<div id="world_info_depth_block"> <div class="flex-container alignitemscenter">
<h4> <div class="flex1 range-block">
Scan Depth <a href="/notes#scandepth" class="notes-link" target="_blank"><span class="note-link-span">?</span></a> <div class="range-block-title">
</h4> Scan Depth <a href="/notes#scandepth" class="notes-link" target="_blank"><span class="note-link-span">?</span></a>
<label for="world_info_depth" id="world_info_depth_counter">depth</label> </div>
<input type="range" id="world_info_depth" name="volume" min="1" max="10" step="1"> <div class="range-block-range-and-counter">
</div> <div class="range-block-range">
<div id="world_info_budget_block"> <input type="range" id="world_info_depth" name="volume" min="1" max="10" step="1">
<h4> </div>
Token Budget <a href="/notes#budget" class="notes-link" target="_blank"><span class="note-link-span">?</span></a> <div class="range-block-counter">
</h4> <div contenteditable="true" data-for="world_info_depth" id="world_info_depth_counter">
<label for="world_info_budget" id="world_info_budget_counter">budget</label> depth
<input type="range" id="world_info_budget" name="volume" min="32" max="2048" step="16"> </div>
</div>
</div>
</div>
<div class="flex1 range-block">
<div class="range-block-title">
Token Budget <a href="/notes#budget" class="notes-link" target="_blank"><span class="note-link-span">?</span></a>
</div>
<div class="range-block-range-and-counter">
<div class="range-block-range">
<input type="range" id="world_info_budget" name="volume" min="32" max="2048" step="16">
</div>
<div class="range-block-counter">
<div contenteditable="true" data-for="world_info_budget" id="world_info_budget_counter">
budget
</div>
</div>
</div>
</div>
<div class="flex1 range-block">
<label title="Entries can activate other entries by mentioning their keywords" class="checkbox_label">
<input id="world_info_recursive" type="checkbox" />
<span>
Recursive scanning
<a href="/notes#recursivescanning" class="notes-link" target="_blank">
<span class="note-link-span">?</span>
</a>
</span>
</label>
</div>
</div> </div>
</div> </div>
<div id="softprompt_block"> <div id="softprompt_block">

View File

@ -213,6 +213,26 @@ Constant entries will be inserted first. Then entries with higher order numbers.
Entries inserted by direct mentioning of their keys have higher priority than those that were mentioned in other entries contents. Entries inserted by direct mentioning of their keys have higher priority than those that were mentioned in other entries contents.
### Recursive scanning
**Entries can activate other entries by mentioning their keywords in the content text.**
For example, if your World Info contains two entries:
```
Entry #1
Keyword: Bessie
Content: Bessie is a cow and is friend with Rufus.
```
```
Entry #2
Keyword: Rufus
Content: Rufus is a dog.
```
**Both** of them will be pulled into the context if the message text mentions **just Bessie**.
## KoboldAI ## KoboldAI
### Basic Settings ### Basic Settings

View File

@ -24,6 +24,7 @@ import {
selectImportedWorldInfo, selectImportedWorldInfo,
setWorldInfoSettings, setWorldInfoSettings,
deleteWorldInfo, deleteWorldInfo,
world_info_recursive,
} from "./scripts/world-info.js"; } from "./scripts/world-info.js";
import { import {
@ -3174,6 +3175,7 @@ async function saveSettings(type) {
world_info: world_info, world_info: world_info,
world_info_depth: world_info_depth, world_info_depth: world_info_depth,
world_info_budget: world_info_budget, world_info_budget: world_info_budget,
world_info_recursive: world_info_recursive,
textgenerationwebui_settings: textgenerationwebui_settings, textgenerationwebui_settings: textgenerationwebui_settings,
swipes: swipes, swipes: swipes,
horde_settings: horde_settings, horde_settings: horde_settings,

View File

@ -6,6 +6,7 @@ export {
world_info_data, world_info_data,
world_info_budget, world_info_budget,
world_info_depth, world_info_depth,
world_info_recursive,
world_names, world_names,
imported_world_name, imported_world_name,
checkWorldInfo, checkWorldInfo,
@ -21,6 +22,7 @@ let world_info_data = null;
let world_info_depth = 2; let world_info_depth = 2;
let world_info_budget = 128; let world_info_budget = 128;
let is_world_edit_open = false; let is_world_edit_open = false;
let world_info_recursive = false;
let imported_world_name = ""; let imported_world_name = "";
const saveWorldDebounced = debounce(async () => await _save(), 500); const saveWorldDebounced = debounce(async () => await _save(), 500);
const saveSettingsDebounced = debounce(() => saveSettings(), 500); const saveSettingsDebounced = debounce(() => saveSettings(), 500);
@ -47,13 +49,17 @@ function setWorldInfoSettings(settings, data) {
world_info_depth = Number(settings.world_info_depth); world_info_depth = Number(settings.world_info_depth);
if (settings.world_info_budget !== undefined) if (settings.world_info_budget !== undefined)
world_info_budget = Number(settings.world_info_budget); world_info_budget = Number(settings.world_info_budget);
if (settings.world_info_recursive !== undefined)
world_info_recursive = Boolean(settings.world_info_recursive);
$("#world_info_depth_counter").html(`${world_info_depth} Messages`); $("#world_info_depth_counter").text(world_info_depth);
$("#world_info_depth").val(world_info_depth); $("#world_info_depth").val(world_info_depth);
$("#world_info_budget_counter").html(`${world_info_budget} Tokens`); $("#world_info_budget_counter").text(world_info_budget);
$("#world_info_budget").val(world_info_budget); $("#world_info_budget").val(world_info_budget);
$("#world_info_recursive").prop('checked', world_info_recursive);
world_names = data.world_names?.length ? data.world_names : []; world_names = data.world_names?.length ? data.world_names : [];
if (settings.world_info != undefined) { if (settings.world_info != undefined) {
@ -524,7 +530,7 @@ function checkWorldInfo(chat) {
} }
} }
needsToScan = activatedNow.size > 0; needsToScan = world_info_recursive && activatedNow.size > 0;
const newEntries = [...activatedNow] const newEntries = [...activatedNow]
.map((x) => world_info_data.entries[x]) .map((x) => world_info_data.entries[x])
.sort((a, b) => sortedEntries.indexOf(a) - sortedEntries.indexOf(b)); .sort((a, b) => sortedEntries.indexOf(a) - sortedEntries.indexOf(b));
@ -665,13 +671,18 @@ $(document).ready(() => {
$(document).on("input", "#world_info_depth", function () { $(document).on("input", "#world_info_depth", function () {
world_info_depth = Number($(this).val()); world_info_depth = Number($(this).val());
$("#world_info_depth_counter").html(`${$(this).val()} Messages`); $("#world_info_depth_counter").text($(this).val());
saveSettingsDebounced(); saveSettingsDebounced();
}); });
$(document).on("input", "#world_info_budget", function () { $(document).on("input", "#world_info_budget", function () {
world_info_budget = Number($(this).val()); world_info_budget = Number($(this).val());
$("#world_info_budget_counter").html(`${$(this).val()} Tokens`); $("#world_info_budget_counter").text($(this).val());
saveSettingsDebounced(); saveSettingsDebounced();
}); });
$(document).on("input", "#world_info_recursive", function () {
world_info_recursive = !!$(this).prop('checked');
saveSettingsDebounced();
})
}); });