Add counter, fix some bugs

This commit is contained in:
ouoertheo
2023-05-30 20:13:29 -05:00
parent 4cf0e18d76
commit 00b11d4d44
2 changed files with 43 additions and 30 deletions

View File

@ -19,7 +19,7 @@ let checkCounter = 0
const objectivePrompts = { 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. "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}} 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: 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 6. Serve the food
7. Enjoy eating the meal with {{user}} 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. To do this, examine the most recent messages. Your response must only contain either true or false, nothing other words.
Example output: Example output:
true true
@ -39,7 +39,7 @@ const objectivePrompts = {
} }
const injectPrompts = { 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 // Background prompt generation
@ -66,6 +66,7 @@ function addTask(description, position=null) {
"description": description, "description": description,
"completed": false "completed": false
}) })
saveState()
} }
// Get a task either by index or task description. Return current task if none specified // 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)}`) console.info(`Task successfully completed: ${JSON.stringify(task)}`)
setCurrentTask() setCurrentTask()
updateUiTaskList() updateUiTaskList()
saveState()
} }
// Call Quiet Generate to create task list using character context, then convert to tasks. Should not be called much. // 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 // Check only at specified interval
if (checkCounter <= $('#objective-check-frequency').val()){ if (checkCounter >= 0){
return return
} }
checkCounter = 0 checkCounter = $('#objective-check-frequency').val()
const prompt = substituteParams(objectivePrompts["checkTaskCompleted"].replace(/{{task}}/gi, currentTask.description)); const prompt = substituteParams(objectivePrompts["checkTaskCompleted"].replace(/{{task}}/gi, currentTask.description));
const taskResponse = (await generateQuietPrompt(prompt)).toLowerCase() const taskResponse = (await generateQuietPrompt(prompt)).toLowerCase()
@ -132,7 +134,7 @@ async function checkTaskCompleted() {
} else if (!(taskResponse.includes("false"))) { } else if (!(taskResponse.includes("false"))) {
console.warn(`checkTaskCompleted response did not contain true or false. taskResponse: ${taskResponse}`) console.warn(`checkTaskCompleted response did not contain true or false. taskResponse: ${taskResponse}`)
} else { } else {
console.debug(`taskResponse: ${taskResponse}`) console.debug(`Checked task completion. taskResponse: ${taskResponse}`)
} }
} }
@ -159,6 +161,7 @@ function setCurrentTask(index=null) {
context.setExtensionPrompt(MODULE_NAME,'') context.setExtensionPrompt(MODULE_NAME,'')
console.info(`No current task`) console.info(`No current task`)
} }
saveState()
} }
//###############################// //###############################//
@ -175,23 +178,29 @@ const defaultSettings = {
// Convenient single call // Convenient single call
function resetState(){ function resetState(){
checkCounter = 0
loadSettings(); loadSettings();
} }
function debugObjectiveFunction(){ function saveState(){
console.log({ extension_settings.objective[currentChatId].objective = globalObjective
"globalObjective": globalObjective, extension_settings.objective[currentChatId].tasks = globalTasks
"globalTasks": globalTasks, extension_settings.objective[currentChatId].checkFrequency = $('#objective-check-frequency').val()
"currentChatId": currentChatId, extension_settings.objective[currentChatId].chatDepth = $('#objective-chat-depth').val()
"currentTask": currentTask, saveSettingsDebounced()
"checkCounter": checkCounter,
"currentChatId": currentChatId,
"extension_settings": extension_settings.objective[currentChatId],
})
} }
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 // Create user-friendly task string
function updateUiTaskList() { function updateUiTaskList() {
@ -215,9 +224,7 @@ function updateUiTaskList() {
async function onGenerateObjectiveClick() { async function onGenerateObjectiveClick() {
globalObjective = $('#objective-text').val() globalObjective = $('#objective-text').val()
await generateTasks() await generateTasks()
extension_settings.objective[currentChatId].objective = globalObjective saveState()
extension_settings.objective[currentChatId].tasks = globalTasks
saveSettingsDebounced()
} }
// Update extension prompts // Update extension prompts
@ -225,17 +232,15 @@ function onChatDepthInput() {
if (currentChatId == ""){ if (currentChatId == ""){
currentChatId = getContext().chatId currentChatId = getContext().chatId
} }
extension_settings.objective[currentChatId].chatDepth = $('#objective-chat-depth').val() saveState()
setCurrentTask() // Ensure extension prompt is updated setCurrentTask() // Ensure extension prompt is updated
saveSettingsDebounced()
} }
function onCheckFrequencyInput() { function onCheckFrequencyInput() {
if (currentChatId == ""){ if (currentChatId == ""){
currentChatId = getContext().chatId currentChatId = getContext().chatId
} }
extension_settings.objective[currentChatId].checkFrequency = $('#objective-check-frequency').val() saveState()
saveSettingsDebounced()
} }
function loadSettings() { function loadSettings() {
@ -254,12 +259,15 @@ function loadSettings() {
// Update globals // Update globals
globalObjective = extension_settings.objective[currentChatId].objective globalObjective = extension_settings.objective[currentChatId].objective
globalTasks = extension_settings.objective[currentChatId].tasks globalTasks = extension_settings.objective[currentChatId].tasks
checkCounter = extension_settings.objective[currentChatId].checkFrequency
// Update UI elements // Update UI elements
$('#objective-counter').text(checkCounter)
$("#objective-text").text(globalObjective) $("#objective-text").text(globalObjective)
updateUiTaskList() updateUiTaskList()
$('#objective-chat-depth').val(extension_settings.objective[currentChatId].chatDepth) $('#objective-chat-depth').val(extension_settings.objective[currentChatId].chatDepth)
$('#objective-check-frequency').val(extension_settings.objective[currentChatId].checkFrequency) $('#objective-check-frequency').val(extension_settings.objective[currentChatId].checkFrequency)
setCurrentTask()
} }
jQuery(() => { jQuery(() => {
@ -277,10 +285,10 @@ jQuery(() => {
<label for="objective-tasks">Objective Tasks</label> <label for="objective-tasks">Objective Tasks</label>
<textarea id="objective-tasks" class="text_pole" rows="8" placeholder="Objective tasks will be generated here..."></textarea> <textarea id="objective-tasks" class="text_pole" rows="8" placeholder="Objective tasks will be generated here..."></textarea>
<label for="objective-chat-depth">In-chat @ Depth</label> <label for="objective-chat-depth">In-chat @ Depth</label>
<input id="objective-chat-depth" class="text_pole widthUnset" type="number" min="0" max="99" /> <input id="objective-chat-depth" class="text_pole widthUnset" type="number" min="0" max="99" /><br>
<label for="objective-check-frequency">Task Check Frequency</label> <label for="objective-check-frequency">Task Check Frequency</label>
<input id="objective-check-frequency" class="text_pole widthUnset" type="number" min="1" max="99" /> <input id="objective-check-frequency" class="text_pole widthUnset" type="number" min="1" max="99" /><br>
<span> Messages until next task completion check <span id="objective-counter">0</span></span>
</div> </div>
</div>`; </div>`;
@ -296,7 +304,8 @@ jQuery(() => {
eventSource.on(event_types.MESSAGE_RECEIVED, () => { eventSource.on(event_types.MESSAGE_RECEIVED, () => {
checkTaskCompleted(); checkTaskCompleted();
checkCounter += 1 checkCounter -= 1
setCurrentTask(); setCurrentTask();
$('#objective-counter').text(checkCounter)
}); });
}); });

View File

@ -0,0 +1,4 @@
#objective-counter {
font-weight: 600;
color: orange;
}