§
    è˜ºhR  ã                   óš   — 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	lmZ d
edee
         dedefd„ZdS )é    )ÚSequence)ÚBaseLanguageModel)ÚChatPromptTemplate)ÚRunnableÚRunnablePassthrough)ÚBaseTool)Úformat_log_to_messages)ÚTEMPLATE_TOOL_RESPONSE)ÚJSONAgentOutputParser)Úrender_text_descriptionÚllmÚtoolsÚpromptÚreturnc                 ó†  — 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 JSON to format its logic, build for Chat Models.

    Examples:


        .. code-block:: python

            from langchain import hub
            from langchain_community.chat_models import ChatOpenAI
            from langchain.agents import AgentExecutor, create_json_chat_agent

            prompt = hub.pull("hwchase17/react-chat-json")
            model = ChatOpenAI()
            tools = ...

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

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

            # Using with chat history
            from langchain_core.messages import AIMessage, HumanMessage
            agent_executor.invoke(
                {
                    "input": "what's my name?",
                    "chat_history": [
                        HumanMessage(content="hi! my name is bob"),
                        AIMessage(content="Hello Bob! How can I assist you today?"),
                    ],
                }
            )

    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     úg/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/langchain/agents/json_chat/base.pyú
<listcomp>z*create_json_chat_agent.<locals>.<listcomp>E   s   € Ð4Ð4Ð4¨˜aœfÐ4Ð4Ð4ó    )r   r   z
Observation)Ústopc                 ó:   — t          | d         t          ¬¦  «        S )NÚintermediate_steps)Útemplate_tool_response)r	   r
   )Úxs    r   ú<lambda>z(create_json_chat_agent.<locals>.<lambda>K   s"   € Õ'=ØÐ&Ô'Õ@Vð(ñ (ô (€ r   )r   )Ú
differenceÚinput_variablesÚ
ValueErrorÚpartialr   ÚlistÚjoinÚbindr   Úassignr   )r   r   r   Úmissing_varsÚllm_with_stopÚagents         r   Úcreate_json_chat_agentr-      sø   € ð^ ?Ð>Ð>×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õ 	Ô"ðð ð	
ñ 	
ô 	
ð
 ñ	ð ñ	õ  Ñ
!Ô
!ñ	"ð 
ð €Lr   N)Útypingr   Úlangchain_core.language_modelsr   Úlangchain_core.prompts.chatr   Úlangchain_core.runnablesr   r   Úlangchain_core.toolsr   Ú"langchain.agents.format_scratchpadr	   Ú!langchain.agents.json_chat.promptr
   Úlangchain.agents.output_parsersr   Úlangchain.tools.renderr   r-   r   r   r   ú<module>r7      sú   ðØ Ð Ð Ð Ð Ð à <Ð <Ð <Ð <Ð <Ð <Ø :Ð :Ð :Ð :Ð :Ð :Ø BÐ BÐ BÐ BÐ BÐ BÐ BÐ BØ )Ð )Ð )Ð )Ð )Ð )à EÐ EÐ EÐ EÐ EÐ EØ DÐ DÐ DÐ DÐ DÐ DØ AÐ AÐ AÐ AÐ AÐ AØ :Ð :Ð :Ð :Ð :Ð :ðEØ	ðEØ#+¨HÔ#5ðEØ?QðEàðEð Eð Eð Eð Eð Er   