UNPKG

@langchain/community

Version:
45 lines (44 loc) 1.83 kB
import { __exportAll } from "../_virtual/_rolldown/runtime.js"; import { Tool } from "@langchain/core/tools"; import { getEnvironmentVariable } from "@langchain/core/utils/env"; //#region src/tools/brave_search.ts var brave_search_exports = /* @__PURE__ */ __exportAll({ BraveSearch: () => BraveSearch }); /** * Class for interacting with the Brave Search engine. It extends the Tool * class and requires an API key to function. The API key can be passed in * during instantiation or set as an environment variable named * 'BRAVE_SEARCH_API_KEY'. */ var BraveSearch = class extends Tool { static lc_name() { return "BraveSearch"; } name = "brave-search"; description = "a search engine. useful for when you need to answer questions about current events. input should be a search query."; apiKey; constructor(fields = { apiKey: getEnvironmentVariable("BRAVE_SEARCH_API_KEY") }) { super(); if (!fields.apiKey) throw new Error(`Brave API key not set. Please pass it in or set it as an environment variable named "BRAVE_SEARCH_API_KEY".`); this.apiKey = fields.apiKey; } /** @ignore */ async _call(input) { const headers = { "X-Subscription-Token": this.apiKey, Accept: "application/json" }; const searchUrl = new URL(`https://api.search.brave.com/res/v1/web/search?q=${encodeURIComponent(input)}`); const response = await fetch(searchUrl, { headers }); if (!response.ok) throw new Error(`HTTP error ${response.status}`); const webSearchResults = (await response.json()).web?.results; const finalResults = Array.isArray(webSearchResults) ? webSearchResults.map((item) => ({ title: item.title, link: item.url, snippet: item.description })) : []; return JSON.stringify(finalResults); } }; //#endregion export { BraveSearch, brave_search_exports }; //# sourceMappingURL=brave_search.js.map