Mask UI blocking when loading large chat session

This commit is contained in:
Webifi 2023-06-16 10:35:35 -05:00
parent cff9998682
commit ca0627306f
4 changed files with 27 additions and 16 deletions

View File

@ -10,11 +10,10 @@
submitExitingPromptsNow, submitExitingPromptsNow,
continueMessage, continueMessage,
getMessage, getMessage,
currentChatMessages,
setCurrentChat,
currentChatId, currentChatId
currentChatMessages
} from './Storage.svelte' } from './Storage.svelte'
import { import {
@ -99,6 +98,7 @@
$: onStateChange($checkStateChange, $showSetChatSettings, $submitExitingPromptsNow, $continueMessage) $: onStateChange($checkStateChange, $showSetChatSettings, $submitExitingPromptsNow, $continueMessage)
setCurrentChat(0)
// Make sure chat object is ready to go // Make sure chat object is ready to go
updateChatSettings(chatId) updateChatSettings(chatId)
@ -112,8 +112,7 @@
onMount(async () => { onMount(async () => {
if (!chat) return if (!chat) return
$currentChatId = chatId setCurrentChat(chatId)
$currentChatMessages = chat.messages
chatRequest = new ChatRequest() chatRequest = new ChatRequest()
chatRequest.setChat(chat) chatRequest.setChat(chat)
@ -355,9 +354,9 @@
</div> </div>
</nav> </nav>
<Messages messages={$currentChatMessages} chatId={chatId} /> <Messages messages={$currentChatMessages} chatId={chatId} chat={chat} />
{#if chatRequest.updating === true} {#if chatRequest.updating === true || $currentChatId === 0}
<article class="message is-success assistant-message"> <article class="message is-success assistant-message">
<div class="message-body content"> <div class="message-body content">
<span class="is-loading" ></span> <span class="is-loading" ></span>
@ -366,7 +365,7 @@
</article> </article>
{/if} {/if}
{#if $currentChatMessages.length === 0 || ($currentChatMessages.length === 1 && $currentChatMessages[0].role === 'system')} {#if $currentChatId !== 0 && ($currentChatMessages.length === 0 || ($currentChatMessages.length === 1 && $currentChatMessages[0].role === 'system'))}
<Prompts bind:input /> <Prompts bind:input />
{/if} {/if}
</div> </div>

View File

@ -1,7 +1,7 @@
<script lang="ts"> <script lang="ts">
import Code from './Code.svelte' import Code from './Code.svelte'
import { afterUpdate, createEventDispatcher, onMount } from 'svelte' import { afterUpdate, createEventDispatcher, onMount } from 'svelte'
import { deleteMessage, chatsStorage, deleteSummaryMessage, truncateFromMessage, submitExitingPromptsNow, continueMessage, updateMessages } from './Storage.svelte' import { deleteMessage, deleteSummaryMessage, truncateFromMessage, submitExitingPromptsNow, continueMessage, updateMessages } from './Storage.svelte'
import { getPrice } from './Stats.svelte' import { getPrice } from './Stats.svelte'
import SvelteMarkdown from 'svelte-markdown' import SvelteMarkdown from 'svelte-markdown'
import type { Message, Model, Chat } from './Types.svelte' import type { Message, Model, Chat } from './Types.svelte'
@ -14,9 +14,8 @@
export let message:Message export let message:Message
export let chatId:number export let chatId:number
export let chat:Chat
$: chat = $chatsStorage.find((chat) => chat.id === chatId) as Chat
$: chatSettings = chat.settings $: chatSettings = chat.settings
const isError = message.role === 'error' const isError = message.role === 'error'
@ -49,7 +48,7 @@
}) })
afterUpdate(() => { afterUpdate(() => {
if (message.content.slice(-5).includes('```')) refreshCounter++ if (message.streaming && message.content.slice(-5).includes('```')) refreshCounter++
}) })
const edit = () => { const edit = () => {

View File

@ -1,19 +1,19 @@
<script lang="ts"> <script lang="ts">
// Iterate messages // Iterate messages
import type { Message, Chat } from './Types.svelte' import type { Message, Chat } from './Types.svelte'
import { chatsStorage, globalStorage } from './Storage.svelte' import { globalStorage } from './Storage.svelte'
import EditMessage from './EditMessage.svelte' import EditMessage from './EditMessage.svelte'
export let messages : Message[] export let messages : Message[]
export let chatId: number export let chatId: number
export let chat: Chat
$: chat = $chatsStorage.find((chat) => chat.id === chatId) as Chat
$: chatSettings = chat.settings $: chatSettings = chat.settings
</script> </script>
{#each messages as message, i} {#each messages as message, i}
{#if !((message.summarized) && $globalStorage.hideSummarized) && !(i === 0 && message.role === 'system' && !chatSettings.useSystemPrompt)} {#if !((message.summarized) && $globalStorage.hideSummarized) && !(i === 0 && message.role === 'system' && !chatSettings.useSystemPrompt)}
{#key message.uuid}<EditMessage bind:message={message} chatId={chatId} />{/key} <EditMessage bind:message={message} chatId={chatId} chat={chat} />
{/if} {/if}
{/each} {/each}

View File

@ -222,6 +222,19 @@
return getChat(chatId).messages return getChat(chatId).messages
} }
let setChatTimer: any
export const setCurrentChat = (chatId: number) => {
clearTimeout(setChatTimer)
if (!chatId) {
currentChatId.set(0)
currentChatMessages.set([])
}
setChatTimer = setTimeout(() => {
currentChatId.set(chatId)
currentChatMessages.set(getChat(chatId).messages)
}, 10)
}
let setMessagesTimer: any let setMessagesTimer: any
export const setMessages = (chatId: number, messages: Message[]) => { export const setMessages = (chatId: number, messages: Message[]) => {
if (get(currentChatId) === chatId) { if (get(currentChatId) === chatId) {