
    h                    Z   d Z ddlmZ ddlZddlZddlZddlZddlZddl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mZmZmZ ddlZddlmZ dd	lmZmZmZ dd
lmZ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. ddl/m0Z0 ddl1m2Z2 ddl3m4Z4m5Z5m6Z6 ddl7m8Z8 ddl9m:Z: ddl;m<Z< ddl=m>Z>m?Z?m@Z@ ddlAmBZBmCZC ddlDmEZE ddlFmGZG ddlHmIZI ddlJmKZK ddlLmMZM ddlNmOZO ddlPmQZQ  ej                  eS      ZT G d d e>      ZU G d! d"e>      ZV G d# d$e,eeef            ZW G d% d&e,eeXe   ef            ZY G d' d(eU      ZZ G d) d*eV      Z[ ed+eEd,-       G d. d/eU             Z\ ed+eEd,-       G d0 d1eU             Z] G d2 d3e:      Z^eXeeeef      Z_eeZe[f   Z` G d4 d5eM      Zay)6zEChain that takes in an input and produces an action and action input.    )annotationsN)abstractmethod)AsyncIteratorIteratorSequence)Path)AnyCallableOptionalUnioncast)
deprecated)AgentActionAgentFinish	AgentStep)AsyncCallbackManagerForChainRunAsyncCallbackManagerForToolRunBaseCallbackManagerCallbackManagerForChainRunCallbackManagerForToolRun	Callbacks)OutputParserException)BaseLanguageModel)BaseMessage)BaseOutputParser)BasePromptTemplate)FewShotPromptTemplate)PromptTemplate)RunnableRunnableConfigensure_config)AddableDict)BaseTool)get_color_mapping)	BaseModel
ConfigDictmodel_validator)Selfoverride)AGENT_DEPRECATION_WARNING)AgentExecutorIterator)	AgentType)InvalidTool)Chain)LLMChain)asyncio_timeoutc                      e Zd ZdZedd       ZddZe	 d	 	 	 	 	 	 	 dd       Ze	 d	 	 	 	 	 	 	 dd       Z	eedd              Z
	 	 	 	 	 	 	 	 ddZe	 d	 	 	 	 	 	 	 	 	 dd       Zedd	       Zd fd
ZddZddZ xZS )BaseSingleActionAgentzBase Single Action Agent class.c                    dgS Return values of the agent.output selfs    T/var/www/html/eduruby.in/venv/lib/python3.12/site-packages/langchain/agents/agent.pyreturn_valuesz#BaseSingleActionAgent.return_values=        z    c                     y Nr7   r8   s    r:   get_allowed_toolsz'BaseSingleActionAgent.get_allowed_toolsB   s    r=   c                     y)0  Given input, decided what to do.

        Args:
            intermediate_steps: Steps the LLM has taken to date,
                along with observations.
            callbacks: Callbacks to run.
            **kwargs: User inputs.

        Returns:
            Action specifying what tool to use.
        Nr7   r9   intermediate_steps	callbackskwargss       r:   planzBaseSingleActionAgent.planE       r=   c                   K   yw)6  Async given input, decided what to do.

        Args:
            intermediate_steps: Steps the LLM has taken to date,
                along with observations.
            callbacks: Callbacks to run.
            **kwargs: User inputs.

        Returns:
            Action specifying what tool to use.
        Nr7   rC   s       r:   aplanzBaseSingleActionAgent.aplanX           c                     y7Return the input keys.

        :meta private:
        Nr7   r8   s    r:   
input_keysz BaseSingleActionAgent.input_keysk   rH   r=   c                J    |dk(  rt        ddid      S d| d}t        |      )  Return response when agent has been stopped due to max iterations.

        Args:
            early_stopping_method: Method to use for early stopping.
            intermediate_steps: Steps the LLM has taken to date,
                along with observations.
            **kwargs: User inputs.

        Returns:
            AgentFinish: Agent finish object.

        Raises:
            ValueError: If `early_stopping_method` is not supported.
        forcer6   3Agent stopped due to iteration limit or time limit. 'Got unsupported early_stopping_method ``r   
ValueErrorr9   early_stopping_methodrD   rF   msgs        r:   return_stopped_responsez-BaseSingleActionAgent.return_stopped_responses   sA    ( !G+PQ  88M7NaPor=   c                    t         )a.  Construct an agent from an LLM and tools.

        Args:
            llm: Language model to use.
            tools: Tools to use.
            callback_manager: Callback manager to use.
            kwargs: Additional arguments.

        Returns:
            BaseSingleActionAgent: Agent object.
        NotImplementedError)clsllmtoolscallback_managerrF   s        r:   from_llm_and_toolsz(BaseSingleActionAgent.from_llm_and_tools   s
    & "!r=   c                    t         z#Return Identifier of an agent type.r`   r8   s    r:   _agent_typez!BaseSingleActionAgent._agent_type   
     "!r=   c                    t         |          }	 | j                  }t	        |t
              rt        |j                        |d<   |S |||d<   |S # t        $ r d}Y @w xY w)z{Return dictionary representation of agent.

        Returns:
            Dict: Dictionary representation of agent.
        N_type)super
model_dumpri   ra   
isinstancer,   strvalue)r9   rF   _dictrl   	__class__s       r:   dictzBaseSingleActionAgent.dict   ss     "$	$$E eY' -E'N  "E'N # 	E	s   A AAc                4   t        |t              rt        |      n|}|j                  }|j	                  dd       | j                         }d|vrd|  d}t        |      |j                  dk(  r3|j                  d      5 }t        j                  ||d	       d
d
d
       y
|j                  j                  d      r3|j                  d      5 }t        j                  ||d       d
d
d
       y
| d}t        |      # 1 sw Y   y
xY w# 1 sw Y   y
xY w)zSave the agent.

        Args:
            file_path: Path to file to save the agent to.

        Example:
        .. code-block:: python

            # If working with agent executor
            agent.agent.save(file_path="path/agent.yaml")
        Tparentsexist_okrl   Agent z does not support saving.jsonw   indentNz.yamlz.ymlFdefault_flow_style must be json or yaml)ro   rp   r   parentmkdirrt   ra   suffixopenjsondumpendswithyamlrZ   )r9   	file_path	save_pathdirectory_path
