26 lines
988 B
TypeScript
26 lines
988 B
TypeScript
import type { AgentChatMessage } from "../types";
|
|
import type { AnswerUiPart } from "./contract";
|
|
|
|
export function getAnswerPresentation(message: AgentChatMessage): {
|
|
report: AnswerUiPart[];
|
|
process: AnswerUiPart[];
|
|
final: boolean;
|
|
} {
|
|
const parts =
|
|
message.answerParts ??
|
|
(message.content ? [{ type: "text" as const, text: message.content }] : []);
|
|
if (!message.finalAnswer) return { report: parts, process: [], final: false };
|
|
const selected = new Set(message.finalAnswer.uiBlockIds);
|
|
const report: AnswerUiPart[] = [{ type: "text", text: message.finalAnswer.content }];
|
|
for (const id of selected) {
|
|
const part = parts.find((item) => item.type === "answer-ui" && item.block.block_id === id);
|
|
if (part) report.push(part);
|
|
}
|
|
const process = parts.filter((part) =>
|
|
part.type === "answer-ui"
|
|
? !selected.has(part.block.block_id)
|
|
: part.text.trim() !== message.finalAnswer!.content.trim()
|
|
);
|
|
return { report, process, final: true };
|
|
}
|