From 630dcc7485097a511f58426497e804058e3b57bd Mon Sep 17 00:00:00 2001 From: Eunhye Kim Date: Fri, 12 Apr 2024 15:26:14 +0900 Subject: [PATCH 1/2] Add google serper API support tools to opengpts. - Add GoogleSearchRun tool. - Add GoogleSerperResult tool. --- backend/app/agent.py | 4 ++++ backend/app/tools.py | 44 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/backend/app/agent.py b/backend/app/agent.py index a633c071..97ed7e9f 100644 --- a/backend/app/agent.py +++ b/backend/app/agent.py @@ -37,6 +37,8 @@ TavilyAnswer, Wikipedia, YouSearch, + Serper, + SerperResult, get_retrieval_tool, get_retriever, ) @@ -47,6 +49,8 @@ DDGSearch, Arxiv, YouSearch, + Serper, + SerperResult, SecFilings, PressReleases, PubMed, diff --git a/backend/app/tools.py b/backend/app/tools.py index 4af69eea..28fc68c2 100644 --- a/backend/app/tools.py +++ b/backend/app/tools.py @@ -19,6 +19,11 @@ from langchain_community.tools.tavily_search import ( TavilySearchResults, ) +from langchain_community.tools.google_serper.tool import ( + GoogleSerperRun, + GoogleSerperResults, +) +from langchain_community.utilities.google_serper import GoogleSerperAPIWrapper from langchain_community.utilities.arxiv import ArxivAPIWrapper from langchain_community.utilities.tavily_search import TavilySearchAPIWrapper from langchain_robocorp import ActionServerToolkit @@ -34,6 +39,8 @@ class DDGInput(BaseModel): class ArxivInput(BaseModel): query: str = Field(description="search query to look up") +class GoogleSerperInput(BaseModel): + query: str = Field(description="search query to look up") class PythonREPLInput(BaseModel): query: str = Field(description="python command to run") @@ -48,6 +55,8 @@ class AvailableTools(str, Enum): RETRIEVAL = "retrieval" ARXIV = "arxiv" YOU_SEARCH = "you_search" + SERPER = "google_serper_run" + SERPER_RESULT = "google_serper_results" SEC_FILINGS = "sec_filings_kai_ai" PRESS_RELEASES = "press_releases_kai_ai" PUBMED = "pubmed" @@ -177,6 +186,29 @@ class TavilyAnswer(BaseTool): const=True, ) +class Serper(BaseTool): + type: AvailableTools = Field(AvailableTools.SERPER, const=True) + name: str = Field("Serper.dev Google Search API", const=True) + description: str = Field( + ( + "A low-cost Google Search API." + "Useful for when you need to answer questions about current events." + "Input should be a search query." + ), + const=True, + ) + +class SerperResult(BaseTool): + type: AvailableTools = Field(AvailableTools.SERPER_RESULT, const=True) + name: str = Field("Serper.dev Google Search API (JSON)", const=True) + description: str = Field( + ( + "A low-cost Google Search API." + "Useful for when you need to answer questions about current events." + "Input should be a search query. Output is a JSON object of the query results" + ), + const=True, + ) class Retrieval(BaseTool): type: AvailableTools = Field(AvailableTools.RETRIEVAL, const=True) @@ -222,6 +254,16 @@ def _get_you_search(): "Searches for documents using You.com", ) +@lru_cache(maxsize=1) +def _get_serper_search(): + #os.environ["SERPAPI_API_KEY"] = "API key from https://serper.dev/api-key" + return GoogleSerperRun(api_wrapper=GoogleSerperAPIWrapper(), args_schema=GoogleSerperInput) + +@lru_cache(maxsize=1) +def _get_serper_search_result(): + #os.environ["SERPAPI_API_KEY"] = "API key from https://serper.dev/api-key" + return GoogleSerperResults(api_wrapper=GoogleSerperAPIWrapper(), args_schema=GoogleSerperInput) + @lru_cache(maxsize=1) def _get_sec_filings(): @@ -291,6 +333,8 @@ def _get_connery_actions(): AvailableTools.DDG_SEARCH: _get_duck_duck_go, AvailableTools.ARXIV: _get_arxiv, AvailableTools.YOU_SEARCH: _get_you_search, + AvailableTools.SERPER: _get_serper_search, + AvailableTools.SERPER_RESULT: _get_serper_search_result, AvailableTools.SEC_FILINGS: _get_sec_filings, AvailableTools.PRESS_RELEASES: _get_press_releases, AvailableTools.PUBMED: _get_pubmed, From 56112c6fdcd09f804965e6e9442e342fab324bca Mon Sep 17 00:00:00 2001 From: Eun Hye Kim Date: Wed, 24 Apr 2024 19:14:29 +0900 Subject: [PATCH 2/2] Update tools.py - Change comments of environment variable that provides api key --- backend/app/tools.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/app/tools.py b/backend/app/tools.py index 7e945c17..ef9b499d 100644 --- a/backend/app/tools.py +++ b/backend/app/tools.py @@ -271,12 +271,12 @@ def _get_you_search(): @lru_cache(maxsize=1) def _get_serper_search(): - #os.environ["SERPAPI_API_KEY"] = "API key from https://serper.dev/api-key" + #os.environ["SERPER_API_KEY"] = "API key from https://serper.dev/api-key" return GoogleSerperRun(api_wrapper=GoogleSerperAPIWrapper(), args_schema=GoogleSerperInput) @lru_cache(maxsize=1) def _get_serper_search_result(): - #os.environ["SERPAPI_API_KEY"] = "API key from https://serper.dev/api-key" + #os.environ["SERPER_API_KEY"] = "API key from https://serper.dev/api-key" return GoogleSerperResults(api_wrapper=GoogleSerperAPIWrapper(), args_schema=GoogleSerperInput)