agent_dictr]   fs          r:   savezBaseSingleActionAgent.save   s    (2)S'ADOy	"))TD9 YY[
*$4& 89C%c**w&$ 3		*a23 3&&'89$ C		*aEBC C K45CS/!3 3C C   DDDDc                    i S #Return logging kwargs for tool run.r7   r8   s    r:   tool_run_logging_kwargsz-BaseSingleActionAgent.tool_run_logging_kwargs   s    	r=   return	list[str]r   Optional[list[str]]r?   rD   list[tuple[AgentAction, str]]rE   r   rF   r	   r   Union[AgentAction, AgentFinish]r\   rp   rD   r   rF   r	   r   r   )
rc   r   rd   Sequence[BaseTool]re   Optional[BaseCallbackManager]rF   r	   r   r2   r   rp   rF   r	   r   builtins.dictr   zUnion[Path, str]r   Noner   r   )__name__
__module____qualname____doc__propertyr;   r@   r   rG   rK   rQ   r^   classmethodrf   ri   rt   r   r   __classcell__rs   s   @r:   r2   r2   :   sO   )    $9  	
 
) $   $9  	
 
) $   " : 	
 
: 
 ;?	"" "" 8	"
 " 
" "( " "" "Dr=   r2   c                       e Zd ZdZedd       ZddZe	 d	 	 	 	 	 	 	 dd       Ze	 d	 	 	 	 	 	 	 dd       Z	eedd              Z
	 	 	 	 	 	 	 	 ddZedd       Zd fd	Zdd
ZddZ xZS )BaseMultiActionAgentzBase Multi Action Agent class.c                    dgS r4   r7   r8   s    r:   r;   z"BaseMultiActionAgent.return_values   r<   r=   c                     y)z]Get allowed tools.

        Returns:
            Optional[List[str]]: Allowed tools.
        Nr7   r8   s    r:   r@   z&BaseMultiActionAgent.get_allowed_tools   s     r=   c                     y)a5  Given input, decided what to do.

        Args:
            intermediate_steps: Steps the LLM has taken to date,
                along with the observations.
            callbacks: Callbacks to run.
            **kwargs: User inputs.

        Returns:
            Actions specifying what tool to use.
        Nr7   rC   s       r:   rG   zBaseMultiActionAgent.plan   rH   r=   c                   K   yw)a;  Async given input, decided what to do.

        Args:
            intermediate_steps: Steps the LLM has taken to date,
                along with the observations.
            callbacks: Callbacks to run.
            **kwargs: User inputs.

        Returns:
            Actions specifying what tool to use.
        Nr7   rC   s       r:   rK   zBaseMultiActionAgent.aplan  rL   rM   c                     yrO   r7   r8   s    r:   rQ   zBaseMultiActionAgent.input_keys  rH   r=   c                J    |dk(  rt        ddid      S d| d}t        |      )rS   rT   r6   z$Agent stopped due to max iterations.rV   rW   rX   rY   r[   s        r:   r^   z,BaseMultiActionAgent.return_stopped_response   s:    ( !G+*PQSUVV78M7NaPor=   c                    t         rh   r`   r8   s    r:   ri   z BaseMultiActionAgent._agent_type:  rj   r=   c                    t         |          }t        j                  t              5  t        | j                        |d<   ddd       |S # 1 sw Y   |S xY w)*Return dictionary representation of agent.rl   N)rm   rn   
contextlibsuppressra   rp   ri   r9   rF   rr   rs   s      r:   rt   zBaseMultiActionAgent.dict?  sM    "$  !45 	3 !1!12E'N	3	3s   AAc                4   t        |t              rt        |      n|}| j                         }d|vrd|  d}t	        |      |j
                  }|j                  dd       |j                  dk(  r3|j                  d      5 }t        j                  ||d	       d
d
d
       y
|j                  j                  d      r3|j                  d      5 }t        j                  ||d       d
d
d
       y
| d}t        |      # 1 sw Y   y
xY w# 1 sw Y   y
xY w)a  Save the agent.

        Args:
            file_path: Path to file to save the agent to.

        Raises:
            NotImplementedError: If agent does not support saving.
            ValueError: If file_path is not json or yaml.

        Example:
        .. code-block:: python

            # If working with agent executor
            agent.agent.save(file_path="path/agent.yaml")
        rl   ry   z does not support saving.Trv   rz   r{   r|   r}   Nr   Fr   r   )ro   rp   r   rt   ra   r   r   r   r   r   r   r   r   rZ   )r9   r   r   r   r]   r   r   s          r:   r   zBaseMultiActionAgent.saveF  s   " (2)S'ADOy	 YY[
*$4& 9:C%c**"))TD9w&$ 3		*a23 3&&'89$ C		*aEBC C K45CS/!3 3C Cr   c                    i S r   r7   r8   s    r:   r   z,BaseMultiActionAgent.tool_run_logging_kwargsl  s	     	r=   r   r   r?   rD   r   rE   r   rF   r	   r   %Union[list[AgentAction], AgentFinish]r   r   r   r   r   )r   r   r   r   r   r;   r@   r   rG   rK   rQ   r^   ri   rt   r   r   r   r   s   @r:   r   r      s   (    $9  	
 
/ $   $9  	
 
/ $   " : 	
 
4 " "$"Lr=   r   c                  "    e Zd ZdZedd       Zy)AgentOutputParserz=Base class for parsing agent output into agent action/finish.c                     y)z$Parse text into agent action/finish.Nr7   r9   texts     r:   parsezAgentOutputParser.parseu  rH   r=   N)r   rp   r   r   r   r   r   r   r   r   r7   r=   r:   r   r   r  s    G3 3r=   r   c                  "    e Zd ZdZedd       Zy)MultiActionAgentOutputParserzBase class for parsing agent output into agent actions/finish.

    This is used for agents that can return multiple actions.
    c                     y)zParse text into agent actions/finish.

        Args:
            text: Text to parse.

        Returns:
            Union[List[AgentAction], AgentFinish]:
                List of agent actions or agent finish.
        Nr7   r   s     r:   r   z"MultiActionAgentOutputParser.parse  rH   r=   N)r   rp   r   r   r   r7   r=   r:   r   r   z  s    
 	 	r=   r   c                      e Zd ZU dZded<   	 g Zded<   g Zded<   dZded	<   	  ed
      Z	e
dd       Ze
dd       Z	 d	 	 	 	 	 	 	 ddZ	 d	 	 	 	 	 	 	 ddZy)RunnableAgentAgent powered by Runnables.z/Runnable[dict, Union[AgentAction, AgentFinish]]runnabler   input_keys_argreturn_keys_argTboolstream_runnablearbitrary_types_allowedc                    | j                   S r5   r   r8   s    r:   r;   zRunnableAgent.return_values       ###r=   c                    | j                   S )zReturn the input keys.r   r8   s    r:   rQ   zRunnableAgent.input_keys  s     """r=   Nc                    i |d|i}d}| j                   r0| j                  j                  |d|i      D ]  }||}||z  } |S | j                  j                  |d|i      }|S aP  Based on past history and current inputs, decide what to do.

        Args:
            intermediate_steps: Steps the LLM has taken to date,
                along with the observations.
            callbacks: Callbacks to run.
            **kwargs: User inputs.

        Returns:
            Action specifying what tool to use.
        rD   NrE   configr   r   streaminvoker9   rD   rE   rF   inputsfinal_outputchunks          r:   rG   zRunnableAgent.plan  s    " FFE02DE  --fk9=U-V *'#(L E)L	*   ==//Y?W/XLr=   c                   K   i |d|i}d}| j                   r3| j                  j                  |d|i      2 3 d{   }||}||z  }| j                  j                  |d|i       d{   }|S 7 86 |S 7 waR  Async based on past history and current inputs, decide what to do.

        Args:
            intermediate_steps: Steps the LLM has taken to date,
                along with observations.
            callbacks: Callbacks to run.
            **kwargs: User inputs.

        Returns:
            Action specifying what tool to use.
        rD   NrE   r   r   r   astreamainvoker   s          r:   rK   zRunnableAgent.aplan  s     ( FFE02DE   $}}44#Y/  5   * *e  '#(L E)L!%!6!6#Y/ "7 " L *   	2   6A<A7A5A7 .A<.A:/A<5A77A<r   r?   r   r   r   r   r   __annotations__r   r   r   r&   model_configr   r;   rQ   rG   rK   r7   r=   r:   r   r     s    %==/ "NI"!#OY# OT   $L $ $ # #  $"9" " 	"
 
)"N  $*9* * 	*

*r=   r   c                      e Zd ZU dZded<   	 g Zded<   g Zded<   dZded	<   	  ed
      Z	e
dd       Ze
dd       Z	 d	 	 	 	 	 	 	 ddZ	 d	 	 	 	 	 	 	 ddZy)RunnableMultiActionAgentr   z5Runnable[dict, Union[list[AgentAction], AgentFinish]]r   r   r   r   Tr   r   r   c                    | j                   S r   r   r8   s    r:   r;   z&RunnableMultiActionAgent.return_values  r   r=   c                    | j                   S )QReturn the input keys.

        Returns:
            List of input keys.
        r   r8   s    r:   rQ   z#RunnableMultiActionAgent.input_keys  s     """r=   Nc                    i |d|i}d}| j                   r0| j                  j                  |d|i      D ]  }||}||z  } |S | j                  j                  |d|i      }|S r   r   r   s          r:   rG   zRunnableMultiActionAgent.plan   s    ( FFE02DE  --fk9=U-V *'#(L E)L	*   ==//Y?W/XLr=   c                   K   i |d|i}d}| j                   r3| j                  j                  |d|i      2 3 d{   }||}||z  }| j                  j                  |d|i       d{   }|S 7 86 |S 7 wr   r   r   s          r:   rK   zRunnableMultiActionAgent.aplanG  s     ( FFE02DE   $}}44#Y/  5   * *e  '#(L E)L!%!6!6#Y/ "7 " L
 *   r   r   r?   r   r   r7   r=   r:   r   r     s    %CC0 "NI"!#OY# OT   $L $ $ # #  $%9% % 	%

%T  $+9+ + 	+

+r=   r   z0.1.0z1.0)messageremovalc                       e Zd ZU dZded<   	 ded<   	 ded<   	 edd       Zd fd	Z	 d	 	 	 	 	 	 	 dd
Z	 d	 	 	 	 	 	 	 ddZ	ddZ
 xZS )LLMSingleActionAgentz$Base class for single action agents.r/   	llm_chainr   output_parserr   stopc                Z    t        t        | j                  j                        dhz
        S )r   rD   listsetr   rQ   r8   s    r:   rQ   zLLMSingleActionAgent.input_keys  s'     C1126J5KKLLr=   c                *    t         |          }|d= |S r   r   rm   rt   r   s      r:   rt   zLLMSingleActionAgent.dict      /"r=   c                     | j                   j                  d|| j                  |d|}| j                  j	                  |      S )a4  Given input, decided what to do.

        Args:
            intermediate_steps: Steps the LLM has taken to date,
                along with the observations.
            callbacks: Callbacks to run.
            **kwargs: User inputs.

        Returns:
            Action specifying what tool to use.
        rD   r   rE   r7   )r   runr   r   r   r9   rD   rE   rF   r6   s        r:   rG   zLLMSingleActionAgent.plan  sO    " $## 
1
 	
 !!''//r=   c                   K    | j                   j                  d|| j                  |d| d{   }| j                  j	                  |      S 7 w)rJ   r  Nr7   )r   arunr   r   r   r  s        r:   rK   zLLMSingleActionAgent.aplan  s]     " +t~~** 
1
 	
 
 !!''//
s   .AA Ac                ^    dt        | j                        dk(  rddS | j                  d   dS )r   rV   r   
llm_prefixobservation_prefix)lenr   r8   s    r:   r   z,LLMSingleActionAgent.tool_run_logging_kwargs  s8     (+DII!(;"
 	
AE1
 	
r=   r   r   r?   r   r   )r   r   r   r   r   r   rQ   rt   rG   rK   r   r   r   s   @r:   r   r   u  s     /$$$)
O%M M  $090 0 	0
 
)08  $090 0 	0
 
)02
r=   r   c                      e Zd ZU dZded<   	 ded<   	 dZded<   	 d fd	Zdd
Zed d       Z	d!dZ
ed d       Z	 	 	 	 d"dZ	 d#	 	 	 	 	 	 	 d$dZ	 d#	 	 	 	 	 	 	 d$dZ	 	 	 	 	 	 d%dZed d       Z ed      d&d       Zeed'd              Zeed'd              Zeed(d              Zed)d       Zeed*d              Ze	 	 d+	 	 	 	 	 	 	 	 	 	 	 d,d       Z	 	 	 	 	 	 	 	 d-dZd.dZ xZS )/AgentzAgent that calls the language model and deciding the action.

    This is driven by a LLMChain. The prompt in the LLMChain MUST include
    a variable called "agent_scratchpad" where the agent can put its
    intermediary work.
    r/   r   r   r   Nr   allowed_toolsc                *    t         |          }|d= |S r  r  r   s      r:   rt   z
Agent.dict  r  r=   c                    | j                   S )zGet allowed tools.)r  r8   s    r:   r@   zAgent.get_allowed_tools  s    !!!r=   c                    dgS r4   r7   r8   s    r:   r;   zAgent.return_values  r<   r=   c                    d}t        |      )zsFix the text.

        Args:
            text: Text to fix.

        Returns:
            str: Fixed text.
        z(fix_text not implemented for this agent.rZ   )r9   r   r]   s      r:   	_fix_textzAgent._fix_text  s     9or=   c                v    d| j                   j                          d| j                   j                          gS )N
z
	)r  rstripr8   s    r:   _stopzAgent._stop  sB     ((//1234**11345
 	
r=   c                ~    d}|D ]5  \  }}||j                   z  }|d| j                   | d| j                   z  }7 |S )zJConstruct the scratchpad that lets the agent continue its thought process.rV   r  )logr  r  )r9   rD   thoughtsactionobservations        r:   _construct_scratchpadzAgent._construct_scratchpad  s[    
 #5 	WFK

"H"T445k]"T__DUVVH	W r=   c                     | j                   |fi |} | j                  j                  dd|i|}| j                  j	                  |      S )rB   rE   r7   )get_full_inputsr   predictr   r   r9   rD   rE   rF   full_inputsfull_outputs         r:   rG   z
Agent.plan  sQ    " +d**+=HH,dnn,,PyPKP!!''44r=   c                   K    | j                   |fi |} | j                  j                  dd|i| d{   }| j                  j	                  |       d{   S 7 '7 w)rJ   rE   Nr7   )r$  r   apredictr   aparser&  s         r:   rK   zAgent.aplan#  se     " +d**+=HH3DNN33WiW;WW''..{;;; X;s!   5A#A"A#A!A#!A#c                N    | j                  |      }|| j                  d}i ||S )a1  Create the full inputs for the LLMChain from intermediate steps.

        Args:
            intermediate_steps: Steps the LLM has taken to date,
                along with observations.
            **kwargs: User inputs.

        Returns:
            Dict[str, Any]: Full inputs for the LLMChain.
        agent_scratchpadr   )r"  r  )r9   rD   rF   r  
new_inputss        r:   r$  zAgent.get_full_inputs8  s3     --.@A*2DJJG
'&'J''r=   c                Z    t        t        | j                  j                        dhz
        S )rP   r.  r   r8   s    r:   rQ   zAgent.input_keysK  s'     C1126H5IIJJr=   aftermodec                |   | j                   j                  }d|j                  vrt        j	                  d       |j                  j                  d       t        |t              r|xj                  dz  c_        | S t        |t              r|xj                  dz  c_
        | S dt        |       }t        |      | S )aF  Validate that prompt matches format.

        Args:
            values: Values to validate.

        Returns:
            Dict: Validated values.

        Raises:
            ValueError: If `agent_scratchpad` is not in prompt.input_variables
             and prompt is not a FewShotPromptTemplate or a PromptTemplate.
        r.  zl`agent_scratchpad` should be a variable in prompt.input_variables. Did not find it, so adding it at the end.z
{agent_scratchpad}zGot unexpected prompt type )r   promptinput_variablesloggerwarningappendro   r   templater   r   typerZ   )r9   r5  r]   s      r:   validate_promptzAgent.validate_promptS  s     &&V%;%;;NN= ""))*<=&.1#99  F$9:!77  4DL>B o%r=   c                     y)z&Prefix to append the observation with.Nr7   r8   s    r:   r  zAgent.observation_prefixq  rH   r=   c                     y)z#Prefix to append the LLM call with.Nr7   r8   s    r:   r  zAgent.llm_prefixv  rH   r=   c                     y)zCreate a prompt for this class.

        Args:
            tools: Tools to use.

        Returns:
            BasePromptTemplate: Prompt template.
        Nr7   rb   rd   s     r:   create_promptzAgent.create_prompt{  rH   r=   c                     y)zgValidate that appropriate tools are passed in.

        Args:
            tools: Tools to use.
        Nr7   r@  s     r:   _validate_toolszAgent._validate_tools  rH   r=   c                     y)z)Get default output parser for this class.Nr7   )rb   rF   s     r:   _get_default_output_parserz Agent._get_default_output_parser  rH   r=   c                    | j                  |       t        || j                  |      |      }|D cg c]  }|j                   }}|xs | j	                         }	 | d|||	d|S c c}w )aO  Construct an agent from an LLM and tools.

        Args:
            llm: Language model to use.
            tools: Tools to use.
            callback_manager: Callback manager to use.
            output_parser: Output parser to use.
            kwargs: Additional arguments.

        Returns:
            Agent: Agent object.
        )rc   r5  re   )r   r  r   r7   )rC  r/   rA  namerE  )
rb   rc   rd   re   r   rF   r   tool
tool_names_output_parsers
             r:   rf   zAgent.from_llm_and_tools  s    * 	E"$$U+-
	
 -22Ddii2
2&J#*H*H*J 
$(
 	
 	
 3s   A(c                   |dk(  rt        ddid      S |dk(  rd}|D ]5  \  }}||j                  z  }|d| j                   | d| j                   z  }7 |dz  }|| j                  d}i ||} | j
                  j                  d
i |}	| j                  j                  |	      }
t        |
t               r|
S t        d|	i|	      S d	| }t        |      )a  Return response when agent has been stopped due to max iterations.

        Args:
            early_stopping_method: Method to use for early stopping.
            intermediate_steps: Steps the LLM has taken to date,
                along with observations.
            **kwargs: User inputs.

        Returns:
            AgentFinish: Agent finish object.

        Raises:
            ValueError: If `early_stopping_method` is not in ['force', 'generate'].
        rT   r6   rU   rV   generater  zB

I now need to return a final answer based on the previous steps:r-  zBearly_stopping_method should be one of `force` or `generate`, got r7   )r   r  r  r  r  r   r%  r   r   ro   rZ   )r9   r\   rD   rF   r  r   r!  r/  r'  r(  parsed_outputr]   s               r:   r^   zAgent.return_stopped_response  s"   ( !G+PQ  !J.H'9 #FJJ&001+b@QR VH /7

KJ2V2z2K0$..00?;?K ..44[AM-5$$ +6DD()+ 	 or=   c                4    | j                   | j                  dS )r   r  r  r8   s    r:   r   zAgent.tool_run_logging_kwargs  s     //"&"9"9
 	
r=   r   r   r   )r   rp   r   rp   )rD   r   r   zUnion[str, list[BaseMessage]]r?   r   )rD   r   rF   r	   r   zbuiltins.dict[str, Any]r   r(   r   )rd   r   r   r   )rd   r   r   r   )rF   r	   r   r   )NN)rc   r   rd   r   re   r   r   zOptional[AgentOutputParser]rF   r	   r   r  r   r   )r   r   r   r   r   r  rt   r@   r   r;   r  r  r"  rG   rK   r$  rQ   r'   r<  r   r  r  r   rA  rC  rE  rf   r^   r   r   r   s   @r:   r  r    s4    $$$))-M&-F"  
 
 
	9	 
'	  $595 5 	5
 
)50  $<9< < 	<
 
)<*(9( ( 
!	(& K K '" #: 5  5 2  2      8  8 
 ;?59!
!
 "!
 8	!

 3!
 !
 
!
 !
F5"5 :5 	5
 
5n
r=   r  c                  ^    e Zd ZU dZdZded<   	 dZded<   	 	 d
	 	 	 	 	 ddZ	 d
	 	 	 	 	 dd	Zy)ExceptionToolz!Tool that just returns the query.
_Exceptionrp   rG  zException tooldescriptionNc                    |S r?   r7   r9   queryrun_managers      r:   _runzExceptionTool._run  s	    
 r=   c                   K   |S wr?   r7   rU  s      r:   _arunzExceptionTool._arun  s     
 s   r?   )rV  rp   rW  z#Optional[CallbackManagerForToolRun]r   rp   )rV  rp   rW  z(Optional[AsyncCallbackManagerForToolRun]r   rp   )	r   r   r   r   rG  r   rS  rX  rZ  r7   r=   r:   rQ  rQ    sn    +D#'K'"
 <@ 9 
	 AE > 
	r=   rQ  c                     e Zd ZU dZded<   	 ded<   	 dZded<   	 d	Zd
ed<   	 dZded<   	 dZded<   	 dZ	ded<   	 dZ
ded<   	 e	 d5	 	 	 	 	 	 	 	 	 d6d       Z ed      d7d       Z ed      ed8d              Zed9d       Zd:dZd:dZ	 d5ddd 	 	 	 	 	 	 	 	 	 d;d!Zed<d"       Zed<d#       Zd=d$Zd>d%Z	 d5	 	 	 	 	 	 	 d?d&Z	 d5	 	 	 	 	 	 	 d@d'Z	 	 	 	 dAd(Z	 d5	 	 	 	 	 	 	 	 	 	 	 dBd)Z	 d5	 	 	 	 	 	 	 	 	 	 	 dCd*Z	 d5	 	 	 	 	 	 	 	 	 dDd+Z	 d5	 	 	 	 	 	 	 	 	 	 	 dEd,Z	 d5	 	 	 	 	 	 	 	 	 	 	 dFd-Z 	 d5	 	 	 	 	 	 	 	 	 dGd.Z!	 d5	 	 	 	 	 dHd/Z"	 d5	 	 	 	 	 dId0Z#	 	 	 	 dJd1Z$	 	 	 	 dKd2Z%e&	 d5	 	 	 	 	 	 	 dLd3       Z'e&	 d5	 	 	 	 	 	 	 dMd4       Z(y)NAgentExecutorzAgent that is using tools.<Union[BaseSingleActionAgent, BaseMultiActionAgent, Runnable]agentr   rd   Fr   return_intermediate_steps   zOptional[int]max_iterationsNzOptional[float]max_execution_timerT   rp   r\   z8Union[bool, str, Callable[[OutputParserException], str]]handle_parsing_errorszTUnion[int, Callable[[list[tuple[AgentAction, str]]], list[tuple[AgentAction, str]]]]trim_intermediate_stepsc                     | d|||d|S )a  Create from agent and tools.

        Args:
            agent: Agent to use.
            tools: Tools to use.
            callbacks: Callbacks to use.
            kwargs: Additional arguments.

        Returns:
            AgentExecutor: Agent executor object.
        )r^  rd   rE   r7   r7   )rb   r^  rd   rE   rF   s        r:   from_agent_and_toolsz"AgentExecutor.from_agent_and_toolsC  s)    &  

 	
 	
r=   r1  r2  c                   | j                   }| j                  }|j                         }|Rt        |      |D ch c]  }|j                   c}k7  r,d| d|D cg c]  }|j                   c} d}t        |      | S c c}w c c}w )a  Validate that tools are compatible with agent.

        Args:
            values: Values to validate.

        Returns:
            Dict: Validated values.

        Raises:
            ValueError: If allowed tools are different than provided tools.
        zAllowed tools (z!) different than provided tools ())r^  rd   r@   r   rG  rZ   )r9   r^  rd   r  rH  r]   s         r:   validate_toolszAgentExecutor.validate_tools]  s     



//1$]);"'@
DII@
 *
 "- 1#:?#@$DII#@"AD  S/!@

 $As   A?B
beforec                <   |j                  d      }|rpt        |t              r`	 |j                  }|t        t
        t           t        f   k(  }|j                  dd      }|rt        ||      |d<   |S t        ||      |d<   |S # t        $ r}d}Y d}~Hd}~ww xY w)zConvert runnable to agent if passed in.

        Args:
            values: Values to validate.

        Returns:
            Dict: Validated values.
        r^  FNr   T)r   r   )getro   r   
