Skip to main content
Add Bhumi as a tool in your Vercel AI SDK app so your AI assistant can search for local farms.

Define the tool

import { tool } from "ai";
import { z } from "zod";

const searchFarms = tool({
  description: "Search for local farms near a location with optional product filters",
  parameters: z.object({
    lat: z.number().describe("Latitude"),
    lng: z.number().describe("Longitude"),
    radius: z.number().optional().describe("Search radius in miles (default 25)"),
    products: z.string().optional().describe("Comma-separated product names"),
  }),
  execute: async ({ lat, lng, radius, products }) => {
    const params = new URLSearchParams({
      lat: String(lat),
      lng: String(lng),
      ...(radius && { radius: String(radius) }),
      ...(products && { products }),
    });

    const res = await fetch(
      `https://api.bhumifarms.co/v1/search?${params}`,
      { headers: { "X-API-Key": process.env.BHUMI_API_KEY! } }
    );

    const { data } = await res.json();
    return data.slice(0, 5).map((farm: any) => ({
      name: farm.name,
      city: farm.city,
      state: farm.state,
      distance_mi: farm.distance_mi,
      products: farm.products?.slice(0, 5),
    }));
  },
});

Use in a route handler

import { openai } from "@ai-sdk/openai";
import { streamText } from "ai";

export async function POST(req: Request) {
  const { messages } = await req.json();

  const result = streamText({
    model: openai("gpt-4o"),
    messages,
    tools: { searchFarms },
  });

  return result.toDataStreamResponse();
}

User experience

User: "Find farms with eggs and raw milk near Portland"