diff --git a/public/scripts/extensions/objective/index.js b/public/scripts/extensions/objective/index.js index 55bdb0fb5..47b53a2e4 100644 --- a/public/scripts/extensions/objective/index.js +++ b/public/scripts/extensions/objective/index.js @@ -19,7 +19,7 @@ let checkCounter = 0 const objectivePrompts = { "createTask": `Pause your roleplay and generate a list of tasks to complete an objective. Your next response must be formatted as a numbered list of plain text entries. Do not include anything but the numbered list. The list must be prioritized in the order that tasks must be completed. - The objective that you must make a numbered task list for is: {{objective}}. + The objective that you must make a numbered task list for is: [{{objective}}]. The tasks created should take into account the character traits of {{char}}. These tasks may or may not involve {{user}} Given an example objective of 'Make me a four course dinner', here is an example output: @@ -31,7 +31,7 @@ const objectivePrompts = { 6. Serve the food 7. Enjoy eating the meal with {{user}} `, - "checkTaskCompleted": `Pause your roleplay. Determine if this task is completed: {{task}}. + "checkTaskCompleted": `Pause your roleplay. Determine if this task is completed: [{{task}}]. To do this, examine the most recent messages. Your response must only contain either true or false, nothing other words. Example output: true @@ -39,7 +39,7 @@ const objectivePrompts = { } const injectPrompts = { - "task": "Your current task is {{task}}. Balance existing roleplay with completing this task." + "task": "Your current task is [{{task}}]. Balance existing roleplay with completing this task." } // Background prompt generation @@ -66,6 +66,7 @@ function addTask(description, position=null) { "description": description, "completed": false }) + saveState() } // Get a task either by index or task description. Return current task if none specified @@ -89,6 +90,7 @@ function completeTask(task) { console.info(`Task successfully completed: ${JSON.stringify(task)}`) setCurrentTask() updateUiTaskList() + saveState() } // Call Quiet Generate to create task list using character context, then convert to tasks. Should not be called much. @@ -117,10 +119,10 @@ async function checkTaskCompleted() { } // Check only at specified interval - if (checkCounter <= $('#objective-check-frequency').val()){ + if (checkCounter >= 0){ return } - checkCounter = 0 + checkCounter = $('#objective-check-frequency').val() const prompt = substituteParams(objectivePrompts["checkTaskCompleted"].replace(/{{task}}/gi, currentTask.description)); const taskResponse = (await generateQuietPrompt(prompt)).toLowerCase() @@ -132,7 +134,7 @@ async function checkTaskCompleted() { } else if (!(taskResponse.includes("false"))) { console.warn(`checkTaskCompleted response did not contain true or false. taskResponse: ${taskResponse}`) } else { - console.debug(`taskResponse: ${taskResponse}`) + console.debug(`Checked task completion. taskResponse: ${taskResponse}`) } } @@ -159,6 +161,7 @@ function setCurrentTask(index=null) { context.setExtensionPrompt(MODULE_NAME,'') console.info(`No current task`) } + saveState() } //###############################// @@ -175,23 +178,29 @@ const defaultSettings = { // Convenient single call function resetState(){ - checkCounter = 0 loadSettings(); } -function debugObjectiveFunction(){ - console.log({ - "globalObjective": globalObjective, - "globalTasks": globalTasks, - "currentChatId": currentChatId, - "currentTask": currentTask, - "checkCounter": checkCounter, - "currentChatId": currentChatId, - "extension_settings": extension_settings.objective[currentChatId], - }) +function saveState(){ + extension_settings.objective[currentChatId].objective = globalObjective + extension_settings.objective[currentChatId].tasks = globalTasks + extension_settings.objective[currentChatId].checkFrequency = $('#objective-check-frequency').val() + extension_settings.objective[currentChatId].chatDepth = $('#objective-chat-depth').val() + saveSettingsDebounced() } -window.debugObjectiveFunction = debugObjectiveFunction +function debugObjectiveExtension(){ + console.log(JSON.stringify({ + "currentTask": currentTask, + "currentChatId": currentChatId, + "checkCounter": checkCounter, + "globalObjective": globalObjective, + "globalTasks": globalTasks, + "extension_settings": extension_settings.objective[currentChatId], + }, null, 2)) +} + +window.debugObjectiveExtension = debugObjectiveExtension // Create user-friendly task string function updateUiTaskList() { @@ -215,9 +224,7 @@ function updateUiTaskList() { async function onGenerateObjectiveClick() { globalObjective = $('#objective-text').val() await generateTasks() - extension_settings.objective[currentChatId].objective = globalObjective - extension_settings.objective[currentChatId].tasks = globalTasks - saveSettingsDebounced() + saveState() } // Update extension prompts @@ -225,17 +232,15 @@ function onChatDepthInput() { if (currentChatId == ""){ currentChatId = getContext().chatId } - extension_settings.objective[currentChatId].chatDepth = $('#objective-chat-depth').val() + saveState() setCurrentTask() // Ensure extension prompt is updated - saveSettingsDebounced() } function onCheckFrequencyInput() { if (currentChatId == ""){ currentChatId = getContext().chatId } - extension_settings.objective[currentChatId].checkFrequency = $('#objective-check-frequency').val() - saveSettingsDebounced() + saveState() } function loadSettings() { @@ -254,12 +259,15 @@ function loadSettings() { // Update globals globalObjective = extension_settings.objective[currentChatId].objective globalTasks = extension_settings.objective[currentChatId].tasks + checkCounter = extension_settings.objective[currentChatId].checkFrequency // Update UI elements + $('#objective-counter').text(checkCounter) $("#objective-text").text(globalObjective) updateUiTaskList() $('#objective-chat-depth').val(extension_settings.objective[currentChatId].chatDepth) $('#objective-check-frequency').val(extension_settings.objective[currentChatId].checkFrequency) + setCurrentTask() } jQuery(() => { @@ -277,10 +285,10 @@ jQuery(() => { - - - - +
+ +
+ Messages until next task completion check 0 `; @@ -296,7 +304,8 @@ jQuery(() => { eventSource.on(event_types.MESSAGE_RECEIVED, () => { checkTaskCompleted(); - checkCounter += 1 + checkCounter -= 1 setCurrentTask(); + $('#objective-counter').text(checkCounter) }); }); diff --git a/public/scripts/extensions/objective/style.css b/public/scripts/extensions/objective/style.css index e69de29bb..5e722ed24 100644 --- a/public/scripts/extensions/objective/style.css +++ b/public/scripts/extensions/objective/style.css @@ -0,0 +1,4 @@ +#objective-counter { + font-weight: 600; + color: orange; +}