Files
gh-jezweb-claude-skills-ski…/templates/tools-basic.ts
2025-11-30 08:23:50 +08:00

76 lines
2.4 KiB
TypeScript

// Basic tool calling example
// AI SDK Core - Tool calling with generateText()
import { generateText, tool } from 'ai';
import { openai } from '@ai-sdk/openai';
import { z } from 'zod';
async function main() {
const result = await generateText({
model: openai('gpt-4'),
tools: {
weather: tool({
description: 'Get the current weather for a location',
inputSchema: z.object({
location: z.string().describe('City name, e.g. "San Francisco"'),
unit: z.enum(['celsius', 'fahrenheit']).optional().describe('Temperature unit'),
}),
execute: async ({ location, unit = 'fahrenheit' }) => {
// Simulate API call to weather service
console.log(`[Tool] Fetching weather for ${location}...`);
// In production, call real weather API here
const mockWeather = {
location,
temperature: unit === 'celsius' ? 22 : 72,
condition: 'sunny',
humidity: 65,
unit,
};
return mockWeather;
},
}),
convertTemperature: tool({
description: 'Convert temperature between Celsius and Fahrenheit',
inputSchema: z.object({
value: z.number(),
from: z.enum(['celsius', 'fahrenheit']),
to: z.enum(['celsius', 'fahrenheit']),
}),
execute: async ({ value, from, to }) => {
console.log(`[Tool] Converting ${value}°${from} to ${to}...`);
if (from === to) return { value, unit: to };
let result: number;
if (from === 'celsius' && to === 'fahrenheit') {
result = (value * 9 / 5) + 32;
} else {
result = (value - 32) * 5 / 9;
}
return { value: Math.round(result * 10) / 10, unit: to };
},
}),
},
prompt: 'What is the weather in Tokyo? Please tell me in Celsius.',
maxOutputTokens: 200,
});
console.log('\n--- AI Response ---');
console.log(result.text);
console.log('\n--- Tool Calls ---');
console.log('Number of tool calls:', result.toolCalls?.length || 0);
if (result.toolCalls) {
result.toolCalls.forEach((call, i) => {
console.log(`\n${i + 1}. ${call.toolName}`);
console.log(' Input:', JSON.stringify(call.input));
console.log(' Output:', JSON.stringify(call.output));
});
}
}
main().catch(console.error);