diff --git a/src/lib/components/chat/MessageInput.svelte b/src/lib/components/chat/MessageInput.svelte index ba34b3cc..bb03cdac 100644 --- a/src/lib/components/chat/MessageInput.svelte +++ b/src/lib/components/chat/MessageInput.svelte @@ -55,6 +55,11 @@ let isRecording = false; const MIN_DECIBELS = -45; + const scrollToBottom = () => { + const element = document.getElementById('messages-container'); + element.scrollTop = element.scrollHeight; + }; + const startRecording = async () => { const stream = await navigator.mediaDevices.getUserMedia({ audio: true }); mediaRecorder = new MediaRecorder(stream); @@ -371,17 +376,17 @@ {/if} -
-
+
+
-
+
{#if autoScroll === false && messages.length > 0} -
+
-
+
{#if filteredItems.length > 0 || prompt.split(' ')?.at(0)?.substring(1).startsWith('http')} -
+
#
diff --git a/src/lib/components/chat/MessageInput/Models.svelte b/src/lib/components/chat/MessageInput/Models.svelte index 0dbb71c8..b7bd7bac 100644 --- a/src/lib/components/chat/MessageInput/Models.svelte +++ b/src/lib/components/chat/MessageInput/Models.svelte @@ -120,7 +120,7 @@ {#if filteredModels.length > 0} -
+
@
diff --git a/src/lib/components/chat/MessageInput/PromptCommands.svelte b/src/lib/components/chat/MessageInput/PromptCommands.svelte index ddf35360..83e38561 100644 --- a/src/lib/components/chat/MessageInput/PromptCommands.svelte +++ b/src/lib/components/chat/MessageInput/PromptCommands.svelte @@ -47,7 +47,7 @@ {#if filteredPromptCommands.length > 0} -
+
/
diff --git a/src/lib/components/chat/Messages.svelte b/src/lib/components/chat/Messages.svelte index 3b2e3f62..b02ba116 100644 --- a/src/lib/components/chat/Messages.svelte +++ b/src/lib/components/chat/Messages.svelte @@ -29,10 +29,15 @@ $: if (autoScroll && bottomPadding) { (async () => { await tick(); - window.scrollTo({ top: document.body.scrollHeight, behavior: 'smooth' }); + scrollToBottom(); })(); } + const scrollToBottom = () => { + const element = document.getElementById('messages-container'); + element.scrollTop = element.scrollHeight; + }; + const copyToClipboard = (text) => { if (!navigator.clipboard) { var textArea = document.createElement('textarea'); @@ -160,10 +165,11 @@ await tick(); - autoScroll = window.innerHeight + window.scrollY >= document.body.offsetHeight - 40; + const element = document.getElementById('messages-container'); + autoScroll = element.scrollHeight - element.scrollTop <= element.clientHeight + 50; setTimeout(() => { - window.scrollTo({ top: document.body.scrollHeight, behavior: 'smooth' }); + scrollToBottom(); }, 100); }; @@ -208,9 +214,11 @@ await tick(); - autoScroll = window.innerHeight + window.scrollY >= document.body.offsetHeight - 40; + const element = document.getElementById('messages-container'); + autoScroll = element.scrollHeight - element.scrollTop <= element.clientHeight + 50; + setTimeout(() => { - window.scrollTo({ top: document.body.scrollHeight, behavior: 'smooth' }); + scrollToBottom(); }, 100); }; @@ -218,95 +226,97 @@ {#if messages.length == 0} {:else} - {#key chatId} - {#each messages as message, messageIdx} -
-
- {#if message.role === 'user'} - message.parentId === null) - .map((message) => message.id) ?? []} - {confirmEditMessage} - {showPreviousMessage} - {showNextMessage} - {copyToClipboard} - /> +
+ {#key chatId} + {#each messages as message, messageIdx} +
+
+ {#if message.role === 'user'} + message.parentId === null) + .map((message) => message.id) ?? []} + {confirmEditMessage} + {showPreviousMessage} + {showNextMessage} + {copyToClipboard} + /> - {#if messages.length - 1 === messageIdx && processing !== ''} -
-
-
+
+ + @keyframes spinner_8HQG { + 0%, + 57.14% { + animation-timing-function: cubic-bezier(0.33, 0.66, 0.66, 1); + transform: translate(0); + } + 28.57% { + animation-timing-function: cubic-bezier(0.33, 0, 0.66, 0.33); + transform: translateY(-6px); + } + 100% { + transform: translate(0); + } + } + +
+
+ {processing} +
-
- {processing} -
-
+ {/if} + {:else} + {/if} - {:else} - - {/if} +
-
- {/each} + {/each} - {#if bottomPadding} -
- {/if} - {/key} + {#if bottomPadding} +
+ {/if} + {/key} +
{/if} diff --git a/src/lib/components/chat/Messages/Placeholder.svelte b/src/lib/components/chat/Messages/Placeholder.svelte index e62fb41a..39abf6c5 100644 --- a/src/lib/components/chat/Messages/Placeholder.svelte +++ b/src/lib/components/chat/Messages/Placeholder.svelte @@ -16,7 +16,7 @@ {#if models.length > 0} -
+
{#each models as model, modelIdx} diff --git a/src/lib/components/chat/Messages/ResponseMessage.svelte b/src/lib/components/chat/Messages/ResponseMessage.svelte index 546e0621..b743d06f 100644 --- a/src/lib/components/chat/Messages/ResponseMessage.svelte +++ b/src/lib/components/chat/Messages/ResponseMessage.svelte @@ -270,9 +270,7 @@ {#if message.model in modelfiles} {modelfiles[message.model]?.title} {:else} - Ollama {message.model ? ` ${message.model}` : ''} + {message.model ? ` ${message.model}` : ''} {/if} {#if message.timestamp} @@ -365,7 +363,7 @@ {#if message.done}
{#if siblings.length > 1} -
+
-
+
{siblings.indexOf(message.id) + 1} / {siblings.length}
diff --git a/src/lib/components/chat/Settings/Models.svelte b/src/lib/components/chat/Settings/Models.svelte index 529b778f..aafa333f 100644 --- a/src/lib/components/chat/Settings/Models.svelte +++ b/src/lib/components/chat/Settings/Models.svelte @@ -3,7 +3,7 @@ import toast from 'svelte-french-toast'; import { createModel, deleteModel, pullModel } from '$lib/apis/ollama'; - import { WEBUI_API_BASE_URL } from '$lib/constants'; + import { WEBUI_API_BASE_URL, WEBUI_NAME } from '$lib/constants'; import { models, user } from '$lib/stores'; import { splitStream } from '$lib/utils'; @@ -59,7 +59,7 @@ } else { toast.success(`Model '${modelName}' has been successfully downloaded.`); - const notification = new Notification(`Ollama`, { + const notification = new Notification(WEBUI_NAME, { body: `Model '${modelName}' has been successfully downloaded.`, icon: '/favicon.png' }); diff --git a/src/lib/components/layout/Navbar.svelte b/src/lib/components/layout/Navbar.svelte index 1bf3d583..529f136d 100644 --- a/src/lib/components/layout/Navbar.svelte +++ b/src/lib/components/layout/Navbar.svelte @@ -69,7 +69,7 @@