@langchain/community
Version:
Third-party integrations for LangChain.js
1 lines • 3.09 kB
Source Map (JSON)
{"version":3,"file":"bingserpapi.cjs","names":["Tool"],"sources":["../../src/tools/bingserpapi.ts"],"sourcesContent":["import { getEnvironmentVariable } from \"@langchain/core/utils/env\";\nimport { Tool } from \"@langchain/core/tools\";\n\n/**\n * A tool for web search functionality using Bing's search engine. It\n * extends the base `Tool` class and implements the `_call` method to\n * perform the search operation. Requires an API key for Bing's search\n * engine, which can be set in the environment variables. Also accepts\n * additional parameters for the search query.\n */\nclass BingSerpAPI extends Tool {\n static lc_name() {\n return \"BingSerpAPI\";\n }\n\n /**\n * Not implemented. Will throw an error if called.\n */\n toJSON() {\n return this.toJSONNotImplemented();\n }\n\n name = \"bing-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 key: string;\n\n params: Record<string, string>;\n\n constructor(\n apiKey: string | undefined = getEnvironmentVariable(\"BingApiKey\"),\n params: Record<string, string> = {}\n ) {\n super(...arguments);\n\n if (!apiKey) {\n throw new Error(\n \"BingSerpAPI API key not set. You can set it as BingApiKey in your .env file.\"\n );\n }\n\n this.key = apiKey;\n this.params = params;\n }\n\n /** @ignore */\n async _call(input: string): Promise<string> {\n const headers = { \"Ocp-Apim-Subscription-Key\": this.key };\n const params = { q: input, textDecorations: \"true\", textFormat: \"HTML\" };\n const searchUrl = new URL(\"https://api.bing.microsoft.com/v7.0/search\");\n\n Object.entries(params).forEach(([key, value]) => {\n searchUrl.searchParams.append(key, value);\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 res = await response.json();\n const results: [] = res.webPages.value;\n\n if (results.length === 0) {\n return \"No good results found.\";\n }\n const snippets = results\n .map((result: { snippet: string }) => result.snippet)\n .join(\" \");\n\n return snippets;\n }\n}\n\nexport { BingSerpAPI };\n"],"mappings":";;;;;;;;;;;;;AAUA,IAAM,cAAN,cAA0BA,sBAAAA,KAAK;CAC7B,OAAO,UAAU;AACf,SAAO;;;;;CAMT,SAAS;AACP,SAAO,KAAK,sBAAsB;;CAGpC,OAAO;CAEP,cACE;CAEF;CAEA;CAEA,YACE,UAAA,GAAA,0BAAA,wBAAoD,aAAa,EACjE,SAAiC,EAAE,EACnC;AACA,QAAM,GAAG,UAAU;AAEnB,MAAI,CAAC,OACH,OAAM,IAAI,MACR,+EACD;AAGH,OAAK,MAAM;AACX,OAAK,SAAS;;;CAIhB,MAAM,MAAM,OAAgC;EAC1C,MAAM,UAAU,EAAE,6BAA6B,KAAK,KAAK;EACzD,MAAM,SAAS;GAAE,GAAG;GAAO,iBAAiB;GAAQ,YAAY;GAAQ;EACxE,MAAM,YAAY,IAAI,IAAI,6CAA6C;AAEvE,SAAO,QAAQ,OAAO,CAAC,SAAS,CAAC,KAAK,WAAW;AAC/C,aAAU,aAAa,OAAO,KAAK,MAAM;IACzC;EAEF,MAAM,WAAW,MAAM,MAAM,WAAW,EAAE,SAAS,CAAC;AAEpD,MAAI,CAAC,SAAS,GACZ,OAAM,IAAI,MAAM,cAAc,SAAS,SAAS;EAIlD,MAAM,WADM,MAAM,SAAS,MAAM,EACT,SAAS;AAEjC,MAAI,QAAQ,WAAW,EACrB,QAAO;AAMT,SAJiB,QACd,KAAK,WAAgC,OAAO,QAAQ,CACpD,KAAK,IAAI"}