From c24b79c9d1c349f9977d065c0f54bfeaa3dfe22a Mon Sep 17 00:00:00 2001 From: Sean Hatfield Date: Thu, 23 May 2024 16:49:30 -0700 Subject: [PATCH] [FEAT] Bing Search API web search provider (#1519) implement bing search engine for agents --- docker/.env.example | 5 +- .../SearchProviderOptions/index.jsx | 65 ++++++++++++++++++ .../WebSearchSelection/icons/bing.png | Bin 0 -> 75208 bytes .../AgentConfig/WebSearchSelection/index.jsx | 10 +++ server/.env.example | 5 +- server/models/systemSettings.js | 7 +- .../agents/aibitat/plugins/web-browsing.js | 46 +++++++++++++ server/utils/helpers/updateENV.js | 5 ++ 8 files changed, 140 insertions(+), 3 deletions(-) create mode 100644 frontend/src/pages/WorkspaceSettings/AgentConfig/WebSearchSelection/icons/bing.png diff --git a/docker/.env.example b/docker/.env.example index 23789af4..6368a190 100644 --- a/docker/.env.example +++ b/docker/.env.example @@ -232,4 +232,7 @@ GID='1000' # AGENT_GSE_CTX= #------ Serper.dev ----------- https://serper.dev/ -# AGENT_SERPER_DEV_KEY= \ No newline at end of file +# AGENT_SERPER_DEV_KEY= + +#------ Bing Search ----------- https://portal.azure.com/ +# AGENT_BING_SEARCH_API_KEY= \ No newline at end of file diff --git a/frontend/src/pages/WorkspaceSettings/AgentConfig/WebSearchSelection/SearchProviderOptions/index.jsx b/frontend/src/pages/WorkspaceSettings/AgentConfig/WebSearchSelection/SearchProviderOptions/index.jsx index 15d18178..3d579ed4 100644 --- a/frontend/src/pages/WorkspaceSettings/AgentConfig/WebSearchSelection/SearchProviderOptions/index.jsx +++ b/frontend/src/pages/WorkspaceSettings/AgentConfig/WebSearchSelection/SearchProviderOptions/index.jsx @@ -6,6 +6,7 @@ export function GoogleSearchOptions({ settings }) { from Google here. @@ -57,6 +58,7 @@ export function SerperDotDevOptions({ settings }) { from Serper.dev. @@ -82,3 +84,66 @@ export function SerperDotDevOptions({ settings }) { ); } + +export function BingSearchOptions({ settings }) { + return ( + <> +

+ You can get a Bing Web Search API subscription key{" "} + + from the Azure portal. + +

+
+
+ + +
+
+

+ To set up a Bing Web Search API subscription: +

+
    +
  1. + Go to the Azure portal:{" "} + + https://portal.azure.com/ + +
  2. +
  3. Create a new Azure account or sign in with an existing one.
  4. +
  5. + Navigate to the "Create a resource" section and search for "Bing + Search v7". +
  6. +
  7. + Select the "Bing Search v7" resource and create a new subscription. +
  8. +
  9. + Choose the pricing tier that suits your needs (free tier available). +
  10. +
  11. Obtain the API key for your Bing Web Search subscription.
  12. +
+ + ); +} diff --git a/frontend/src/pages/WorkspaceSettings/AgentConfig/WebSearchSelection/icons/bing.png b/frontend/src/pages/WorkspaceSettings/AgentConfig/WebSearchSelection/icons/bing.png new file mode 100644 index 0000000000000000000000000000000000000000..bfe1c8365c61e09ea36409220c2a7f739bdb78b0 GIT binary patch literal 75208 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 literal 0 HcmV?d00001 diff --git a/frontend/src/pages/WorkspaceSettings/AgentConfig/WebSearchSelection/index.jsx b/frontend/src/pages/WorkspaceSettings/AgentConfig/WebSearchSelection/index.jsx index 0581983f..8e8f054e 100644 --- a/frontend/src/pages/WorkspaceSettings/AgentConfig/WebSearchSelection/index.jsx +++ b/frontend/src/pages/WorkspaceSettings/AgentConfig/WebSearchSelection/index.jsx @@ -2,11 +2,13 @@ import React, { useEffect, useRef, useState } from "react"; import AnythingLLMIcon from "@/media/logo/anything-llm-icon.png"; import GoogleSearchIcon from "./icons/google.png"; import SerperDotDevIcon from "./icons/serper.png"; +import BingSearchIcon from "./icons/bing.png"; import { CaretUpDown, MagnifyingGlass, X } from "@phosphor-icons/react"; import SearchProviderItem from "./SearchProviderItem"; import { SerperDotDevOptions, GoogleSearchOptions, + BingSearchOptions, } from "./SearchProviderOptions"; const SEARCH_PROVIDERS = [ @@ -34,6 +36,14 @@ const SEARCH_PROVIDERS = [ description: "Serper.dev web-search. Free account with a 2,500 calls, but then paid.", }, + { + name: "Bing Search", + value: "bing-search", + logo: BingSearchIcon, + options: (settings) => , + description: + "Web search powered by the Bing Search API. Free for 1000 queries per month.", + }, ]; export default function AgentWebSearchSelection({ diff --git a/server/.env.example b/server/.env.example index e38250be..f51d6177 100644 --- a/server/.env.example +++ b/server/.env.example @@ -228,4 +228,7 @@ TTS_PROVIDER="native" # AGENT_GSE_CTX= #------ Serper.dev ----------- https://serper.dev/ -# AGENT_SERPER_DEV_KEY= \ No newline at end of file +# AGENT_SERPER_DEV_KEY= + +#------ Bing Search ----------- https://portal.azure.com/ +# AGENT_BING_SEARCH_API_KEY= diff --git a/server/models/systemSettings.js b/server/models/systemSettings.js index 52393a02..ac052319 100644 --- a/server/models/systemSettings.js +++ b/server/models/systemSettings.js @@ -70,7 +70,11 @@ const SystemSettings = { agent_search_provider: (update) => { try { if (update === "none") return null; - if (!["google-search-engine", "serper-dot-dev"].includes(update)) + if ( + !["google-search-engine", "serper-dot-dev", "bing-search"].includes( + update + ) + ) throw new Error("Invalid SERP provider."); return String(update); } catch (e) { @@ -171,6 +175,7 @@ const SystemSettings = { AgentGoogleSearchEngineId: process.env.AGENT_GSE_CTX || null, AgentGoogleSearchEngineKey: process.env.AGENT_GSE_KEY || null, AgentSerperApiKey: process.env.AGENT_SERPER_DEV_KEY || null, + AgentBingSearchApiKey: process.env.AGENT_BING_SEARCH_API_KEY || null, }; }, diff --git a/server/utils/agents/aibitat/plugins/web-browsing.js b/server/utils/agents/aibitat/plugins/web-browsing.js index 198b3ec5..b30688f1 100644 --- a/server/utils/agents/aibitat/plugins/web-browsing.js +++ b/server/utils/agents/aibitat/plugins/web-browsing.js @@ -65,6 +65,9 @@ const webBrowsing = { case "serper-dot-dev": engine = "_serperDotDev"; break; + case "bing-search": + engine = "_bingWebSearch"; + break; default: engine = "_googleSearchEngine"; } @@ -172,6 +175,49 @@ const webBrowsing = { return `No information was found online for the search query.`; return JSON.stringify(data); }, + _bingWebSearch: async function (query) { + if (!process.env.AGENT_BING_SEARCH_API_KEY) { + this.super.introspect( + `${this.caller}: I can't use Bing Web Search because the user has not defined the required API key.\nVisit: https://portal.azure.com/ to create the API key.` + ); + return `Search is disabled and no content was found. This functionality is disabled because the user has not set it up yet.`; + } + + const searchURL = new URL( + "https://api.bing.microsoft.com/v7.0/search" + ); + searchURL.searchParams.append("q", query); + + this.super.introspect( + `${this.caller}: Using Bing Web Search to search for "${ + query.length > 100 ? `${query.slice(0, 100)}...` : query + }"` + ); + + const searchResponse = await fetch(searchURL, { + headers: { + "Ocp-Apim-Subscription-Key": + process.env.AGENT_BING_SEARCH_API_KEY, + }, + }) + .then((res) => res.json()) + .then((data) => { + const searchResults = data.webPages?.value || []; + return searchResults.map((result) => ({ + title: result.name, + link: result.url, + snippet: result.snippet, + })); + }) + .catch((e) => { + console.log(e); + return []; + }); + + if (searchResponse.length === 0) + return `No information was found online for the search query.`; + return JSON.stringify(searchResponse); + }, }); }, }; diff --git a/server/utils/helpers/updateENV.js b/server/utils/helpers/updateENV.js index c95ccd57..d6900ae5 100644 --- a/server/utils/helpers/updateENV.js +++ b/server/utils/helpers/updateENV.js @@ -399,6 +399,10 @@ const KEY_MAPPING = { envKey: "AGENT_SERPER_DEV_KEY", checks: [], }, + AgentBingSearchApiKey: { + envKey: "AGENT_BING_SEARCH_API_KEY", + checks: [], + }, // TTS/STT Integration ENVS TextToSpeechProvider: { @@ -762,6 +766,7 @@ async function dumpENV() { "AGENT_GSE_CTX", "AGENT_GSE_KEY", "AGENT_SERPER_DEV_KEY", + "AGENT_BING_SEARCH_API_KEY", ]; // Simple sanitization of each value to prevent ENV injection via newline or quote escaping.