Merge pull request #2748 from SillyTavern/fix-summary Fix automatic summarization

02d97f72f30ed92c82f193e05480466b12df30dc

Cohee <18619528+Cohee1207@users.noreply.github.com>

Signed
1 files changed, +46 -24Ignore whitespace
public/scripts/extensions/memory/index.js+46 -24
@@ -15,6 +15,7 @@ import {
1515 generateRaw,
1616 getMaxContextSize,
1717 setExtensionPrompt,
18+ streamingProcessor,
1819} from '../../../script.js';
1920import { is_group_generating, selected_group } from '../../group-chats.js';
2021import { loadMovingUIState } from '../../power-user.js';
@@ -408,8 +409,8 @@ async function onChatEvent() {
408409 return;
409410 }
410411
411412 // Generation isStreaming in -progress, summary prevented
412413 if (is_send_pressstreamingProcessor && !streamingProcessor.isFinished) {
413414 return;
414415 }
415416
@@ -446,15 +447,9 @@ async function onChatEvent() {
446447 delete chat[chat.length - 1].extra.memory;
447448 }
448449
449- try {
450+ summarizeChat(context)
450- await summarizeChat(context);
451+ .catch(console.error)
451- }
452+ .finally(saveLastValues);
452- catch (error) {
453- console.log(error);
454- }
455- finally {
456- saveLastValues();
457- }
458453}
459454
460455/**
@@ -567,7 +562,7 @@ async function getSummaryPromptForNow(context, force) {
567562 await waitUntilCondition(() => is_group_generating === false, 1000, 10);
568563 }
569564 // Wait for the send button to be released
570565 await waitUntilCondition(() => is_send_press === false, 30000, 100);
571566 } catch {
572567 console.debug('Timeout waiting for is_send_press');
573568 return '';
@@ -650,19 +645,29 @@ async function summarizeChatWebLLM(context, force) {
650645 params.max_tokens = extension_settings.memory.overrideResponseLength;
651646 }
652647
653- const summary = await generateWebLlmChatPrompt(messages, params);
648+ try {
654- const newContext = getContext();
649+ inApiCall = true;
650+ const summary = await generateWebLlmChatPrompt(messages, params);
651+ const newContext = getContext();
655652
656- // something changed during summarization request
653+ if (!summary) {
657- if (newContext.groupId !== context.groupId ||
654+ console.warn('Empty summary received');
658- newContext.chatId !== context.chatId ||
655+ return;
659- (!newContext.groupId && (newContext.characterId !== context.characterId))) {
656+ }
660- console.log('Context changed, summary discarded');
661- return;
662- }
663657
664- setMemoryContext(summary, true, lastUsedIndex);
658+ // something changed during summarization request
665- return summary;
659+ if (newContext.groupId !== context.groupId ||
660+ newContext.chatId !== context.chatId ||
661+ (!newContext.groupId && (newContext.characterId !== context.characterId))) {
662+ console.log('Context changed, summary discarded');
663+ return;
664+ }
665+
666+ setMemoryContext(summary, true, lastUsedIndex);
667+ return summary;
668+ } finally {
669+ inApiCall = false;
670+ }
666671}
667672
668673async function summarizeChatMain(context, force, skipWIAN) {
@@ -677,12 +682,18 @@ async function summarizeChatMain(context, force, skipWIAN) {
677682 let index = null;
678683
679684 if (prompt_builders.DEFAULT === extension_settings.memory.prompt_builder) {
680- summary = await generateQuietPrompt(prompt, false, skipWIAN, '', '', extension_settings.memory.overrideResponseLength);
685+ try {
686+ inApiCall = true;
687+ summary = await generateQuietPrompt(prompt, false, skipWIAN, '', '', extension_settings.memory.overrideResponseLength);
688+ } finally {
689+ inApiCall = false;
690+ }
681691 }
682692
683693 if ([prompt_builders.RAW_BLOCKING, prompt_builders.RAW_NON_BLOCKING].includes(extension_settings.memory.prompt_builder)) {
684694 const lock = extension_settings.memory.prompt_builder === prompt_builders.RAW_BLOCKING;
685695 try {
696+ inApiCall = true;
686697 if (lock) {
687698 deactivateSendButtons();
688699 }
@@ -700,12 +711,18 @@ async function summarizeChatMain(context, force, skipWIAN) {
700711 summary = await generateRaw(rawPrompt, '', false, false, prompt, extension_settings.memory.overrideResponseLength);
701712 index = lastUsedIndex;
702713 } finally {
714+ inApiCall = false;
703715 if (lock) {
704716 activateSendButtons();
705717 }
706718 }
707719 }
708720
721+ if (!summary) {
722+ console.warn('Empty summary received');
723+ return;
724+ }
725+
709726 const newContext = getContext();
710727
711728 // something changed during summarization request
@@ -840,6 +857,11 @@ async function summarizeChatExtras(context) {
840857 const summary = await callExtrasSummarizeAPI(resultingString);
841858 const newContext = getContext();
842859
860+ if (!summary) {
861+ console.warn('Empty summary received');
862+ return;
863+ }
864+
843865 // something changed during summarization request
844866 if (newContext.groupId !== context.groupId
845867 || newContext.chatId !== context.chatId