a
    bg                     @   s   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 deZG d	d
 d
eZG d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                   @   s$   e Zd ZU dZed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__ r   r   z/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/langchain_community/tools/tavily_search/tool.pyr      s   
r   c                	   @   s   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dZeed< dZed ed< deee eeeeeef  ef ef dddZ deee! eeeeeef  ef ef dd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',
            )

    Z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_resultsZadvancedsearch_depthinclude_domainsexclude_domainsFinclude_answerinclude_raw_contentinclude_imagesdefault_factoryapi_wrapperZcontent_and_artifactresponse_formatNr   run_managerreturnc              
   C   sr   z,| j || j| j| j| j| j| j| j}W n0 t	y\ } zt
|i fW  Y d}~S d}~0 0 | j |d |fS )Use the tool.Nresults)r'   raw_resultsr   r   r    r!   r"   r#   r$   	Exceptionreprclean_resultsselfr   r*   r.   er   r   r   _run   s    
"zTavilySearchResults._runc              
      sx   z2| j || j| j| j| j| j| j| jI dH }W n0 t	yb } zt
|i fW  Y d}~S d}~0 0 | j |d |fS )Use the tool asynchronously.Nr-   )r'   raw_results_asyncr   r   r    r!   r"   r#   r$   r/   r0   r1   r2   r   r   r   _arun   s    
"zTavilySearchResults._arun)N)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   r5   r	   r8   r   r   r   r   r      s4   
H
  r   c                   @   s   e Zd ZU dZdZeed< dZeed< ee	dZ
e	ed< eZee ed< deee eee ef d
ddZdeee eee ef d
ddZd	S )TavilyAnswerz@Tool that queries the Tavily Search API and gets back an answer.Z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)   c              
   C   sL   z| j j|ddddd W S  tyF } zt|W  Y d}~S d}~0 0 dS )r,   r   Tbasicr   r"   r   answerN)r'   r.   r/   r0   )r3   r   r*   r4   r   r   r   r5      s    zTavilyAnswer._runc              
      sV   z$| j j|ddddI dH }|d W S  tyP } zt|W  Y d}~S d}~0 0 dS )r6   r   Tr<   r=   Nr>   )r'   r7   r/   r0   )r3   r   r*   resultr4   r   r   r   r8      s    
zTavilyAnswer._arun)N)N)r   r   r   r   r   r   r   r   r   r   r'   r   r   r   r   r   r
   r   r   r   r5   r	   r8   r   r   r   r   r;      s$   

  r;   N)r   typingr   r   r   r   r   r   r   Zlangchain_core.callbacksr	   r
   Zlangchain_core.toolsr   Zpydanticr   r   Z+langchain_community.utilities.tavily_searchr   r   r   r;   r   r   r   r   <module>   s   $ -