mirror of
https://github.com/n8n-io/n8n.git
synced 2024-11-15 17:14:05 -08:00
42 lines
1.3 KiB
TypeScript
42 lines
1.3 KiB
TypeScript
|
const STATUS_NO_RETRY = [
|
||
|
400, // Bad Request
|
||
|
401, // Unauthorized
|
||
|
402, // Payment Required
|
||
|
403, // Forbidden
|
||
|
404, // Not Found
|
||
|
405, // Method Not Allowed
|
||
|
406, // Not Acceptable
|
||
|
407, // Proxy Authentication Required
|
||
|
409, // Conflict
|
||
|
];
|
||
|
|
||
|
/**
|
||
|
* This function is used as a default handler for failed attempts in all LLMs.
|
||
|
* It is based on a default handler from the langchain core package.
|
||
|
* It throws an error when it encounters a known error that should not be retried.
|
||
|
* @param error
|
||
|
*/
|
||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||
|
export const n8nDefaultFailedAttemptHandler = (error: any) => {
|
||
|
if (
|
||
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-call
|
||
|
error?.message?.startsWith?.('Cancel') ||
|
||
|
error?.message?.startsWith?.('AbortError') ||
|
||
|
error?.name === 'AbortError'
|
||
|
) {
|
||
|
throw error;
|
||
|
}
|
||
|
|
||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any,@typescript-eslint/no-unsafe-member-access
|
||
|
if (error?.code === 'ECONNABORTED') {
|
||
|
throw error;
|
||
|
}
|
||
|
|
||
|
const status =
|
||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any,@typescript-eslint/no-unsafe-member-access
|
||
|
error?.response?.status ?? error?.status;
|
||
|
if (status && STATUS_NO_RETRY.includes(+status)) {
|
||
|
throw error;
|
||
|
}
|
||
|
};
|