FlowiseAI/Flowise · error · Error

This agent only compatible with function calling models.

Error message

This agent only compatible with function calling models.

What it means

Thrown on the non-interrupt tool-calling path when `llm.bindTools === undefined`. The Agent builds a `RunnableSequence` ending in `modelWithTools = llm.bindTools(tools)`, which only exists on chat models that support OpenAI-style function/tool calling. Without `bindTools`, the agent cannot attach tools at all, so init aborts before constructing the runnable.

Source

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

): Promise<any> {
    if (tools.length && !interrupt) {
        const promptArrays = [
            new MessagesPlaceholder('messages'),
            new MessagesPlaceholder('agent_scratchpad')
        ] 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)
        }

        if (llm.bindTools === undefined) {
            throw new Error(`This agent only compatible with function calling models.`)
        }
        const modelWithTools = llm.bindTools(tools)

        let agent

        if (!agentInputVariablesValues || !Object.keys(agentInputVariablesValues).length) {
            agent = RunnableSequence.from([
                RunnablePassthrough.assign({
                    //@ts-ignore
                    agent_scratchpad: (input: { steps: ToolsAgentStep[] }) => formatToOpenAIToolMessages(input.steps)
                }),
                prompt,
                modelWithTools,
                new ToolCallingAgentOutputParser()
            ]).withConfig({
                metadata: { sequentialNodeName: agentName }
            })
        } else {

View on GitHub (pinned to abe4a8601a)

Solutions

  1. Switch the Agent (or the Start node) to a function-calling-capable model — e.g. gpt-4o, gpt-3.5-turbo-0613+, Claude 3+, Gemini 1.5+.
  2. Upgrade `@langchain/core` and the relevant provider package to a version that implements `bindTools`.
  3. Remove the attached tools if you do not actually need tool calling on this agent.
  4. Set the Agent's `model` input explicitly rather than relying on the inherited Start LLM.

Example fix

// before: Start node model is a basic chat model with no bindTools
nodeData.inputs.model = basicChatModel
nodeData.inputs.tools = [searchTool] // throws [283]

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

Strategy: type-guard

Validate before calling

function assertFunctionCallingModel(llm) {
  if (typeof llm?.bindTools !== 'function') {
    throw new Error(
      `Model ${llm?.constructor?.name ?? typeof llm} does not support tool calling. Use a function-calling-capable model (gpt-4o, Claude 3+, Gemini 1.5+).`
    )
  }
}

assertFunctionCallingModel(llm)

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` falsy, where the resolved `llm` (either `nodeData.inputs.model` or `sequentialNodes[0].startLLM`) does not expose a `bindTools` method.

Common situations: Chose a non-function-calling chat model (older base model, a simple ChatModel integration, a model whose provider integration lacks tool support); using an older @langchain/core where `bindTools` had not yet been added; the `model` input was left empty and the Start node's LLM is non-tool-calling.

Related errors


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