FlowiseAI/Flowise · warning · Error
Aborted!
Error message
Aborted!
What it means
Raised at the start of agentNode when the AbortController's signal is already in the aborted state — i.e. the run was cancelled (user stop, client disconnect, upstream abort, or a timeout) before this node could invoke its agent. This is an intentional cancellation signal, not a defect in the flow.
Source
Thrown at packages/components/nodes/sequentialagents/LLMNode/LLMNode.ts:580
abortControllerSignal,
nodeData,
input,
options
}: {
state: ISeqAgentsState
llm: BaseChatModel
agent: AgentExecutor | RunnableSequence
name: string
abortControllerSignal: AbortController
nodeData: INodeData
input: string
options: ICommonObject
},
config: RunnableConfig
) {
try {
if (abortControllerSignal.signal.aborted) {
throw new Error('Aborted!')
}
const historySelection = (nodeData.inputs?.conversationHistorySelection || 'all_messages') as ConversationHistorySelection
// @ts-ignore
state.messages = filterConversationHistory(historySelection, input, state)
// @ts-ignore
state.messages = restructureMessages(llm, state)
let result: AIMessageChunk | ICommonObject = await agent.invoke({ ...state, signal: abortControllerSignal.signal }, config)
const llmStructuredOutput = nodeData.inputs?.llmStructuredOutput
if (llmStructuredOutput && llmStructuredOutput !== '[]' && result.tool_calls && result.tool_calls.length) {
let jsonResult = {}
for (const toolCall of result.tool_calls) {
jsonResult = { ...jsonResult, ...toolCall.args }
}
result = { ...jsonResult, additional_kwargs: { nodeId: nodeData.id } }
}View on GitHub (pinned to abe4a8601a)
Solutions
- Treat this as expected cancellation — surface an AbortError to the client rather than a generic failure, and do not auto-retry unless the user asks.
- If aborts are premature, raise the client/server request timeout for the chatflow.
- Propagate AbortController cleanly from the entry point so all nodes observe the same signal.
Example fix
// before: abort surfaces as a generic Error
} catch (error) { throw new Error(error) }
// after: re-throw AbortError so callers can distinguish cancellation
if (abortControllerSignal.signal.aborted) {
const e = new Error('Aborted!'); e.name = 'AbortError'; throw e
} Defensive patterns
Strategy: try-catch
Type guard
const isAbortError = (e: unknown): boolean => (e instanceof Error && e.name === 'AbortError') || /Aborted!/.test(String((e as Error)?.message ?? e))
Try / catch
try {
await agentNode(...)
} catch (e) {
if (isAbortError(e)) { // graceful cancellation
return { messages: [] }
}
throw e
} Prevention
- Distinguish AbortError from real failures in your error reporting so users see 'cancelled', not 'error'.
- Size client/server timeouts to the slowest expected LLM call to avoid premature aborts.
- Pass a single AbortController from the entry point so all nodes observe cancellation consistently.
When it happens
Trigger: abortControllerSignal.signal.aborted === true at invocation time: the user clicked stop; the HTTP client disconnected; a parent caller aborted the chatflow; a configured timeout fired on an earlier node and the signal propagated.
Common situations: Long-running LLM calls cancelled by the user; streaming client drops the connection; chained nodes where an earlier node timed out; load-shedding aborts under pressure.
Related errors
- Aborted!
- Key is required
- Return output must be an object
- Failed to load fs/promises. Make sure you are running in Nod
- Failed to load fs/promises. Make sure you are running in Nod
AI-assisted analysis of FlowiseAI/Flowise@abe4a8601a (2026-08-12).
Data as JSON: /api/errors/d9216ad6a6dc9a0b.
Report an issue: GitHub.