mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2025-12-17 18:12:04 +00:00
fix: Continue on fail / error output support for chains and agents (#9078)
This commit is contained in:
@@ -519,55 +519,64 @@ export class ChainLlm implements INodeType {
|
||||
const outputParsers = await getOptionalOutputParsers(this);
|
||||
|
||||
for (let itemIndex = 0; itemIndex < items.length; itemIndex++) {
|
||||
let prompt: string;
|
||||
if (this.getNode().typeVersion <= 1.3) {
|
||||
prompt = this.getNodeParameter('prompt', itemIndex) as string;
|
||||
} else {
|
||||
prompt = getPromptInputByType({
|
||||
ctx: this,
|
||||
i: itemIndex,
|
||||
inputKey: 'text',
|
||||
promptTypeKey: 'promptType',
|
||||
});
|
||||
}
|
||||
const messages = this.getNodeParameter(
|
||||
'messages.messageValues',
|
||||
itemIndex,
|
||||
[],
|
||||
) as MessagesTemplate[];
|
||||
|
||||
if (prompt === undefined) {
|
||||
throw new NodeOperationError(this.getNode(), 'The ‘prompt’ parameter is empty.');
|
||||
}
|
||||
|
||||
const responses = await getChain(this, itemIndex, prompt, llm, outputParsers, messages);
|
||||
|
||||
responses.forEach((response) => {
|
||||
let data: IDataObject;
|
||||
if (typeof response === 'string') {
|
||||
data = {
|
||||
response: {
|
||||
text: response.trim(),
|
||||
},
|
||||
};
|
||||
} else if (Array.isArray(response)) {
|
||||
data = {
|
||||
data: response,
|
||||
};
|
||||
} else if (response instanceof Object) {
|
||||
data = response as IDataObject;
|
||||
try {
|
||||
let prompt: string;
|
||||
if (this.getNode().typeVersion <= 1.3) {
|
||||
prompt = this.getNodeParameter('prompt', itemIndex) as string;
|
||||
} else {
|
||||
data = {
|
||||
response: {
|
||||
text: response,
|
||||
},
|
||||
};
|
||||
prompt = getPromptInputByType({
|
||||
ctx: this,
|
||||
i: itemIndex,
|
||||
inputKey: 'text',
|
||||
promptTypeKey: 'promptType',
|
||||
});
|
||||
}
|
||||
const messages = this.getNodeParameter(
|
||||
'messages.messageValues',
|
||||
itemIndex,
|
||||
[],
|
||||
) as MessagesTemplate[];
|
||||
|
||||
if (prompt === undefined) {
|
||||
throw new NodeOperationError(this.getNode(), "The 'prompt' parameter is empty.");
|
||||
}
|
||||
|
||||
returnData.push({
|
||||
json: data,
|
||||
const responses = await getChain(this, itemIndex, prompt, llm, outputParsers, messages);
|
||||
|
||||
responses.forEach((response) => {
|
||||
let data: IDataObject;
|
||||
if (typeof response === 'string') {
|
||||
data = {
|
||||
response: {
|
||||
text: response.trim(),
|
||||
},
|
||||
};
|
||||
} else if (Array.isArray(response)) {
|
||||
data = {
|
||||
data: response,
|
||||
};
|
||||
} else if (response instanceof Object) {
|
||||
data = response as IDataObject;
|
||||
} else {
|
||||
data = {
|
||||
response: {
|
||||
text: response,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
returnData.push({
|
||||
json: data,
|
||||
});
|
||||
});
|
||||
});
|
||||
} catch (error) {
|
||||
if (this.continueOnFail()) {
|
||||
returnData.push({ json: { error: error.message }, pairedItem: { item: itemIndex } });
|
||||
continue;
|
||||
}
|
||||
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
return [returnData];
|
||||
|
||||
Reference in New Issue
Block a user