diff --git a/public/index.html b/public/index.html index 60726aacf..2232d558d 100644 --- a/public/index.html +++ b/public/index.html @@ -3622,6 +3622,7 @@
Min Activations +
@@ -3635,6 +3636,14 @@
+
+ + Max Recursion Steps +
+
+ + +
diff --git a/public/scripts/world-info.js b/public/scripts/world-info.js index 989b4b922..29cb62a1a 100644 --- a/public/scripts/world-info.js +++ b/public/scripts/world-info.js @@ -73,6 +73,7 @@ export let world_info_match_whole_words = false; export let world_info_use_group_scoring = false; export let world_info_character_strategy = world_info_insertion_strategy.character_first; export let world_info_budget_cap = 0; +export let world_info_max_recursion_steps = 0; const saveWorldDebounced = debounce(async (name, data) => await _save(name, data), debounce_timeout.relaxed); const saveSettingsDebounced = debounce(() => { Object.assign(world_info, { globalSelect: selected_world_info }); @@ -710,6 +711,7 @@ export function getWorldInfoSettings() { world_info_character_strategy, world_info_budget_cap, world_info_use_group_scoring, + world_info_max_recursion_steps, }; } @@ -796,6 +798,8 @@ export function setWorldInfoSettings(settings, data) { world_info_budget_cap = Number(settings.world_info_budget_cap); if (settings.world_info_use_group_scoring !== undefined) world_info_use_group_scoring = Boolean(settings.world_info_use_group_scoring); + if (settings.world_info_max_recursion_steps !== undefined) + world_info_max_recursion_steps = Number(settings.world_info_max_recursion_steps); // Migrate old settings if (world_info_budget > 100) { @@ -844,6 +848,9 @@ export function setWorldInfoSettings(settings, data) { $('#world_info_budget_cap').val(world_info_budget_cap); $('#world_info_budget_cap_counter').val(world_info_budget_cap); + $('#world_info_max_recursion_steps').val(world_info_max_recursion_steps); + $('#world_info_max_recursion_steps_counter').val(world_info_max_recursion_steps); + world_names = data.world_names?.length ? data.world_names : []; // Add to existing selected WI if it exists @@ -3723,6 +3730,12 @@ export async function checkWorldInfo(chat, maxContext, isDryRun) { console.debug(`[WI] --- SEARCHING ENTRIES (on ${sortedEntries.length} entries) ---`); while (scanState) { + //if world_info_max_recursion_steps is non-zero min activations are disabled, and vice versa + if (world_info_max_recursion_steps && world_info_max_recursion_steps <= count) { + console.debug('[WI] Search stopped by reaching max recursion steps', world_info_max_recursion_steps); + break; + } + // Track how many times the loop has run. May be useful for debugging. count++; @@ -4762,8 +4775,13 @@ jQuery(() => { $('#world_info_min_activations').on('input', function () { world_info_min_activations = Number($(this).val()); - $('#world_info_min_activations_counter').val($(this).val()); - saveSettings(); + $('#world_info_min_activations_counter').val(world_info_min_activations); + + if (world_info_min_activations !== 0) { + $('#world_info_max_recursion_steps').val(0).trigger('input'); + } else { + saveSettings(); + } }); $('#world_info_min_activations_depth_max').on('input', function () { @@ -4819,6 +4837,16 @@ jQuery(() => { saveSettings(); }); + $('#world_info_max_recursion_steps').on('input', function () { + world_info_max_recursion_steps = Number($(this).val()); + $('#world_info_max_recursion_steps_counter').val(world_info_max_recursion_steps); + if (world_info_max_recursion_steps !== 0) { + $('#world_info_min_activations').val(0).trigger('input'); + } else { + saveSettings(); + } + }); + $('#world_button').on('click', async function (event) { const chid = $('#set_character_world').data('chid');