Skip to content

Commit 427bac0

Browse files
Algorithm5838github-actions[bot]
authored andcommitted
perf: skip deep clone per streaming token in ResponseMessage
1 parent 9f0ae91 commit 427bac0

2 files changed

Lines changed: 9 additions & 7 deletions

File tree

src/lib/components/chat/Chat.svelte

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -509,12 +509,8 @@
509509
const type = event?.data?.type ?? null;
510510
const data = event?.data?.data ?? null;
511511
512-
if (type === 'status') {
513-
if (message?.statusHistory) {
514-
message.statusHistory.push(data);
515-
} else {
516-
message.statusHistory = [data];
517-
}
512+
if (type === 'status') {
513+
message.statusHistory = [...(message?.statusHistory ?? []), data];
518514
} else if (type === 'chat:completion') {
519515
chatCompletionEventHandler(data, message, event.chat_id);
520516
} else if (type === 'chat:tasks:cancel') {

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

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

0 commit comments

Comments
 (0)