InferUITools

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

import { InferUITools } from 'ai';

API Signature

Type Parameters

TOOLS:

ToolSet
The tool set to infer types from.

Returns

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]>;
};
}

Examples

Basic Usage

import { InferUITools } from 'ai';
import { z } from 'zod';
const tools = {
weather: {
description: 'Get the current weather',
parameters: 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',
parameters: 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 tool
  • useChat - Chat hook that supports typed tools