Migrate memory to settings.json

This commit is contained in:
SillyLossy
2023-04-07 21:47:00 +03:00
parent 9aeeda3602
commit 948cf4c20c

View File

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