UNPKG

@langchain/community

Version:
1 lines • 3.26 kB
{"version":3,"file":"bingserpapi.cjs","names":["Tool","apiKey: string | undefined","params: Record<string, string>","input: string","results: []","result: { snippet: string }"],"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,4BAAK;CAC7B,OAAO,UAAU;AACf,SAAO;CACR;;;;CAKD,SAAS;AACP,SAAO,KAAK,sBAAsB;CACnC;CAED,OAAO;CAEP,cACE;CAEF;CAEA;CAEA,YACEC,gEAAoD,aAAa,EACjEC,SAAiC,CAAE,GACnC;EACA,MAAM,GAAG,UAAU;AAEnB,MAAI,CAAC,OACH,OAAM,IAAI,MACR;EAIJ,KAAK,MAAM;EACX,KAAK,SAAS;CACf;;CAGD,MAAM,MAAMC,OAAgC;EAC1C,MAAM,UAAU,EAAE,6BAA6B,KAAK,IAAK;EACzD,MAAM,SAAS;GAAE,GAAG;GAAO,iBAAiB;GAAQ,YAAY;EAAQ;EACxE,MAAM,YAAY,IAAI,IAAI;EAE1B,OAAO,QAAQ,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,MAAM,KAAK;GAC/C,UAAU,aAAa,OAAO,KAAK,MAAM;EAC1C,EAAC;EAEF,MAAM,WAAW,MAAM,MAAM,WAAW,EAAE,QAAS,EAAC;AAEpD,MAAI,CAAC,SAAS,GACZ,OAAM,IAAI,MAAM,CAAC,WAAW,EAAE,SAAS,QAAQ;EAGjD,MAAM,MAAM,MAAM,SAAS,MAAM;EACjC,MAAMC,UAAc,IAAI,SAAS;AAEjC,MAAI,QAAQ,WAAW,EACrB,QAAO;EAET,MAAM,WAAW,QACd,IAAI,CAACC,WAAgC,OAAO,QAAQ,CACpD,KAAK,IAAI;AAEZ,SAAO;CACR;AACF"}