Remove obsolete logs and improve documentation

This commit is contained in:
maver
2023-07-09 15:57:56 +02:00
parent f2227ded9a
commit f4cfa8ba94
2 changed files with 115 additions and 5 deletions

View File

@ -51,8 +51,22 @@ const registerPromptManagerMigration = () => {
eventSource.on(event_types.OAI_PRESET_CHANGED, settings => migrate(settings)); eventSource.on(event_types.OAI_PRESET_CHANGED, settings => migrate(settings));
} }
/**
* Represents a prompt.
*/
class Prompt { class Prompt {
identifier; role; content; name; system_prompt; identifier; role; content; name; system_prompt;
/**
* Create a new Prompt instance.
*
* @param {Object} param0 - Object containing the properties of the prompt.
* @param {string} param0.identifier - The unique identifier of the prompt.
* @param {string} param0.role - The role associated with the prompt.
* @param {string} param0.content - The content of the prompt.
* @param {string} param0.name - The name of the prompt.
* @param {boolean} param0.system_prompt - Indicates if the prompt is a system prompt.
*/
constructor({identifier, role, content, name, system_prompt} = {}) { constructor({identifier, role, content, name, system_prompt} = {}) {
this.identifier = identifier; this.identifier = identifier;
this.role = role; this.role = role;
@ -62,13 +76,27 @@ class Prompt {
} }
} }
/**
* Representing a collection of prompts.
*/
class PromptCollection { class PromptCollection {
collection = []; collection = [];
/**
* Create a new PromptCollection instance.
*
* @param {...Prompt} prompts - An array of Prompt instances.
*/
constructor(...prompts) { constructor(...prompts) {
this.add(...prompts); this.add(...prompts);
} }
/**
* Checks if the provided instances are of the Prompt class.
*
* @param {...any} prompts - Instances to check.
* @throws Will throw an error if one or more instances are not of the Prompt class.
*/
checkPromptInstance(...prompts) { checkPromptInstance(...prompts) {
for(let prompt of prompts) { for(let prompt of prompts) {
if(!(prompt instanceof Prompt)) { if(!(prompt instanceof Prompt)) {
@ -77,24 +105,53 @@ class PromptCollection {
} }
} }
/**
* Adds new Prompt instances to the collection.
*
* @param {...Prompt} prompts - An array of Prompt instances.
*/
add(...prompts) { add(...prompts) {
this.checkPromptInstance(...prompts); this.checkPromptInstance(...prompts);
this.collection.push(...prompts); this.collection.push(...prompts);
} }
/**
* Sets a Prompt instance at a specific position in the collection.
*
* @param {Prompt} prompt - The Prompt instance to set.
* @param {number} position - The position in the collection to set the Prompt instance.
*/
set(prompt, position) { set(prompt, position) {
this.checkPromptInstance(prompt); this.checkPromptInstance(prompt);
this.collection[position] = prompt; this.collection[position] = prompt;
} }
/**
* Retrieves a Prompt instance from the collection by its identifier.
*
* @param {string} identifier - The identifier of the Prompt instance to retrieve.
* @returns {Prompt} The Prompt instance with the provided identifier, or undefined if not found.
*/
get(identifier) { get(identifier) {
return this.collection.find(prompt => prompt.identifier === identifier); return this.collection.find(prompt => prompt.identifier === identifier);
} }
/**
* Retrieves the index of a Prompt instance in the collection by its identifier.
*
* @param {string} identifier - The identifier of the Prompt instance to find.
* @returns {number} The index of the Prompt instance in the collection, or -1 if not found.
*/
index(identifier) { index(identifier) {
return this.collection.findIndex(prompt => prompt.identifier === identifier); return this.collection.findIndex(prompt => prompt.identifier === identifier);
} }
/**
* Checks if a Prompt instance exists in the collection by its identifier.
*
* @param {string} identifier - The identifier of the Prompt instance to check.
* @returns {boolean} true if the Prompt instance exists in the collection, false otherwise.
*/
has(identifier) { has(identifier) {
return this.index(identifier) !== -1; return this.index(identifier) !== -1;
} }
@ -145,6 +202,15 @@ function PromptManagerModule() {
this.handleAdvancedSettingsToggle = () => { }; this.handleAdvancedSettingsToggle = () => { };
} }
/**
* Initializes the PromptManagerModule with provided configuration and service settings.
*
* Sets up various handlers for user interactions, event listeners and initial rendering of prompts.
* It is also responsible for preparing prompt edit form buttons, managing popup form close and clear actions.
*
* @param {Object} moduleConfiguration - Configuration object for the PromptManagerModule.
* @param {Object} serviceSettings - Service settings object for the PromptManagerModule.
*/
PromptManagerModule.prototype.init = function (moduleConfiguration, serviceSettings) { PromptManagerModule.prototype.init = function (moduleConfiguration, serviceSettings) {
this.configuration = Object.assign(this.configuration, moduleConfiguration); this.configuration = Object.assign(this.configuration, moduleConfiguration);
this.tokenHandler = this.tokenHandler || new TokenHandler(); this.tokenHandler = this.tokenHandler || new TokenHandler();
@ -249,6 +315,7 @@ PromptManagerModule.prototype.init = function (moduleConfiguration, serviceSetti
document.getElementById(this.configuration.prefix + 'prompt_manager_popup_entry_form_prompt').value = prompt.content; document.getElementById(this.configuration.prefix + 'prompt_manager_popup_entry_form_prompt').value = prompt.content;
} }
// Append prompt to selected character
this.handleAppendPrompt = (event) => { this.handleAppendPrompt = (event) => {
const promptID = document.getElementById(this.configuration.prefix + 'prompt_manager_footer_append_prompt').value; const promptID = document.getElementById(this.configuration.prefix + 'prompt_manager_footer_append_prompt').value;
const prompt = this.getPromptById(promptID); const prompt = this.getPromptById(promptID);
@ -289,6 +356,7 @@ PromptManagerModule.prototype.init = function (moduleConfiguration, serviceSetti
this.showPopup(); this.showPopup();
} }
// Export all user prompts
this.handleFullExport = () => { this.handleFullExport = () => {
const exportPrompts = this.serviceSettings.prompts.reduce((userPrompts, prompt) => { const exportPrompts = this.serviceSettings.prompts.reduce((userPrompts, prompt) => {
if (false === prompt.system_prompt && false === prompt.marker) userPrompts.push(prompt); if (false === prompt.system_prompt && false === prompt.marker) userPrompts.push(prompt);
@ -298,6 +366,7 @@ PromptManagerModule.prototype.init = function (moduleConfiguration, serviceSetti
this.export({prompts: exportPrompts}, 'full', 'st-prompts'); this.export({prompts: exportPrompts}, 'full', 'st-prompts');
} }
// Export user prompts and order for this character
this.handleCharacterExport = () => { this.handleCharacterExport = () => {
const characterPrompts = this.getPromptsForCharacter(this.activeCharacter).reduce((userPrompts, prompt) => { const characterPrompts = this.getPromptsForCharacter(this.activeCharacter).reduce((userPrompts, prompt) => {
if (false === prompt.system_prompt && false === prompt.marker) userPrompts.push(prompt); if (false === prompt.system_prompt && false === prompt.marker) userPrompts.push(prompt);
@ -315,6 +384,7 @@ PromptManagerModule.prototype.init = function (moduleConfiguration, serviceSetti
this.export(exportPrompts, 'character', name); this.export(exportPrompts, 'character', name);
} }
// Import prompts for the selected character
this.handleImport = () => { this.handleImport = () => {
callPopup('Existing prompts with the same ID will be overridden. Do you want to proceed?', 'confirm',) callPopup('Existing prompts with the same ID will be overridden. Do you want to proceed?', 'confirm',)
.then(userChoice => { .then(userChoice => {
@ -356,6 +426,7 @@ PromptManagerModule.prototype.init = function (moduleConfiguration, serviceSetti
this.saveServiceSettings().then(() => this.render()); this.saveServiceSettings().then(() => this.render());
}); });
// Re-render when the character gets edited.
eventSource.on(event_types.CHARACTER_EDITED, (event) => { eventSource.on(event_types.CHARACTER_EDITED, (event) => {
this.handleCharacterUpdated(event); this.handleCharacterUpdated(event);
this.saveServiceSettings().then(() => this.render()); this.saveServiceSettings().then(() => this.render());
@ -410,6 +481,7 @@ PromptManagerModule.prototype.init = function (moduleConfiguration, serviceSetti
this.clearInspectForm(); this.clearInspectForm();
}; };
// Clear forms on closing the popup
document.getElementById(this.configuration.prefix + 'prompt_manager_popup_entry_form_close').addEventListener('click', closeAndClearPopup); document.getElementById(this.configuration.prefix + 'prompt_manager_popup_entry_form_close').addEventListener('click', closeAndClearPopup);
document.getElementById(this.configuration.prefix + 'prompt_manager_popup_close_button').addEventListener('click', closeAndClearPopup); document.getElementById(this.configuration.prefix + 'prompt_manager_popup_close_button').addEventListener('click', closeAndClearPopup);
@ -648,9 +720,7 @@ PromptManagerModule.prototype.handleCharacterSelected = function (event) {
} }
PromptManagerModule.prototype.handleCharacterUpdated = function (event) { PromptManagerModule.prototype.handleCharacterUpdated = function (event) {
console.log(event)
this.activeCharacter = {id: event.detail.id, ...event.detail.character}; this.activeCharacter = {id: event.detail.id, ...event.detail.character};
console.log(this.activeCharacter);
} }
PromptManagerModule.prototype.handleGroupSelected = function (event) { PromptManagerModule.prototype.handleGroupSelected = function (event) {
@ -887,10 +957,20 @@ PromptManagerModule.prototype.getPromptCollection = function () {
return promptCollection; return promptCollection;
} }
/**
* Setter for messages property
*
* @param messages
*/
PromptManagerModule.prototype.setMessages = function (messages) { PromptManagerModule.prototype.setMessages = function (messages) {
this.messages = messages; this.messages = messages;
}; };
/**
* Populates the token handler
*
* @param messageCollection
*/
PromptManagerModule.prototype.populateTokenHandler = function(messageCollection) { PromptManagerModule.prototype.populateTokenHandler = function(messageCollection) {
this.tokenHandler.resetCounts(); this.tokenHandler.resetCounts();
const counts = this.tokenHandler.getCounts(); const counts = this.tokenHandler.getCounts();
@ -922,7 +1002,9 @@ PromptManagerModule.prototype.populateTokenHandler = function(messageCollection)
this.log('Updated token cache with ' + this.tokenUsage); this.log('Updated token cache with ' + this.tokenUsage);
} }
// Empties, then re-assembles the container containing the prompt list. /**
* Empties, then re-assembles the container containing the prompt list.
*/
PromptManagerModule.prototype.renderPromptManager = function () { PromptManagerModule.prototype.renderPromptManager = function () {
const promptManagerDiv = this.containerElement; const promptManagerDiv = this.containerElement;
promptManagerDiv.innerHTML = ''; promptManagerDiv.innerHTML = '';
@ -1034,7 +1116,9 @@ PromptManagerModule.prototype.renderPromptManager = function () {
} }
}; };
// Empties, then re-assembles the prompt list. /**
* Empties, then re-assembles the prompt list
*/
PromptManagerModule.prototype.renderPromptManagerListItems = function () { PromptManagerModule.prototype.renderPromptManagerListItems = function () {
if (!this.serviceSettings.prompts) return; if (!this.serviceSettings.prompts) return;
@ -1171,6 +1255,13 @@ PromptManagerModule.prototype.renderPromptManagerListItems = function () {
}); });
}; };
/**
* Writes the passed data to a json file
*
* @param data
* @param type
* @param name
*/
PromptManagerModule.prototype.export = function (data, type, name = 'export') { PromptManagerModule.prototype.export = function (data, type, name = 'export') {
const promptExport = { const promptExport = {
version: this.configuration.version, version: this.configuration.version,
@ -1192,6 +1283,11 @@ PromptManagerModule.prototype.export = function (data, type, name = 'export') {
URL.revokeObjectURL(url); URL.revokeObjectURL(url);
}; };
/**
* Imports a json file with prompts and an optional prompt list for the active character
*
* @param importData
*/
PromptManagerModule.prototype.import = function (importData) { PromptManagerModule.prototype.import = function (importData) {
const mergeKeepNewer = (prompts, newPrompts) => { const mergeKeepNewer = (prompts, newPrompts) => {
let merged = [...prompts, ...newPrompts]; let merged = [...prompts, ...newPrompts];
@ -1300,14 +1396,29 @@ PromptManagerModule.prototype.getUuidv4 = function () {
}); });
} }
/**
* Write to console with prefix
*
* @param output
*/
PromptManagerModule.prototype.log = function (output) { PromptManagerModule.prototype.log = function (output) {
if (power_user.console_log_prompts) console.log('[PromptManager] ' + output); if (power_user.console_log_prompts) console.log('[PromptManager] ' + output);
} }
/**
* Start a profiling task
*
* @param identifier
*/
PromptManagerModule.prototype.profileStart = function (identifier) { PromptManagerModule.prototype.profileStart = function (identifier) {
if (power_user.console_log_prompts) console.time(identifier); if (power_user.console_log_prompts) console.time(identifier);
} }
/**
* End a profiling task
*
* @param identifier
*/
PromptManagerModule.prototype.profileEnd = function (identifier) { PromptManagerModule.prototype.profileEnd = function (identifier) {
if (power_user.console_log_prompts) { if (power_user.console_log_prompts) {
this.log('Profiling of "' + identifier + '" finished. Result below.'); this.log('Profiling of "' + identifier + '" finished. Result below.');

View File

@ -409,7 +409,6 @@ function formatWorldInfo(value) {
function populateChatHistory(prompts, chatCompletion) { function populateChatHistory(prompts, chatCompletion) {
// Chat History // Chat History
chatCompletion.add(new MessageCollection('chatHistory'), prompts.index('chatHistory')); chatCompletion.add(new MessageCollection('chatHistory'), prompts.index('chatHistory'));
console.log(openai_settings)
const mainChat = selected_group ? oai_settings.new_group_chat_prompt : oai_settings.new_chat_prompt; const mainChat = selected_group ? oai_settings.new_group_chat_prompt : oai_settings.new_chat_prompt;
const mainChatMessage = new Message('system', mainChat, 'newMainChat'); const mainChatMessage = new Message('system', mainChat, 'newMainChat');