From 84c1810b6efe99dc39781f4eed7ee66b5d1e3606 Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Mon, 23 Sep 2024 23:20:27 +0200 Subject: [PATCH] refac --- src/lib/components/chat/Messages.svelte | 16 +- .../components/chat/Messages/Message.svelte | 84 ++--- .../Messages/MultiResponseMessages.svelte | 319 +++++++++--------- .../chat/Messages/ResponseMessage.svelte | 20 +- .../chat/Messages/UserMessage.svelte | 15 +- 5 files changed, 244 insertions(+), 210 deletions(-) diff --git a/src/lib/components/chat/Messages.svelte b/src/lib/components/chat/Messages.svelte index d159e80f9..5a6bc0112 100644 --- a/src/lib/components/chat/Messages.svelte +++ b/src/lib/components/chat/Messages.svelte @@ -333,7 +333,7 @@ {#each messages as message, messageIdx (message.id)} { + if (autoScroll) { + const element = document.getElementById('messages-container'); + autoScroll = + element.scrollHeight - element.scrollTop <= element.clientHeight + 50; + setTimeout(() => { + scrollToBottom(); + }, 100); + } + }} /> {/each} diff --git a/src/lib/components/chat/Messages/Message.svelte b/src/lib/components/chat/Messages/Message.svelte index d60e17cc4..dd5c498a3 100644 --- a/src/lib/components/chat/Messages/Message.svelte +++ b/src/lib/components/chat/Messages/Message.svelte @@ -1,7 +1,8 @@ -
-
- {#each Object.keys(groupedMessages) as modelIdx} - {#if groupedMessagesIdx[modelIdx] !== undefined && groupedMessages[modelIdx].messages.length > 0} - - - {@const message = groupedMessages[modelIdx].messages[groupedMessagesIdx[modelIdx]]} +{#if parentMessage} +
+
+ {#each Object.keys(groupedMessageIds) as modelIdx} + {#if groupedMessageIdsIdx[modelIdx] !== undefined && groupedMessageIds[modelIdx].messageIds.length > 0} + + + {@const _messageId = + groupedMessageIds[modelIdx].messageIds[groupedMessageIdsIdx[modelIdx]]} -
{ - if (currentMessageId != message.id) { - currentMessageId = message.id; - let messageId = message.id; - console.log(messageId); - // - let messageChildrenIds = history.messages[messageId].childrenIds; - while (messageChildrenIds.length !== 0) { - messageId = messageChildrenIds.at(-1); - messageChildrenIds = history.messages[messageId].childrenIds; +
{ + if (messageId != _messageId) { + let messageChildrenIds = history.messages[_messageId].childrenIds; + while (messageChildrenIds.length !== 0) { + messageId = messageChildrenIds.at(-1); + messageChildrenIds = history.messages[_messageId].childrenIds; + } + history.currentId = _messageId; + dispatch('change'); } - history.currentId = messageId; - dispatch('change'); - } - }} - > - {#key history.currentId} - {#if message} - m.id)} - isLastMessage={true} - {updateChatMessages} - {saveNewResponseMessage} - {confirmEditResponseMessage} - showPreviousMessage={() => showPreviousMessage(modelIdx)} - showNextMessage={() => showNextMessage(modelIdx)} - {readOnly} - {rateMessage} - {copyToClipboard} - {continueResponse} - regenerateResponse={async (message) => { - regenerateResponse(message); - await tick(); - groupedMessagesIdx[modelIdx] = groupedMessages[modelIdx].messages.length - 1; - }} - on:action={async (e) => { - dispatch('action', e.detail); - }} - on:save={async (e) => { - console.log('save', e); + }} + > + {#key history.currentId} + {#if message} + showPreviousMessage(modelIdx)} + showNextMessage={() => showNextMessage(modelIdx)} + {rateMessage} + {editMessage} + {continueResponse} + regenerateResponse={async (message) => { + regenerateResponse(message); + await tick(); + groupedMessageIdsIdx[modelIdx] = + groupedMessageIds[modelIdx].messageIds.length - 1; + }} + on:action={async (e) => { + dispatch('action', e.detail); + }} + on:update={async (e) => { + dispatch('update', e.detail); + }} + on:save={async (e) => { + dispatch('save', e.detail); + }} + {readOnly} + /> + {/if} + {/key} +
+ {/if} + {/each} +
- const message = e.detail; - history.messages[message.id] = message; - await updateChatById(localStorage.token, chatId, { - messages: messages, - history: history - }); - }} - /> + {#if !readOnly && isLastMessage} + {#if !Object.keys(groupedMessageIds).find((modelIdx) => { + const { messageIds } = groupedMessageIds[modelIdx]; + const _messageId = messageIds[groupedMessageIdsIdx[modelIdx]]; + return !history.messages[_messageId]?.done ?? false; + })} +
+
+ {#if history.messages[messageId]?.merged?.status} + {@const message = history.messages[messageId]?.merged} + +
+ + Merged Response + + {#if message.timestamp} + + {/if} + + +
+ {#if (message?.content ?? '') === ''} + + {:else} + + {/if} +
+
{/if} - {/key} +
+ +
+ + + +
{/if} - {/each} -
- - {#if !readOnly && isLastMessage} - {#if !Object.keys(groupedMessages).find((modelIdx) => { - const { messages } = groupedMessages[modelIdx]; - return !messages[groupedMessagesIdx[modelIdx]]?.done ?? false; - })} -
-
- {#if history.messages[currentMessageId]?.merged?.status} - {@const message = history.messages[currentMessageId]?.merged} - -
- - Merged Response - - {#if message.timestamp} - - {/if} - - -
- {#if (message?.content ?? '') === ''} - - {:else} - - {/if} -
-
- {/if} -
- -
- - - -
-
{/if} - {/if} -
+
+{/if} diff --git a/src/lib/components/chat/Messages/ResponseMessage.svelte b/src/lib/components/chat/Messages/ResponseMessage.svelte index c62c20b6b..6d010bd5a 100644 --- a/src/lib/components/chat/Messages/ResponseMessage.svelte +++ b/src/lib/components/chat/Messages/ResponseMessage.svelte @@ -77,15 +77,18 @@ annotation?: { type: string; rating: number }; } - export let message: MessageType; + export let history; + export let messageId; + + let message: MessageType = JSON.parse(JSON.stringify(history.messages[messageId])); + $: if (history.messages) { + if (JSON.stringify(message) !== JSON.stringify(history.messages[messageId])) { + message = JSON.parse(JSON.stringify(history.messages[messageId])); + } + } + export let siblings; - export let isLastMessage = true; - - export let readOnly = false; - - export let saveNewResponseMessage: Function = () => {}; - export let showPreviousMessage: Function; export let showNextMessage: Function; @@ -95,6 +98,9 @@ export let continueResponse: Function; export let regenerateResponse: Function; + export let isLastMessage = true; + export let readOnly = false; + let model = null; $: model = $models.find((m) => m.id === message.model); diff --git a/src/lib/components/chat/Messages/UserMessage.svelte b/src/lib/components/chat/Messages/UserMessage.svelte index 3f0fd7be9..709ce2d51 100644 --- a/src/lib/components/chat/Messages/UserMessage.svelte +++ b/src/lib/components/chat/Messages/UserMessage.svelte @@ -20,25 +20,30 @@ const i18n = getContext('i18n'); const dispatch = createEventDispatcher(); - export let user; - export let message; + + export let history; + export let messageId; + export let siblings; - export let isFirstMessage: boolean; export let showPreviousMessage: Function; export let showNextMessage: Function; export let editMessage: Function; + export let isFirstMessage: boolean; export let readOnly: boolean; let edit = false; let editedContent = ''; let messageEditTextAreaElement: HTMLTextAreaElement; - $: if (message) { - console.log('message', message); + let message = JSON.parse(JSON.stringify(history.messages[messageId])); + $: if (history.messages) { + if (JSON.stringify(message) !== JSON.stringify(history.messages[messageId])) { + message = JSON.parse(JSON.stringify(history.messages[messageId])); + } } const copyToClipboard = async (text) => {