FlowiseAI/Flowise · error · Error

Agent Node only compatible with function calling models.

Error message

Agent Node only compatible with function calling models.

What it means

Same `bindTools === undefined` guard as error 283 but on the interrupt path (`else if (tools.length && interrupt)`). When the Agent is configured for human-in-the-loop tool approval, the LLM still must support tool calling because tools are bound before the interrupt-capable runnable is built.

Source

Thrown at packages/components/nodes/sequentialagents/Agent/Agent.ts:696

                new ToolCallingAgentOutputParser()
            ]).withConfig({
                metadata: { sequentialNodeName: agentName }
            })
        }

        const executor = AgentExecutor.fromAgentAndTools({
            agent,
            tools,
            sessionId: flowObj?.sessionId,
            chatId: flowObj?.chatId,
            input: flowObj?.input,
            verbose: process.env.DEBUG === 'true' ? true : false,
            maxIterations: maxIterations ? parseFloat(maxIterations) : undefined
        })
        return executor
    } else if (tools.length && interrupt) {
        if (llm.bindTools === undefined) {
            throw new Error(`Agent Node only compatible with function calling models.`)
        }
        // @ts-ignore
        llm = llm.bindTools(tools)

        const promptArrays = [new MessagesPlaceholder('messages')] as BaseMessagePromptTemplateLike[]
        if (systemPrompt) promptArrays.unshift(['system', systemPrompt])
        if (humanPrompt) promptArrays.push(['human', humanPrompt])

        let prompt = ChatPromptTemplate.fromMessages(promptArrays)
        prompt = await checkMessageHistory(nodeData, options, prompt, promptArrays, systemPrompt)

        if (multiModalMessageContent.length) {
            const msg = HumanMessagePromptTemplate.fromTemplate([...multiModalMessageContent])
            prompt.promptMessages.splice(1, 0, msg)
        }

        let agent

View on GitHub (pinned to abe4a8601a)

Solutions

  1. Set the Agent's `model` to a function-calling-capable chat model (gpt-4o, Claude 3+, Gemini 1.5+).
  2. Turn off the Interrupt toggle if you do not need human-in-the-loop approval and the model cannot bind tools.
  3. Upgrade @langchain/core and the provider package so `bindTools` exists.
  4. Verify the Start node's LLM is tool-capable when you rely on inheritance.

Example fix

// before
nodeData.inputs = { tools: [searchTool], interrupt: true, model: basicChatModel } // throws [284]

// after
nodeData.inputs.model = new ChatOpenAI({ modelName: 'gpt-4o' })
Defensive patterns

Strategy: type-guard

Validate before calling

function assertInterruptCompatible(llm, interrupt, tools) {
  if (interrupt && tools.length > 0 && typeof llm?.bindTools !== 'function') {
    throw new Error('Interrupt mode requires a function-calling-capable model when tools are attached.')
  }
}

assertInterruptCompatible(llm, interrupt, tools)

Type guard

function supportsFunctionCalling(llm): llm is BaseChatModel & { bindTools: (tools: unknown[]) => unknown } {
  return typeof (llm as any)?.bindTools === 'function'
}

Prevention

When it happens

Trigger: Calling Agent.init with `tools.length > 0` AND `interrupt === true`, where the resolved LLM lacks `bindTools`.

Common situations: Enabled the Interrupt toggle on the Agent for human approval of tool calls, but paired it with a non-function-calling model; inherited a non-tool-calling LLM from the Start node and forgot to override it on the Agent.

Related errors


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