Skip to content

Commit 931422a

Browse files
Merge pull request #1 from ronak-guliani/perf/timeline-row-derivation
perf: reduce timeline row derivation allocations
2 parents 2d2d64f + 5099a0c commit 931422a

1 file changed

Lines changed: 20 additions & 19 deletions

File tree

apps/web/src/components/chat/MessagesTimeline.logic.ts

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -117,10 +117,8 @@ export function deriveMessagesTimelineRows(input: {
117117
revertTurnCountByUserMessageId: ReadonlyMap<MessageId, number>;
118118
}): MessagesTimelineRow[] {
119119
const nextRows: MessagesTimelineRow[] = [];
120-
const durationStartByMessageId = computeMessageDurationStart(
121-
input.timelineEntries.flatMap((entry) => (entry.kind === "message" ? [entry.message] : [])),
122-
);
123120
const terminalAssistantMessageIds = deriveTerminalAssistantMessageIds(input.timelineEntries);
121+
let lastDurationBoundary: string | null = null;
124122

125123
for (let index = 0; index < input.timelineEntries.length; index += 1) {
126124
const timelineEntry = input.timelineEntries[index];
@@ -157,31 +155,34 @@ export function deriveMessagesTimelineRows(input: {
157155
continue;
158156
}
159157

158+
const message = timelineEntry.message;
159+
if (message.role === "user") {
160+
lastDurationBoundary = message.createdAt;
161+
}
162+
const durationStart = lastDurationBoundary ?? message.createdAt;
163+
const isTerminalAssistant =
164+
message.role === "assistant" && terminalAssistantMessageIds.has(message.id);
165+
160166
nextRows.push({
161167
kind: "message",
162168
id: timelineEntry.id,
163169
createdAt: timelineEntry.createdAt,
164-
message: timelineEntry.message,
165-
durationStart:
166-
durationStartByMessageId.get(timelineEntry.message.id) ?? timelineEntry.message.createdAt,
170+
message,
171+
durationStart,
167172
showCompletionDivider:
168-
timelineEntry.message.role === "assistant" &&
169-
input.completionDividerBeforeEntryId === timelineEntry.id,
170-
showAssistantCopyButton:
171-
timelineEntry.message.role === "assistant" &&
172-
terminalAssistantMessageIds.has(timelineEntry.message.id),
173-
showAssistantTerminalMetadata:
174-
timelineEntry.message.role === "assistant" &&
175-
terminalAssistantMessageIds.has(timelineEntry.message.id),
173+
message.role === "assistant" && input.completionDividerBeforeEntryId === timelineEntry.id,
174+
showAssistantCopyButton: isTerminalAssistant,
175+
showAssistantTerminalMetadata: isTerminalAssistant,
176176
assistantTurnDiffSummary:
177-
timelineEntry.message.role === "assistant"
178-
? input.turnDiffSummaryByAssistantMessageId.get(timelineEntry.message.id)
177+
message.role === "assistant"
178+
? input.turnDiffSummaryByAssistantMessageId.get(message.id)
179179
: undefined,
180180
revertTurnCount:
181-
timelineEntry.message.role === "user"
182-
? input.revertTurnCountByUserMessageId.get(timelineEntry.message.id)
183-
: undefined,
181+
message.role === "user" ? input.revertTurnCountByUserMessageId.get(message.id) : undefined,
184182
});
183+
if (message.role === "assistant" && message.completedAt) {
184+
lastDurationBoundary = message.completedAt;
185+
}
185186
}
186187

187188
if (input.isWorking) {

0 commit comments

Comments
 (0)