
    m
id                     .   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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 d dlmZ d dlm Z m!Z!m"Z"m#Z# d dl$m%Z% d dl&m'Z'  eded           G d de                      Z(dS )    )Sequence)Any)
deprecated)AgentAction)BaseCallbackManager)BaseLanguageModel)BasePromptTemplate)ChatPromptTemplateHumanMessagePromptTemplateSystemMessagePromptTemplate)BaseTool)Field)override)AGENT_DEPRECATION_WARNING)AgentAgentOutputParserChatOutputParser)FORMAT_INSTRUCTIONSHUMAN_MESSAGESYSTEM_MESSAGE_PREFIXSYSTEM_MESSAGE_SUFFIX)validate_tools_single_input)LLMChainz0.1.0z1.0)messageremovalc                   &    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ed	edefd
                        Zedee         ddf fd            Ze	dee
         fd            Zeeeeedfdee         de
de
de
de
dee
         dz  defd            Zeddeeeedfdedee         de dz  dedz  de
de
de
de
dee
         dz  d	ede!fd            Z"e	de
fd            Z# xZ$S )	ChatAgentzChat Agent.)default_factoryoutput_parserreturnc                     dS )z&Prefix to append the observation with.zObservation:  selfs    C:\Users\Dell Inspiron 16\Desktop\tws\AgrotaPowerBi\back-agrota-powerbi\mcp-client-agrota\venv\Lib\site-packages\langchain_classic/agents/chat/base.pyobservation_prefixzChatAgent.observation_prefix*   s	         c                     dS )z#Prefix to append the llm call with.zThought:r#   r$   s    r&   
llm_prefixzChatAgent.llm_prefix/   s	     zr(   intermediate_stepsc                     t                                          |          }t          |t                    sd}t	          |          |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%   r+   agent_scratchpadmsg	__class__s       r&   r.   zChatAgent._construct_scratchpad4   sl     !77889KLL*C00 	">CS//! 	D1AD D
  r(   kwargsc                     t                      S Nr   )clsr5   s     r&   _get_default_output_parserz$ChatAgent._get_default_output_parserD   s      !!!r(   toolsNc                 v    t                                          |           t          | j        |           d S )N)
class_namer:   )r-   _validate_toolsr   __name__)r8   r:   r4   s     r&   r=   zChatAgent._validate_toolsI   s6    &&&#s|5IIIIIIr(   c                     dgS )NzObservation:r#   r$   s    r&   _stopzChatAgent._stopN   s    r(   system_message_prefixsystem_message_suffixhuman_messageformat_instructionsinput_variablesc                 B   d                     d |D                       }d                     d |D                       }|                    |          }| d| d| d| }	t          j        |	          t	          j        |          g}
|dd	g}t          ||

          S )a  Create a prompt from a list of tools.

        Args:
            tools: A list of tools.
            system_message_prefix: The system message prefix.
            system_message_suffix: The system message suffix.
            human_message: The `HumanMessage`.
            format_instructions: The format instructions.
            input_variables: The input variables.

        Returns:
            A prompt template.
        
c                 0    g | ]}|j          d |j         S )z: )namedescription.0tools     r&   
<listcomp>z+ChatAgent.create_prompt.<locals>.<listcomp>i   s+    !W!W!WTY"D"D$2B"D"D!W!W!Wr(   z, c                     g | ]	}|j         
S r#   rI   rK   s     r&   rN   z+ChatAgent.create_prompt.<locals>.<listcomp>j   s    <<<d	<<<r(   )
tool_namesz

Ninputr2   )rE   messages)joinformatr   from_templater   r
   )r8   r:   rA   rB   rC   rD   rE   tool_stringsrQ   templaterS   s              r&   create_promptzChatAgent.create_promptR   s    . yy!W!WQV!W!W!WXXYY<<e<<<==
188J8OO$ ' '' '"' ' %' ' 	 (5h??&4]CC
 "&(:;O!/HUUUUr(   llmcallback_managerc
                     |                      |           |                     ||||||	          }t          |||          }d |D             }|p|                                 } | d|||d|
S )a]  Construct an agent from an LLM and tools.

        Args:
            llm: The language model.
            tools: A list of tools.
            callback_manager: The callback manager.
            output_parser: The output parser.
            system_message_prefix: The system message prefix.
            system_message_suffix: The system message suffix.
            human_message: The `HumanMessage`.
            format_instructions: The format instructions.
            input_variables: The input variables.
            kwargs: Additional keyword arguments.

        Returns:
            An agent.
        )rA   rB   rC   rD   rE   )rZ   promptr[   c                     g | ]	}|j         
S r#   rP   rK   s     r&   rN   z0ChatAgent.from_llm_and_tools.<locals>.<listcomp>   s    222Ddi222r(   )	llm_chainallowed_toolsr    r#   )r=   rY   r   r9   )r8   rZ   r:   r[   r    rA   rB   rC   rD   rE   r5   r]   r_   rQ   _output_parsers                  r&   from_llm_and_toolszChatAgent.from_llm_and_toolsz   s    > 	E""""""7"7' 3+ # 
 
 -
 
 
	
 32E222
&J#*H*H*J*Js 
$(
 
 	
 
 	
r(   c                     t           r7   )r1   r$   s    r&   _agent_typezChatAgent._agent_type   s    r(   )%r>   
__module____qualname____doc__r   r   r    r   __annotations__propertyr0   r'   r*   listtupler   r.   classmethodr   r   r9   r   r   r=   r@   r   r   r   r   r	   rY   r   r   r   rb   rd   __classcell__)r4   s   @r&   r   r      s         ',u=M'N'N'NM$NNN&C    X C    X  {C'7!89  
             "# ":K " " " X [" JHX$6 J4 J J J J J [J  tCy       X   &;%:*#6,0%V %V!%V  #%V  #	%V
 %V !%V cT)%V 
%V %V %V [%VN 
 8<26%:%:*#6,03
 3
3
 !3
 .4	3

 )4/3
  #3
  #3
 3
 !3
 cT)3
 3
 
3
 3
 3
 [3
j S    X    r(   r   N))collections.abcr   typingr   langchain_core._apir   langchain_core.agentsr   langchain_core.callbacksr   langchain_core.language_modelsr   langchain_core.promptsr	   langchain_core.prompts.chatr
   r   r   langchain_core.toolsr   pydanticr   typing_extensionsr   "langchain_classic._api.deprecationr   langchain_classic.agents.agentr   r   +langchain_classic.agents.chat.output_parserr   $langchain_classic.agents.chat.promptr   r   r   r   langchain_classic.agents.utilsr   langchain_classic.chains.llmr   r   r#   r(   r&   <module>r      s   $ $ $ $ $ $       * * * * * * - - - - - - 8 8 8 8 8 8 < < < < < < 5 5 5 5 5 5         
 * ) ) ) ) )       & & & & & & H H H H H H C C C C C C C C H H H H H H            G F F F F F 1 1 1 1 1 1 %  
N N N N N N N 
N N Nr(   