
    Ngf
                    Z    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dS )    )annotations)LanguageModelLike)StrOutputParser)BasePromptTemplate)RetrieverLikeRetrieverOutputLike)RunnableBranchllmr   	retrieverr   promptr   returnr   c                    d|j         vrt          d|j                    t          d d |z  f|| z  t                      z  |z                                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                0    |                      dd           S )Nchat_historyF)getxs    d/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain/chains/history_aware_retriever.py<lambda>z0create_history_aware_retriever.<locals>.<lambda><   s    !%%6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)r
   r   r   retrieve_documentss       r   create_history_aware_retrieverr    
   s    R f,,,0-0 0
 
 	

 /= 76!!Y.		
 	(((94	/ 	/ k1k22  r   N)r
   r   r   r   r   r   r   r   )
__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 9 9 9 9 9 5 5 5 5 5 5 H H H H H H H H 3 3 3 3 3 39 9 9 9 9 9r   