fix(workbench): persist admitted turn messages (#1983)
Co-authored-by: root <root@lyon.remote>
This commit is contained in:
@@ -280,7 +280,7 @@ function buildWorkbenchProjectionFacts({ traceId = null, ownerUserId = null, own
|
|||||||
const timing = projectionTimingForStatus(projection.timing, terminal);
|
const timing = projectionTimingForStatus(projection.timing, terminal);
|
||||||
const diagnostic = projectionDiagnostics({ traceId: safeId, result: payload, trace: payload?.runnerTrace ?? null, projection });
|
const diagnostic = projectionDiagnostics({ traceId: safeId, result: payload, trace: payload?.runnerTrace ?? null, projection });
|
||||||
const finalText = finalResponseTextValue(projection.finalResponse, payload?.finalResponse, session?.finalResponse, payload?.assistantText);
|
const finalText = finalResponseTextValue(projection.finalResponse, payload?.finalResponse, session?.finalResponse, payload?.assistantText);
|
||||||
const messages = normalizeMessages(session?.messages, {
|
const messages = normalizeMessages(workbenchProjectionInputMessages({ session, payload, params, traceId: safeId, timestamp, terminal, terminalStatus, finalText }), {
|
||||||
traceId: safeId,
|
traceId: safeId,
|
||||||
sessionId: resolvedSessionId,
|
sessionId: resolvedSessionId,
|
||||||
conversationId: resolvedConversationId,
|
conversationId: resolvedConversationId,
|
||||||
@@ -377,6 +377,48 @@ function buildWorkbenchProjectionFacts({ traceId = null, ownerUserId = null, own
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function workbenchProjectionInputMessages({ session = {}, payload = {}, params = {}, traceId = null, timestamp = null, terminal = false, terminalStatus = "completed", finalText = null } = {}) {
|
||||||
|
if (Array.isArray(session?.messages) && session.messages.length > 0) return session.messages;
|
||||||
|
if (Array.isArray(payload?.messages) && payload.messages.length > 0) return payload.messages;
|
||||||
|
if (!traceId) return [];
|
||||||
|
const turnId = textValue(payload?.turnId) || traceId;
|
||||||
|
const userText = textValue(params?.message ?? params?.prompt ?? payload?.prompt ?? payload?.message);
|
||||||
|
const userMessageId = textValue(payload?.userMessageId ?? payload?.userMessage?.messageId) || stableFactId("msg", { traceId, role: "user" });
|
||||||
|
const assistantMessageId = textValue(payload?.assistantMessageId ?? payload?.messageId ?? payload?.assistantMessage?.messageId) || stableFactId("msg", { traceId, role: "agent" });
|
||||||
|
const createdAt = timestampValue(timestamp ?? payload?.createdAt ?? payload?.updatedAt);
|
||||||
|
const messages = [];
|
||||||
|
if (userText) {
|
||||||
|
messages.push({
|
||||||
|
messageId: userMessageId,
|
||||||
|
role: "user",
|
||||||
|
status: "sent",
|
||||||
|
text: userText,
|
||||||
|
traceId,
|
||||||
|
turnId,
|
||||||
|
createdAt,
|
||||||
|
updatedAt: createdAt,
|
||||||
|
valuesPrinted: false
|
||||||
|
});
|
||||||
|
}
|
||||||
|
messages.push({
|
||||||
|
messageId: assistantMessageId,
|
||||||
|
role: "agent",
|
||||||
|
status: terminal ? terminalStatus : "running",
|
||||||
|
text: terminal && finalText ? finalText : "",
|
||||||
|
traceId,
|
||||||
|
turnId,
|
||||||
|
timing: payload?.timing,
|
||||||
|
startedAt: payload?.startedAt,
|
||||||
|
lastEventAt: payload?.lastEventAt,
|
||||||
|
finishedAt: payload?.finishedAt,
|
||||||
|
durationMs: payload?.durationMs,
|
||||||
|
createdAt,
|
||||||
|
updatedAt: createdAt,
|
||||||
|
valuesPrinted: false
|
||||||
|
});
|
||||||
|
return messages;
|
||||||
|
}
|
||||||
|
|
||||||
function normalizeMessages(messages, context) {
|
function normalizeMessages(messages, context) {
|
||||||
const normalized = Array.isArray(messages) ? messages.map((message, index) => normalizeMessageFact(message, index, context)).filter(Boolean) : [];
|
const normalized = Array.isArray(messages) ? messages.map((message, index) => normalizeMessageFact(message, index, context)).filter(Boolean) : [];
|
||||||
if (context?.terminal && context?.finalText && context?.traceId && !normalized.some((message) => message.role !== "user" && message.traceId === context.traceId)) {
|
if (context?.terminal && context?.finalText && context?.traceId && !normalized.some((message) => message.role !== "user" && message.traceId === context.traceId)) {
|
||||||
|
|||||||
Reference in New Issue
Block a user