Allow setting floating prompt for each chat. Add extensions management

This commit is contained in:
SillyLossy
2023-03-18 23:55:13 +02:00
parent 92d4a7f19e
commit 6b623cead9
4 changed files with 121 additions and 13 deletions

View File

@ -2,8 +2,6 @@ import { getContext } from "../../extensions.js";
export { MODULE_NAME };
const MODULE_NAME = '2_floating_prompt'; // <= Deliberate, for sorting lower than memory
const PROMPT_KEY = 'extensions_floating_prompt';
const INTERVAL_KEY = 'extensions_floating_interval';
const UPDATE_INTERVAL = 1000;
let lastMessageNumber = null;
@ -18,20 +16,29 @@ function onExtensionFloatingIntervalInput() {
saveSettings();
}
function getLocalStorageKeys() {
const context = getContext();
const keySuffix = context.groupId ? context.groupId : `${context.characters[context.characterId].name}_${context.chatId}`;
return { prompt: `extensions_floating_prompt_${keySuffix}`, interval: `extensions_floating_interval_${keySuffix}` };
}
function loadSettings() {
const prompt = localStorage.getItem(PROMPT_KEY);
const interval = localStorage.getItem(INTERVAL_KEY);
const keys = getLocalStorageKeys();
const prompt = localStorage.getItem(keys.prompt) ?? '';
const interval = localStorage.getItem(keys.interval) ?? 0;
$('#extension_floating_prompt').val(prompt).trigger('input');
$('#extension_floating_interval').val(interval).trigger('input');
}
function saveSettings() {
localStorage.setItem(PROMPT_KEY, $('#extension_floating_prompt').val());
localStorage.setItem(INTERVAL_KEY, $('#extension_floating_interval').val());
const keys = getLocalStorageKeys();
localStorage.setItem(keys.prompt, $('#extension_floating_prompt').val());
localStorage.setItem(keys.interval, $('#extension_floating_interval').val());
}
async function moduleWorker() {
const context = getContext();
loadSettings();
// take the count of messages
lastMessageNumber = Array.isArray(context.chat) && context.chat.length ? context.chat.filter(m => m.is_user).length : 0;
@ -41,7 +48,9 @@ async function moduleWorker() {
return;
}
const messagesTillInsertion = (lastMessageNumber % promptInsertionInterval);
const messagesTillInsertion = lastMessageNumber >= promptInsertionInterval
? (lastMessageNumber % promptInsertionInterval)
: (promptInsertionInterval - lastMessageNumber);
const shouldAddPrompt = messagesTillInsertion == 0;
const prompt = shouldAddPrompt ? $('#extension_floating_prompt').val() : '';
context.setExtensionPrompt(MODULE_NAME, prompt);
@ -67,6 +76,5 @@ async function moduleWorker() {
}
addExtensionsSettings();
loadSettings();
setInterval(moduleWorker, UPDATE_INTERVAL);
})();