///
import { generateObject, JSONSchema, OpaqueRef, pattern } from "commontools";
interface Email {
id: string;
content: string;
}
interface ExtractedData {
summary: string;
}
// Generic building block - T is a type parameter
function BuildingBlock(emails: OpaqueRef, schema: JSONSchema) {
// This is the problematic case: generateObject where T is a type parameter
// The result is OpaqueRef where T is unresolved
const analyses = emails.map((email: Email) => {
const analysis = generateObject({
prompt: email.content,
schema,
});
return {
email,
analysis,
result: analysis.result, // OpaqueRef - T is a type parameter!
};
});
return { analyses };
}
// Pattern that uses the building block
export default pattern(({ emails }: { emails: OpaqueRef }) => {
const data = BuildingBlock(emails, { type: "object" });
return { data };
});