Skip to content

Commit 44f2d29

Browse files
committed
preserveUserFileBase64 is on and the event still exceeds the threshold, re-compact the event with preserveUserFileBase64: false
1 parent 689e1f7 commit 44f2d29

1 file changed

Lines changed: 27 additions & 4 deletions

File tree

apps/sim/lib/execution/event-buffer.ts

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -293,15 +293,38 @@ async function compactEventForBuffer(
293293
return event
294294
}
295295

296-
const compactedData = await compactExecutionPayload(event.data, {
296+
const baseOptions = {
297297
...context,
298298
executionId: context.executionId ?? event.executionId,
299299
requireDurable: context.requireDurablePayloads,
300-
preserveUserFileBase64: context.preserveUserFileBase64,
301300
preserveRoot: true,
301+
}
302+
303+
let compactedData = await compactExecutionPayload(event.data, {
304+
...baseOptions,
305+
preserveUserFileBase64: context.preserveUserFileBase64,
302306
})
303-
const eventData = trimFinalBlockLogsForEventData(compactedData)
304-
const eventDataSize = getJsonSize(eventData)
307+
let eventData = trimFinalBlockLogsForEventData(compactedData)
308+
let eventDataSize = getJsonSize(eventData)
309+
310+
// SSE/replay events are size-bounded by LARGE_VALUE_THRESHOLD_BYTES. When a
311+
// payload that preserved UserFile base64 (e.g., for chat/streaming) exceeds
312+
// the cap, drop the inline base64 so consumers can lazily re-hydrate via
313+
// sim.files.readBase64. This preserves the file metadata and keeps the
314+
// event flowing instead of stalling the stream.
315+
if (
316+
context.preserveUserFileBase64 &&
317+
eventDataSize !== null &&
318+
eventDataSize > LARGE_VALUE_THRESHOLD_BYTES
319+
) {
320+
compactedData = await compactExecutionPayload(event.data, {
321+
...baseOptions,
322+
preserveUserFileBase64: false,
323+
})
324+
eventData = trimFinalBlockLogsForEventData(compactedData)
325+
eventDataSize = getJsonSize(eventData)
326+
}
327+
305328
if (eventDataSize !== null && eventDataSize > LARGE_VALUE_THRESHOLD_BYTES) {
306329
throw new Error(
307330
`Execution event data remains too large after compaction (${eventDataSize} bytes)`

0 commit comments

Comments
 (0)