§
    è˜ºhâ  ã                   ón  — d dl Z d dlmZmZmZ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mZ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"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Z- eddd¬¦  «         G d„ de¦  «        ¦   «         Z.dedee*         dedefd„Z/dS )é    N)ÚAnyÚListÚOptionalÚSequenceÚTuple)Ú
deprecated)ÚAgentAction)ÚBaseLanguageModel)ÚBasePromptTemplate)ÚChatPromptTemplateÚHumanMessagePromptTemplateÚSystemMessagePromptTemplate)ÚField)ÚRunnableÚRunnablePassthrough)ÚAgentÚAgentOutputParser©Úformat_log_to_str)ÚJSONAgentOutputParser)Ú%StructuredChatOutputParserWithRetries)ÚFORMAT_INSTRUCTIONSÚPREFIXÚSUFFIX)ÚBaseCallbackManager)ÚLLMChain)ÚBaseTool)Ú render_text_description_and_argsz{input}

{agent_scratchpad}z0.1.0Úcreate_structured_chat_agentz0.2.0)ÚalternativeÚremovalc                   óz  ‡ — e Zd ZU dZ ee¬¦  «        Zeed<   	 e	de
fd„¦   «         Ze	de
fd„¦   «         Zdeeee
f                  de
fˆ fd„Zed	ee         dd
fd„¦   «         Ze	 ddee         dedefd„¦   «         Ze	dee
         fd„¦   «         Zeeeeed
d
fd	ee         de
de
de
de
deee
                  deee                  defd„¦   «         Zed
d
eeeed
d
fded	ee         dee          dee         de
de
de
de
deee
                  deee                  dede!fd„¦   «         Z"e	de
fd„¦   «         Z#ˆ xZ$S )ÚStructuredChatAgentzStructured Chat Agent.)Údefault_factoryÚoutput_parserÚreturnc                 ó   — dS )z&Prefix to append the observation with.zObservation: © ©Úselfs    úm/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/langchain/agents/structured_chat/base.pyÚobservation_prefixz&StructuredChatAgent.observation_prefix(   s	   € ð ˆó    c                 ó   — dS )z#Prefix to append the llm call with.zThought:r(   r)   s    r+   Ú
llm_prefixzStructuredChatAgent.llm_prefix-   s	   € ð ˆzr-   Úintermediate_stepsc                 ó    •— t          ¦   «                              |¦  «        }t          |t          ¦  «        st	          d¦  «        ‚|rd|› �S |S )Nz*agent_scratchpad should be of type string.zhThis was your previous work (but I haven't seen any of it! I only see what you return as final answer):
)ÚsuperÚ_construct_scratchpadÚ
isinstanceÚstrÚ
ValueError)r*   r0   Úagent_scratchpadÚ	__class__s      €r+   r3   z)StructuredChatAgent._construct_scratchpad2   sk   ø€ õ !™7œ7×8Ò8Ð9KÑLÔLÐÝÐ*­CÑ0Ô0ð 	KÝÐIÑJÔJÐJØð 	$ðDà1AðDð Dðð $Ð#r-   ÚtoolsNc                 ó   — d S ©Nr(   )Úclsr9   s     r+   Ú_validate_toolsz#StructuredChatAgent._validate_toolsA   s   € àˆr-   ÚllmÚkwargsc                 ó,   — t          j        |¬¦  «        S )N©r>   )r   Úfrom_llm)r<   r>   r?   s      r+   Ú_get_default_output_parserz.StructuredChatAgent._get_default_output_parserE   s   € õ 5Ô=À#ÐFÑFÔFÐFr-   c                 ó   — dgS )NzObservation:r(   r)   s    r+   Ú_stopzStructuredChatAgent._stopK   s   € àÐÐr-   ÚprefixÚsuffixÚhuman_message_templateÚformat_instructionsÚinput_variablesÚmemory_promptsc                 ó(  — g }|D ]e}	t          j        ddt          j        ddt          |	j        ¦  «        ¦  «        ¦  «        }
|                     |	j        › d|	j        › d|
› �¦  «         Œfd                     |¦  «        }d                     d	„ |D ¦   «         ¦  «        }|                     |¬
¦  «        }d                     ||||g¦  «        }|€ddg}|pg }t          j
        |¦  «        g|¢t          j
        |¦  «        ‘}t          ||¬¦  «        S )NÚ}z}}Ú{z{{z: z, args: ú
ú, c                 ó   — g | ]	}|j         ‘Œ
S r(   ©Úname©Ú.0Útools     r+   ú
<listcomp>z5StructuredChatAgent.create_prompt.<locals>.<listcomp>_   s   € Ð<Ð<Ð<¨d ¤	Ð<Ð<Ð<r-   )Ú
tool_namesz

Úinputr7   )rJ   Úmessages)ÚreÚsubr5   ÚargsÚappendrS   ÚdescriptionÚjoinÚformatr   Úfrom_templater   r   )r<   r9   rF   rG   rH   rI   rJ   rK   Útool_stringsrV   Úargs_schemaÚformatted_toolsrX   ÚtemplateÚ_memory_promptsrZ   s                   r+   Úcreate_promptz!StructuredChatAgent.create_promptO   s;  € ð ˆØð 	Yð 	YˆDÝœ&  d­B¬F°3¸½cÀ$Ä)¹n¼nÑ,MÔ,MÑNÔNˆKØ×Ò 4¤9Ð WÐ W°Ô0@Ð WÐ WÈ+Ð WÐ WÑXÔXÐXÐXØŸ)š) LÑ1Ô1ˆØ—Y’YÐ<Ð<°eÐ<Ñ<Ô<Ñ=Ô=ˆ
Ø1×8Ò8ÀJÐ8ÑOÔOÐØ—;’; ¨Ð9LÈfÐUÑVÔVˆØÐ"Ø&Ð(:Ð;ˆOØ(Ð.¨Bˆå'Ô5°hÑ?Ô?ð
àð
õ 'Ô4Ð5KÑLÔLð
ˆõ
 "°/ÈHÐUÑUÔUÐUr-   Úcallback_managerc           	      óè   — |                       |¦  «         |                      ||||||	|
