diff --git a/public/scripts/extensions/objective/index.js b/public/scripts/extensions/objective/index.js
index 21739b6f8..d23f22d94 100644
--- a/public/scripts/extensions/objective/index.js
+++ b/public/scripts/extensions/objective/index.js
@@ -69,10 +69,17 @@ function getTaskByIdRecurse(taskId, task) {
return null;
}
+function substituteParamsPrompts(content) {
+ content = content.replace(/{{objective}}/gi, currentObjective.description)
+ content = content.replace(/{{task}}/gi, currentTask.description)
+ content = substituteParams(content)
+ return content
+}
+
// Call Quiet Generate to create task list using character context, then convert to tasks. Should not be called much.
async function generateTasks() {
- const prompt = substituteParams(objectivePrompts.createTask.replace(/{{objective}}/gi, currentObjective.description));
+ const prompt = substituteParamsPrompts(objectivePrompts.createTask);
console.log(`Generating tasks for objective with prompt`)
toastr.info('Generating tasks for objective', 'Please wait...');
const taskResponse = await generateQuietPrompt(prompt)
@@ -101,7 +108,7 @@ async function checkTaskCompleted() {
}
checkCounter = $('#objective-check-frequency').val()
- const prompt = substituteParams(objectivePrompts.checkTaskCompleted.replace(/{{task}}/gi, currentTask.description));
+ const prompt = substituteParamsPrompts(objectivePrompts.checkTaskCompleted);
const taskResponse = (await generateQuietPrompt(prompt)).toLowerCase()
// Check response if task complete
@@ -149,7 +156,7 @@ function setCurrentTask(taskId = null) {
// Don't just check for a current task, check if it has data
const description = currentTask.description || null;
if (description) {
- const extensionPromptText = objectivePrompts.currentTask.replace(/{{task}}/gi, description);
+ const extensionPromptText = substituteParamsPrompts(objectivePrompts.currentTask);
// Remove highlights
$('.objective-task').css({'border-color':'','border-width':''})
@@ -163,7 +170,6 @@ function setCurrentTask(taskId = null) {
highlightTask = parent
}
-
// Update the extension prompt
context.setExtensionPrompt(MODULE_NAME, extensionPromptText, 1, $('#objective-chat-depth').val());
console.info(`Current task in context.extensionPrompts.Objective is ${JSON.stringify(context.extensionPrompts.Objective)}`);
@@ -369,6 +375,8 @@ function onEditPromptClick() {
let popupText = ''
popupText += `
+
Edit prompts used by Objective for this session. You can use {{objective}} or {{task}} plus any other standard template variables
+
@@ -378,12 +386,12 @@ function onEditPromptClick() {
-
-
+
+
-
-
+
+
`
@@ -405,23 +413,28 @@ function onEditPromptClick() {
$('#objective-prompt-extension-prompt').on('input', () => {
objectivePrompts.currentTask = $('#objective-prompt-extension-prompt').val()
})
+
+ // Handle new
+ $('#objective-custom-prompt-new').on('click', () => {
+ newCustomPrompt()
+ })
// Handle save
$('#objective-custom-prompt-save').on('click', () => {
- saveCustomPrompt($('#objective-custom-prompt-name').val(), objectivePrompts)
+ saveCustomPrompt()
})
// Handle delete
$('#objective-custom-prompt-delete').on('click', () => {
- const optionSelected = $("#objective-prompt-load").find(':selected').val()
- deleteCustomPrompt(optionSelected)
+ deleteCustomPrompt()
})
// Handle load
- $('#objective-prompt-load').on('change', loadCustomPrompt)
+ $('#objective-custom-prompt-select').on('change', loadCustomPrompt)
}
-
-function saveCustomPrompt(customPromptName, customPrompts) {
+async function newCustomPrompt() {
+ const customPromptName = await callPopup('Custom Prompt name:
', 'input');
+
if (customPromptName == "") {
toastr.warning("Please set custom prompt name to save.")
return
@@ -431,12 +444,25 @@ function saveCustomPrompt(customPromptName, customPrompts) {
return
}
extension_settings.objective.customPrompts[customPromptName] = {}
- Object.assign(extension_settings.objective.customPrompts[customPromptName], customPrompts)
+ Object.assign(extension_settings.objective.customPrompts[customPromptName], objectivePrompts)
saveSettingsDebounced()
populateCustomPrompts()
}
-function deleteCustomPrompt(customPromptName){
+function saveCustomPrompt() {
+ const customPromptName = $("#objective-custom-prompt-select").find(':selected').val()
+ if (customPromptName == "default"){
+ toastr.error("Cannot save over default prompt")
+ return
+ }
+ Object.assign(extension_settings.objective.customPrompts[customPromptName], objectivePrompts)
+ saveSettingsDebounced()
+ populateCustomPrompts()
+}
+
+function deleteCustomPrompt(){
+ const customPromptName = $("#objective-custom-prompt-select").find(':selected').val()
+
if (customPromptName == "default"){
toastr.error("Cannot delete default prompt")
return
@@ -448,8 +474,7 @@ function deleteCustomPrompt(customPromptName){
}
function loadCustomPrompt(){
- const optionSelected = $("#objective-prompt-load").find(':selected').val()
- console.log(optionSelected)
+ const optionSelected = $("#objective-custom-prompt-select").find(':selected').val()
Object.assign(objectivePrompts, extension_settings.objective.customPrompts[optionSelected])
$('#objective-prompt-generate').val(objectivePrompts.createTask)
@@ -459,13 +484,13 @@ function loadCustomPrompt(){
function populateCustomPrompts(){
// Populate saved prompts
- $('#objective-prompt-load').empty()
+ $('#objective-custom-prompt-select').empty()
for (const customPromptName in extension_settings.objective.customPrompts){
const option = document.createElement('option');
option.innerText = customPromptName;
option.value = customPromptName;
option.selected = customPromptName
- $('#objective-prompt-load').append(option)
+ $('#objective-custom-prompt-select').append(option)
}
}
@@ -574,8 +599,10 @@ function onChatDepthInput() {
}
function onObjectiveTextFocusOut(){
- currentObjective.description = $('#objective-text').val()
- saveState()
+ if (currentObjective){
+ currentObjective.description = $('#objective-text').val()
+ saveState()
+ }
}
// Update how often we check for task completion