mirror of
https://github.com/SillyTavern/SillyTavern.git
synced 2025-06-05 21:59:27 +02:00
Migrate author's note to chat metadata
This commit is contained in:
@ -1,46 +1,57 @@
|
||||
import { getContext } from "../../extensions.js";
|
||||
import { chat_metadata, saveSettingsDebounced } from "../../../script.js";
|
||||
import { extension_settings, getContext } from "../../extensions.js";
|
||||
import { debounce } from "../../utils.js";
|
||||
export { MODULE_NAME };
|
||||
|
||||
const saveChatDebounced = debounce(async () => await getContext().saveChat(), 1000);
|
||||
|
||||
const MODULE_NAME = '2_floating_prompt'; // <= Deliberate, for sorting lower than memory
|
||||
const UPDATE_INTERVAL = 1000;
|
||||
|
||||
let lastMessageNumber = null;
|
||||
let promptInsertionInterval = 1;
|
||||
let promptInsertionPosition = 1;
|
||||
let promptInsertionDepth = 0;
|
||||
let defaultNote = '';
|
||||
const DEFAULT_DEPTH = 4;
|
||||
const DEFAULT_POSITION = 1;
|
||||
const DEFAULT_INTERVAL = 1;
|
||||
|
||||
function onExtensionFloatingPromptInput() {
|
||||
saveSettings();
|
||||
const metadata_keys = {
|
||||
prompt: 'note_prompt',
|
||||
interval: 'note_interval',
|
||||
depth: 'note_depth',
|
||||
position: 'note_position',
|
||||
}
|
||||
|
||||
function onExtensionFloatingIntervalInput() {
|
||||
promptInsertionInterval = Number($(this).val());
|
||||
saveSettings();
|
||||
async function onExtensionFloatingPromptInput() {
|
||||
chat_metadata[metadata_keys.prompt] = $(this).val();
|
||||
saveChatDebounced();
|
||||
}
|
||||
|
||||
function onExtensionFloatingDepthInput() {
|
||||
async function onExtensionFloatingIntervalInput() {
|
||||
chat_metadata[metadata_keys.interval] = Number($(this).val());
|
||||
saveChatDebounced();
|
||||
}
|
||||
|
||||
async function onExtensionFloatingDepthInput() {
|
||||
let value = Number($(this).val());
|
||||
|
||||
if (promptInsertionDepth < 0) {
|
||||
if (value < 0) {
|
||||
value = Math.abs(value);
|
||||
$(this).val(value);
|
||||
}
|
||||
|
||||
promptInsertionDepth = value;
|
||||
saveSettings();
|
||||
chat_metadata[metadata_keys.depth] = value;
|
||||
saveChatDebounced();
|
||||
}
|
||||
|
||||
function onExtensionFloatingPositionInput(e) {
|
||||
promptInsertionPosition = e.target.value;
|
||||
saveSettings();
|
||||
async function onExtensionFloatingPositionInput(e) {
|
||||
chat_metadata[metadata_keys.position] = e.target.value;
|
||||
saveChatDebounced();
|
||||
}
|
||||
|
||||
function onExtensionFloatingDefaultInput() {
|
||||
defaultNote = $(this).val();
|
||||
saveSettings();
|
||||
extension_settings.note.default = $(this).val();
|
||||
saveSettingsDebounced();
|
||||
}
|
||||
|
||||
// TODO Remove in next release
|
||||
function getLocalStorageKeys() {
|
||||
const context = getContext();
|
||||
|
||||
@ -65,27 +76,60 @@ function getLocalStorageKeys() {
|
||||
};
|
||||
}
|
||||
|
||||
function loadSettings() {
|
||||
function migrateFromLocalStorage() {
|
||||
const keys = getLocalStorageKeys();
|
||||
defaultNote = localStorage.getItem(keys.default) ?? '';
|
||||
const prompt = localStorage.getItem(keys.prompt) ?? defaultNote ?? '';
|
||||
const interval = localStorage.getItem(keys.interval) ?? 1;
|
||||
const position = localStorage.getItem(keys.position) ?? 1;
|
||||
const depth = localStorage.getItem(keys.depth) ?? 0;
|
||||
$('#extension_floating_prompt').val(prompt).trigger('input');
|
||||
$('#extension_floating_interval').val(interval).trigger('input');
|
||||
$('#extension_floating_depth').val(depth).trigger('input');
|
||||
$(`input[name="extension_floating_position"][value="${position}"]`).prop('checked', true).trigger('change');
|
||||
$('#extension_floating_default').val(defaultNote);
|
||||
const defaultNote = localStorage.getItem(keys.default);
|
||||
const prompt = localStorage.getItem(keys.prompt);
|
||||
const interval = localStorage.getItem(keys.interval);
|
||||
const position = localStorage.getItem(keys.position);
|
||||
const depth = localStorage.getItem(keys.depth);
|
||||
|
||||
if (defaultNote !== null) {
|
||||
if (typeof extension_settings.note !== 'object') {
|
||||
extension_settings.note = {};
|
||||
}
|
||||
|
||||
extension_settings.note.default = defaultNote;
|
||||
saveSettingsDebounced();
|
||||
localStorage.removeItem(keys.default);
|
||||
}
|
||||
|
||||
if (chat_metadata) {
|
||||
if (interval !== null) {
|
||||
chat_metadata[metadata_keys.interval] = interval;
|
||||
localStorage.removeItem(keys.interval);
|
||||
}
|
||||
|
||||
if (depth !== null) {
|
||||
chat_metadata[metadata_keys.depth] = depth;
|
||||
localStorage.removeItem(keys.depth);
|
||||
}
|
||||
|
||||
if (position !== null) {
|
||||
chat_metadata[metadata_keys.position] = position;
|
||||
localStorage.removeItem(keys.position);
|
||||
}
|
||||
|
||||
if (prompt !== null) {
|
||||
chat_metadata[metadata_keys.prompt] = prompt;
|
||||
localStorage.removeItem(keys.prompt);
|
||||
saveChatDebounced();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function saveSettings() {
|
||||
const keys = getLocalStorageKeys();
|
||||
localStorage.setItem(keys.prompt, $('#extension_floating_prompt').val());
|
||||
localStorage.setItem(keys.interval, $('#extension_floating_interval').val());
|
||||
localStorage.setItem(keys.depth, $('#extension_floating_depth').val());
|
||||
localStorage.setItem(keys.position, $('input:radio[name="extension_floating_position"]:checked').val());
|
||||
localStorage.setItem(keys.default, defaultNote);
|
||||
|
||||
function loadSettings() {
|
||||
migrateFromLocalStorage();
|
||||
chat_metadata[metadata_keys.prompt] = chat_metadata[metadata_keys.prompt] ?? extension_settings.note.default ?? '';
|
||||
chat_metadata[metadata_keys.interval] = chat_metadata[metadata_keys.interval] ?? DEFAULT_INTERVAL;
|
||||
chat_metadata[metadata_keys.position] = chat_metadata[metadata_keys.position] ?? DEFAULT_POSITION;
|
||||
chat_metadata[metadata_keys.depth] = chat_metadata[metadata_keys.depth] ?? DEFAULT_DEPTH;
|
||||
$('#extension_floating_prompt').val(chat_metadata[metadata_keys.prompt]);
|
||||
$('#extension_floating_interval').val(chat_metadata[metadata_keys.interval]);
|
||||
$('#extension_floating_depth').val(chat_metadata[metadata_keys.depth]);
|
||||
$(`input[name="extension_floating_position"][value="${chat_metadata[metadata_keys.position]}"]`).prop('checked', true);
|
||||
$('#extension_floating_default').val(extension_settings.note.default);
|
||||
}
|
||||
|
||||
async function moduleWorker() {
|
||||
@ -98,24 +142,24 @@ async function moduleWorker() {
|
||||
loadSettings();
|
||||
|
||||
// take the count of messages
|
||||
lastMessageNumber = Array.isArray(context.chat) && context.chat.length ? context.chat.filter(m => m.is_user).length : 0;
|
||||
let lastMessageNumber = Array.isArray(context.chat) && context.chat.length ? context.chat.filter(m => m.is_user).length : 0;
|
||||
|
||||
// special case for new chat
|
||||
if (Array.isArray(context.chat) && context.chat.length === 1) {
|
||||
lastMessageNumber = 1;
|
||||
}
|
||||
|
||||
if (lastMessageNumber <= 0 || promptInsertionInterval <= 0) {
|
||||
if (lastMessageNumber <= 0 || chat_metadata[metadata_keys.interval] <= 0) {
|
||||
$('#extension_floating_counter').text('No');
|
||||
return;
|
||||
}
|
||||
|
||||
const messagesTillInsertion = lastMessageNumber >= promptInsertionInterval
|
||||
? (lastMessageNumber % promptInsertionInterval)
|
||||
: (promptInsertionInterval - lastMessageNumber);
|
||||
const messagesTillInsertion = lastMessageNumber >= chat_metadata[metadata_keys.interval]
|
||||
? (lastMessageNumber % chat_metadata[metadata_keys.interval])
|
||||
: (chat_metadata[metadata_keys.interval] - lastMessageNumber);
|
||||
const shouldAddPrompt = messagesTillInsertion == 0;
|
||||
const prompt = shouldAddPrompt ? $('#extension_floating_prompt').val() : '';
|
||||
context.setExtensionPrompt(MODULE_NAME, prompt, promptInsertionPosition, promptInsertionDepth);
|
||||
context.setExtensionPrompt(MODULE_NAME, prompt, chat_metadata[metadata_keys.position], chat_metadata[metadata_keys.depth]);
|
||||
$('#extension_floating_counter').text(shouldAddPrompt ? 'This' : messagesTillInsertion);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user