fix(workbench): keep per-turn message timing isolated (#1768)
This commit is contained in:
@@ -585,7 +585,9 @@ function factMessageDto(message, parts = [], facts = {}) {
|
||||
const traceId = safeTraceId(message?.traceId) ?? null;
|
||||
const role = textValue(message?.role) || "agent";
|
||||
const status = normalizeStatus(message?.status);
|
||||
const timing = factTimingProjection(message, status);
|
||||
const turn = traceId ? factTurnForTrace(facts, traceId) : null;
|
||||
const checkpoint = traceId ? factCheckpointForTrace(facts, traceId) : null;
|
||||
const timing = factTimingProjection(isAssistantLikeRole(role) ? turn ?? checkpoint ?? message : message, status);
|
||||
const text = projectionText(message?.text, message?.content, message?.message, message?.finalResponse);
|
||||
const normalizedParts = parts.length > 0
|
||||
? [...parts].sort(compareFactPartsAsc).map((part) => factPartDto(part, messageId, traceId)).filter(Boolean)
|
||||
|
||||
@@ -348,7 +348,11 @@ function normalizeMessageFact(message = {}, index, { traceId, sessionId, convers
|
||||
const role = textValue(message.role) || "agent";
|
||||
const status = normalizeWorkbenchStatus(message.status ?? (terminal && role !== "user" ? "completed" : role === "user" ? "sent" : "running"));
|
||||
const messageTerminal = role !== "user" && TERMINAL_STATUSES.has(status);
|
||||
const timing = role === "user" ? normalizeTimingProjection(message.timing) ?? emptyTimingProjection() : normalizeTimingProjection(contextTiming) ?? emptyTimingProjection();
|
||||
const messageTraceId = safeTraceId(message.traceId ?? message.turnId);
|
||||
const appliesToContextTrace = role !== "user" && Boolean(traceId && messageTraceId && messageTraceId === traceId);
|
||||
const messageTiming = normalizeTimingProjection(message.timing) ?? normalizeTimingProjection(message);
|
||||
const contextTimingProjection = appliesToContextTrace ? normalizeTimingProjection(contextTiming) : null;
|
||||
const timing = role === "user" ? messageTiming ?? emptyTimingProjection() : messageTiming ?? contextTimingProjection ?? emptyTimingProjection();
|
||||
return {
|
||||
...message,
|
||||
messageId,
|
||||
|
||||
Reference in New Issue
Block a user