a
    bg0                     @   st   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 deZG d	d
 d
eZdS )    N)Enum)AnyDictListOptional)CallbackManagerForRetrieverRun)Document)BaseRetrieverc                   @   s   e Zd ZdZdZdZdS )SearchDepthzSearch depth as enumerator.basicZadvancedN)__name__
__module____qualname____doc__BASICZADVANCED r   r   ~/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/langchain_community/retrievers/tavily_search_api.pyr
   
   s   r
   c                   @   s   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< eeee dd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                   s   z4zddl m} W n ty0   ddl m} Y n0 W n tyN   tdY n0 |jp`tjd d}jsrjnjd }|j	f ||j
jjjjjjdj  fd	d
 dD }jrt ddddddg|}|S )Nr   )TavilyClient)ClientzTTavily python package not found. Please install it with `pip install tavily-python`.ZTAVILY_API_KEY)r      )r   max_resultsr   Zinclude_answerr   r   r   r   c              	      sh   g | ]`}t js|d dn
|dd|dd|ddddd | D d did	qS )
content raw_contenttitleurlr(   sourcec                 S   s   i | ]\}}|d vr||qS ))r%   r(   r)   r'   r   ).0r   vr   r   r   
<dictcomp>   s   zOTavilySearchAPIRetriever._get_relevant_documents.<locals>.<listcomp>.<dictcomp>ZimagesZpage_contentmetadata)r   r   getitems)r,   resultresponseselfr   r   
<listcomp>z   s   



zDTavilySearchAPIRetriever._get_relevant_documents.<locals>.<listcomp>resultsZanswerr&   zSuggested Answerzhttps://tavily.com/r*   r/   )tavilyr!   ImportErrorr"   r   osenvironr   r   searchr   valuer   r   r   r   r   r1   r   )r6   r   r   r!   r9   r$   docsr   r4   r   _get_relevant_documents^   sJ    
	
z0TavilySearchAPIRetriever._get_relevant_documents)r   r   r   r   r   int__annotations__r   boolr   r   r
   r   r   r   r   r   strr   r   r   r   r   r   r   r@   r   r   r   r   r      s   
Br   )r;   enumr   typingr   r   r   r   Zlangchain_core.callbacksr   Zlangchain_core.documentsr   Zlangchain_core.retrieversr	   r
   r   r   r   r   r   <module>   s   