@n8n/n8n-nodes-langchain
Version:

35 lines • 1.8 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.processItem = processItem;
const messages_1 = require("@langchain/core/messages");
const prompts_1 = require("@langchain/core/prompts");
const n8n_workflow_1 = require("n8n-workflow");
const tracing_1 = require("../../../utils/tracing");
const constants_1 = require("./constants");
async function processItem(ctx, itemIndex, item, llm, parser, categories, multiClassPrompt, fallbackPrompt) {
const input = ctx.getNodeParameter('inputText', itemIndex);
if (!input) {
throw new n8n_workflow_1.NodeOperationError(ctx.getNode(), `Text to classify for item ${itemIndex} is not defined`);
}
item.pairedItem = { item: itemIndex };
const inputPrompt = new messages_1.HumanMessage(input);
const systemPromptTemplateOpt = ctx.getNodeParameter('options.systemPromptTemplate', itemIndex, constants_1.SYSTEM_PROMPT_TEMPLATE);
const escapedTemplate = (systemPromptTemplateOpt ?? constants_1.SYSTEM_PROMPT_TEMPLATE)
.replace(/[{}]/g, (match) => match + match)
.replaceAll('{{categories}}', '{categories}');
const systemPromptTemplate = prompts_1.SystemMessagePromptTemplate.fromTemplate(`${escapedTemplate}
{format_instructions}
${multiClassPrompt}
${fallbackPrompt}`);
const messages = [
await systemPromptTemplate.format({
categories: categories.map((cat) => cat.category).join(', '),
format_instructions: parser.getFormatInstructions(),
}),
inputPrompt,
];
const prompt = prompts_1.ChatPromptTemplate.fromMessages(messages);
const chain = prompt.pipe(llm).pipe(parser).withConfig((0, tracing_1.getTracingConfig)(ctx));
return await chain.invoke(messages);
}
//# sourceMappingURL=processItem.js.map