§
    è˜ºh°  ã                   ó>  — d dl mZmZmZmZ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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 dlm Z  d dl!m"Z" d dl#m$Z$  eddd¬¦  «         G d„ de¦  «        ¦   «         Z%dedee         dedefd„Z&dS )é    )ÚAnyÚListÚSequenceÚTupleÚUnion)Ú
deprecated)ÚAgentActionÚAgentFinish)ÚBaseLanguageModel)ÚBasePromptTemplate)ÚAIMessagePromptTemplateÚChatPromptTemplate)ÚRunnableÚRunnablePassthrough)ÚBaseTool)ÚBaseSingleActionAgent©Ú
format_xml©ÚXMLAgentOutputParser)Úagent_instructions)Ú	Callbacks)ÚLLMChain)Úrender_text_descriptionz0.1.0Úcreate_xml_agentz0.2.0)ÚalternativeÚremovalc                   ó(  — e Zd ZU dZee         ed<   	 eed<   	 edee	         fd„¦   «         Z
edefd„¦   «         Zedefd„¦   «         Z	 dd	eeee	f                  d
ededeeef         fd„Z	 dd	eeee	f                  d
ededeeef         fd„ZdS )ÚXMLAgentaO  Agent that uses XML tags.

    Args:
        tools: list of tools the agent can choose from
        llm_chain: The LLMChain to call to predict the next action

    Examples:

        .. code-block:: python

            from langchain.agents import XMLAgent
            from langchain

            tools = ...
            model =


    ÚtoolsÚ	llm_chainÚreturnc                 ó   — dgS )NÚinput© )Úselfs    úa/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/langchain/agents/xml/base.pyÚ
input_keyszXMLAgent.input_keys.   s
   € àˆyÐó    c                  ób   — t          j        t          ¦  «        } | t          j        d¦  «        z   S )Nz{intermediate_steps})r   Úfrom_templater   r   )Úbase_prompts    r'   Úget_default_promptzXMLAgent.get_default_prompt2   s3   € å(Ô6Õ7IÑJÔJˆØÕ4ÔBØ"ñ
ô 
ñ 
ð 	
r)   c                  ó   — t          ¦   «         S ©Nr   r%   r)   r'   Úget_default_output_parserz"XMLAgent.get_default_output_parser9   s   € å#Ñ%Ô%Ð%r)   NÚintermediate_stepsÚ	callbacksÚkwargsc           	      óú   — d}|D ]\  }}|d|j         › d|j        › d|› d�z  }Œd}| j        D ]}||j        › d|j        › d�z  }Œ|||d         d	d
gdœ}	|                      |	|¬¦  «        }
|
| j        j                 S ©NÚ z<tool>z</tool><tool_input>z</tool_input><observation>z</observation>z: ú
r$   ú</tool_input>z</final_answer>)r1   r    ÚquestionÚstop)r2   )ÚtoolÚ
tool_inputr    ÚnameÚdescriptionr!   Ú
output_key©r&   r1   r2   r3   ÚlogÚactionÚobservationr    r;   ÚinputsÚresponses              r'   ÚplanzXMLAgent.plan=   sè   € ð ˆØ#5ð 	ð 	ÑˆF�KØðI˜œð Ið I¸Ô9Jð Ið IØ-8ðIð Ið IñˆCˆCð ˆØ”Jð 	:ð 	:ˆDØ˜œ	Ð9Ð9 TÔ%5Ð9Ð9Ð9Ñ9ˆEˆEà"%ØØ˜wœØ$Ð&7Ð8ð	
ð 
ˆð —>’> &°I�>Ñ>Ô>ˆØ˜œÔ1Ô2Ð2r)   c           	   ‹   ó  K  — d}|D ]\  }}|d|j         › d|j        › d|› d�z  }Œd}| j        D ]}||j        › d|j        › d�z  }Œ|||d         d	d
gdœ}	| j                             |	|¬¦  «        ƒ d {V —†}
|
| j        j                 S r5   )r;   r<   r    r=   r>   r!   Úacallr?   r@   s              r'   ÚaplanzXMLAgent.aplanU   s  è è € ð ˆØ#5ð 	ð 	ÑˆF�KØðI˜œð Ið I¸Ô9Jð Ið IØ-8ðIð Ið IñˆCˆCð ˆØ”Jð 	:ð 	:ˆDØ˜œ	Ð9Ð9 TÔ%5Ð9Ð9Ð9Ñ9ˆEˆEà"%ØØ˜wœØ$Ð&7Ð8ð	
ð 
ˆð œ×-Ò-¨fÀ	Ð-ÑJÔJÐJÐJÐJÐJÐJÐJˆØ˜œÔ1Ô2Ð2r)   r/   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   Ú__annotations__r   ÚpropertyÚstrr(   Ústaticmethodr   r-   r   r0   r   r	   r   r   r   r
   rF   rI   r%   r)   r'   r   r      sw  € € € € € € ðð ð& �Œ>ÐÐÑØ1ØÐÐÑØ)àð˜D œIð ð ð ñ „Xðð ð
