Skip to content

Commit 48553cf

Browse files
committed
perf: skip deep clone per streaming token in ResponseMessage
1 parent efb9139 commit 48553cf

1 file changed

Lines changed: 7 additions & 1 deletion

File tree

src/lib/components/chat/Messages/ResponseMessage.svelte

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,13 @@
128128
// Fast path: O(1) check on the fields that change most often (content during streaming, done at end)
129129
// Avoids 2x O(n) JSON.stringify calls that are always true during streaming anyway
130130
if (message.content !== source.content || message.done !== source.done) {
131-
message = structuredClone(source);
131+
if (!message.done && source.done) {
132+
// done just flipped true: full clone to capture info, usage, selectedModelId, etc.
133+
message = structuredClone(source);
134+
} else {
135+
// mid-stream content update: cheap shallow copy, only hot fields change
136+
message = { ...message, content: source.content, done: source.done };
137+
}
132138
} else if (!equal(message, source)) {
133139
// Slow path: full comparison for infrequent changes (sources, annotations, status, etc.)
134140
message = structuredClone(source);

0 commit comments

Comments
 (0)