diff --git a/public/index.html b/public/index.html index e8a4e66c8..2a9e62565 100644 --- a/public/index.html +++ b/public/index.html @@ -1257,19 +1257,50 @@ -
-

- Scan Depth ? -

- - -
-
-

- Token Budget ? -

- - +
+
+
+ Scan Depth ? +
+
+
+ +
+
+
+ depth +
+
+
+
+ +
+
+ Token Budget ? +
+
+
+ +
+
+
+ budget +
+
+
+
+ +
+ +
diff --git a/public/notes/content.md b/public/notes/content.md index 138eaa424..50eaabac4 100644 --- a/public/notes/content.md +++ b/public/notes/content.md @@ -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. +### 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 ### Basic Settings diff --git a/public/script.js b/public/script.js index 00af8459c..448def634 100644 --- a/public/script.js +++ b/public/script.js @@ -24,6 +24,7 @@ import { selectImportedWorldInfo, setWorldInfoSettings, deleteWorldInfo, + world_info_recursive, } from "./scripts/world-info.js"; import { @@ -3174,6 +3175,7 @@ async function saveSettings(type) { world_info: world_info, world_info_depth: world_info_depth, world_info_budget: world_info_budget, + world_info_recursive: world_info_recursive, textgenerationwebui_settings: textgenerationwebui_settings, swipes: swipes, horde_settings: horde_settings, diff --git a/public/scripts/world-info.js b/public/scripts/world-info.js index e8f9ee1e6..028fb0720 100644 --- a/public/scripts/world-info.js +++ b/public/scripts/world-info.js @@ -6,6 +6,7 @@ export { world_info_data, world_info_budget, world_info_depth, + world_info_recursive, world_names, imported_world_name, checkWorldInfo, @@ -21,6 +22,7 @@ let world_info_data = null; let world_info_depth = 2; let world_info_budget = 128; let is_world_edit_open = false; +let world_info_recursive = false; let imported_world_name = ""; const saveWorldDebounced = debounce(async () => await _save(), 500); const saveSettingsDebounced = debounce(() => saveSettings(), 500); @@ -47,13 +49,17 @@ function setWorldInfoSettings(settings, data) { world_info_depth = Number(settings.world_info_depth); if (settings.world_info_budget !== undefined) 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_budget_counter").html(`${world_info_budget} Tokens`); + $("#world_info_budget_counter").text(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 : []; 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] .map((x) => world_info_data.entries[x]) .sort((a, b) => sortedEntries.indexOf(a) - sortedEntries.indexOf(b)); @@ -665,13 +671,18 @@ $(document).ready(() => { $(document).on("input", "#world_info_depth", function () { world_info_depth = Number($(this).val()); - $("#world_info_depth_counter").html(`${$(this).val()} Messages`); + $("#world_info_depth_counter").text($(this).val()); saveSettingsDebounced(); }); $(document).on("input", "#world_info_budget", function () { world_info_budget = Number($(this).val()); - $("#world_info_budget_counter").html(`${$(this).val()} Tokens`); + $("#world_info_budget_counter").text($(this).val()); saveSettingsDebounced(); }); + + $(document).on("input", "#world_info_recursive", function () { + world_info_recursive = !!$(this).prop('checked'); + saveSettingsDebounced(); + }) }); \ No newline at end of file