OutputTyper   r   r   r   	Exceptionpopr   r   )rb   valuesr^  output_typemulti_action_r   s          r:   validate_runnable_agentz%AgentExecutor.validate_runnable_agentw  s     

7#Zx0T#..  +eD4E{4R.SS$jj):DAO":"$3#w 	 #0"$3#w !  %$%s   B 	BBBc                    t        | j                  t              rt        t        | j                        S | j                  S )aC  Type cast self.agent.

        If the `agent` attribute is a Runnable, it will be converted one of
        RunnableAgentType in the validate_runnable_agent root_validator.

        To support instantiating with a Runnable, here we explicitly cast the type
        to reflect the changes made in the root_validator.
        )ro   r^  r   r   RunnableAgentTyper8   s    r:   _action_agentzAgentExecutor._action_agent  s.     djj(+)4::66zzr=   c                    d}t        |      )zRaise error - saving not supported for Agent Executors.

        Args:
            file_path: Path to save to.

        Raises:
            ValueError: Saving not supported for agent executors.
        zpSaving not supported for agent executors. If you are trying to save the agent, please use the `.save_agent(...)`r  )r9   r   r]   s      r:   r   zAgentExecutor.save  s    ! 	
 or=   c                8    | j                   j                  |      S )zZSave the underlying agent.

        Args:
            file_path: Path to save to.
        )rx  r   )r9   r   s     r:   
