UNPKG

@n8n/n8n-nodes-langchain

Version:
46 lines 2.19 kB
"use strict"; 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 langchainParserError_1 = require("../../../utils/output_parsers/langchainParserError"); const parserInput_1 = require("../../../utils/output_parsers/parserInput"); 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(parserInput_1.toParserInputText) .pipe(parser) .withConfig((0, tracing_1.getTracingConfig)(ctx)); try { return await chain.invoke(messages); } catch (error) { throw (0, langchainParserError_1.wrapLangChainParserError)(error, ctx.getNode(), itemIndex); } } //# sourceMappingURL=processItem.js.map