¬¦  «        }t          |||¬¦  «        }d„ |D ¦   «         }|p|                      |¬¦  «        } | d|||dœ|¤ŽS )z)Construct an agent from an LLM and tools.)rF   rG   rH   rI   rJ   rK   )r>   Úpromptri   c                 ó   — g | ]	}|j         ‘Œ
S r(   rR   rT   s     r+   rW   z:StructuredChatAgent.from_llm_and_tools.<locals>.<listcomp>‹   s   € Ð2Ð2Ð2 D�d”iÐ2Ð2Ð2r-   rA   )Ú	llm_chainÚallowed_toolsr%   r(   )r=   rh   r   rC   )r<   r>   r9   ri   r%   rF   rG   rH   rI   rJ   rK   r?   rk   rm   rX   Ú_output_parsers                   r+   Úfrom_llm_and_toolsz&StructuredChatAgent.from_llm_and_toolsl   sÇ   € ð  	×Ò˜EÑ"Ô"Ð"Ø×"Ò"ØØØØ#9Ø 3Ø+Ø)ð #ñ 
ô 
ˆõ ØØØ-ð
ñ 
ô 
ˆ	ð
 3Ð2¨EÐ2Ñ2Ô2ˆ
Ø&ÐQ¨#×*HÒ*HÈSÐ*HÑ*QÔ*QˆØˆsð 
ØØ$Ø(ð
ð 
ð ð	
ð 
ð 	
r-   c                 ó   — t           ‚r;   )r6   r)   s    r+   Ú_agent_typezStructuredChatAgent._agent_type”   s   € åÐr-   r;   )%Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r%   r   Ú__annotations__Úpropertyr5   r,   r/   r   r   r	   r3   Úclassmethodr   r   r=   r   r
   r   rC   rE   r   r   ÚHUMAN_MESSAGE_TEMPLATEr   r   rh   r   r   rp   rr   Ú__classcell__)r8   s   @r+   r#   r#      s;  ø€ € € € € € à Ð à', uØ=ð(ñ (ô (€MÐ$ð ð ñ ð 'àð Cð ð ð ñ „Xðð ð˜Cð ð ð ñ „Xðð$Ø"& u¨[¸#Ð-=Ô'>Ô"?ð$à	ð$ð $ð $ð $ð $ð $ð ð H¨XÔ$6ð ¸4ð ð ð ñ „[ðð à04ðGð GØÐ,Ô-ðGØ@CðGà	ðGð Gð Gñ „[ðGð
 ð �t˜C”yð  ð  ð  ñ „Xð ð ð ØØ&<Ø#6Ø/3Ø=AðVð Và˜Ô!ðVð ðVð ð	Vð
 !$ðVð !ðVð " $ s¤)Ô,ðVð ! Ð&8Ô!9Ô:ðVð 
