[docs]defcreate_history_aware_retriever(llm:LanguageModelLike,retriever:RetrieverLike,prompt:BasePromptTemplate,)->RetrieverOutputLike:"""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": }) """if"input"notinprompt.input_variables:raiseValueError("Expected `input` to be a prompt variable, "f"but got {prompt.input_variables}")retrieve_documents:RetrieverOutputLike=RunnableBranch((# Both empty string and empty list evaluate to Falselambdax:notx.get("chat_history",False),# If no chat history, then we just pass input to retriever(lambdax:x["input"])|retriever,),# If chat history, then we pass inputs to LLM chain, then to retrieverprompt|llm|StrOutputParser()|retriever,).with_config(run_name="chat_retriever_chain")returnretrieve_documents