
    Ng0                         d dl Z d dlmZ d dlmZmZmZmZ d dlm	Z	 d dl
mZ d dlmZ  G d de          Z G d	 d
e          ZdS )    N)Enum)AnyDictListOptional)CallbackManagerForRetrieverRun)Document)BaseRetrieverc                       e Zd ZdZdZdZdS )SearchDepthzSearch depth as enumerator.basicadvancedN)__name__
__module____qualname____doc__BASICADVANCED     l/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/retrievers/tavily_search_api.pyr   r   
   s        %%EHHHr   r   c                      e Zd ZU dZdZeed<   dZeed<   dZ	eed<   dZ
eed<   ej        Zeed<   d	Zeee                  ed
<   d	Zeee                  ed<   i Zeeeef                  ed<   d	Zee         ed<   dededee         fdZd	S )TavilySearchAPIRetrieveraf  Tavily Search API retriever.

    Setup:
        Install ``langchain-community`` and set environment variable ``TAVILY_API_KEY``.

        .. code-block:: bash

            pip install -U langchain-community
            export TAVILY_API_KEY="your-api-key"

    Key init args:
        k: int
            Number of results to include.
        include_generated_answer: bool
            Include a generated answer with results
        include_raw_content: bool
            Include raw content with results.
        include_images: bool
            Return images in addition to text.

    Instantiate:
        .. code-block:: python

            from langchain_community.retrievers import TavilySearchAPIRetriever

            retriever = TavilySearchAPIRetriever(k=3)

    Usage:
        .. code-block:: python

            query = "what year was breath of the wild released?"

            retriever.invoke(query)

    Use within a chain:
        .. code-block:: python

            from langchain_core.output_parsers import StrOutputParser
            from langchain_core.prompts import ChatPromptTemplate
            from langchain_core.runnables import RunnablePassthrough
            from langchain_openai import ChatOpenAI

            prompt = ChatPromptTemplate.from_template(
                """Answer the question based only on the context provided.

            Context: {context}

            Question: {question}"""
            )

            llm = ChatOpenAI(model="gpt-3.5-turbo-0125")

            def format_docs(docs):
                return "

".join(doc.page_content for doc in docs)

            chain = (
                {"context": retriever | format_docs, "question": RunnablePassthrough()}
                | prompt
                | llm
                | StrOutputParser()
            )

            chain.invoke("how many units did bretch of the wild sell in 2020")

    
   kFinclude_generated_answerinclude_raw_contentinclude_imagessearch_depthNinclude_domainsexclude_domainskwargsapi_keyqueryrun_managerreturnc                    	 	 ddl m} n# t          $ r	 ddl m} Y nw xY wn# t          $ r t          d          w xY w | j        pt
          j        d                   } j        s j        n	 j        dz
  } |j	        d|| j
        j         j         j         j         j         j        d j         fd	                    d
          D             } j        r+t%                              dd          ddd          g|}|S )Nr   )TavilyClient)ClientzTTavily python package not found. Please install it with `pip install tavily-python`.TAVILY_API_KEY)r#      )r$   max_resultsr   include_answerr    r!   r   r   c           
      T   g | ]}t          j        s|                    d d          n|                    dd          |                    dd          |                    dd          dd |                                D             d                    d          i          S )	content raw_contenttitleurlr2   sourcec                 "    i | ]\  }}|d v	||S ))r/   r2   r3   r1   r   ).0r   vs      r   
<dictcomp>zOTavilySearchAPIRetriever._get_relevant_documents.<locals>.<listcomp>.<dictcomp>   s4        Aq$NNN 1NNNr   imagespage_contentmetadata)r	   r   getitems)r7   resultresponseselfs     r   
<listcomp>zDTavilySearchAPIRetriever._get_relevant_documents.<locals>.<listcomp>z   s     
 
 
   /3VZZ	2666ZZr22#ZZ44$jj33	 	 $*LLNN  	 hll844	 		  
 
 
r   resultsanswerr0   zSuggested Answerzhttps://tavily.com/r4   r;   r   )tavilyr(   ImportErrorr)   r#   osenvironr   r   searchr   valuer    r!   r   r   r"   r>   r	   )rB   r$   r%   r(   rF   r,   docsrA   s   `      @r   _get_relevant_documentsz0TavilySearchAPIRetriever._get_relevant_documents^   s   
	://///// : : :99999999:  	 	 	F  	 dl&RbjAQ6RSSS$($AQdfftvPQz 6= 

#*08 0 0 $ 8.

 

 k

 


 
 
 
 
  #,,y11!
 
 
$ ( 
	!)h!;!;!3"7   	 	D s    # # # =)r   r   r   r   r   int__annotations__r   boolr   r   r   r   r   r    r   r   strr!   r"   r   r   r#   r   r	   rM   r   r   r   r   r      s
        @ @D AsKKK%*d*** %%%% ND    + 1L+111+/OXd3i(///+/OXd3i(///')FHT#s(^$)))!GXc]!!!::*H:	h: : : : : :r   r   )rH   enumr   typingr   r   r   r   langchain_core.callbacksr   langchain_core.documentsr	   langchain_core.retrieversr
   r   r   r   r   r   <module>rW      s    				       , , , , , , , , , , , , C C C C C C - - - - - - 3 3 3 3 3 3    $   G G G G G} G G G G Gr   