Mask UI blocking when loading large chat session
This commit is contained in:
		
							parent
							
								
									cff9998682
								
							
						
					
					
						commit
						ca0627306f
					
				| 
						 | 
				
			
			@ -10,11 +10,10 @@
 | 
			
		|||
    submitExitingPromptsNow,
 | 
			
		||||
    continueMessage,
 | 
			
		||||
    getMessage,
 | 
			
		||||
    currentChatMessages,
 | 
			
		||||
    setCurrentChat,
 | 
			
		||||
 | 
			
		||||
    currentChatId,
 | 
			
		||||
 | 
			
		||||
    currentChatMessages
 | 
			
		||||
 | 
			
		||||
    currentChatId
 | 
			
		||||
 | 
			
		||||
  } from './Storage.svelte'
 | 
			
		||||
  import {
 | 
			
		||||
| 
						 | 
				
			
			@ -99,6 +98,7 @@
 | 
			
		|||
  
 | 
			
		||||
  $: onStateChange($checkStateChange, $showSetChatSettings, $submitExitingPromptsNow, $continueMessage)
 | 
			
		||||
 | 
			
		||||
  setCurrentChat(0)
 | 
			
		||||
  // Make sure chat object is ready to go
 | 
			
		||||
  updateChatSettings(chatId)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -112,8 +112,7 @@
 | 
			
		|||
  onMount(async () => {
 | 
			
		||||
    if (!chat) return
 | 
			
		||||
 | 
			
		||||
    $currentChatId = chatId
 | 
			
		||||
    $currentChatMessages = chat.messages
 | 
			
		||||
    setCurrentChat(chatId)
 | 
			
		||||
 | 
			
		||||
    chatRequest = new ChatRequest()
 | 
			
		||||
    chatRequest.setChat(chat)
 | 
			
		||||
| 
						 | 
				
			
			@ -355,9 +354,9 @@
 | 
			
		|||
  </div>
 | 
			
		||||
</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">
 | 
			
		||||
    <div class="message-body content">
 | 
			
		||||
      <span class="is-loading" ></span>
 | 
			
		||||
| 
						 | 
				
			
			@ -366,7 +365,7 @@
 | 
			
		|||
  </article>
 | 
			
		||||
{/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 />
 | 
			
		||||
{/if}
 | 
			
		||||
</div>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
<script lang="ts">
 | 
			
		||||
  import Code from './Code.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 SvelteMarkdown from 'svelte-markdown'
 | 
			
		||||
  import type { Message, Model, Chat } from './Types.svelte'
 | 
			
		||||
| 
						 | 
				
			
			@ -14,9 +14,8 @@
 | 
			
		|||
 | 
			
		||||
  export let message:Message
 | 
			
		||||
  export let chatId:number
 | 
			
		||||
  export let chat:Chat
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  $: chat = $chatsStorage.find((chat) => chat.id === chatId) as Chat
 | 
			
		||||
  $: chatSettings = chat.settings
 | 
			
		||||
 | 
			
		||||
  const isError = message.role === 'error'
 | 
			
		||||
| 
						 | 
				
			
			@ -49,7 +48,7 @@
 | 
			
		|||
  })
 | 
			
		||||
 | 
			
		||||
  afterUpdate(() => {
 | 
			
		||||
    if (message.content.slice(-5).includes('```')) refreshCounter++
 | 
			
		||||
    if (message.streaming && message.content.slice(-5).includes('```')) refreshCounter++
 | 
			
		||||
  })
 | 
			
		||||
 | 
			
		||||
  const edit = () => {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,19 +1,19 @@
 | 
			
		|||
<script lang="ts">
 | 
			
		||||
  // Iterate messages
 | 
			
		||||
  import type { Message, Chat } from './Types.svelte'
 | 
			
		||||
  import { chatsStorage, globalStorage } from './Storage.svelte'
 | 
			
		||||
  import { globalStorage } from './Storage.svelte'
 | 
			
		||||
  import EditMessage from './EditMessage.svelte'
 | 
			
		||||
 | 
			
		||||
  export let messages : Message[]
 | 
			
		||||
  export let chatId: number
 | 
			
		||||
  export let chat: Chat
 | 
			
		||||
  
 | 
			
		||||
  $: chat = $chatsStorage.find((chat) => chat.id === chatId) as Chat
 | 
			
		||||
  $: chatSettings = chat.settings
 | 
			
		||||
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
{#each messages as message, i}
 | 
			
		||||
  {#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}
 | 
			
		||||
{/each}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -222,6 +222,19 @@
 | 
			
		|||
    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
 | 
			
		||||
  export const setMessages = (chatId: number, messages: Message[]) => {
 | 
			
		||||
    if (get(currentChatId) === chatId) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue