diff --git a/src/lib/Chat.svelte b/src/lib/Chat.svelte
index 9d81151..c1b832f 100644
--- a/src/lib/Chat.svelte
+++ b/src/lib/Chat.svelte
@@ -9,7 +9,13 @@
showSetChatSettings,
submitExitingPromptsNow,
continueMessage,
- getMessage
+ getMessage,
+
+ currentChatId,
+
+ currentChatMessages
+
+
} from './Storage.svelte'
import {
type Message,
@@ -82,9 +88,9 @@
submitForm(false, true)
}
if ($continueMessage) {
- const message = getMessage(chat, $continueMessage)
+ const message = getMessage(chatId, $continueMessage)
$continueMessage = ''
- if (message && chat.messages.indexOf(message) === (chat.messages.length - 1)) {
+ if (message && $currentChatMessages.indexOf(message) === ($currentChatMessages.length - 1)) {
submitForm(lastSubmitRecorded, true, message)
}
}
@@ -106,6 +112,9 @@
onMount(async () => {
if (!chat) return
+ $currentChatId = chatId
+ $currentChatMessages = chat.messages
+
chatRequest = new ChatRequest()
chatRequest.setChat(chat)
// Focus the input on mount
@@ -164,9 +173,9 @@
const addNewMessage = () => {
if (chatRequest.updating) return
let inputMessage: Message
- const lastMessage = chat.messages[chat.messages.length - 1]
+ const lastMessage = $currentChatMessages[$currentChatMessages.length - 1]
const uuid = uuidv4()
- if (chat.messages.length === 0) {
+ if ($currentChatMessages.length === 0) {
inputMessage = { role: 'system', content: input.value, uuid }
} else if (lastMessage && lastMessage.role === 'user') {
inputMessage = { role: 'assistant', content: input.value, uuid }
@@ -220,8 +229,8 @@
// Compose the input message
const inputMessage: Message = { role: 'user', content: input.value, uuid: uuidv4() }
addMessage(chatId, inputMessage)
- } else if (!fillMessage && chat.messages.length && chat.messages[chat.messages.length - 1].finish_reason === 'length') {
- fillMessage = chat.messages[chat.messages.length - 1]
+ } else if (!fillMessage && $currentChatMessages.length && $currentChatMessages[$currentChatMessages.length - 1].finish_reason === 'length') {
+ fillMessage = $currentChatMessages[$currentChatMessages.length - 1]
}
// Clear the input value
@@ -237,7 +246,7 @@
chatRequest.updatingMessage = ''
try {
- const response = await chatRequest.sendRequest(chat.messages, {
+ const response = await chatRequest.sendRequest($currentChatMessages, {
chat,
autoAddMessages: true, // Auto-add and update messages in array
streaming: chatSettings.stream,
@@ -268,7 +277,7 @@
uuid: uuidv4()
}
- const suggestMessages = chat.messages.slice(0, 10) // limit to first 10 messages
+ const suggestMessages = $currentChatMessages.slice(0, 10) // limit to first 10 messages
suggestMessages.push(suggestMessage)
const response = await chatRequest.sendRequest(suggestMessages, {
@@ -346,7 +355,7 @@
-
+
{#if chatRequest.updating === true}
@@ -357,7 +366,7 @@
{/if}
-{#if chat.messages.length === 0 || (chat.messages.length === 1 && chat.messages[0].role === 'system')}
+{#if $currentChatMessages.length === 0 || ($currentChatMessages.length === 1 && $currentChatMessages[0].role === 'system')}
{/if}
diff --git a/src/lib/ChatRequest.svelte b/src/lib/ChatRequest.svelte
index 6c23fe5..6f653cc 100644
--- a/src/lib/ChatRequest.svelte
+++ b/src/lib/ChatRequest.svelte
@@ -3,12 +3,13 @@
import { mergeProfileFields, prepareSummaryPrompt } from './Profiles.svelte'
import { countMessageTokens, countPromptTokens, getModelMaxTokens } from './Stats.svelte'
import type { Chat, ChatCompletionOpts, ChatSettings, Message, Model, Request, RequestImageGeneration } from './Types.svelte'
- import { deleteMessage, getChatSettingValueNullDefault, insertMessages, saveChatStore, getApiKey, addError } from './Storage.svelte'
+ import { deleteMessage, getChatSettingValueNullDefault, insertMessages, getApiKey, addError, currentChatMessages, getMessages, updateMessages } from './Storage.svelte'
import { scrollToBottom, scrollToMessage } from './Util.svelte'
import { getRequestSettingList, defaultModel } from './Settings.svelte'
import { EventStreamContentType, fetchEventSource } from '@microsoft/fetch-event-source'
import { getApiBase, getEndpointCompletions, getEndpointGenerations } from './ApiUtil.svelte'
import { v4 as uuidv4 } from 'uuid'
+ import { get } from 'svelte/store'
export class ChatRequest {
constructor () {
@@ -317,7 +318,7 @@ export class ChatRequest {
const maxTokens = getModelMaxTokens(model) // max tokens for model
const continueRequest = async () => {
- return await _this.sendRequest(chat.messages, {
+ return await _this.sendRequest(getMessages(chatId), {
...opts,
didSummary: true
}, overrides)
@@ -358,7 +359,7 @@ export class ChatRequest {
promptSize = countPromptTokens(top.concat(rw), model) + countPadding
}
// Run a new request, now with the rolled messages hidden
- return await _this.sendRequest(chat.messages, {
+ return await _this.sendRequest(get(currentChatMessages), {
...opts,
didSummary: true // our "summary" was simply dropping some messages
}, overrides)
@@ -466,11 +467,11 @@ export class ChatRequest {
summaryResponse.summary = summarizedIds
// Disable the messages we summarized so they still show in history
rw.forEach((m, i) => { m.summarized = summaryIds })
- saveChatStore()
+ updateMessages(chatId)
// Re-run request with summarized prompts
_this.updatingMessage = 'Continuing...'
scrollToBottom(true)
- return await _this.sendRequest(chat.messages, {
+ return await _this.sendRequest(get(currentChatMessages), {
...opts,
didSummary: true
},
diff --git a/src/lib/EditMessage.svelte b/src/lib/EditMessage.svelte
index 3e4aadc..188502b 100644
--- a/src/lib/EditMessage.svelte
+++ b/src/lib/EditMessage.svelte
@@ -1,7 +1,7 @@