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
- Set the Agent's `model` to a function-calling-capable chat model (gpt-4o, Claude 3+, Gemini 1.5+).
- Turn off the Interrupt toggle if you do not need human-in-the-loop approval and the model cannot bind tools.
- Upgrade @langchain/core and the provider package so `bindTools` exists.
- 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
- Pair the Interrupt toggle only with function-calling models.
- Set the Agent's `model` explicitly rather than inheriting from Start.
- Verify bindTools exists after upgrading LangChain packages.
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
- This agent only compatible with function calling models.
- LLM Node only compatible with function calling models.
- Agent needs to have a function calling capable models.
- ${getErrorMessage(e)}
- Model is required
AI-assisted analysis of FlowiseAI/Flowise@abe4a8601a (2026-08-12).
Data as JSON: /api/errors/b0a7730ee4a82395.
Report an issue: GitHub.