// Agent class with multiple tools // AI SDK Core - Agent class for multi-step execution import { Agent, tool } from 'ai'; import { anthropic } from '@ai-sdk/anthropic'; import { z } from 'zod'; // Create agent with tools const weatherAgent = new Agent({ model: anthropic('claude-sonnet-4-5'), system: 'You are a weather assistant. Always provide temperature in the user\'s preferred unit.', tools: { getWeather: tool({ description: 'Get current weather for a location', inputSchema: z.object({ location: z.string(), }), execute: async ({ location }) => { console.log(`[Tool] Getting weather for ${location}...`); // Simulate API call return { location, temperature: 72, condition: 'sunny', humidity: 65, unit: 'fahrenheit', }; }, }), convertTemp: tool({ description: 'Convert temperature between Fahrenheit and Celsius', inputSchema: z.object({ fahrenheit: z.number(), }), execute: async ({ fahrenheit }) => { console.log(`[Tool] Converting ${fahrenheit}°F to Celsius...`); const celsius = Math.round(((fahrenheit - 32) * 5 / 9) * 10) / 10; return { celsius }; }, }), getAirQuality: tool({ description: 'Get air quality index for a location', inputSchema: z.object({ location: z.string(), }), execute: async ({ location }) => { console.log(`[Tool] Getting air quality for ${location}...`); // Simulate API call return { location, aqi: 42, level: 'good', pollutants: { pm25: 8, pm10: 15, o3: 35, }, }; }, }), }, }); async function main() { console.log('Starting agent conversation...\n'); const result = await weatherAgent.run({ messages: [ { role: 'user', content: 'What is the weather in San Francisco? Tell me in Celsius and include air quality.', }, ], }); console.log('\n--- Agent Response ---'); console.log(result.text); console.log('\n--- Execution Summary ---'); console.log('Total steps:', result.steps); console.log('Tools used:', result.toolCalls?.map(tc => tc.toolName).join(', ') || 'none'); } main().catch(console.error);