UNPKG

@n8n/n8n-nodes-langchain

Version:
101 lines 4.31 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.MODEL_OUTPUT_PARSER_ERROR_DESCRIPTION = exports.MODEL_OUTPUT_PARSER_ERROR_MESSAGE = void 0; exports.isLangChainParserError = isLangChainParserError; exports.getFailureType = getFailureType; exports.wrapLangChainParserError = wrapLangChainParserError; const output_parsers_1 = require("@langchain/core/output_parsers"); const n8n_workflow_1 = require("n8n-workflow"); exports.MODEL_OUTPUT_PARSER_ERROR_MESSAGE = "Model output doesn't fit required format"; exports.MODEL_OUTPUT_PARSER_ERROR_DESCRIPTION = "To continue the execution when this happens, change the 'On Error' parameter in the root node's settings"; const LANGCHAIN_PARSER_ERROR_MESSAGES = ['Failed to parse. Text:', 'Unable to parse JSON response']; const AGENT_FAILURE_FALLBACK_MESSAGE = 'Agent execution failed'; function getErrorProperty(error, property) { if (error instanceof Error) return error[property]; if (typeof error !== 'object' || error === null || !(property in error)) return undefined; const value = error[property]; return typeof value === 'string' ? value : undefined; } function resolveErrorName(error) { if (error instanceof Error) { if (error.name && error.name !== 'Error') return error.name; return error.constructor.name || undefined; } return getErrorProperty(error, 'name'); } function hasLangChainParserMessage(error) { const errorMessage = getErrorProperty(error, 'message'); if (!errorMessage) return false; return LANGCHAIN_PARSER_ERROR_MESSAGES.some((message) => errorMessage.includes(message)); } function isLangChainParserError(error) { return (error instanceof output_parsers_1.OutputParserException || resolveErrorName(error) === 'OutputParserException' || hasLangChainParserMessage(error)); } function getFailureType(error) { let current = error; const seen = new Set(); while (current instanceof Error && current.cause instanceof Error) { seen.add(current); if (seen.has(current.cause)) break; current = current.cause; } return resolveErrorName(current) ?? (current instanceof Error ? 'Error' : typeof current); } function isUselessMessage(message, className) { if (!message) return true; if (className && message === className) return true; return message === 'Error'; } function wrapAsNodeOperationError(error, node, itemIndex, fallbackMessage) { const className = resolveErrorName(error); const messageProperty = getErrorProperty(error, 'message'); const candidateMessage = messageProperty ?? (typeof error === 'string' ? error : undefined); const message = isUselessMessage(candidateMessage, className) ? fallbackMessage : candidateMessage; const options = { message, description: className ? `Original error: ${className}` : undefined, level: 'error', ...(itemIndex !== undefined ? { itemIndex } : {}), }; let cause; if (error instanceof Error) { cause = error; } else { cause = new Error(message); if (className) cause.name = className; } return new n8n_workflow_1.NodeOperationError(node, cause, options); } function wrapLangChainParserError(error, node, itemIndex, options) { if (!isLangChainParserError(error)) { if (!options?.enrichNonParserErrors) { return error instanceof Error ? error : new Error(getErrorProperty(error, 'message') ?? String(error)); } if (error instanceof n8n_workflow_1.BaseError) return error; return wrapAsNodeOperationError(error, node, itemIndex, options.fallbackMessage ?? AGENT_FAILURE_FALLBACK_MESSAGE); } const parserOptions = { description: exports.MODEL_OUTPUT_PARSER_ERROR_DESCRIPTION, ...(itemIndex !== undefined ? { itemIndex } : {}), }; const nodeError = new n8n_workflow_1.NodeOperationError(node, exports.MODEL_OUTPUT_PARSER_ERROR_MESSAGE, parserOptions); nodeError.context.outputParserFailReason = 'Model output does not match the expected schema'; return nodeError; } //# sourceMappingURL=langchainParserError.js.map