Back to Ai

Tool calling with structured outputs

content/docs/09-troubleshooting/14-tool-calling-with-structured-outputs.mdx

2.1.101.4 KB
Original Source

Tool calling with structured outputs

Issue

You may want to combine tool calling with structured output generation.

Background

To use tool calling with structured outputs, use generateText or streamText with the output option.

Important: When using output with tool calling, the structured output generation counts as an additional step in the execution flow.

Solution

When using output with tool calling, adjust your stopWhen condition to account for the additional step required for structured output generation:

tsx
const result = await generateText({
  model: __MODEL__,
  output: Output.object({
    schema: z.object({
      summary: z.string(),
      sentiment: z.enum(['positive', 'neutral', 'negative']),
    }),
  }),
  tools: {
    analyze: tool({
      description: 'Analyze data',
      inputSchema: z.object({
        data: z.string(),
      }),
      execute: async ({ data }) => {
        return { result: 'analyzed' };
      }),
    },
  },
  // Add at least 1 to your intended step count to account for structured output
  stopWhen: stepCountIs(3), // Now accounts for: tool call + tool result + structured output
  prompt: 'Analyze the data and provide a summary',
});

For more information about using structured outputs with generateText and streamText see Generating Structured Data.