save_agentzAgentExecutor.save_agent  s     !!&&y11r=   )include_run_infoasync_c               6    t        | ||| j                  |      S )ag  Enables iteration over steps taken to reach final output.

        Args:
            inputs: Inputs to the agent.
            callbacks: Callbacks to run.
            include_run_info: Whether to include run info.
            async_: Whether to run async. (Ignored)

        Returns:
            AgentExecutorIterator: Agent executor iterator object.
        )tagsr|  )r+   r  )r9   r   rE   r|  r}  s        r:   iterzAgentExecutor.iter  s$    & %-
 	
r=   c                .    | j                   j                  S )rP   )rx  rQ   r8   s    r:   rQ   zAgentExecutor.input_keys  s     !!,,,r=   c                z    | j                   rg | j                  j                  dS | j                  j                  S )z@Return the singular output key.

        :meta private:
        rD   )r_  rx  r;   r8   s    r:   output_keyszAgentExecutor.output_keys  s<     ))LT''55L7KLL!!///r=   c                \    | j                   D ci c]  }|j                  | c}|   S c c}w )zLookup tool by name.

        Args:
            name: Name of tool.

        Returns:
            BaseTool: Tool object.
        )rd   rG  )r9   rG  rH  s      r:   lookup_toolzAgentExecutor.lookup_tool  s)     -1JJ7D		47==7s   )c                x    | j                   || j                   k\  ry| j                  d u xs || j                  k  S )NF)ra  rb  )r9   
