
    dh                          S r SSKJrJrJrJrJrJrJrJ	r	  SSK
Jr  SSKJrJr  SSKJr  SSKJrJr  SSKJr   " S S	\5      r\" S
SSS9 " S S\5      5       r\" S
SSS9 " S S\5      5       rg)zTool for the Tavily search API.    )AnyDictListLiteralOptionalTupleTypeUnion)
deprecated)AsyncCallbackManagerForToolRunCallbackManagerForToolRun)BaseTool)	BaseModelField)TavilySearchAPIWrapperc                   0    \ rS rSr% Sr\" SS9r\\S'   Sr	g)TavilyInput   zInput for the Tavily tool.zsearch query to look up)descriptionquery N)
__name__
__module____qualname____firstlineno____doc__r   r   str__annotations____static_attributes__r       d/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/tools/tavily_search/tool.pyr   r      s    $#<=E3=r    r   z0.3.25z1.0zlangchain_tavily.TavilySearch)sinceremovalalternative_importc                     ^  \ rS rSr% SrSr\\S'   Sr\\S'   \	r
\\   \S'    Sr\\S	'    S
r\\S'    / r\\   \S'    / r\\   \S'    Sr\\S'    Sr\\S'    Sr\\S'    \" \S9r\\S'   Sr\S   \S'   S\SS4U 4S jjr SS\S\\   S\ \!\\"\\4      \4   \"4   4S jjr# SS\S\\$   S\ \!\\"\\4      \4   \"4   4S jjr%Sr&U =r'$ ) TavilySearchResults   a	  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:: json

            {
                "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_formatkwargsreturnNc                 P   > SU;   a  [        US   S9US'   [        TU ]  " S0 UD6  g )Ntavily_api_key)r<   r6   r   )r   super__init__)selfr9   	__class__s     r!   r>   TavilySearchResults.__init__   s5    v%$:%&67%F=! 	"6"r    r   run_managerc           
      \    U R                   R                  UU R                  U R                  U R                  U R
                  U R                  U R                  U R                  5      nU R                   R                  US   5      U4$ ! [         a  n[        U5      0 4s SnA$ SnAff = f)Use the tool.Nresults)r6   raw_resultsr,   r.   r/   r0   r1   r2   r3   	Exceptionreprclean_resultsr?   r   rB   rF   es        r!   _runTavilySearchResults._run   s    	**66  !!$$$$##((##	K --k).DE{RR  	7B;	s   A(B
 

B+B& B+&B+c           
      x  #     U R                   R                  UU R                  U R                  U R                  U R
                  U R                  U R                  U R                  5      I Sh  vN nU R                   R                  US   5      U4$  N$! [         a  n[        U5      0 4s SnA$ SnAff = f7f)Use the tool asynchronously.NrE   )r6   raw_results_asyncr,   r.   r/   r0   r1   r2   r3   rG   rH   rI   rJ   s        r!   _arunTavilySearchResults._arun   s     	 $ 0 0 B B  !!$$$$##((##	! 	K --k).DE{RR	  	7B;	sG   B:A+B /B0B 4 B:B 
B7 B2,B7-B:2B77B:r   N)(r   r   r   r   r   r)   r   r   r   r   r*   r	   r   r,   intr.   r/   r   r0   r1   boolr2   r3   r   r   r6   r8   r   r   r>   r   r   r   r
   r   rL   r   rQ   r   __classcell__)r@   s   @r!   r&   r&      s   IV -D#,	*  
 $/Ki.#K4"L#" "$OT#Y# "$OT#Y# !ND  !&% !ND  +0@V*WK'W7MOW34M# # # <@SS 78S 
uT$sCx.)3./5	6	S2 AESS <=S 
uT$sCx.)3./5	6	S Sr    r&   c            	           \ rS rSr% SrSr\\S'   Sr\\S'   \	" \
S9r\
\S'   \r\\   \S	'    SS\S\\   S\\\   \4   4S jjr SS\S\\   S\\\   \4   4S jjrSrg
)TavilyAnswer   z@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   r4   r6   r*   Nr   rB   r:   c                      U R                   R                  USSSS9S   $ ! [         a  n[        U5      s SnA$ SnAff = f)rD   r+   Tbasicr,   r1   r.   answerN)r6   rF   rG   rH   )r?   r   rB   rK   s       r!   rL   TavilyAnswer._run   sV    	##//#$	 0 
    	7N	s   ! 
A 
;A A c                    #     U R                   R                  USSSS9I Sh  vN nUS   $  N	! [         a  n[        U5      s SnA$ SnAff = f7f)rO   r+   Tr\   r]   Nr^   )r6   rP   rG   rH   )r?   r   rB   resultrK   s        r!   rQ   TavilyAnswer._arun   sb     		++==#$	 >  F (##  	7N	s<   A/ -/ A/ 
A
A	AA	AAr   rS   )r   r   r   r   r   r)   r   r   r   r   r   r6   r   r*   r	   r   r   r   r
   r   r   rL   r   rQ   r   r   r    r!   rX   rX      s     KD#	G   +0@V*WK'W#.Ki.
 <@ 78 
tDz3		& AE <= 
tDz3		 r    rX   N)r   typingr   r   r   r   r   r   r	   r
   langchain_core._apir   langchain_core.callbacksr   r   langchain_core.toolsr   pydanticr   r   +langchain_community.utilities.tavily_searchr   r   r&   rX   r   r    r!   <module>ri      s    % I I I * * % N>) > 
6
uS( uS
uSp 
6
,8 ,
,r    