hasToolCall()
Creates a stop condition that stops when a specific tool is called.
This function is used with stopWhen
in generateText
and streamText
to control when a tool-calling loop should stop based on whether a particular tool has been invoked.
import { openai } from '@ai-sdk/openai';import { generateText, hasToolCall } from 'ai';
const result = await generateText({ model: openai('gpt-4o'), tools: { weather: weatherTool, finalAnswer: finalAnswerTool, }, // Stop when the finalAnswer tool is called stopWhen: hasToolCall('finalAnswer'),});
Import
import { hasToolCall } from "ai"
API Signature
Parameters
toolName:
string
The name of the tool that should trigger the stop condition when called.
Returns
A StopCondition
function that returns true
when the specified tool is called in the current step. The function can be used with the stopWhen
parameter in generateText
and streamText
.
Examples
Basic Usage
Stop when a specific tool is called:
import { generateText, hasToolCall } from 'ai';
const result = await generateText({ model: yourModel, tools: { submitAnswer: submitAnswerTool, search: searchTool, }, stopWhen: hasToolCall('submitAnswer'),});
Combining with Other Conditions
You can combine multiple stop conditions in an array:
import { generateText, hasToolCall, stepCountIs } from 'ai';
const result = await generateText({ model: yourModel, tools: { weather: weatherTool, search: searchTool, finalAnswer: finalAnswerTool, }, // Stop when weather tool is called OR finalAnswer is called OR after 5 steps stopWhen: [ hasToolCall('weather'), hasToolCall('finalAnswer'), stepCountIs(5), ],});
Agent Pattern
Common pattern for agents that run until they provide a final answer:
import { generateText, hasToolCall } from 'ai';
const result = await generateText({ model: yourModel, tools: { search: searchTool, calculate: calculateTool, finalAnswer: { description: 'Provide the final answer to the user', parameters: z.object({ answer: z.string(), }), execute: async ({ answer }) => answer, }, }, stopWhen: hasToolCall('finalAnswer'),});