iterationstime_elapseds      r:   _should_continuezAgentExecutor._should_continue  s?    *zT=P=P/P&&$.X,AXAX2XXr=   c                    |r|j                  |d| j                         |j                  }| j                  r||d<   |S Ngreen)colorverboserD   on_agent_finishr  r;   r_  r9   r6   rD   rW  r   s        r:   _returnzAgentExecutor._return  sE     ''gt||'T++))1CL-.r=   c                   K   |r&|j                  |d| j                         d {    |j                  }| j                  r||d<   |S 7 #wr  r  r  s        r:   _areturnzAgentExecutor._areturn  sa      -- .   
 ++))1CL-.s   $AA
$Ac                    t        |d   t              r t        |      dk7  rd}t        |      |d   S |D cg c]+  }t        |t              s|j
                  |j                  f- c}S c c}w )Nrd     z>Expected a single AgentFinish output, but got multiple values.)ro   r   r  rZ   r   r   r!  )r9   rq  r]   as       r:   _consume_next_stepz AgentExecutor._consume_next_step  sa     fRj+.6{aV o%":39VaZ9=U1==)VVVs   A+A+c                \    | j                  t        | j                  |||||                  S r?   )r  r   _iter_next_step)r9   name_to_tool_mapcolor_mappingr   rD   rW  s         r:   _take_next_stepzAgentExecutor._take_next_step$  s<     &&$$$!&

 
	
r=   c              #  t  K   	 | j                  |      } | j                  j                  |fd|r|j                         ndi|}t        |t,              r| yt        |t              r|gn|}|D ]  }|  |D ]  }| j/                  ||||        y# t        $ r}t        | j                  t              r| j                   }nd}|rd|}	t        |	      |t        |      }
t        | j                  t              r:|j                  r+t        |j                        }t        |j                        }
n_d}n\t        | j                  t              r| j                  }n5t        | j                        r| j                  |      }nd}	t        |	      |t        d||
      }|r|j                  |d	       | j                  j!                         } t#               j$                  |j&                  f| j(                  d|r|j                         ndd
