Here’s how to set up tool calling in Next.js. Make sure you have ai and zod installed.

Install ai sdk and zod

npm install ai zod
In your backend, where your agent is running, import tool and stepCountIs from ai and import zod. Note: you probably already imported streamText and ModelMessage
import { streamText, ModelMessage, tool, stepCountIs } from 'ai';
import z from 'zod'
Inside the callback of your layercode streamResponse in the case of a message received, initialize a tool. For instance, weather
  const weather = tool({
    description: 'Get the weather in a location',
    inputSchema: z.object({
      location: z.string().describe('The location to get the weather for')
    }),
    execute: async ({ location }) => ({
      location,
      temperature: 72 + Math.floor(Math.random() * 21)
    })
  });
Then set
tools: {
  weather
}
as a property inside streamText You should also set these properties
toolChoice: 'auto',
stopWhen: stepCountIs(10),
You can find more info in the ai sdk docs. Once you have this, make sure your prompt mentions the tool is available. For example add “you can use the weather tool to find the weather for a given location.” And now, it should let you query the weather and you’ll see it’s a different temperature (between 72 and 92) each time because it has some randomness in the function.