
    hz
                    h    d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	m
Z
 d dlmZ 	 	 	 	 	 	 	 	 d	dZy)
    )annotations)LanguageModelLike)StrOutputParser)BasePromptTemplate)RetrieverLikeRetrieverOutputLike)RunnableBranchc                    d|j                   vrd|j                    }t        |      t        d d |z  f|| z  t               z  |z        j	                  d      }|S )a  Create a chain that takes conversation history and returns documents.

    If there is no `chat_history`, then the `input` is just passed directly to the
    retriever. If there is `chat_history`, then the prompt and LLM will be used
    to generate a search query. That search query is then passed to the retriever.

    Args:
        llm: Language model to use for generating a search term given chat history
        retriever: RetrieverLike object that takes a string as input and outputs
            a list of Documents.
        prompt: The prompt used to generate the search query for the retriever.

    Returns:
        An LCEL Runnable. The runnable input must take in `input`, and if there
        is chat history should take it in the form of `chat_history`.
        The Runnable output is a list of Documents

    Example:
        .. code-block:: python

            # pip install -U langchain langchain-community

            from langchain_community.chat_models import ChatOpenAI
            from langchain.chains import create_history_aware_retriever
            from langchain import hub

            rephrase_prompt = hub.pull("langchain-ai/chat-langchain-rephrase")
            llm = ChatOpenAI()
            retriever = ...
            chat_retriever_chain = create_history_aware_retriever(
                llm, retriever, rephrase_prompt
            )

            chain.invoke({"input": "...", "chat_history": })

    inputz2Expected `input` to be a prompt variable, but got c                (    | j                  dd       S )Nchat_historyF)getxs    f/var/www/html/eduruby.in/venv/lib/python3.12/site-packages/langchain/chains/history_aware_retriever.py<lambda>z0create_history_aware_retriever.<locals>.<lambda>=   s    !%%66     c                    | d   S )Nr    r   s    r   r   z0create_history_aware_retriever.<locals>.<lambda>?   s
    qz r   chat_retriever_chain)run_name)input_variables
ValueErrorr	   r   with_config)llm	retrieverpromptmsgretrieve_documentss        r   create_history_aware_retrieverr    
   s    R f,,,--.0 	 o.< 7!Y.		
 	((94	/ k1k2  r   N)r   r   r   r   r   r   returnr   )
__future__r   langchain_core.language_modelsr   langchain_core.output_parsersr   langchain_core.promptsr   langchain_core.retrieversr   r   langchain_core.runnablesr	   r    r   r   r   <module>r(      s@    " < 9 5 H 3:	:: : 	:r   