Skip to content

Commit f3d84e8

Browse files
Algorithm5838github-actions[bot]
authored andcommitted
perf: skip deep clone per streaming token in ResponseMessage
1 parent 965541e commit f3d84e8

2 files changed

Lines changed: 8 additions & 6 deletions

File tree

src/lib/components/chat/Chat.svelte

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -619,11 +619,7 @@
619619
const data = event?.data?.data ?? null;
620620
621621
if (type === 'status') {
622-
if (message?.statusHistory) {
623-
message.statusHistory.push(data);
624-
} else {
625-
message.statusHistory = [data];
626-
}
622+
message.statusHistory = [...(message?.statusHistory ?? []), data];
627623
} else if (type === 'context_compaction') {
628624
handleContextCompactionStatus(data);
629625
} else if (type === 'chat:active') {

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,13 @@
134134
message.done !== source.done ||
135135
message.output?.length !== source.output?.length
136136
) {
137-
message = structuredClone(source);
137+
if (!message.done && source.done) {
138+
// done just flipped: full clone to snapshot final state (info, usage, etc.)
139+
message = structuredClone(source);
140+
} else {
141+
// mid-stream: shallow copy keeps all fields fresh without deep recursion
142+
message = { ...source };
143+
}
138144
} else if (!equal(message, source)) {
139145
// Slow path: full comparison for infrequent changes (sources, annotations, status, etc.)
140146
message = structuredClone(source);

0 commit comments

Comments
 (0)