diff --git a/public/scripts/extensions/memory/index.js b/public/scripts/extensions/memory/index.js index 7634d9c6c..d8cdb534e 100644 --- a/public/scripts/extensions/memory/index.js +++ b/public/scripts/extensions/memory/index.js @@ -1,10 +1,9 @@ import { getStringHash, debounce } from "../../utils.js"; -import { getContext, getApiUrl } from "../../extensions.js"; -import { extension_prompt_types } from "../../../script.js"; +import { getContext, getApiUrl, extension_settings } from "../../extensions.js"; +import { extension_prompt_types, saveSettingsDebounced } from "../../../script.js"; export { MODULE_NAME }; const MODULE_NAME = '1_memory'; -const SETTINGS_KEY = 'extensions_memory_settings'; const UPDATE_INTERVAL = 1000; let lastCharacterId = null; @@ -23,7 +22,7 @@ const defaultSettings = { longMemoryLength: 128, shortMemoryLength: 512, minShortMemory: 128, - maxShortMemory: 2048, + maxShortMemory: 1024, shortMemoryStep: 16, longMemoryStep: 8, repetitionPenaltyStep: 0.05, @@ -41,80 +40,83 @@ const defaultSettings = { memoryFrozen: false, }; -const settings = { - shortMemoryLength: defaultSettings.shortMemoryLength, - longMemoryLength: defaultSettings.longMemoryLength, - repetitionPenalty: defaultSettings.repetitionPenalty, - temperature: defaultSettings.temperature, - lengthPenalty: defaultSettings.lengthPenalty, - memoryFrozen: defaultSettings.memoryFrozen, -} +// TODO Delete in next release +function migrateFromLocalStorage() { + const SETTINGS_KEY = 'extensions_memory_settings'; + const settings = localStorage.getItem(SETTINGS_KEY); -function saveSettings() { - localStorage.setItem(SETTINGS_KEY, JSON.stringify(settings)); + if (settings !== null) { + const savedSettings = JSON.parse(settings); + Object.assign(extension_settings.memory, savedSettings); + localStorage.removeItem(SETTINGS_KEY); + saveSettingsDebounced(); + } } function loadSettings() { - const savedSettings = JSON.parse(localStorage.getItem(SETTINGS_KEY)); - Object.assign(settings, savedSettings ?? defaultSettings) + migrateFromLocalStorage(); - $('#memory_long_length').val(settings.longMemoryLength).trigger('input'); - $('#memory_short_length').val(settings.shortMemoryLength).trigger('input'); - $('#memory_repetition_penalty').val(settings.repetitionPenalty).trigger('input'); - $('#memory_temperature').val(settings.temperature).trigger('input'); - $('#memory_length_penalty').val(settings.lengthPenalty).trigger('input'); - $('#memory_frozen').prop('checked', settings.memoryFrozen).trigger('input'); + if (Object.keys(extension_settings.memory).length === 0) { + Object.assign(extension_settings.memory, defaultSettings); + } + + $('#memory_long_length').val(extension_settings.memory.longMemoryLength).trigger('input'); + $('#memory_short_length').val(extension_settings.memory.shortMemoryLength).trigger('input'); + $('#memory_repetition_penalty').val(extension_settings.memory.repetitionPenalty).trigger('input'); + $('#memory_temperature').val(extension_settings.memory.temperature).trigger('input'); + $('#memory_length_penalty').val(extension_settings.memory.lengthPenalty).trigger('input'); + $('#memory_frozen').prop('checked', extension_settings.memory.memoryFrozen).trigger('input'); } function onMemoryShortInput() { const value = $(this).val(); - settings.shortMemoryLength = Number(value); + extension_settings.memory.shortMemoryLength = Number(value); $('#memory_short_length_tokens').text(value); - saveSettings(); + saveSettingsDebounced(); // Don't let long buffer be bigger than short - if (settings.longMemoryLength > settings.shortMemoryLength) { - $('#memory_long_length').val(settings.shortMemoryLength).trigger('input'); + if (extension_settings.memory.longMemoryLength > extension_settings.memory.shortMemoryLength) { + $('#memory_long_length').val(extension_settings.memory.shortMemoryLength).trigger('input'); } } function onMemoryLongInput() { const value = $(this).val(); - settings.longMemoryLength = Number(value); + extension_settings.memory.longMemoryLength = Number(value); $('#memory_long_length_tokens').text(value); - saveSettings(); + saveSettingsDebounced(); // Don't let long buffer be bigger than short - if (settings.longMemoryLength > settings.shortMemoryLength) { - $('#memory_short_length').val(settings.longMemoryLength).trigger('input'); + if (extension_settings.memory.longMemoryLength > extension_settings.memory.shortMemoryLength) { + $('#memory_short_length').val(extension_settings.memory.longMemoryLength).trigger('input'); } } function onMemoryRepetitionPenaltyInput() { const value = $(this).val(); - settings.repetitionPenalty = Number(value); - $('#memory_repetition_penalty_value').text(settings.repetitionPenalty.toFixed(2)); - saveSettings(); + extension_settings.memory.repetitionPenalty = Number(value); + $('#memory_repetition_penalty_value').text(extension_settings.memory.repetitionPenalty.toFixed(2)); + saveSettingsDebounced(); } function onMemoryTemperatureInput() { const value = $(this).val(); - settings.temperature = Number(value); - $('#memory_temperature_value').text(settings.temperature.toFixed(2)); - saveSettings(); + extension_settings.memory.temperature = Number(value); + $('#memory_temperature_value').text(extension_settings.memory.temperature.toFixed(2)); + saveSettingsDebounced(); } function onMemoryLengthPenaltyInput() { const value = $(this).val(); - settings.lengthPenalty = Number(value); - $('#memory_length_penalty_value').text(settings.lengthPenalty.toFixed(2)); - saveSettings(); + extension_settings.memory.lengthPenalty = Number(value); + $('#memory_length_penalty_value').text(extension_settings.memory.lengthPenalty.toFixed(2)); + saveSettingsDebounced(); } function onMemoryFrozenInput() { const value = Boolean($(this).prop('checked')); - settings.memoryFrozen = value; - saveSettings(); + extension_settings.memory.memoryFrozen = value; + saveSettingsDebounced(); } function saveLastValues() { @@ -159,7 +161,7 @@ async function moduleWorker() { } // Currently summarizing or frozen state - skip - if (inApiCall || settings.memoryFrozen) { + if (inApiCall || extension_settings.memory.memoryFrozen) { return; } @@ -221,14 +223,14 @@ async function summarizeChat(context) { memoryBuffer.push(entry); // check if token limit was reached - if (context.encode(getMemoryString()).length >= settings.shortMemoryLength) { + if (context.encode(getMemoryString()).length >= extension_settings.memory.shortMemoryLength) { break; } } const resultingString = getMemoryString(); - if (context.encode(resultingString).length < settings.shortMemoryLength) { + if (context.encode(resultingString).length < extension_settings.memory.shortMemoryLength) { return; } @@ -247,11 +249,11 @@ async function summarizeChat(context) { body: JSON.stringify({ text: resultingString, params: { - min_length: settings.longMemoryLength * 0.8, - max_length: settings.longMemoryLength, - repetition_penalty: settings.repetitionPenalty, - temperature: settings.temperature, - length_penalty: settings.lengthPenalty, + min_length: extension_settings.memory.longMemoryLength * 0.8, + max_length: extension_settings.memory.longMemoryLength, + repetition_penalty: extension_settings.memory.repetitionPenalty, + temperature: extension_settings.memory.temperature, + length_penalty: extension_settings.memory.lengthPenalty, } }) });