|}t+        ||       Y d}~yd}~ww xY ww)Take a single step in the thought-action-observation loop.

        Override this to take control of how the agent makes and acts on choices.
        rE   NFAn output parsing error occurred. In order to pass this error back to the agent and have it try again, pass `handle_parsing_errors=True` to the AgentExecutor. This is the error: Invalid or incomplete response.Got unexpected type of `handle_parsing_errors`rR  r  r  r  r  rE   r   r!  )_prepare_intermediate_stepsrx  rG   	get_childr   ro   rc  r   rZ   rp   send_to_llmr!  
llm_outputcallabler   on_agent_actionr   rQ  r  
tool_inputr  r   r   _perform_agent_action)r9   r  r  r   rD   rW  r6   eraise_errorr]   r   r!  tool_run_kwargsactionsagent_actions                  r:   r  zAgentExecutor._iter_next_step8  s=    0	!%!A!ABT!U -T'',,"5@+//1d F^ fk*L )=6(6# 	L	# 	L,, 	 	e % '	$44d;"&"<"<<#* +,0  !o1,q6D$44d;=="%amm"4Kq||,D"BKD66<"88$445"88;F o1, {DAF++F'+B"00HHJO--/--!!5@+//1d	
 "K 6{CCO'	s1   H8AB AH8
H5#FH0+H80H55H8c                f   |r|j                  |d       |j                  |v r||j                     }|j                  }||j                     }| j                  j	                         }|rd|d<    |j
                  |j                  f| j                  ||r|j                         nd d|}	ny| j                  j	                         } t               j
                  |j                  t        |j                               df| j                  d |r|j                         nd d|}	t        ||	      S )Nr  r  rV   r  r  requested_tool_nameavailable_tool_namesr  )r  rH  return_directrx  r   r  r  r  r  r-   r   keysr   
