FlowiseAI/Flowise · error · Error
This agent requires that the "bindTools()" method be…
Error message
This agent requires that the "bindTools()" method be implemented on the input model.
What it means
ToolAgent (the non-conversational variant) builds a tool-calling agent and requires the chat model to implement `bindTools()`. If `model.bindTools === undefined` it throws before constructing the RunnableSequence. Identical precondition to error 29, just in ToolAgent.
Solutions
- Wire a tool-calling-capable chat model (ChatOpenAI gpt-4/3.5-turbo, ChatAnthropic, etc.).
- Upgrade @langchain/core and the provider package.
- Implement bindTools on custom model classes.
- Confirm the model component is the tool-capable variant.
Example fix
// before
if (model.bindTools === undefined) {
throw new Error(`This agent requires that the "bindTools()" method be implemented on the input model.`)
}
// after
if (typeof model.bindTools !== 'function') {
throw new Error(`Model "${model.constructor?.name ?? 'unknown'}" does not implement bindTools(). Use a tool-calling-capable chat model.`)
} Defensive patterns
Strategy: type-guard
Validate before calling
if (typeof (model as any).bindTools !== 'function') {
throw new Error('ToolAgent needs a tool-calling-capable model.')
} Type guard
const hasBindTools = (m: unknown): m is { bindTools: (tools: unknown[]) => unknown } =>
typeof (m as any)?.bindTools === 'function' Try / catch
try {
const agent = await buildToolAgent(model, tools, ...)
} catch (e) {
if ((e as Error).message.includes('bindTools()')) swapToToolCapableModel()
throw e
} Prevention
- Restrict the agent's model picker to tool-capable models.
- Pin LangChain versions that provide bindTools.
- Implement bindTools on custom model classes and test it.
- Capability-check the model before constructing the agent.
When it happens
Trigger: Selected model lacks tool-calling support, or the installed LangChain version predates the bindTools interface. Common when reusing a plain/legacy chat model node.
Common situations: Switched models to one without function calling; downgraded @langchain/core; custom model class without bindTools; using an older Flowise chat-model component.
Related errors
- This agent requires that the "bindTools()" method be…
- Agent needs to have a function calling capable models.
- Tool not found.
- Agent name is required!
- Assistant not found
AI-assisted analysis of FlowiseAI/Flowise@abe4a8601a (2026-08-12).
Data as JSON: /api/errors/3877d34b95325550.
Report an issue: GitHub.
Appendix: source
Thrown at packages/components/nodes/agents/ToolAgent/ToolAgent.ts:333
const lastMessage = prompt.promptMessages.pop() as HumanMessagePromptTemplate
const template = (lastMessage.prompt as PromptTemplate).template as string
const msg = HumanMessagePromptTemplate.fromTemplate([
...messageContent,
{
text: template
}
])
msg.inputVariables = lastMessage.inputVariables
prompt.promptMessages.push(msg)
}
// Add the `agent_scratchpad` MessagePlaceHolder back
prompt.promptMessages.push(messagePlaceholder)
}
}
if (model.bindTools === undefined) {
throw new Error(`This agent requires that the "bindTools()" method be implemented on the input model.`)
}
const modelWithTools = model.bindTools(tools)
const runnableAgent = RunnableSequence.from([
{
[inputKey]: (i: { input: string; steps: ToolsAgentStep[] }) => i.input,
agent_scratchpad: (i: { input: string; steps: ToolsAgentStep[] }) => formatToOpenAIToolMessages(i.steps),
[memoryKey]: async (_: { input: string; steps: ToolsAgentStep[] }) => {
const messages = (await memory.getChatMessages(flowObj?.sessionId, true, prependMessages)) as BaseMessage[]
return messages ?? []
},
...promptVariables
},
prompt,
modelWithTools,
new ToolCallingAgentOutputParser()
])View on GitHub (pinned to abe4a8601a)