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 @@