Source code for langchain_community.tools.tavily_search.tool
"""Tool for the Tavily search API."""fromtypingimportDict,List,Literal,Optional,Tuple,Type,Unionfromlangchain_core.callbacksimport(AsyncCallbackManagerForToolRun,CallbackManagerForToolRun,)fromlangchain_core.toolsimportBaseToolfrompydanticimportBaseModel,Fieldfromlangchain_community.utilities.tavily_searchimportTavilySearchAPIWrapper
[docs]classTavilyInput(BaseModel):"""Input for the Tavily tool."""query:str=Field(description="search query to look up")
[docs]classTavilySearchResults(BaseTool):# type: ignore[override, override]"""Tool that queries the Tavily Search API and gets back json. Setup: Install ``langchain-openai`` and ``tavily-python``, and set environment variable ``TAVILY_API_KEY``. .. code-block:: bash pip install -U langchain-community tavily-python export TAVILY_API_KEY="your-api-key" Instantiate: .. code-block:: python from langchain_community.tools import TavilySearchResults tool = TavilySearchResults( max_results=5, include_answer=True, include_raw_content=True, include_images=True, # search_depth="advanced", # include_domains = [] # exclude_domains = [] ) Invoke directly with args: .. code-block:: python tool.invoke({'query': 'who won the last french open'}) .. code-block:: python '{\n "url": "https://www.nytimes.com...", "content": "Novak Djokovic won the last French Open by beating Casper Ruud ...' Invoke with tool call: .. code-block:: python tool.invoke({"args": {'query': 'who won the last french open'}, "type": "tool_call", "id": "foo", "name": "tavily"}) .. code-block:: python ToolMessage( content='{\n "url": "https://www.nytimes.com...", "content": "Novak Djokovic won the last French Open by beating Casper Ruud ...', artifact={ 'query': 'who won the last french open', 'follow_up_questions': None, 'answer': 'Novak ...', 'images': [ 'https://www.amny.com/wp-content/uploads/2023/06/AP23162622181176-1200x800.jpg', ... ], 'results': [ { 'title': 'Djokovic ...', 'url': 'https://www.nytimes.com...', 'content': "Novak...", 'score': 0.99505633, 'raw_content': 'Tennis\nNovak ...' }, ... ], 'response_time': 2.92 }, tool_call_id='1', name='tavily_search_results_json', ) """# noqa: E501name:str="tavily_search_results_json"description:str=("A search engine optimized for comprehensive, accurate, and trusted results. ""Useful for when you need to answer questions about current events. ""Input should be a search query.")args_schema:Type[BaseModel]=TavilyInput"""The tool response format."""max_results:int=5"""Max search results to return, default is 5"""search_depth:str="advanced""""The depth of the search. It can be "basic" or "advanced" .. versionadded:: 0.2.5 """include_domains:List[str]=[]"""A list of domains to specifically include in the search results. Default is None, which includes all domains. .. versionadded:: 0.2.5 """exclude_domains:List[str]=[]"""A list of domains to specifically exclude from the search results. Default is None, which doesn't exclude any domains. .. versionadded:: 0.2.5 """include_answer:bool=False"""Include a short answer to original query in the search results. Default is False. .. versionadded:: 0.2.5 """include_raw_content:bool=False"""Include cleaned and parsed HTML of each site search results. Default is False. .. versionadded:: 0.2.5 """include_images:bool=False"""Include a list of query related images in the response. Default is False. .. versionadded:: 0.2.5 """api_wrapper:TavilySearchAPIWrapper=Field(default_factory=TavilySearchAPIWrapper)# type: ignore[arg-type]response_format:Literal["content_and_artifact"]="content_and_artifact"def_run(self,query:str,run_manager:Optional[CallbackManagerForToolRun]=None,)->Tuple[Union[List[Dict[str,str]],str],Dict]:"""Use the tool."""# TODO: remove try/except, should be handled by BaseTooltry:raw_results=self.api_wrapper.raw_results(query,self.max_results,self.search_depth,self.include_domains,self.exclude_domains,self.include_answer,self.include_raw_content,self.include_images,)exceptExceptionase:returnrepr(e),{}returnself.api_wrapper.clean_results(raw_results["results"]),raw_resultsasyncdef_arun(self,query:str,run_manager:Optional[AsyncCallbackManagerForToolRun]=None,)->Tuple[Union[List[Dict[str,str]],str],Dict]:"""Use the tool asynchronously."""try:raw_results=awaitself.api_wrapper.raw_results_async(query,self.max_results,self.search_depth,self.include_domains,self.exclude_domains,self.include_answer,self.include_raw_content,self.include_images,)exceptExceptionase:returnrepr(e),{}returnself.api_wrapper.clean_results(raw_results["results"]),raw_results
[docs]classTavilyAnswer(BaseTool):# type: ignore[override, override]"""Tool that queries the Tavily Search API and gets back an answer."""name:str="tavily_answer"description:str=("A search engine optimized for comprehensive, accurate, and trusted results. ""Useful for when you need to answer questions about current events. ""Input should be a search query. ""This returns only the answer - not the original source data.")api_wrapper:TavilySearchAPIWrapper=Field(default_factory=TavilySearchAPIWrapper)# type: ignore[arg-type]args_schema:Type[BaseModel]=TavilyInputdef_run(self,query:str,run_manager:Optional[CallbackManagerForToolRun]=None,)->Union[List[Dict],str]:"""Use the tool."""try:returnself.api_wrapper.raw_results(query,max_results=5,include_answer=True,search_depth="basic",)["answer"]exceptExceptionase:returnrepr(e)asyncdef_arun(self,query:str,run_manager:Optional[AsyncCallbackManagerForToolRun]=None,)->Union[List[Dict],str]:"""Use the tool asynchronously."""try:result=awaitself.api_wrapper.raw_results_async(query,max_results=5,include_answer=True,search_depth="basic",)returnresult["answer"]exceptExceptionase:returnrepr(e)