n8n
Version:
n8n Workflow Automation Tool
42 lines • 2.4 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.repairStructuredOutput = exports.findOutputParserTargets = void 0;
exports.generatePinData = generatePinData;
const instance_ai_1 = require("@n8n/instance-ai");
const workflow_sdk_1 = require("@n8n/workflow-sdk");
const n8n_workflow_1 = require("n8n-workflow");
var workflow_sdk_2 = require("@n8n/workflow-sdk");
Object.defineProperty(exports, "findOutputParserTargets", { enumerable: true, get: function () { return workflow_sdk_2.findOutputParserTargets; } });
Object.defineProperty(exports, "repairStructuredOutput", { enumerable: true, get: function () { return workflow_sdk_2.repairStructuredOutput; } });
const PIN_DATA_LLM_TIMEOUT_MS = 180_000;
async function generatePinData(options) {
const { workflow, nodeNames, instructions, outputSchemaLookup } = options;
if (nodeNames.length === 0)
return {};
const targetNodes = workflow.nodes.filter((n) => n.name && nodeNames.includes(n.name));
if (targetNodes.length === 0)
return {};
const outputParserTargets = (0, workflow_sdk_1.findOutputParserTargets)(workflow);
const contexts = (0, workflow_sdk_1.buildSchemaContexts)(targetNodes, outputSchemaLookup, outputParserTargets);
const userPrompt = (0, workflow_sdk_1.buildPinDataUserPrompt)(workflow, contexts, {
instructions,
dateAnchors: (0, workflow_sdk_1.buildDateAnchors)(new Date()),
});
const expectedNodeNames = contexts.map((c) => c.nodeName);
const agent = (0, instance_ai_1.createEvalAgent)('eval-pin-data-generator', {
instructions: workflow_sdk_1.PIN_DATA_SYSTEM_PROMPT,
cache: true,
});
const result = await agent.generate(userPrompt, {
providerOptions: { anthropic: { maxTokens: 16_384 } },
abortSignal: AbortSignal.timeout(PIN_DATA_LLM_TIMEOUT_MS),
});
const responseText = (0, instance_ai_1.extractText)(result);
const pinData = (0, workflow_sdk_1.parsePinDataResponse)(responseText, expectedNodeNames);
const missing = expectedNodeNames.filter((name) => !(name in pinData));
if (missing.length > 0) {
throw new n8n_workflow_1.OperationalError(`Pin data generation returned no data for node(s): ${missing.join(', ')}`);
}
return (0, workflow_sdk_1.repairStructuredOutput)(pinData, workflow, contexts);
}
//# sourceMappingURL=pin-data-generator.js.map