UNPKG

@langchain/community

Version:
1 lines 4.56 kB
{"version":3,"file":"duckduckgo_search.cjs","names":["Tool"],"sources":["../../src/tools/duckduckgo_search.ts"],"sourcesContent":["import { Tool, ToolParams } from \"@langchain/core/tools\";\nimport { search, type SearchOptions } from \"duck-duck-scrape\";\n\nexport {\n SafeSearchType,\n type SearchOptions,\n SearchTimeType,\n} from \"duck-duck-scrape\";\n\nexport interface DuckDuckGoSearchParameters extends ToolParams {\n /**\n * The search options for the search using the SearchOptions interface\n * from the duck-duck-scrape package.\n */\n searchOptions?: SearchOptions;\n /**\n * The maximum number of results to return from the search.\n * Limiting to 10 to avoid context overload.\n * @default 10\n */\n maxResults?: number;\n}\n\nconst DEFAULT_MAX_RESULTS = 10;\n\n/**\n * DuckDuckGo tool integration.\n *\n * Setup:\n * Install `@langchain/community` and `duck-duck-scrape`.\n *\n * ```bash\n * npm install @langchain/community duck-duck-scrape\n * ```\n *\n * ## [Constructor args](https://api.js.langchain.com/classes/_langchain_community.tools_duckduckgo_search.DuckDuckGoSearch.html#constructor)\n *\n * <details open>\n * <summary><strong>Instantiate</strong></summary>\n *\n * ```typescript\n * import { DuckDuckGoSearch } from \"@langchain/community/tools/duckduckgo_search\";\n *\n * const tool = new DuckDuckGoSearch({ maxResults: 1 });\n * ```\n * </details>\n *\n * <br />\n *\n * <details>\n *\n * <summary><strong>Invocation</strong></summary>\n *\n * ```typescript\n * await tool.invoke(\"what is the current weather in sf?\");\n *\n * // output: [{\"title\":\"San Francisco, CA Current Weather | AccuWeather\",\"link\":\"https://www.accuweather.com/en/us/san-francisco/94103/current-weather/347629\",\"snippet\":\"<b>Current</b> <b>weather</b> <b>in</b> San Francisco, CA. Check <b>current</b> conditions in San Francisco, CA with radar, hourly, and more.\"}]\n * ```\n * </details>\n *\n * <br />\n *\n * <details>\n *\n * <summary><strong>Invocation with tool call</strong></summary>\n *\n * ```typescript\n * // This is usually generated by a model, but we'll create a tool call directly for demo purposes.\n * const modelGeneratedToolCall = {\n * args: {\n * input: \"what is the current weather in sf?\",\n * },\n * id: \"tool_call_id\",\n * name: tool.name,\n * type: \"tool_call\",\n * };\n * await tool.invoke(modelGeneratedToolCall);\n * ```\n *\n * ```text\n * ToolMessage {\n * \"content\": \"[{\\\"title\\\":\\\"San Francisco, CA Weather Conditions | Weather Underground\\\",\\\"link\\\":\\\"https://www.wunderground.com/weather/us/ca/san-francisco\\\",\\\"snippet\\\":\\\"San Francisco <b>Weather</b> Forecasts. <b>Weather</b> Underground provides local & long-range <b>weather</b> forecasts, weatherreports, maps & tropical <b>weather</b> conditions for the San Francisco area.\\\"}]\",\n * \"name\": \"duckduckgo-search\",\n * \"additional_kwargs\": {},\n * \"response_metadata\": {},\n * \"tool_call_id\": \"tool_call_id\"\n * }\n * ```\n * </details>\n */\nexport class DuckDuckGoSearch extends Tool {\n private searchOptions?: SearchOptions;\n\n private maxResults = DEFAULT_MAX_RESULTS;\n\n constructor(params?: DuckDuckGoSearchParameters) {\n super(params ?? {});\n\n const { searchOptions, maxResults } = params ?? {};\n this.searchOptions = searchOptions;\n this.maxResults = maxResults || this.maxResults;\n }\n\n static lc_name() {\n return \"DuckDuckGoSearch\";\n }\n\n name = \"duckduckgo-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 async _call(input: string): Promise<string> {\n const { results } = await search(input, this.searchOptions);\n\n return JSON.stringify(\n results\n .map((result) => ({\n title: result.title,\n link: result.url,\n snippet: result.description,\n }))\n .slice(0, this.maxResults)\n );\n }\n}\n"],"mappings":";;;;;;;;;;AAuBA,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmE5B,IAAa,mBAAb,cAAsCA,sBAAAA,KAAK;CACzC;CAEA,aAAqB;CAErB,YAAY,QAAqC;AAC/C,QAAM,UAAU,EAAE,CAAC;EAEnB,MAAM,EAAE,eAAe,eAAe,UAAU,EAAE;AAClD,OAAK,gBAAgB;AACrB,OAAK,aAAa,cAAc,KAAK;;CAGvC,OAAO,UAAU;AACf,SAAO;;CAGT,OAAO;CAEP,cACE;CAEF,MAAM,MAAM,OAAgC;EAC1C,MAAM,EAAE,YAAY,OAAA,GAAA,iBAAA,QAAa,OAAO,KAAK,cAAc;AAE3D,SAAO,KAAK,UACV,QACG,KAAK,YAAY;GAChB,OAAO,OAAO;GACd,MAAM,OAAO;GACb,SAAS,OAAO;GACjB,EAAE,CACF,MAAM,GAAG,KAAK,WAAW,CAC7B"}