MCPcopy Index your code
hub / github.com/simstudioai/sim / compactEventForBuffer

Function compactEventForBuffer

apps/sim/lib/execution/event-buffer.ts:289–346  ·  view source on GitHub ↗
(
  event: ExecutionEvent,
  context: ExecutionEventWriterContext = {}
)

Source from the content-addressed store, hash-verified

287}
288
289async function compactEventForBuffer(
290 event: ExecutionEvent,
291 context: ExecutionEventWriterContext = {}
292): Promise<ExecutionEvent> {
293 if (!('data' in event)) {
294 return event
295 }
296
297 const baseOptions = {
298 ...context,
299 executionId: context.executionId ?? event.executionId,
300 requireDurable: context.requireDurablePayloads,
301 preserveRoot: true,
302 }
303
304 let compactedData = await compactExecutionPayload(event.data, {
305 ...baseOptions,
306 preserveUserFileBase64: context.preserveUserFileBase64,
307 })
308 let eventData = trimFinalBlockLogsForEventData(compactedData)
309 let eventDataSize = getJsonSize(eventData)
310
311 // SSE/replay events are size-bounded by LARGE_VALUE_THRESHOLD_BYTES. When a
312 // payload that preserved UserFile base64 (e.g., for chat/streaming) exceeds
313 // the cap, recompact the already-compacted result with base64 stripped so
314 // consumers can lazily re-hydrate via sim.files.readBase64. Recompacting the
315 // *compacted* value (not the raw event.data) lets existing LargeValueRefs
316 // pass through unchanged and avoids minting fresh storage objects for the
317 // same large fields.
318 if (
319 context.preserveUserFileBase64 &&
320 eventDataSize !== null &&
321 eventDataSize > LARGE_VALUE_THRESHOLD_BYTES
322 ) {
323 const oversizedBytes = eventDataSize
324 compactedData = await compactExecutionPayload(compactedData, {
325 ...baseOptions,
326 preserveUserFileBase64: false,
327 })
328 eventData = trimFinalBlockLogsForEventData(compactedData)
329 eventDataSize = getJsonSize(eventData)
330 logger.warn('Stripped inline UserFile base64 from execution event to fit size limit', {
331 executionId: baseOptions.executionId,
332 eventType: 'type' in event ? event.type : undefined,
333 thresholdBytes: LARGE_VALUE_THRESHOLD_BYTES,
334 originalBytes: oversizedBytes,
335 strippedBytes: eventDataSize,
336 })
337 }
338
339 if (eventDataSize !== null && eventDataSize > LARGE_VALUE_THRESHOLD_BYTES) {
340 throw new Error(
341 `Execution event data remains too large after compaction (${eventDataSize} bytes)`
342 )
343 }
344
345 return { ...event, data: eventData } as ExecutionEvent
346}

Callers 3

writeMemoryEventFunction · 0.85
writeCoreFunction · 0.85
writeTerminalFunction · 0.85

Calls 4

compactExecutionPayloadFunction · 0.90
getJsonSizeFunction · 0.85
warnMethod · 0.65

Tested by

no test coverage detected