content/docs/07-reference/02-ai-sdk-ui/46-infer-ui-tools.mdx
Infers the input and output types of a ToolSet.
This type helper is useful when working with tools in TypeScript to ensure type safety for your tool inputs and outputs in UIMessages.
import { InferUITools } from 'ai';
<PropertiesTable content={[ { name: 'TOOLS', type: 'ToolSet', description: 'The tool set to infer types from.', }, ]} />
A type that maps each tool in the tool set to its inferred input and output types.
The resulting type has the shape:
{
[NAME in keyof TOOLS & string]: {
input: InferToolInput<TOOLS[NAME]>;
output: InferToolOutput<TOOLS[NAME]>;
};
}
import { InferUITools } from 'ai';
import { z } from 'zod';
const tools = {
weather: {
description: 'Get the current weather',
inputSchema: z.object({
location: z.string().describe('The city and state'),
}),
execute: async ({ location }) => {
return `The weather in ${location} is sunny.`;
},
},
calculator: {
description: 'Perform basic arithmetic',
inputSchema: z.object({
operation: z.enum(['add', 'subtract', 'multiply', 'divide']),
a: z.number(),
b: z.number(),
}),
execute: async ({ operation, a, b }) => {
switch (operation) {
case 'add':
return a + b;
case 'subtract':
return a - b;
case 'multiply':
return a * b;
case 'divide':
return a / b;
}
},
},
};
// Infer the types from the tool set
type MyUITools = InferUITools<typeof tools>;
// This creates a type with:
// {
// weather: { input: { location: string }; output: string };
// calculator: { input: { operation: 'add' | 'subtract' | 'multiply' | 'divide'; a: number; b: number }; output: number };
// }
InferUITool - Infer types for a single tooluseChat - Chat hook that supports typed tools