From e5f3a7086064a146ce2db4cfa4954a1263f9f081 Mon Sep 17 00:00:00 2001 From: Cohee Date: Tue, 1 Aug 2023 15:53:10 +0300 Subject: [PATCH] #843 Wait for group to stop generating before checking objectives --- public/scripts/extensions/memory/index.js | 2 +- public/scripts/extensions/objective/index.js | 35 ++++++++++++++------ 2 files changed, 26 insertions(+), 11 deletions(-) diff --git a/public/scripts/extensions/memory/index.js b/public/scripts/extensions/memory/index.js index 90a4d5991..f2e9433ea 100644 --- a/public/scripts/extensions/memory/index.js +++ b/public/scripts/extensions/memory/index.js @@ -334,7 +334,7 @@ async function summarizeChat(context) { async function summarizeChatMain(context, force) { try { // Wait for the send button to be released - waitUntilCondition(() => is_send_press === false, 10000, 100); + waitUntilCondition(() => is_send_press === false, 30000, 100); } catch { console.debug('Timeout waiting for is_send_press'); return; diff --git a/public/scripts/extensions/objective/index.js b/public/scripts/extensions/objective/index.js index 6785d5d3b..0dfbae3c0 100644 --- a/public/scripts/extensions/objective/index.js +++ b/public/scripts/extensions/objective/index.js @@ -1,4 +1,4 @@ -import { chat_metadata, callPopup, saveSettingsDebounced, getCurrentChatId } from "../../../script.js"; +import { chat_metadata, callPopup, saveSettingsDebounced, is_send_press } from "../../../script.js"; import { getContext, extension_settings, saveMetadataDebounced } from "../../extensions.js"; import { substituteParams, @@ -7,6 +7,8 @@ import { generateQuietPrompt, } from "../../../script.js"; import { registerSlashCommand } from "../../slash-commands.js"; +import { waitUntilCondition } from "../../utils.js"; +import { is_group_generating, selected_group } from "../../group-chats.js"; const MODULE_NAME = "Objective" @@ -86,7 +88,7 @@ async function generateTasks() { console.log(`Generating tasks for objective with prompt`) toastr.info('Generating tasks for objective', 'Please wait...'); const taskResponse = await generateQuietPrompt(prompt) - + // Clear all existing objective tasks when generating currentObjective.children = [] const numberedListPattern = /^\d+\./ @@ -109,6 +111,19 @@ async function checkTaskCompleted() { if (jQuery.isEmptyObject(currentTask)) { return } + + try { + // Wait for group to finish generating + if (selected_group) { + await waitUntilCondition(() => is_group_generating === false, 1000, 10); + } + // Another extension might be doing something with the chat, so wait for it to finish + await waitUntilCondition(() => is_send_press === false, 30000, 10); + } catch { + console.debug("Failed to wait for group to finish generating") + return; + } + checkCounter = $('#objective-check-frequency').val() toastr.info("Checking for task completion.") @@ -163,14 +178,14 @@ function setCurrentTask(taskId = null) { const description = currentTask.description || null; if (description) { const extensionPromptText = substituteParamsPrompts(objectivePrompts.currentTask); - + // Remove highlights $('.objective-task').css({'border-color':'','border-width':''}) // Highlight current task let highlightTask = currentTask while (highlightTask.parentId !== ""){ if (highlightTask.descriptionSpan){ - highlightTask.descriptionSpan.css({'border-color':'yellow','border-width':'2px'}); + highlightTask.descriptionSpan.css({'border-color':'yellow','border-width':'2px'}); } const parent = getTaskById(highlightTask.parentId) highlightTask = parent @@ -238,7 +253,7 @@ class ObjectiveTask { )) saveState() } - + getIndex(){ if (this.parentId !== null) { const parent = getTaskById(this.parentId) @@ -302,7 +317,7 @@ class ObjectiveTask { this.deleteButton = $(`#objective-task-delete-${this.id}`); this.taskHtml = $(`#objective-task-label-${this.id}`); this.branchButton = $(`#objective-task-add-branch-${this.id}`) - + // Handle sub-task forking style if (this.children.length > 0){ this.branchButton.css({'color':'#33cc33'}) @@ -408,7 +423,7 @@ function onEditPromptClick() { $('#objective-prompt-generate').val(objectivePrompts.createTask) $('#objective-prompt-check').val(objectivePrompts.checkTaskCompleted) $('#objective-prompt-extension-prompt').val(objectivePrompts.currentTask) - + // Handle value updates $('#objective-prompt-generate').on('input', () => { objectivePrompts.createTask = $('#objective-prompt-generate').val() @@ -419,7 +434,7 @@ function onEditPromptClick() { $('#objective-prompt-extension-prompt').on('input', () => { objectivePrompts.currentTask = $('#objective-prompt-extension-prompt').val() }) - + // Handle new $('#objective-custom-prompt-new').on('click', () => { newCustomPrompt() @@ -440,7 +455,7 @@ function onEditPromptClick() { } async function newCustomPrompt() { const customPromptName = await callPopup('

Custom Prompt name:

', 'input'); - + if (customPromptName == "") { toastr.warning("Please set custom prompt name to save.") return @@ -644,7 +659,7 @@ function loadSettings() { // Reset Objectives and Tasks in memory taskTree = null; currentObjective = null; - + // Init extension settings if (Object.keys(extension_settings.objective).length === 0) { Object.assign(extension_settings.objective, { 'customPrompts': {'default':defaultPrompts}})