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

  1. 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.
  2. If aborts are premature, raise the client/server request timeout for the chatflow.
  3. 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

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


AI-assisted analysis of FlowiseAI/Flowise@abe4a8601a (2026-08-12). Data as JSON: /api/errors/d9216ad6a6dc9a0b. Report an issue: GitHub.