diff --git a/app/(chat)/api/chat/route.ts b/app/(chat)/api/chat/route.ts index 32f0eb01..6d6b5905 100644 --- a/app/(chat)/api/chat/route.ts +++ b/app/(chat)/api/chat/route.ts @@ -58,12 +58,21 @@ export async function POST(request: Request) { getWeather: { description: "Get the current weather at a location", parameters: z.object({ - latitude: z.number().describe("Latitude coordinate"), - longitude: z.number().describe("Longitude coordinate"), + city: z.string().describe("Name of the city"), }), - execute: async ({ latitude, longitude }) => { + execute: async ({ city }) => { + const geoResponse = await fetch( + `https://nominatim.openstreetmap.org/search?city=${encodeURIComponent(city)}&format=json&limit=1` + ); + const geoData = await geoResponse.json(); + if (!geoData.length) { + throw new Error("City not found"); + } + + const { lat, lon } = geoData[0]; // Extract latitude and longitude + const response = await fetch( - `https://api.open-meteo.com/v1/forecast?latitude=${latitude}&longitude=${longitude}¤t=temperature_2m&hourly=temperature_2m&daily=sunrise,sunset&timezone=auto`, + `https://api.open-meteo.com/v1/forecast?latitude=${lat}&longitude=${lon}¤t=temperature_2m&hourly=temperature_2m&daily=sunrise,sunset&timezone=auto`, ); const weatherData = await response.json();