fix(workbench): dedupe final assistant trace rows (#2009)
This commit is contained in:
@@ -20,6 +20,7 @@ export function traceDisplayRows(trace: Record<string, unknown> = {}, events: Tr
|
||||
const orderedEvents = traceEventsForDisplay(events);
|
||||
const effectiveTrace = traceWithInferredStart(trace, orderedEvents);
|
||||
const finalResponseText = traceFinalResponseText(effectiveTrace);
|
||||
const finalResponseFingerprint = traceMessageFingerprint(finalResponseText);
|
||||
const hasCompletionEvent = orderedEvents.some(isCompletionTraceEvent);
|
||||
const rows: TraceEventRow[] = [];
|
||||
const renderedSourceEvents = new Set<string>();
|
||||
@@ -58,6 +59,7 @@ export function traceDisplayRows(trace: Record<string, unknown> = {}, events: Tr
|
||||
continue;
|
||||
}
|
||||
if (isAssistantTraceEvent(event)) {
|
||||
if (finalResponseFingerprint && traceAssistantEventFingerprint(effectiveTrace, event) === finalResponseFingerprint) continue;
|
||||
rows.push(traceAssistantMessageRow(effectiveTrace, event, { terminal: false }, options));
|
||||
continue;
|
||||
}
|
||||
@@ -214,7 +216,7 @@ export function traceNoiseEventCount(events: TraceEvent[] = []): number {
|
||||
}
|
||||
|
||||
function traceAssistantMessageRow(trace: Record<string, unknown>, event: TraceEvent, { terminal }: { terminal: boolean }, options: TraceDisplayRowsOptions): TraceEventRow {
|
||||
const text = cleanTraceDetailText(event.message ?? event.outputSummary ?? assistantStreamText(trace, event) ?? "");
|
||||
const text = traceAssistantEventText(trace, event);
|
||||
const index = Number.isInteger(event.messageIndex) ? Number(event.messageIndex) : null;
|
||||
const count = Number.isInteger(event.messageCount) ? Number(event.messageCount) : null;
|
||||
const eventKey = traceEventIdentityToken(event);
|
||||
@@ -229,6 +231,19 @@ function traceAssistantMessageRow(trace: Record<string, unknown>, event: TraceEv
|
||||
};
|
||||
}
|
||||
|
||||
function traceAssistantEventText(trace: Record<string, unknown>, event: TraceEvent): string {
|
||||
return cleanTraceDetailText(event.message ?? event.outputSummary ?? assistantStreamText(trace, event) ?? "");
|
||||
}
|
||||
|
||||
function traceAssistantEventFingerprint(trace: Record<string, unknown>, event: TraceEvent): string | null {
|
||||
return traceMessageFingerprint(traceAssistantEventText(trace, event));
|
||||
}
|
||||
|
||||
function traceMessageFingerprint(value: unknown): string | null {
|
||||
const text = cleanTraceDetailText(value ?? "").replace(/\s+/gu, " ").trim();
|
||||
return text || null;
|
||||
}
|
||||
|
||||
function traceFinalResponseRow(event: TraceEvent, finalText: string, options: TraceDisplayRowsOptions): TraceEventRow {
|
||||
const eventKey = traceEventIdentityToken(event);
|
||||
return {
|
||||
|
||||
Reference in New Issue
Block a user