Skip to content

Commit 1718582

Browse files
committed
perf: O(1) field checks in ResponseMessage slow path
1 parent 1ccc283 commit 1718582

1 file changed

Lines changed: 14 additions & 2 deletions

File tree

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

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -132,8 +132,20 @@
132132
} else {
133133
message = { ...message, content: source.content, done: source.done };
134134
}
135-
} else if (JSON.stringify(message) !== JSON.stringify(source)) {
136-
// Slow path: full comparison for infrequent changes (sources, annotations, status, etc.)
135+
} else if (
136+
message.statusHistory?.length !== source.statusHistory?.length ||
137+
message.sources?.length !== source.sources?.length ||
138+
message.annotation !== source.annotation ||
139+
message.followUps !== source.followUps ||
140+
message.error !== source.error ||
141+
message.files !== source.files ||
142+
message.embeds !== source.embeds ||
143+
message.favorite !== source.favorite ||
144+
JSON.stringify(message.code_executions) !== JSON.stringify(source.code_executions)
145+
) {
146+
// Slow path: O(1) field checks for infrequent post-streaming mutations.
147+
// Push-mutated arrays use length; assigned fields use reference inequality;
148+
// code_executions uses JSON.stringify since entries can be replaced at a fixed index.
137149
message = structuredClone(source);
138150
}
139151
}

0 commit comments

Comments
 (0)