@langchain/community
Version:
Third-party integrations for LangChain.js
1 lines • 2.95 kB
Source Map (JSON)
{"version":3,"file":"brave_search.cjs","names":["Tool"],"sources":["../../src/tools/brave_search.ts"],"sourcesContent":["import { getEnvironmentVariable } from \"@langchain/core/utils/env\";\nimport { Tool } from \"@langchain/core/tools\";\n\n/**\n * Interface for the parameters required to instantiate a BraveSearch\n * instance.\n */\nexport interface BraveSearchParams {\n apiKey?: string;\n}\n\n/**\n * Class for interacting with the Brave Search engine. It extends the Tool\n * class and requires an API key to function. The API key can be passed in\n * during instantiation or set as an environment variable named\n * 'BRAVE_SEARCH_API_KEY'.\n */\nexport class BraveSearch extends Tool {\n static lc_name() {\n return \"BraveSearch\";\n }\n\n name = \"brave-search\";\n\n description =\n \"a search engine. useful for when you need to answer questions about current events. input should be a search query.\";\n\n apiKey: string;\n\n constructor(\n fields: BraveSearchParams = {\n apiKey: getEnvironmentVariable(\"BRAVE_SEARCH_API_KEY\"),\n }\n ) {\n super();\n\n if (!fields.apiKey) {\n throw new Error(\n `Brave API key not set. Please pass it in or set it as an environment variable named \"BRAVE_SEARCH_API_KEY\".`\n );\n }\n\n this.apiKey = fields.apiKey;\n }\n\n /** @ignore */\n async _call(input: string): Promise<string> {\n const headers = {\n \"X-Subscription-Token\": this.apiKey,\n Accept: \"application/json\",\n };\n const searchUrl = new URL(\n `https://api.search.brave.com/res/v1/web/search?q=${encodeURIComponent(\n input\n )}`\n );\n\n const response = await fetch(searchUrl, { headers });\n\n if (!response.ok) {\n throw new Error(`HTTP error ${response.status}`);\n }\n\n const parsedResponse = await response.json();\n const webSearchResults = parsedResponse.web?.results;\n const finalResults = Array.isArray(webSearchResults)\n ? webSearchResults.map(\n (item: { title?: string; url?: string; description?: string }) => ({\n title: item.title,\n link: item.url,\n snippet: item.description,\n })\n )\n : [];\n return JSON.stringify(finalResults);\n }\n}\n"],"mappings":";;;;;;;;;;;;AAiBA,IAAa,cAAb,cAAiCA,sBAAAA,KAAK;CACpC,OAAO,UAAU;AACf,SAAO;;CAGT,OAAO;CAEP,cACE;CAEF;CAEA,YACE,SAA4B,EAC1B,SAAA,GAAA,0BAAA,wBAA+B,uBAAuB,EACvD,EACD;AACA,SAAO;AAEP,MAAI,CAAC,OAAO,OACV,OAAM,IAAI,MACR,8GACD;AAGH,OAAK,SAAS,OAAO;;;CAIvB,MAAM,MAAM,OAAgC;EAC1C,MAAM,UAAU;GACd,wBAAwB,KAAK;GAC7B,QAAQ;GACT;EACD,MAAM,YAAY,IAAI,IACpB,oDAAoD,mBAClD,MACD,GACF;EAED,MAAM,WAAW,MAAM,MAAM,WAAW,EAAE,SAAS,CAAC;AAEpD,MAAI,CAAC,SAAS,GACZ,OAAM,IAAI,MAAM,cAAc,SAAS,SAAS;EAIlD,MAAM,oBADiB,MAAM,SAAS,MAAM,EACJ,KAAK;EAC7C,MAAM,eAAe,MAAM,QAAQ,iBAAiB,GAChD,iBAAiB,KACd,UAAkE;GACjE,OAAO,KAAK;GACZ,MAAM,KAAK;GACX,SAAS,KAAK;GACf,EACF,GACD,EAAE;AACN,SAAO,KAAK,UAAU,aAAa"}