diff --git a/Components/ChatArea.svelte b/Components/ChatArea.svelte
index 1479100..1223c45 100644
--- a/Components/ChatArea.svelte
+++ b/Components/ChatArea.svelte
@@ -151,6 +151,18 @@
function trackingAction(element: HTMLElement, { index, role }: { index: number, role: Role }) {
messageElements.push({ index: index, element: element, role: role });
+ return {
+ update({ index, role }: { index: number, role: Role }) {
+ const entry = messageElements.find((message) => message.element === element);
+ if (entry) {
+ entry.index = index;
+ entry.role = role;
+ }
+ },
+ destroy() {
+ messageElements = messageElements.filter((message) => message.element !== element);
+ }
+ };
}
$: if (scrollToBottomButton) {
@@ -169,7 +181,7 @@
{/if}
- {#each messages as message, index}
+ {#each messages as message, index (message.id)}
{@const content = message.getDisplayContent()}
{#if message.shouldDisplayContent && content.trim() !== ""}
{#if message.role === Role.User}
diff --git a/Components/ChatWindow.svelte b/Components/ChatWindow.svelte
index d200171..c9404fd 100644
--- a/Components/ChatWindow.svelte
+++ b/Components/ChatWindow.svelte
@@ -177,6 +177,8 @@
isSubmitting = false;
currentThought = null;
+ chatArea?.resetChatArea();
+
chatService.onNameChanged?.("");
conversationStore.clearResetFlag();
}
diff --git a/Conversations/ConversationContent.ts b/Conversations/ConversationContent.ts
index 941e319..c8f451b 100644
--- a/Conversations/ConversationContent.ts
+++ b/Conversations/ConversationContent.ts
@@ -20,6 +20,10 @@ type ConversationContentInit = {
};
export class ConversationContent {
+ // Runtime-only counter for Svelte {#each} keying
+ private static nextId: number = 0;
+
+ public readonly id: number;
public role: Role;
public timestamp: Date;
public content: string | undefined;
@@ -51,6 +55,7 @@ export class ConversationContent {
* @param init.errorType - Indicates that this contains an error of the given type
*/
constructor(init: ConversationContentInit) {
+ this.id = ConversationContent.nextId++;
this.role = init.role;
this.timestamp = init.timestamp ?? new Date();
this.content = init.content;