From 9a5e667674cfd2de5f7f8261bcc135bea52bed17 Mon Sep 17 00:00:00 2001 From: Cohee <18619528+Cohee1207@users.noreply.github.com> Date: Sun, 10 Sep 2023 20:14:57 +0300 Subject: [PATCH] Throttle classification requests during streaming --- public/scripts/extensions/expressions/index.js | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/public/scripts/extensions/expressions/index.js b/public/scripts/extensions/expressions/index.js index 7437d305f..5f663df42 100644 --- a/public/scripts/extensions/expressions/index.js +++ b/public/scripts/extensions/expressions/index.js @@ -8,6 +8,7 @@ export { MODULE_NAME }; const MODULE_NAME = 'expressions'; const UPDATE_INTERVAL = 2000; +const STREAMING_UPDATE_INTERVAL = 6000; const FALLBACK_EXPRESSION = 'joy'; const DEFAULT_EXPRESSIONS = [ "talkinghead", @@ -46,6 +47,7 @@ let lastCharacter = undefined; let lastMessage = null; let spriteCache = {}; let inApiCall = false; +let lastServerResponseTime = 0; function isVisualNovelMode() { return Boolean(!isMobile() && power_user.waifuMode && getContext().groupId); @@ -566,6 +568,17 @@ async function moduleWorker() { return; } + // Throttle classification requests during streaming + if (context.streamingProcessor && !context.streamingProcessor.isFinished) { + const now = Date.now(); + const timeSinceLastServerResponse = now - lastServerResponseTime; + + if (timeSinceLastServerResponse < STREAMING_UPDATE_INTERVAL) { + console.log('Streaming in progress: throttling expression update. Next update at ' + new Date(lastServerResponseTime + STREAMING_UPDATE_INTERVAL)); + return; + } + } + try { inApiCall = true; let expression = await getExpressionLabel(currentLastMessage.mes); @@ -583,7 +596,6 @@ async function moduleWorker() { } await sendExpressionCall(spriteFolderName, expression, force, vnMode); - } catch (error) { console.log(error); @@ -592,6 +604,7 @@ async function moduleWorker() { inApiCall = false; lastCharacter = context.groupId || context.characterId; lastMessage = currentLastMessage.mes; + lastServerResponseTime = Date.now(); } }