r9   r  r  r  rW  rH  r  r  r  r!  s
             r:   r  z#AgentExecutor._perform_agent_action  s;    ''G'D 00#L$5$56D ..M!,"3"34E"00HHJO02-"$((''5@+//1d	
 "K #00HHJO++-+++7+<+<,01A1F1F1H,I	
 5@+//1d	 "	K +FFr=   c           	        K   | j                  | j                  |||||      2 cg c3 d {   }|7 6 c}      S c c}w wr?   )r  _aiter_next_step)r9   r  r  r   rD   rW  r  s          r:   _atake_next_stepzAgentExecutor._atake_next_step  s]      &&  $44$!& 	 	 	 	
 	
	s&   #A=5
35
=5
=Ac                 K   	 | j                  |      } | j                  j                  |fd|r|j                         ndi| d{   }t        |t*              r| yt        |t              r|gn|}|D ]  }| 	 t-        j.                  |D cg c]  }| j1                  ||||       c}  d{   }|D ]  }| 	 y7 # t        $ r}t        | j                  t              r| j                   }nd}|rd|}	t        |	      |t        |      }
t        | j                  t              r:|j                  r+t        |j                        }t        |j                        }
n_d}n\t        | j                  t              r| j                  }n5t        | j                        r| j                  |      }nd}	t        |	      |t        d||
      }| j                  j                         } t!               j"                  |j$                  f| j&                  d|r|j                         ndd| d{  7  }t)        ||	       Y d}~yd}~ww xY wc c}w 7 w)
r  rE   NFr  r  r  rR  r  r  )r  rx  rK   r  r   ro   rc  r   rZ   rp   r  r!  r  r  r   r   rQ  r
  r  r  r   r   asynciogather_aperform_agent_action)r9   r  r  r   rD   rW  r6   r  r  r]   r   r!  r  r  r  resultr   s                    r:   r  zAgentExecutor._aiter_next_step  st    .	!%!A!ABT!U 44--33"5@+//1d  FZ fk*L )=6(6# 	L	 ~~ %, ! ++$! 	

 

  	EK	I
 % %	$44d;"&"<"<<#* +,0  !o1,q6D$44d;=="%amm"4Kq||,D"BKD66<"88$445"88;F o1, {DAF"00HHJO 4 4 4!!!5@+//1d	!
 "!  K 6{CCK%	f

sg   I*AC 	C
C A
I*I"3I*:I';I*C 
IE'I?I II*I	I*c                  K   |r&|j                  || j                  d       d {    |j                  |v r||j                     }|j                  }||j                     }| j                  j                         }|rd|d<    |j                  |j                  f| j                  ||r|j                         nd d| d {   }	n| j                  j                         } t               j                  |j                  t        |j                               df| j                  d |r|j                         nd d| d {   }	t        ||	      S 7 27 7 w)Nr  )r  r  rV   r  r  r  r  )r  r  rH  r  rx  r   r
  r  r  r-   r   r  r   r  s
             r:   r  z$AgentExecutor._aperform_agent_action  st     -- .     00#L$5$56D ..M!,"3"34E"00HHJO02- )		''!5@+//1d	!
 "! K #00HHJO 2 2 2+7+<+<,01A1F1F1H,I	!
 5@+//1d	! "	! 	K +FFC	s5   $EEBEEBEEEEEc                   | j                   D ci c]  }|j                  | }}t        | j                   D cg c]  }|j                   c}ddg      }g }d}d}t        j                         }	| j	                  ||      r| j                  |||||      }
t        |
t              r| j                  |
||      S |j                  |
       t        |
      dk(  r,|
d   }| j                  |      }|| j                  |||      S |dz  }t        j                         |	z
  }| j	                  ||      r | j                  j                  | j                  |fi |}| j                  |||      S c c}w c c}w )z(Run text through and get agent response.r  redexcluded_colorsr           rW  r  )rd   rG  r$   timer  r  ro   r   r  extendr  _get_tool_returnrx  r^   r\   r9   r   rW  rH  r  r  rD   r  r  
start_timenext_step_outputnext_step_actiontool_returnr6   s                 r:   _callzAgentExecutor._callE  s    9=

CDIItOCC)#'::.4TYY.$e,
 =?
YY[
##J=#33 "'  4   *K8||$& + $   %%&67#$)#3A#6 "334DE*<<#*$/ (  
 !OJ99;3L7 ##J=8 <##;;&&
 

 ||F$6K|PP[ D /s
   E2E7c                  K   | j                   D ci c]  }|j                  | }}t        | j                   D cg c]  }|j                   c}dg      }g }d}d}t        j                         }		 t	        | j
                        4 d{    | j                  ||      r| j                  |||||       d{   }
t        |
t              r-| j                  |
||       d{   cddd      d{    S |j                  |
       t        |
      dk(  rE|
d   }| j                  |      }|-| j                  |||       d{   cddd      d{    S |dz  }t        j                         |	z
  }| j                  ||      r | j                  j                  | j                   |fi |}| j                  |||       d{   cddd      d{    S c c}w c c}w 7 d7 77 7 7 7 7 /7 !# 1 d{  7  sw Y   yxY w# t"        t$        j"                  f$ rH  | j                  j                  | j                   |fi |}| j                  |||       d{  7  cY S w xY ww)z.Async run text through and get agent response.r  r  r   r  Nr  r  )rd   rG  r$   r  r0   rb  r  r  ro   r   r  r  r  r  rx  r^   r\   TimeoutErrorr  r  s                 r:   _acallzAgentExecutor._acall{  s     9=

CDIItOCC)#'::.4TYY.$I
 =?
YY[
4	&t'>'>? ' '++JE-1-B-B(%*$/ .C . ($ ""2K@%)]],.(3 &3 &  ' ' '  '--.>?+,1+;A+>(&*&;&;<L&M&2)- + 2,7 *7 * $-' ' '8 !OJ#'99;#;L9 ++JE: D++CC..& 
 "]]& + +  G' ' ' D /'( ',$-'FG' ' ' 'P g223 	?T''??**" F
 "' '    	s6  I<G%I<G*$I<2H G/H ,H;G2<+H'G5(H+H 7G88H <I<=AHG;HH G=H  I<!.H?HG?HH H H $I</H 2H5H8H ;H=H ?HH H	H
HH I<H AI90I31I96I<8I99I<c                D   |\  }}| j                   D ci c]  }|j                  | }}d}t        | j                  j                        dkD  r| j                  j                  d   }|j
                  |v r'||j
                     j                  rt        ||id      S yc c}w )z&Check if the tool is a returning tool.r6   r   rV   N)rd   rG  r  rx  r;   rH  r  r   )r9   r  r  r!  rH  r  return_value_keys          r:   r  zAgentExecutor._get_tool_return  s    
 %5!k8<

