From 1dc1b926c4449e0480578568424295b5896fc9a7 Mon Sep 17 00:00:00 2001 From: Cohee <18619528+Cohee1207@users.noreply.github.com> Date: Sun, 19 Nov 2023 16:56:12 +0200 Subject: [PATCH] Fix TTS issues with streaming --- public/scripts/extensions/tts/index.js | 39 +++++++++++++------------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/public/scripts/extensions/tts/index.js b/public/scripts/extensions/tts/index.js index 7e8c1cd4e..6736c5bb9 100644 --- a/public/scripts/extensions/tts/index.js +++ b/public/scripts/extensions/tts/index.js @@ -167,42 +167,43 @@ async function moduleWorker() { } // take the count of messages - let lastMessageNumber = context.chat.length ? context.chat.length : 0 + let lastMessageNumber = context.chat.length ? context.chat.length : 0; // There's no new messages - let diff = lastMessageNumber - currentMessageNumber - let hashNew = getStringHash((chat.length && chat[chat.length - 1].mes) ?? '') + let diff = lastMessageNumber - currentMessageNumber; + let hashNew = getStringHash((chat.length && chat[chat.length - 1].mes) ?? ''); // if messages got deleted, diff will be < 0 if (diff < 0) { // necessary actions will be taken by the onChatDeleted() handler - return + return; } + // if no new messages, or same message, or same message hash, do nothing if (diff == 0 && hashNew === lastMessageHash) { - return + return; + } + + // If streaming, wait for streaming to finish before processing new messages + if (context.streamingProcessor && !context.streamingProcessor.isFinished) { + return; } // clone message object, as things go haywire if message object is altered below (it's passed by reference) - const message = structuredClone(chat[chat.length - 1]) + const message = structuredClone(chat[chat.length - 1]); // if last message within current message, message got extended. only send diff to TTS. if (ttsLastMessage !== null && message.mes.indexOf(ttsLastMessage) !== -1) { - let tmp = message.mes - message.mes = message.mes.replace(ttsLastMessage, '') - ttsLastMessage = tmp + let tmp = message.mes; + message.mes = message.mes.replace(ttsLastMessage, ''); + ttsLastMessage = tmp; } else { - ttsLastMessage = message.mes + ttsLastMessage = message.mes; } - // We're currently swiping or streaming. Don't generate voice - if ( - !message || - message.mes === '...' || - message.mes === '' || - (context.streamingProcessor && !context.streamingProcessor.isFinished) - ) { - return + // We're currently swiping. Don't generate voice + if (!message || message.mes === '...' || message.mes === '') { + return; } // Don't generate if message doesn't have a display text @@ -454,7 +455,7 @@ let currentTtsJob // Null if nothing is currently being processed let currentMessageNumber = 0 function completeTtsJob() { - console.info(`Current TTS job for ${currentTtsJob.name} completed.`) + console.info(`Current TTS job for ${currentTtsJob?.name} completed.`) currentTtsJob = null }