From c60031c95737b27758ad31d6542842d5f45ebaff Mon Sep 17 00:00:00 2001 From: Mikei386 <44135113+Mikei386@users.noreply.github.com> Date: Sun, 23 Aug 2026 13:56:18 +0200 Subject: [PATCH] Stop tool status audio before final speech --- .../openwebui/filters/spoken_tool_status.py | 27 +++++++++++++------ 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/platform/openwebui/filters/spoken_tool_status.py b/platform/openwebui/filters/spoken_tool_status.py index c6b72d1..1f727c0 100644 --- a/platform/openwebui/filters/spoken_tool_status.py +++ b/platform/openwebui/filters/spoken_tool_status.py @@ -113,8 +113,8 @@ class Filter: const safeCategory = allowed.includes(category) ? category : 'generic'; const timers = window.__mikeAIToolStatusTimers ||= new Map(); if (timers.has(key)) return; - const timer = window.setTimeout(async () => {{ - timers.delete(key); + const state = {{ timer: undefined, audio: undefined }}; + state.timer = window.setTimeout(async () => {{ let enabled = false; try {{ const local = JSON.parse(localStorage.getItem('settings') || '{{}}'); @@ -131,15 +131,22 @@ class Filter: }} }} }} catch (_) {{}} - if (!enabled) return; + if (!enabled) {{ + timers.delete(key); + return; + }} try {{ const audio = new Audio(`/static/tool-status/${{safeCategory}}.mp3?status=v1`); + state.audio = audio; audio.preload = 'auto'; audio.volume = 0.92; + audio.addEventListener('ended', () => timers.delete(key), {{ once: true }}); await audio.play(); - }} catch (_) {{}} + }} catch (_) {{ + timers.delete(key); + }} }}, 850); - timers.set(key, timer); + timers.set(key, state); }})(); """.strip() try: @@ -166,9 +173,13 @@ class Filter: (() => {{ const key = {json.dumps(key)}; const timers = window.__mikeAIToolStatusTimers; - const timer = timers && timers.get(key); - if (timer !== undefined) {{ - window.clearTimeout(timer); + const state = timers && timers.get(key); + if (state !== undefined) {{ + if (state.timer !== undefined) window.clearTimeout(state.timer); + if (state.audio) {{ + state.audio.pause(); + state.audio.currentTime = 0; + }} timers.delete(key); }} }})();