Ð 2ð 
ð 
ð 
ñ „\ð
ð ð&Ð';ð &ð &ð &ñ „\ð&ð  $ð3ð 3à   {°CÐ'7Ô!8Ô9ð3ð ð3ð ð	3ð
 
ˆ{˜KÐ'Ô	(ð3ð 3ð 3ð 3ð6  $ð3ð 3à   {°CÐ'7Ô!8Ô9ð3ð ð3ð ð	3ð
 
ˆ{˜KÐ'Ô	(ð3ð 3ð 3ð 3ð 3ð 3r)   r   Úllmr    Úpromptr"   c                 óJ  — ddh                      |j        ¦  «        }|rt          d|› �¦  «        ‚|                     t	          t          |¦  «        ¦  «        ¬¦  «        }|                      dg¬¦  «        }t          j        d„ ¬¦  «        |z  |z  t          ¦   «         z  }|S )	a®  Create an agent that uses XML to format its logic.

    Examples:


        .. code-block:: python

            from langchain import hub
            from langchain_community.chat_models import ChatAnthropic
            from langchain.agents import AgentExecutor, create_xml_agent

            prompt = hub.pull("hwchase17/xml-agent-convo")
            model = ChatAnthropic()
            tools = ...

            agent = create_xml_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` 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    Úagent_scratchpadz#Prompt missing required variables: )r    r8   )r:   c                 ó,   — t          | d         ¦  «        S )Nr1   r   )Úxs    r'   ú<lambda>z"create_xml_agent.<locals>.<lambda>§   s   € ¥z°!Ð4HÔ2IÑ'JÔ'J€ r)   )rU   )
Ú
differenceÚinput_variablesÚ
ValueErrorÚpartialr   ÚlistÚbindr   Úassignr   )rR   r    rS   Úmissing_varsÚllm_with_stopÚagents         r'   r   r   n   sÏ   € ð\ Ð/Ð0×;Ò;¸FÔ<RÑSÔS€LØð OÝÐM¸|ÐMÐMÑNÔNÐNà�^Š^Ý%¥d¨5¡k¤kÑ2Ô2ð ñ ô €Fð —H’H ?Ð"3�HÑ4Ô4€Mõ 	Ô"ØJÐJð	
ñ 	
ô 	
ð ñ	ð ñ		õ
 Ñ
 Ô
 ñ	!ð 
ð €Lr)   N)'Útypingr   r   r   r   r   Úlangchain_core._apir   Úlangchain_core.agentsr	   r
   Úlangchain_core.language_modelsr   Úlangchain_core.prompts.baser   Úlangchain_core.prompts.chatr   r   Úlangchain_core.runnablesr   r   Úlangchain_core.toolsr   Úlangchain.agents.agentr   Ú"langchain.agents.format_scratchpadr   Úlangchain.agents.output_parsersr   Úlangchain.agents.xml.promptr   Úlangchain.callbacks.baser   Úlangchain.chains.llmr   Úlangchain.tools.renderr   r   r   r%   r)   r'   ú<module>rr      sÔ  ðØ 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4à *Ð *Ð *Ð *Ð *Ð *Ø :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ø <Ð <Ð <Ð <Ð <Ð <Ø :Ð :Ð :Ð :Ð :Ð :Ø SÐ SÐ SÐ SÐ SÐ SÐ SÐ SØ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BØ )Ð )Ð )Ð )Ð )Ð )à 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø @Ð @Ð @Ð @Ð @Ð @Ø :Ð :Ð :Ð :Ð :Ð :Ø .Ð .Ð .Ð .Ð .Ð .Ø )Ð )Ð )Ð )Ð )Ð )Ø :Ð :Ð :Ð :Ð :Ð :ð €ˆGÐ!3¸WÐEÑEÔEðV3ð V3ð V3ð V3ð V3Ð$ñ V3ô V3ñ FÔEðV3ðr?Ø	ð?Ø#+¨HÔ#5ð?Ø?Qð?àð?ð ?ð ?ð ?ð ?ð ?r)   