§
    è˜º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lmZ d dlmZ d d	lmZ dd„ZdS )é    )Úannotations)ÚSequence)ÚBaseLanguageModel)ÚBasePromptTemplate)ÚRunnableÚRunnablePassthrough)ÚBaseTool©Úformat_log_to_str)ÚReActSingleInputOutputParser)Úrender_text_descriptionÚllmr   ÚtoolsúSequence[BaseTool]Úpromptr   Úreturnr   c                ó†  — h d£                      |j        ¦  «        }|rt          d|› �¦  «        ‚|                     t	          t          |¦  «        ¦  «        d                     d„ |D ¦   «         ¦  «        ¬¦  «        }|                      dg¬¦  «        }t          j	        d„ ¬	¦  «        |z  |z  t          ¦   «         z  }|S )
a™  Create an agent that uses ReAct prompting.

    Examples:

        .. code-block:: python

            from langchain import hub
            from langchain_community.llms import OpenAI
            from langchain.agents import AgentExecutor, create_react_agent

            prompt = hub.pull("hwchase17/react")
            model = OpenAI()
            tools = ...

            agent = create_react_agent(model, tools, prompt)
            agent_executor = AgentExecutor(agent=agent, tools=tools)

            agent_executor.invoke({"input": "hi"})

            # Use with chat history
            from langchain_core.messages import AIMessage, HumanMessage
            agent_executor.invoke(
                {
                    "input": "what's my name?",
                    # Notice that chat_history is a string
                    # since this prompt is aimed at LLMs, not chat models
                    "chat_history": "Human: My name is Bob
AI: Hello Bob!",
                }
            )

    Args:
        llm: LLM to use as the agent.
        tools: Tools this agent has access to.
        prompt: The prompt to use, must have input keys of
            `tools`, `tool_names`, and `agent_scratchpad`.

    Returns:
        A runnable sequence representing an agent. It takes as input all the same input
        variables as the prompt passed in does. It returns as output either an
        AgentAction or AgentFinish.

    >   r   Ú
tool_namesÚagent_scratchpadz#Prompt missing required variables: z, c                ó   — g | ]	}|j         ‘Œ
S © )Úname)Ú.0Úts     úd/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/langchain/agents/react/agent.pyú
<listcomp>z&create_react_agent.<locals>.<listcomp>D   s   € Ð4Ð4Ð4¨˜aœfÐ4Ð4Ð4ó    )r   r   z
Observation)Ústopc                ó,   — t          | d         ¦  «        S )NÚintermediate_stepsr
   )Úxs    r   ú<lambda>z$create_react_agent.<locals>.<lambda>I   s   € Õ'8¸Ð;OÔ9PÑ'QÔ'Q€ r   )r   )Ú
differenceÚinput_variablesÚ
ValueErrorÚpartialr   ÚlistÚjoinÚbindr   Úassignr   )r   r   r   Úmissing_varsÚllm_with_stopÚagents         r   Úcreate_react_agentr.      sò   € ðZ ?Ð>Ð>×IÒIØÔñô €Lð ð OÝÐM¸|ÐMÐMÑNÔNÐNà�^Š^Ý%¥d¨5¡k¤kÑ2Ô2Ø—9’9Ð4Ð4¨eÐ4Ñ4Ô4Ñ5Ô5ð ñ ô €Fð —H’H ?Ð"3�HÑ4Ô4€MåÔ"ØQÐQð	
ñ 	
ô 	
ð ñ	ð ñ		õ
 'Ñ
(Ô
(ñ	)ð 
ð €Lr   N)r   r   r   r   r   r   r   r   )Ú
__future__r   Útypingr   Úlangchain_core.language_modelsr   Úlangchain_core.promptsr   Úlangchain_core.runnablesr   r   Úlangchain_core.toolsr	   Ú"langchain.agents.format_scratchpadr   Úlangchain.agents.output_parsersr   Úlangchain.tools.renderr   r.   r   r   r   ú<module>r8      sÑ   ðØ "Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ð Ð à <Ð <Ð <Ð <Ð <Ð <Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø BÐ BÐ BÐ BÐ BÐ BÐ BÐ BØ )Ð )Ð )Ð )Ð )Ð )à @Ð @Ð @Ð @Ð @Ð @Ø HÐ HÐ HÐ HÐ HÐ HØ :Ð :Ð :Ð :Ð :Ð :ð@ð @ð @ð @ð @ð @r   