diff --git a/public/index.html b/public/index.html index a185ae024..2d84456f9 100644 --- a/public/index.html +++ b/public/index.html @@ -2141,7 +2141,7 @@
- Active World(s) + Active World(s) for all chats
+
+
+
+ 0 +
+
+
+
+ (0 = disabled) +
+
diff --git a/public/script.js b/public/script.js index f42936166..b32ef505b 100644 --- a/public/script.js +++ b/public/script.js @@ -21,17 +21,11 @@ import { } from "./scripts/textgen-settings.js"; import { - world_info_budget, - world_info_depth, world_info, getWorldInfoPrompt, + getWorldInfoSettings, setWorldInfoSettings, - world_info_recursive, - world_info_overflow_alert, - world_info_case_sensitive, - world_info_match_whole_words, world_names, - world_info_character_strategy, importEmbeddedWorldInfo, checkEmbeddedWorld, setWorldInfoButtonClass, @@ -5163,7 +5157,7 @@ async function getSettings(type) { api_server = settings.api_server; $("#api_url_text").val(api_server); - setWorldInfoSettings(settings, data); + setWorldInfoSettings(settings.world_info_settings ?? settings, data); api_server_textgenerationwebui = settings.api_server_textgenerationwebui; $("#textgenerationwebui_api_url_text").val( @@ -5211,14 +5205,7 @@ async function saveSettings(type) { amount_gen: amount_gen, max_context: max_context, main_api: main_api, - world_info: world_info, - world_info_depth: world_info_depth, - world_info_budget: world_info_budget, - world_info_recursive: world_info_recursive, - world_info_overflow_alert: world_info_overflow_alert, - world_info_case_sensitive: world_info_case_sensitive, - world_info_match_whole_words: world_info_match_whole_words, - world_info_character_strategy: world_info_character_strategy, + world_info_settings: getWorldInfoSettings(), 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 8be168f01..a3e2ce990 100644 --- a/public/scripts/world-info.js +++ b/public/scripts/world-info.js @@ -14,6 +14,7 @@ export { world_info_case_sensitive, world_info_match_whole_words, world_info_character_strategy, + world_info_budget_cap, world_names, checkWorldInfo, deleteWorldInfo, @@ -37,6 +38,7 @@ let world_info_overflow_alert = false; let world_info_case_sensitive = false; let world_info_match_whole_words = false; let world_info_character_strategy = world_info_insertion_strategy.character_first; +let world_info_budget_cap = 0; const saveWorldDebounced = debounce(async (name, data) => await _save(name, data), 1000); const saveSettingsDebounced = debounce(() => { Object.assign(world_info, { globalSelect: selected_world_info }) @@ -44,6 +46,20 @@ const saveSettingsDebounced = debounce(() => { }, 1000); const sortFn = (a, b) => b.order - a.order; +export function getWorldInfoSettings() { + return { + world_info, + world_info_depth, + world_info_budget, + world_info_recursive, + world_info_overflow_alert, + world_info_case_sensitive, + world_info_match_whole_words, + world_info_character_strategy, + world_info_budget_cap, + } +} + const world_info_position = { before: 0, after: 1, @@ -80,6 +96,8 @@ function setWorldInfoSettings(settings, data) { world_info_match_whole_words = Boolean(settings.world_info_match_whole_words); if (settings.world_info_character_strategy !== undefined) world_info_character_strategy = Number(settings.world_info_character_strategy); + if (settings.world_info_budget_cap !== undefined) + world_info_budget_cap = Number(settings.world_info_budget_cap); // Migrate old settings if (world_info_budget > 100) { @@ -113,6 +131,9 @@ function setWorldInfoSettings(settings, data) { $(`#world_info_character_strategy option[value='${world_info_character_strategy}']`).prop('selected', true); $("#world_info_character_strategy").val(world_info_character_strategy); + $("#world_info_budget_cap").val(world_info_budget_cap); + $("#world_info_budget_cap_counter").text(world_info_budget_cap); + world_names = data.world_names?.length ? data.world_names : []; // Add to existing selected WI if it exists @@ -922,8 +943,14 @@ async function checkWorldInfo(chat, maxContext) { let failedProbabilityChecks = new Set(); let allActivatedText = ''; - const budget = Math.round(world_info_budget * maxContext / 100) || 1; - console.debug(`Context size: ${maxContext}; WI budget: ${budget} (${world_info_budget}%)`); + let budget = Math.round(world_info_budget * maxContext / 100) || 1; + + if (world_info_budget_cap > 0 && budget > world_info_budget_cap) { + console.debug(`Budget ${budget} exceeds cap ${world_info_budget_cap}, using cap`); + budget = world_info_budget_cap; + } + + console.debug(`Context size: ${maxContext}; WI budget: ${budget} (max% = ${world_info_budget}%, cap = ${world_info_budget_cap})`); const sortedEntries = await getSortedEntries(); if (sortedEntries.length === 0) { @@ -1515,6 +1542,12 @@ jQuery(() => { saveSettingsDebounced(); }); + $('#world_info_budget_cap').on('input', function () { + world_info_budget_cap = Number($(this).val()); + $("#world_info_budget_cap_counter").text(world_info_budget_cap); + saveSettingsDebounced(); + }); + $('#world_button').on('click', async function () { const chid = $('#set_character_world').data('chid'); diff --git a/public/style.css b/public/style.css index 16af7fa75..f360d16a6 100644 --- a/public/style.css +++ b/public/style.css @@ -2259,6 +2259,11 @@ grammarly-extension { gap: 5px; } +.budget_cap_note { + flex-basis: 100%; + line-height: 0.1; +} + #world_popup { min-height: 100px; min-width: 100px;