Merge branch 'feature/tts' of https://github.com/FlowiseAI/Flowise into feature/tts

This commit is contained in:
Henry 2025-09-30 13:23:30 +01:00
commit 6aabcee1de
1 changed files with 14 additions and 7 deletions

View File

@ -487,15 +487,11 @@ const ChatMessage = ({ open, chatflowid, isAgentCanvas, isDialog, previews, setP
setIsMessageStopping(true) setIsMessageStopping(true)
try { try {
// Stop all TTS streams first // Stop all TTS streams first
await handleTTSAbortAll()
stopAllTTS() stopAllTTS()
// Abort TTS for any active streams
const activeTTSMessages = Object.keys(isTTSLoading).concat(Object.keys(isTTSPlaying))
for (const messageId of activeTTSMessages) {
await ttsApi.abortTTS({ chatflowId: chatflowid, chatId, chatMessageId: messageId })
}
await chatmessageApi.abortMessage(chatflowid, chatId) await chatmessageApi.abortMessage(chatflowid, chatId)
setIsMessageStopping(false)
} catch (error) { } catch (error) {
setIsMessageStopping(false) setIsMessageStopping(false)
enqueueSnackbar({ enqueueSnackbar({
@ -1621,6 +1617,7 @@ const ChatMessage = ({ open, chatflowid, isAgentCanvas, isDialog, previews, setP
setTTSAction(true) setTTSAction(true)
await ttsApi.abortTTS({ chatflowId: chatflowid, chatId, chatMessageId: messageId }) await ttsApi.abortTTS({ chatflowId: chatflowid, chatId, chatMessageId: messageId })
cleanupTTSForMessage(messageId) cleanupTTSForMessage(messageId)
setIsMessageStopping(false)
} }
const stopAllTTS = () => { const stopAllTTS = () => {
@ -1654,6 +1651,9 @@ const ChatMessage = ({ open, chatflowid, isAgentCanvas, isDialog, previews, setP
} }
setTTSAction(true) setTTSAction(true)
// abort all ongoing streams and clear audio sources
await handleTTSAbortAll()
stopAllTTS() stopAllTTS()
handleTTSStart({ chatMessageId: messageId, format: 'mp3' }) handleTTSStart({ chatMessageId: messageId, format: 'mp3' })
@ -1798,7 +1798,7 @@ const ChatMessage = ({ open, chatflowid, isAgentCanvas, isDialog, previews, setP
audio.addEventListener('playing', () => { audio.addEventListener('playing', () => {
setIsTTSLoading((prevState) => { setIsTTSLoading((prevState) => {
const newState = { ...prevState } const newState = { ...prevState }
newState[data.chatMessageId] = false delete newState[data.chatMessageId]
return newState return newState
}) })
setIsTTSPlaying((prevState) => ({ setIsTTSPlaying((prevState) => ({
@ -1987,6 +1987,13 @@ const ChatMessage = ({ open, chatflowid, isAgentCanvas, isDialog, previews, setP
cleanupTTSForMessage(messageId) cleanupTTSForMessage(messageId)
} }
const handleTTSAbortAll = async () => {
const activeTTSMessages = Object.keys(isTTSLoading).concat(Object.keys(isTTSPlaying))
for (const messageId of activeTTSMessages) {
await ttsApi.abortTTS({ chatflowId: chatflowid, chatId, chatMessageId: messageId })
}
}
useEffect(() => { useEffect(() => {
if (ttsStreamingState.sourceBuffer) { if (ttsStreamingState.sourceBuffer) {
const sourceBuffer = ttsStreamingState.sourceBuffer const sourceBuffer = ttsStreamingState.sourceBuffer