ðVð Vð Vñ „[ðVð8 ð
 ;?Ø59ØØØ&<Ø#6Ø/3Ø=Að%
ð %
àð%
ð ˜Ô!ð%
ð #Ð#6Ô7ð	%
ð
  Ð 1Ô2ð%
ð ð%
ð ð%
ð !$ð%
ð !ð%
ð " $ s¤)Ô,ð%
ð ! Ð&8Ô!9Ô:ð%
ð ð%
ð 
ð%
ð %
ð %
ñ „[ð%
ðN ð˜Sð ð ð ñ „Xðð ð ð ð r-   r#   r>   r9   rk   r&   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 aimed at supporting tools with multiple inputs.

    Examples:


        .. code-block:: python

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

            prompt = hub.pull("hwchase17/structured-chat-agent")
            model = ChatOpenAI()
            tools = ...

            agent = create_structured_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.

    >   r9   rX   r7   z#Prompt missing required variables: rP   c                 ó   — g | ]	}|j         ‘Œ
S r(   rR   )rU   Úts     r+   rW   z0create_structured_chat_agent.<locals>.<listcomp>Ð   s   € Ð4Ð4Ð4¨˜aœfÐ4Ð4Ð4r-   )r9   rX   ÚObservation)Ústopc                 ó,   — t          | d         ¦  «        S )Nr0   r   )Úxs    r+   ú<lambda>z.create_structured_chat_agent.<locals>.<lambda>Ö   s   € Õ'8¸Ð;OÔ9PÑ'QÔ'Q€ r-   )r7   )Ú
differencerJ   r6   Úpartialr   Úlistr`   Úbindr   Úassignr   )r>   r9   rk   Úmissing_varsÚllm_with_stopÚagents         r+   r   r   ™   só   € ð^ ?Ð>Ð>×IÒIØÔñô €Lð ð OÝÐM¸|ÐMÐMÑNÔNÐNà�^Š^Ý.­t°E©{¬{Ñ;Ô;Ø—9’9Ð4Ð4¨eÐ4Ñ4Ô4Ñ5Ô5ð ñ ô €Fð —H’H = /�HÑ2Ô2€Mõ 	Ô"ØQÐQð	
ñ 	
ô 	
ð ñ	ð ñ		õ
  Ñ
!Ô
!ñ	"ð 
ð €Lr-   )0r[   Útypingr   r   r   r   r   Úlangchain_core._apir   Úlangchain_core.agentsr	   Úlangchain_core.language_modelsr
   Úlangchain_core.promptsr   Úlangchain_core.prompts.chatr   r   r   Úlangchain_core.pydantic_v1r   Úlangchain_core.runnablesr   r   Úlangchain.agents.agentr   r   Ú"langchain.agents.format_scratchpadr   Úlangchain.agents.output_parsersr   Ú.langchain.agents.structured_chat.output_parserr   Ú'langchain.agents.structured_chat.promptr   r   r   Úlangchain.callbacks.baser   Úlangchain.chains.llmr   Úlangchain.toolsr   Úlangchain.tools.renderr   rz   r#   r   r(   r-   r+   ú<module>r�      sG  ðØ 	€	€	€	Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7à *Ð *Ð *Ð *Ð *Ð *Ø -Ð -Ð -Ð -Ð -Ð -Ø <Ð <Ð <Ð <Ð <Ð <Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5ðð ð ð ð ð ð ð ð ð ð
 -Ð ,Ð ,Ð ,Ð ,Ð ,Ø BÐ BÐ BÐ BÐ BÐ BÐ BÐ Bà ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø @Ð @Ð @Ð @Ð @Ð @Ø AÐ AÐ AÐ AÐ AÐ Aðð ð ð ð ð ð XÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WØ 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø )Ð )Ð )Ð )Ð )Ð )Ø $Ð $Ð $Ð $Ð $Ð $Ø CÐ CÐ CÐ CÐ CÐ Cà8Ð ð €ˆGÐ!?ÈÐQÑQÔQðvð vð vð vð v˜%ñ vô vñ RÔQðvðrCØ	ðCØ#+¨HÔ#5ðCØ?QðCàðCð Cð Cð Cð Cð Cr-   