Learn how to call tools using the AI SDK and React Server Components.
Some models allow developers to provide a list of tools that can be called at any time during a generation. This is useful for extending the capabilities of a language model to either use logic or data to interact with systems external to the model.
Now, let's implement the continueConversation action that uses generateText to generate a response to the user's question. We will use the tools parameter to specify our own function called celsiusToFahrenheit that will convert a user given value in celsius to fahrenheit.
We will use zod to specify the schema for the celsiusToFahrenheit function's parameters.
app/actions.ts
'use server';import { generateText } from 'ai';import { z } from 'zod';export interface Message { role: 'user' | 'assistant'; content: string;}export async function continueConversation(history: Message[]) { 'use server'; const { text, toolResults } = await generateText({ model: 'openai/gpt-6-astra', instructions: 'You are a friendly assistant!', messages: history, tools: { celsiusToFahrenheit: { description: 'Converts celsius to fahrenheit', inputSchema: z.object({ value: z.string().describe('The value in celsius'), }), execute: async ({ value }) => { const celsius = parseFloat(value); const fahrenheit = celsius * (9 / 5) + 32; return `${celsius}°C is ${fahrenheit.toFixed(2)}°F`; }, }, }, }); return { messages: [ ...history, { role: 'assistant' as const, content: text || toolResults.map(toolResult => toolResult.result).join('\n'), }, ], };}