Add more control over memory

This commit is contained in:
SillyLossy
2023-03-06 01:02:01 +02:00
parent 15850b04d1
commit bf42da72b4
2 changed files with 99 additions and 8 deletions

View File

@@ -37,11 +37,28 @@ const defaultSettings = {
maxShortMemory: 2048,
shortMemoryStep: 16,
longMemoryStep: 8,
repetitionPenaltyStep: 0.05,
repetitionPenalty: 1.0,
maxRepetitionPenalty: 2.0,
minRepetitionPenalty: 1.0,
temperature: 1.0,
minTemperature: 0.1,
maxTemperature: 2.0,
temperatureStep: 0.05,
lengthPenalty: 1,
minLengthPenalty: 0,
maxLengthPenalty: 2,
lengthPenaltyStep: 0.05,
memoryFrozen: false,
};
const settings = {
shortMemoryLength: defaultSettings.shortMemoryLength,
longMemoryLength: defaultSettings.longMemoryLength,
repetitionPenalty: defaultSettings.repetitionPenalty,
temperature: defaultSettings.temperature,
lengthPenalty: defaultSettings.lengthPenalty,
memoryFrozen: defaultSettings.memoryFrozen,
}
function saveSettings() {
@@ -55,6 +72,10 @@ function loadSettings() {
Object.assign(settings, savedSettings);
$('#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');
}
}
@@ -63,6 +84,11 @@ function onMemoryShortInput() {
settings.shortMemoryLength = Number(value);
$('#memory_short_length_tokens').text(value);
saveSettings();
// Don't let long buffer be bigger than short
if (settings.longMemoryLength > settings.shortMemoryLength) {
$('#memory_long_length').val(settings.shortMemoryLength).trigger('input');
}
}
function onMemoryLongInput() {
@@ -70,6 +96,38 @@ function onMemoryLongInput() {
settings.longMemoryLength = Number(value);
$('#memory_long_length_tokens').text(value);
saveSettings();
// Don't let long buffer be bigger than short
if (settings.longMemoryLength > settings.shortMemoryLength) {
$('#memory_short_length').val(settings.longMemoryLength).trigger('input');
}
}
function onMemoryRepetitionPenaltyInput() {
const value = $(this).val();
settings.repetitionPenalty = Number(value);
$('#memory_repetition_penalty_value').text(settings.repetitionPenalty.toFixed(2));
saveSettings();
}
function onMemoryTemperatureInput() {
const value = $(this).val();
settings.temperature = Number(value);
$('#memory_temperature_value').text(settings.temperature.toFixed(2));
saveSettings();
}
function onMemoryLengthPenaltyInput() {
const value = $(this).val();
settings.lengthPenalty = Number(value);
$('#memory_length_penalty_value').text(settings.lengthPenalty.toFixed(2));
saveSettings();
}
function onMemoryFrozenInput() {
const value = Boolean($(this).prop('checked'));
settings.memoryFrozen = value;
saveSettings();
}
function saveLastValues() {
@@ -113,8 +171,8 @@ async function moduleWorker() {
return;
}
// Currently summarizing - skip
if (inApiCall) {
// Currently summarizing or frozen state - skip
if (inApiCall || settings.memoryFrozen) {
return;
}
@@ -204,6 +262,9 @@ async function summarizeChat(context) {
params: {
min_length: settings.longMemoryLength * 0.8,
max_length: settings.longMemoryLength,
repetition_penalty: settings.repetitionPenalty,
temperature: settings.temperature,
length_penalty: settings.lengthPenalty,
}
})
});
@@ -254,11 +315,15 @@ function onMemoryContentInput() {
function setMemoryContext(value, saveToMessage) {
const context = getContext();
context.setExtensionPrompt(formatMemoryValue(value));
$('#memory_contents').val(value.trim());
$('#memory_contents').val(value);
if (saveToMessage && context.chat.length) {
const mes = context.chat[context.chat.length - 1];
!mes.extra && (mes.extra = {});
if (!mes.extra) {
mes.extra = {};
}
mes.extra.memory = value;
}
}
@@ -269,13 +334,19 @@ $(document).ready(function () {
<h4>Memory</h4>
<div id="memory_settings">
<label for="memory_contents">Memory contents</label>
<textarea id="memory_contents" class="text_pole" rows="4" placeholder="Context will be generated here...">
</textarea>
<textarea id="memory_contents" class="text_pole" rows="8" placeholder="Context will be generated here..."></textarea>
<label for="memory_frozen"><input id="memory_frozen" type="checkbox" /> Freeze context (don't auto-update)</label>
<input id="memory_restore" type="button" value="Restore previous state" />
<label for="memory_short_length">Memory summarization [short-term] length (<span id="memory_short_length_tokens"></span> tokens)</label>
<input id="memory_short_length" type="range" value="${defaultSettings.shortMemoryLength}" min="${defaultSettings.minShortMemory}" max="${defaultSettings.maxShortMemory}" step="${defaultSettings.shortMemoryStep}" />
<label for="memory_long_length">Memory context [long-term] length (<span id="memory_long_length_tokens"></span> tokens)</label>
<input id="memory_long_length" type="range" value="${defaultSettings.longMemoryLength}" min="${defaultSettings.minLongMemory}" max="${defaultSettings.maxLongMemory}" step="${defaultSettings.longMemoryStep}" />
<input id="memory_restore" type="button" value="Restore previous state" />
<label for="memory_temperature">Summarization temperature (<span id="memory_temperature_value"></span>)</label>
<input id="memory_temperature" type="range" value="${defaultSettings.temperature}" min="${defaultSettings.minTemperature}" max="${defaultSettings.maxTemperature}" step="${defaultSettings.temperatureStep}" />
<label for="memory_repetition_penalty">Summarization repetition penalty (<span id="memory_repetition_penalty_value"></span>)</label>
<input id="memory_repetition_penalty" type="range" value="${defaultSettings.repetitionPenalty}" min="${defaultSettings.minRepetitionPenalty}" max="${defaultSettings.maxRepetitionPenalty}" step="${defaultSettings.repetitionPenaltyStep}" />
<label for="memory_length_penalty">Summarization length penalty (<span id="memory_length_penalty_value"></span>)</label>
<input id="memory_length_penalty" type="range" value="${defaultSettings.lengthPenalty}" min="${defaultSettings.minLengthPenalty}" max="${defaultSettings.maxLengthPenalty}" step="${defaultSettings.lengthPenaltyStep}" />
</div>
`;
$('#extensions_settings').append(settingsHtml);
@@ -283,6 +354,10 @@ $(document).ready(function () {
$('#memory_contents').on('input', onMemoryContentInput);
$('#memory_long_length').on('input', onMemoryLongInput);
$('#memory_short_length').on('input', onMemoryShortInput);
$('#memory_repetition_penalty').on('input', onMemoryRepetitionPenaltyInput);
$('#memory_temperature').on('input', onMemoryTemperatureInput);
$('#memory_length_penalty').on('input', onMemoryLengthPenaltyInput);
$('#memory_frozen').on('input', onMemoryFrozenInput);
}
addExtensionControls();

View File

@@ -4,7 +4,9 @@
}
#memory_settings textarea {
margin-bottom: 20px;
margin-bottom: 10px;
font-size: 14px;
line-height: 1.2;
}
#memory_settings input[type="range"] {
@@ -19,7 +21,21 @@
width: fit-content;
}
#memory_settings input[type="button"]:hover {
background-color: #ffffff11;
}
#memory_settings label {
margin-left: 10px;
margin-bottom: 10px;
}
label[for="memory_frozen"] {
display: flex;
align-items: center;
margin-left: 0 !important;
}
label[for="memory_frozen"] input {
margin-right: 10px;
}