57 lines
1.9 KiB
JavaScript
57 lines
1.9 KiB
JavaScript
'use strict';
|
|
|
|
import { defineTool } from '../../src/index.js';
|
|
|
|
/**
|
|
* Weather tool — returns static weather data for demo/testing.
|
|
*/
|
|
const weatherTool = defineTool({
|
|
name: 'get_weather',
|
|
description: 'Get the current weather for a given city.',
|
|
parameters: {
|
|
type: 'object',
|
|
additionalProperties: false,
|
|
required: ['city'],
|
|
properties: {
|
|
city: {
|
|
type: 'string',
|
|
description: 'City name, e.g. "Berlin"',
|
|
},
|
|
unit: {
|
|
type: 'string',
|
|
enum: ['celsius', 'fahrenheit'],
|
|
description: 'Temperature unit (default: celsius)',
|
|
},
|
|
},
|
|
},
|
|
invoke: async ({ city, unit = 'celsius' }) => {
|
|
const db = {
|
|
berlin: { temp: 18, condition: 'partly cloudy', humidity: 62 },
|
|
munich: { temp: 22, condition: 'sunny', humidity: 45 },
|
|
hamburg: { temp: 15, condition: 'rainy', humidity: 80 },
|
|
london: { temp: 14, condition: 'overcast', humidity: 75 },
|
|
paris: { temp: 20, condition: 'sunny', humidity: 50 },
|
|
tokyo: { temp: 28, condition: 'humid', humidity: 85 },
|
|
'new york': { temp: 25, condition: 'clear', humidity: 55 },
|
|
};
|
|
|
|
const entry = db[city.toLowerCase()];
|
|
if (!entry) {
|
|
const available = Object.keys(db).map((c) => `"${c}"`).join(', ');
|
|
throw new Error(`City "${city}" not found in database. Available cities are: ${available}.`);
|
|
}
|
|
let temp = entry.temp;
|
|
if (unit === 'fahrenheit') temp = Math.round(temp * 9 / 5 + 32);
|
|
|
|
return {
|
|
city,
|
|
temperature: temp,
|
|
unit,
|
|
condition: entry.condition,
|
|
humidity: entry.humidity,
|
|
};
|
|
},
|
|
});
|
|
|
|
export { weatherTool };
|