CDIItOCC#t!!//014#11??B !11 !2!23AA!;/   Ds   Bc                    t        | j                  t              r| j                  dkD  r|| j                   d  S t        | j                        r| j                  |      S |S )Nr   )ro   re  intr  )r9   rD   s     r:   r  z)AgentExecutor._prepare_intermediate_steps  s_    
 t33S9,,q0%t'C'C&C&EFFD001//0BCC!!r=   c           	   +     K   t        |      }t        | ||j                  d      f|j                  d      |j                  d      |j                  d      |j                  d      dd|}|E d{    y7 w)	a  Enables streaming over steps taken to reach final output.

        Args:
            input: Input to the agent.
            config: Config to use.
            kwargs: Additional arguments.

        Yields:
            AddableDict: Addable dictionary.
        rE   r  metadatarun_namerun_idTr  r  r  r  yield_actionsNr!   r+   rm  )r9   inputr   rF   iterators        r:   r   zAgentExecutor.stream  s}     " v&(JJ{#

 F#ZZ
+ZZ
+::h'

 

 s   A0A:2A83A:c           	      K   t        |      }t        | ||j                  d      f|j                  d      |j                  d      |j                  d      |j                  d      dd|}|2 3 d{   }| 7 
6 yw)	a	  Async enables streaming over steps taken to reach final output.

        Args:
            input: Input to the agent.
            config: Config to use.
            kwargs: Additional arguments.

        Yields:
            AddableDict: Addable dictionary.
        rE   r  r  r  r  Tr  Nr  )r9   r  r   rF   r  steps         r:   r   zAgentExecutor.astream  s     $ v&(JJ{#

 F#ZZ
+ZZ
+::h'

 

 # 	 	$J	(s*   A-B/B 3A>4B 7B>B  Br?   )
r^  r]  rd   r   rE   r   rF   r	   r   r\  rO  )rq  rt   r   r	   )r   z2Union[BaseSingleActionAgent, BaseMultiActionAgent]r   )
r   r	   rE   r   r|  r   r}  r   r   r+   r   )rG  rp   r   r#   )r  r  r  floatr   r   )r6   r   rD   r   rW  $Optional[CallbackManagerForChainRun]r   dict[str, Any])r6   r   rD   r   rW  )Optional[AsyncCallbackManagerForChainRun]r   r  )rq  NextStepOutputr   1Union[AgentFinish, list[tuple[AgentAction, str]]])r  dict[str, BaseTool]r  dict[str, str]r   r  rD   r   rW  r  r   r  )r  r  r  r  r   r  rD   r   rW  r  r   z4Iterator[Union[AgentFinish, AgentAction, AgentStep]])
r  r  r  r  r  r   rW  r  r   r   )r  r  r  r  r   r  rD   r   rW  r  r   r  )r  r  r  r  r   r  rD   r   rW  r  r   z9AsyncIterator[Union[AgentFinish, AgentAction, AgentStep]])
r  r  r  r  r  r   rW  r  r   r   )r   r  rW  r  r   r  )r   r  rW  r  r   r  )r  ztuple[AgentAction, str]r   zOptional[AgentFinish])rD   r   r   r   )r  Union[dict[str, Any], Any]r   Optional[RunnableConfig]rF   r	   r   zIterator[AddableDict])r  r  r   r  rF   r	   r   zAsyncIterator[AddableDict]))r   r   r   r   r   r_  ra  rb  r\   rc  re  r   rg  r'   rj  ru  r   rx  r   r{  r  rQ   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r)   r   r   r7   r=   r:   r\  r\    s   $GG3-&+t+3$&NM&9 +/. ")3( 	 S  	    
  $	
K
 "
 	

 
 

 
2 '" #2 (#  $>   2  $

 "'

 

 
 
 

6 - - 0 0	>Y =A	 ! :	
 
" BF	 ! ?	
 
"	W	W 
;	W" =A
-
 &
 	

 :
 :
 
;
4 =AM-M &M 	M
 :M :M 
>Mh =A%G-%G &%G "	%G
 :%G 
%GZ BF
-
 &
 	

 :
 ?
 
;
6 BFU-U &U 	U
 :U ?U 
CUx BF)G-)G &)G "	)G
 ?)G 
)G\ =A4Q4Q :4Q 
	4Qr BFGG ?G 
	GR1 
*"9" 
'"  ,0) ) 	
 
 <  ,0) ) 	
 
$ r=   r\  )br   
__future__r   r  builtinsr   r   loggingr  abcr   collections.abcr   r   r   pathlibr   typingr	   r
   r   r   r   r   langchain_core._apir   langchain_core.agentsr   r   r   langchain_core.callbacksr   r   r   r   r   r   langchain_core.exceptionsr   langchain_core.language_modelsr   langchain_core.messagesr   langchain_core.output_parsersr   langchain_core.promptsr   langchain_core.prompts.few_shotr   langchain_core.prompts.promptr   langchain_core.runnablesr   r    r!   langchain_core.runnables.utilsr"   langchain_core.toolsr#   langchain_core.utils.inputr$   pydanticr%   r&   r'   typing_extensionsr(   r)   langchain._api.deprecationr*   langchain.agents.agent_iteratorr+   langchain.agents.agent_typesr,   langchain.agents.toolsr-   langchain.chains.baser.   langchain.chains.llmr/   langchain.utilities.asyncior0   	getLoggerr   r7  r2   r   r   r   r   r   r   r   r  rQ  r  rw  r\  r7   r=   r:   <module>r     s   K "        = =    * E E  < < / : 5 A 8 L L 6 ) 8 ; ; , @ A 2 . ' ) 7			8	$eI ePM9 M`3({K/G)HI 3U4,k9:;*l) l^t3 tn %
P
0 P

P
f %
b
! b

b
J	H . eKi?@A-)AAB RE Rr=   