
    Ng                         d Z ddlmZmZmZmZmZmZmZ ddl	m
Z
mZ ddlmZ ddlmZmZ ddlmZ  G d de          Z G d	 d
e          Z G d de          ZdS )zTool for the Tavily search API.    )DictListLiteralOptionalTupleTypeUnion)AsyncCallbackManagerForToolRunCallbackManagerForToolRun)BaseTool)	BaseModelField)TavilySearchAPIWrapperc                   6    e Zd ZU dZ ed          Zeed<   dS )TavilyInputzInput for the Tavily tool.zsearch query to look up)descriptionqueryN)__name__
__module____qualname____doc__r   r   str__annotations__     h/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/tools/tavily_search/tool.pyr   r      s6         $$#<===E3=====r   r   c                      e Zd ZU dZdZeed<   dZeed<   eZ	e
e         ed<   	 dZeed<   	 d	Zeed
<   	 g Zee         ed<   	 g Zee         ed<   	 dZeed<   	 dZeed<   	 dZeed<   	  ee          Zeed<   dZed         ed<   	 ddedee         deeeeeef                  ef         ef         fdZ 	 ddedee!         deeeeeef                  ef         ef         fdZ"dS )TavilySearchResultsan	  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

            '{
  "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='{
  "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
Novak ...'
                        },
                        ...
                    ],
                    'response_time': 2.92
                },
                tool_call_id='1',
                name='tavily_search_results_json',
            )

    tavily_search_results_jsonnamezA 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.r   args_schema   max_resultsadvancedsearch_depthinclude_domainsexclude_domainsFinclude_answerinclude_raw_contentinclude_imagesdefault_factoryapi_wrappercontent_and_artifactresponse_formatNr   run_managerreturnc           
      "   	 | j                             || j        | j        | j        | j        | j        | j        | j                  }n(# t          $ r}t          |          i fcY d}~S d}~ww xY w| j                             |d                   |fS )Use the tool.Nresults)r-   raw_resultsr#   r%   r&   r'   r(   r)   r*   	Exceptionreprclean_resultsselfr   r0   r5   es        r   _runzTavilySearchResults._run   s    	*66 !$$#(#	 	KK  	 	 	77B;	--k).DEE{RRs   AA 
A,A'!A,'A,c           
      2  K   	 | j                             || j        | j        | j        | j        | j        | j        | j                   d{V }n(# t          $ r}t          |          i fcY d}~S d}~ww xY w| j                             |d                   |fS )Use the tool asynchronously.Nr4   )r-   raw_results_asyncr#   r%   r&   r'   r(   r)   r*   r6   r7   r8   r9   s        r   _arunzTavilySearchResults._arun   s      	 $ 0 B B !$$#(#	! 	! 	 	 	 	 	 	KK  	 	 	77B;	--k).DEE{RRs   A
A 
A4A/)A4/A4N)#r   r   r   r   r    r   r   r   r   r!   r   r   r#   intr%   r&   r   r'   r(   boolr)   r*   r   r   r-   r/   r   r   r   r   r	   r   r<   r
   r@   r   r   r   r   r      s        F FP -D#,,,	*    
 $/Ki...#K4"L#""" "$OT#Y### "$OT#Y### !ND    !&%%% !ND    +0%@V*W*W*WK'WWW7MOW34MMM
 <@S SS 78S 
uT$sCx.)3./5	6	S S S S2 AES SS <=S 
uT$sCx.)3./5	6	S S S S S Sr   r   c            	           e Zd ZU dZdZeed<   dZeed<    ee	          Z
e	ed<   eZee         ed<   	 dd
edee         deee         ef         fdZ	 dd
edee         deee         ef         fdZd	S )TavilyAnswerz@Tool that queries the Tavily Search API and gets back an answer.tavily_answerr    zA 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.r   r+   r-   r!   Nr   r0   r1   c                     	 | j                             |ddd          d         S # t          $ r}t          |          cY d}~S d}~ww xY w)r3   r"   Tbasicr#   r(   r%   answerN)r-   r5   r6   r7   )r:   r   r0   r;   s       r   r<   zTavilyAnswer._run   ss    	#//#$	 0  
    	 	 	77NNNNNN	s   #& 
A	AA	A	c                    K   	 | j                             |ddd           d{V }|d         S # t          $ r}t          |          cY d}~S d}~ww xY w)r>   r"   TrH   rI   NrJ   )r-   r?   r6   r7   )r:   r   r0   resultr;   s        r   r@   zTavilyAnswer._arun   s      		+==#$	 >        F (## 	 	 	77NNNNNN	s   +0 
AAAArA   )r   r   r   r   r    r   r   r   r   r   r-   r   r!   r   r   r   r   r	   r   r   r<   r
   r@   r   r   r   rE   rE      s        JJD#	G     +0%@V*W*W*WK'WWW#.Ki...
 <@  78 
tDz3		   & AE  <= 
tDz3		     r   rE   N)r   typingr   r   r   r   r   r   r	   langchain_core.callbacksr
   r   langchain_core.toolsr   pydanticr   r   +langchain_community.utilities.tavily_searchr   r   r   rE   r   r   r   <module>rR      s@   % % D D D D D D D D D D D D D D D D D D        * ) ) ) ) ) % % % % % % % % N N N N N N> > > > >) > > >iS iS iS iS iS( iS iS iSX, , , , ,8 , , , , ,r   