Skip to content

Commit fd074c0

Browse files
Algorithm5838github-actions[bot]
authored andcommitted
perf: skip deep clone per streaming token in ResponseMessage
1 parent 382594c commit fd074c0

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

0 commit comments

Comments
 (0)