diff --git a/public/scripts/extensions/memory/index.js b/public/scripts/extensions/memory/index.js index 9c9d86a9c..e4d2e7b3a 100644 --- a/public/scripts/extensions/memory/index.js +++ b/public/scripts/extensions/memory/index.js @@ -15,6 +15,7 @@ import { generateRaw, getMaxContextSize, setExtensionPrompt, + streamingProcessor, } from '../../../script.js'; import { is_group_generating, selected_group } from '../../group-chats.js'; import { loadMovingUIState } from '../../power-user.js'; @@ -408,8 +409,8 @@ async function onChatEvent() { return; } - // Generation is in progress, summary prevented - if (is_send_press) { + // Streaming in-progress + if (streamingProcessor && !streamingProcessor.isFinished) { return; } @@ -446,15 +447,9 @@ async function onChatEvent() { delete chat[chat.length - 1].extra.memory; } - try { - await summarizeChat(context); - } - catch (error) { - console.log(error); - } - finally { - saveLastValues(); - } + summarizeChat(context) + .catch(console.error) + .finally(saveLastValues); } /** @@ -567,7 +562,7 @@ async function getSummaryPromptForNow(context, force) { await waitUntilCondition(() => is_group_generating === false, 1000, 10); } // Wait for the send button to be released - waitUntilCondition(() => is_send_press === false, 30000, 100); + await waitUntilCondition(() => is_send_press === false, 30000, 100); } catch { console.debug('Timeout waiting for is_send_press'); return ''; @@ -650,19 +645,29 @@ async function summarizeChatWebLLM(context, force) { params.max_tokens = extension_settings.memory.overrideResponseLength; } - const summary = await generateWebLlmChatPrompt(messages, params); - const newContext = getContext(); + try { + inApiCall = true; + const summary = await generateWebLlmChatPrompt(messages, params); + const newContext = getContext(); - // something changed during summarization request - if (newContext.groupId !== context.groupId || - newContext.chatId !== context.chatId || - (!newContext.groupId && (newContext.characterId !== context.characterId))) { - console.log('Context changed, summary discarded'); - return; + if (!summary) { + console.warn('Empty summary received'); + return; + } + + // something changed during summarization request + if (newContext.groupId !== context.groupId || + newContext.chatId !== context.chatId || + (!newContext.groupId && (newContext.characterId !== context.characterId))) { + console.log('Context changed, summary discarded'); + return; + } + + setMemoryContext(summary, true, lastUsedIndex); + return summary; + } finally { + inApiCall = false; } - - setMemoryContext(summary, true, lastUsedIndex); - return summary; } async function summarizeChatMain(context, force, skipWIAN) { @@ -677,12 +682,18 @@ async function summarizeChatMain(context, force, skipWIAN) { let index = null; if (prompt_builders.DEFAULT === extension_settings.memory.prompt_builder) { - summary = await generateQuietPrompt(prompt, false, skipWIAN, '', '', extension_settings.memory.overrideResponseLength); + try { + inApiCall = true; + summary = await generateQuietPrompt(prompt, false, skipWIAN, '', '', extension_settings.memory.overrideResponseLength); + } finally { + inApiCall = false; + } } if ([prompt_builders.RAW_BLOCKING, prompt_builders.RAW_NON_BLOCKING].includes(extension_settings.memory.prompt_builder)) { const lock = extension_settings.memory.prompt_builder === prompt_builders.RAW_BLOCKING; try { + inApiCall = true; if (lock) { deactivateSendButtons(); } @@ -700,12 +711,18 @@ async function summarizeChatMain(context, force, skipWIAN) { summary = await generateRaw(rawPrompt, '', false, false, prompt, extension_settings.memory.overrideResponseLength); index = lastUsedIndex; } finally { + inApiCall = false; if (lock) { activateSendButtons(); } } } + if (!summary) { + console.warn('Empty summary received'); + return; + } + const newContext = getContext(); // something changed during summarization request @@ -840,6 +857,11 @@ async function summarizeChatExtras(context) { const summary = await callExtrasSummarizeAPI(resultingString); const newContext = getContext(); + if (!summary) { + console.warn('Empty summary received'); + return; + } + // something changed during summarization request if (newContext.groupId !== context.groupId || newContext.chatId !== context.chatId