import type { CanonicalContentBlock, CanonicalMessage, CanonicalToolResultContentBlock } from "../../model/index.js";
import { toCanonicalToolResultBlock, type PilotDeckToolResult, type PilotDeckToolResultContent } from "../../tool/index.js";
function toCanonicalSupplementalBlock(content: PilotDeckToolResultContent): CanonicalToolResultContentBlock {
if (content.type === "image") {
return {
type: "image",
source: "base64",
data: content.data,
mimeType: content.mimeType,
bytes: content.bytes,
detail: content.detail,
};
}
if (content.type === "pdf") {
return {
type: "pdf",
source: "base64",
data: content.data,
mimeType: content.mimeType,
bytes: content.bytes,
pages: content.pages,
};
}
return { type: "text", text: content.type === "text" ? content.text : JSON.stringify(content) };
}
export function projectToolResults(results: PilotDeckToolResult[]): CanonicalMessage[] {
const messages: CanonicalMessage[] = [];
const toolResultContent: CanonicalContentBlock[] = [];
for (const result of results) {
toolResultContent.push(toCanonicalToolResultBlock(result));
}
messages.push({ role: "user", content: toolResultContent });
for (const result of results) {
if (result.supplementalMessages) {
for (const msg of result.supplementalMessages) {
const blocks: CanonicalContentBlock[] = msg.content.map(toCanonicalSupplementalBlock);
messages.push({ role: "user", content: blocks });
}
}
}
return messages;
}