diff --git a/src/lib/components/chat/Messages/MultiResponseMessages.svelte b/src/lib/components/chat/Messages/MultiResponseMessages.svelte index 73460dff9f..1cace48bdd 100644 --- a/src/lib/components/chat/Messages/MultiResponseMessages.svelte +++ b/src/lib/components/chat/Messages/MultiResponseMessages.svelte @@ -60,10 +60,10 @@ let selectedModelIdx = null; - let message = JSON.parse(JSON.stringify(history.messages[messageId])); + let message = structuredClone(history.messages[messageId]); $: if (history.messages) { if (JSON.stringify(message) !== JSON.stringify(history.messages[messageId])) { - message = JSON.parse(JSON.stringify(history.messages[messageId])); + message = structuredClone(history.messages[messageId]); } } diff --git a/src/lib/components/chat/Messages/ResponseMessage.svelte b/src/lib/components/chat/Messages/ResponseMessage.svelte index 2d4dc740ec..ab3bc894dd 100644 --- a/src/lib/components/chat/Messages/ResponseMessage.svelte +++ b/src/lib/components/chat/Messages/ResponseMessage.svelte @@ -119,17 +119,17 @@ export let messageId; export let selectedModels = []; - let message: MessageType = JSON.parse(JSON.stringify(history.messages[messageId])); + let message: MessageType = structuredClone(history.messages[messageId]); $: if (history.messages) { const source = history.messages[messageId]; if (source) { // Fast path: O(1) check on the fields that change most often (content during streaming, done at end) // Avoids 2x O(n) JSON.stringify calls that are always true during streaming anyway if (message.content !== source.content || message.done !== source.done) { - message = JSON.parse(JSON.stringify(source)); + message = structuredClone(source); } else if (JSON.stringify(message) !== JSON.stringify(source)) { // Slow path: full comparison for infrequent changes (sources, annotations, status, etc.) - message = JSON.parse(JSON.stringify(source)); + message = structuredClone(source); } } }