diff --git a/src/lib/components/chat/Chat.svelte b/src/lib/components/chat/Chat.svelte index b7133e4344..d8cde69b62 100644 --- a/src/lib/components/chat/Chat.svelte +++ b/src/lib/components/chat/Chat.svelte @@ -128,6 +128,9 @@ let showCommands = false; + let generating = false; + let generationController = null; + let chat = null; let tags = []; @@ -1857,6 +1860,12 @@ scrollToBottom(); } } + + if (generating) { + generating = false; + generationController?.abort(); + generationController = null; + } }; const submitMessage = async (parentId, prompt) => { @@ -1947,6 +1956,7 @@ history.messages[messageId] = message; try { + generating = true; const [res, controller] = await generateMoACompletion( localStorage.token, message.model, @@ -1954,11 +1964,14 @@ responses ); - if (res && res.ok && res.body) { + if (res && res.ok && res.body && generating) { + generationController = controller; const textStream = await createOpenAITextStream(res.body, $settings.splitLargeChunks); for await (const update of textStream) { const { value, done, sources, error, usage } = update; if (error || done) { + generating = false; + generationController = null; break; } @@ -2190,6 +2203,7 @@ transparentBackground={$settings?.backgroundImageUrl ?? $config?.license_metadata?.background_image_url ?? false} + {generating} {stopResponse} {createMessagePair} onChange={(data) => { diff --git a/src/lib/components/chat/MessageInput.svelte b/src/lib/components/chat/MessageInput.svelte index 55a64fc2de..bd17915cea 100644 --- a/src/lib/components/chat/MessageInput.svelte +++ b/src/lib/components/chat/MessageInput.svelte @@ -82,6 +82,7 @@ export let stopResponse: Function; export let autoScroll = false; + export let generating = false; export let atSelectedModel: Model | undefined = undefined; export let selectedModels: ['']; @@ -1820,7 +1821,7 @@ {/if} - {#if (taskIds && taskIds.length > 0) || (history.currentId && history.messages[history.currentId]?.done != true)} + {#if (taskIds && taskIds.length > 0) || (history.currentId && history.messages[history.currentId]?.done != true) || generating}