
    gh2                       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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.m/Z/ ddl0m1Z1 ddl2m3Z3m4Z4m5Z5 ddl6m7Z7 ddl8m9Z9 ddl:m;Z; ddl<m=Z=m>Z>m?Z? ddl@mAZA ddlBmCZC ddlDmEZE ddlFmGZG ddlHmIZI ddlJmKZK ddlLmMZM ddlNmOZO  ejP        eQ          ZR G d d e=          ZS G d! d"e=          ZT G d# d$e+eeef                            ZU G d% d&e+eeVe         ef                            ZW G d' d(eS          ZX G d) d*eT          ZY ed+eCd,-           G d. d/eS                      ZZ ed+eCd,-           G d0 d1eS                      Z[ G d2 d3e9          Z\eVeeeef                  Z]eeXeYf         Z^ G d4 d5eK          Z_dS )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)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.return	list[str]c                    dgS Return values of the agent.output selfs    S/var/www/FlaskApp/flask-venv/lib/python3.11/site-packages/langchain/agents/agent.pyreturn_valuesz#BaseSingleActionAgent.return_values<        z    Optional[list[str]]c                    d S Nr8   r9   s    r;   get_allowed_toolsz'BaseSingleActionAgent.get_allowed_toolsA   s    tr>   Nintermediate_stepslist[tuple[AgentAction, str]]	callbacksr   kwargsr	   Union[AgentAction, AgentFinish]c                    dS )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.
        Nr8   r:   rC   rE   rF   s       r;   planzBaseSingleActionAgent.planD         r>   c                
   K   dS )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.
        Nr8   rJ   s       r;   aplanzBaseSingleActionAgent.aplanW   
        r>   c                    dS 7Return the input keys.

        :meta private:
        Nr8   r9   s    r;   
input_keysz BaseSingleActionAgent.input_keysj   rL   r>   early_stopping_methodstrr   c                X    |dk    rt          ddid          S t          d| d          )  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.
        forcer7   3Agent stopped due to iteration limit or time limit. 'Got unsupported early_stopping_method ``r   
ValueErrorr:   rU   rC   rF   s       r;   return_stopped_responsez-BaseSingleActionAgent.return_stopped_responser   sP    ( !G++PQSU   R:ORRR  r>   llmr   toolsSequence[BaseTool]callback_managerOptional[BaseCallbackManager]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)clsrb   rc   re   rF   s        r;   from_llm_and_toolsz(BaseSingleActionAgent.from_llm_and_tools   s
    & "!r>   c                    t           z#Return Identifier of an agent type.rh   r9   s    r;   _agent_typez!BaseSingleActionAgent._agent_type   
     "!r>   builtins.dictc                    t                                                      }	 | j        }n# t          $ r d}Y nw xY wt	          |t
                    rt          |j                  |d<   n|||d<   |S )z{Return dictionary representation of agent.

        Returns:
            Dict: Dictionary representation of agent.
        N_type)super
model_dumprn   ri   
isinstancer+   rV   value)r:   rF   _dictrr   	__class__s       r;   dictzBaseSingleActionAgent.dict   s     ""$$	$EE" 	 	 	EEE	eY'' 	# --E'NN"E'Ns   + ::	file_pathUnion[Path, str]Nonec                X   t          |t                    rt          |          }n|}|j        }|                    dd           |                                 }d|vrt          d|  d          |j        dk    rBt          |d          5 }t          j
        ||d	           d
d
d
           d
S # 1 swxY w Y   d
S |j                            d          rBt          |d          5 }t          j
        ||d           d
d
d
           d
S # 1 swxY w Y   d
S t          | d          )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_okrr   Agent z does not support saving.jsonw   indentNz.yamlz.ymlFdefault_flow_style must be json or yaml)ru   rV   r   parentmkdirry   ri   suffixopenjsondumpendswithyamlr_   )r:   rz   	save_pathdirectory_path
agent_dictfs         r;   savezBaseSingleActionAgent.save   s    i%% 	"YII!I")TD999 YY[[
*$$%&Mt&M&M&MNNNw&&i%% 3	*a22223 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3&&'899 	Bi%% C	*aEBBBBC C C C C C C C C C C C C C C C C C 	@@@AAA$   B11B58B5(DDDc                    i S #Return logging kwargs for tool run.r8   r9   s    r;   tool_run_logging_kwargsz-BaseSingleActionAgent.tool_run_logging_kwargs   s    	r>   r2   r3   r2   r?   rA   rC   rD   rE   r   rF   r	   r2   rG   rU   rV   rC   rD   rF   r	   r2   r   )
rb   r   rc   rd   re   rf   rF   r	   r2   r1   r2   rV   rF   r	   r2   rp   rz   r{   r2   r|   r2   rp   )__name__
__module____qualname____doc__propertyr<   rB   r   rK   rO   rT   ra   classmethodrk   rn   ry   r   r   __classcell__rx   s   @r;   r1   r1   9   s~       ))   X      $    ^$   $    ^$    ^ X   < 
 ;?	" " " " ["( " " " X"     "!B !B !B !BF       r>   r1   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.r2   r3   c                    dgS r5   r8   r9   s    r;   r<   z"BaseMultiActionAgent.return_values   r=   r>   r?   c                    dS )z]Get allowed tools.

        Returns:
            Optional[List[str]]: Allowed tools.
        Nr8   r9   s    r;   rB   z&BaseMultiActionAgent.get_allowed_tools   s	     tr>   NrC   rD   rE   r   rF   r	   %Union[list[AgentAction], AgentFinish]c                    dS )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.
        Nr8   rJ   s       r;   rK   zBaseMultiActionAgent.plan   rL   r>   c                
   K   dS )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.
        Nr8   rJ   s       r;   rO   zBaseMultiActionAgent.aplan  rP   r>   c                    dS rR   r8   r9   s    r;   rT   zBaseMultiActionAgent.input_keys  rL   r>   rU   rV   r   c                X    |dk    rt          ddid          S t          d| d          )rX   rY   r7   z$Agent stopped due to max iterations.r[   r\   r]   r^   r`   s       r;   ra   z,BaseMultiActionAgent.return_stopped_response!  sG    ( !G++*PQSUVVVR:ORRR  r>   c                    t           rm   rh   r9   s    r;   rn   z BaseMultiActionAgent._agent_type=  ro   r>   rp   c                    t                                                      }	 t          | j                  |d<   n# t          $ r Y nw xY w|S )*Return dictionary representation of agent.rr   )rs   rt   rV   rn   ri   r:   rF   rw   rx   s      r;   ry   zBaseMultiActionAgent.dictB  sX    ""$$	 !122E'NN" 	 	 	D	s   ; 
AArz   r{   r|   c                X   t          |t                    rt          |          }n|}|                                 }d|vrt	          d|  d          |j        }|                    dd           |j        dk    rBt          |d          5 }t          j
        ||d	           d
d
d
           d
S # 1 swxY w Y   d
S |j                            d          rBt          |d          5 }t          j
        ||d           d
d
d
           d
S # 1 swxY w Y   d
S t          | d          )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")
        rr   r   z does not support saving.Tr~   r   r   r   r   Nr   Fr   r   )ru   rV   r   ry   ri   r   r   r   r   r   r   r   r   r_   )r:   rz   r   r   r   r   s         r;   r   zBaseMultiActionAgent.saveK  s   " i%% 	"YII!I YY[[
*$$%&Nt&N&N&NOOO")TD999w&&i%% 3	*a22223 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3&&'899 	Bi%% C	*aEBBBBC C C C C C C C C C C C C C C C C C 	@@@AAAr   c                    i S r   r8   r9   s    r;   r   z,BaseMultiActionAgent.tool_run_logging_kwargsr  s	     	r>   r   r   rA   rC   rD   rE   r   rF   r	   r2   r   r   r   r   r   r   )r   r   r   r   r   r<   rB   r   rK   rO   rT   ra   rn   ry   r   r   r   r   s   @r;   r   r      sT       ((   X      $    ^$   $    ^$    ^ X   8 " " " X"     %B %B %B %BN       r>   r   c                  *    e Zd ZdZedd            ZdS )	AgentOutputParserz=Base class for parsing agent output into agent action/finish.textrV   r2   rG   c                    dS )z$Parse text into agent action/finish.Nr8   r:   r   s     r;   parsezAgentOutputParser.parse{  rL   r>   N)r   rV   r2   rG   r   r   r   r   r   r   r8   r>   r;   r   r   x  s8        GG3 3 3 ^3 3 3r>   r   c                  *    e Zd ZdZedd            ZdS )	MultiActionAgentOutputParserzBase class for parsing agent output into agent actions/finish.

    This is used for agents that can return multiple actions.
    r   rV   r2   r   c                    dS )zParse text into agent actions/finish.

        Args:
            text: Text to parse.

        Returns:
            Union[List[AgentAction], AgentFinish]:
                List of agent actions or agent finish.
        Nr8   r   s     r;   r   z"MultiActionAgentOutputParser.parse  rL   r>   N)r   rV   r2   r   r   r8   r>   r;   r   r     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dS )RunnableAgentAgent powered by Runnables.z/Runnable[dict, Union[AgentAction, AgentFinish]]runnabler3   input_keys_argreturn_keys_argTboolstream_runnablearbitrary_types_allowedr2   c                    | j         S r6   r   r9   s    r;   r<   zRunnableAgent.return_values       ##r>   c                    | j         S )zReturn the input keys.r   r9   s    r;   rT   zRunnableAgent.input_keys  s     ""r>   NrC   rD   rE   r   rF   r	   rG   c                    i |d|i}d}| j         r,| j                            |d|i          D ]}||}||z  }n| 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.
        rC   NrE   configr   r   streaminvoker:   rC   rE   rF   inputsfinal_outputchunks          r;   rK   zRunnableAgent.plan  s    " JFI35GHI  	Y --fk9=U-VV * *'#(LL E)LL	*  =//Y?W/XXLr>   c                   K   i |d|i}d}| j         r2| j                            |d|i          2 3 d{V }||}||z  }6 n$| j                            |d|i           d{V }|S 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.
        rC   NrE   r   r   r   astreamainvoker   s          r;   rO   zRunnableAgent.aplan  s      ( JFI35GHI  	  $}44Y7  5     * * * * * * *e  '#(LL E)LL    "&!6!6Y7 "7 " "      L    Ar   rA   r   r   r   r   r   __annotations__r   r   r   r&   model_configr   r<   rT   rK   rO   r8   r>   r;   r   r     s         %%====/ "N""""!#O#### O     : $  L $ $ $ X$ # # # X#  $" " " " "N  $( ( ( ( ( ( (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dS )RunnableMultiActionAgentr   z5Runnable[dict, Union[list[AgentAction], AgentFinish]]r   r3   r   r   Tr   r   r   r2   c                    | j         S r   r   r9   s    r;   r<   z&RunnableMultiActionAgent.return_values  r   r>   c                    | j         S )QReturn the input keys.

        Returns:
            List of input keys.
        r   r9   s    r;   rT   z#RunnableMultiActionAgent.input_keys  s     ""r>   NrC   rD   rE   r   rF   r	   r   c                    i |d|i}d}| j         r,| j                            |d|i          D ]}||}||z  }n| j                            |d|i          }|S r   r   r   s          r;   rK   zRunnableMultiActionAgent.plan$  s    ( JFI35GHI  	Y --fk9=U-VV * *'#(LL E)LL	*  =//Y?W/XXLr>   c                   K   i |d|i}d}| j         r2| j                            |d|i          2 3 d{V }||}||z  }6 n$| j                            |d|i           d{V }|S r   r   r   s          r;   rO   zRunnableMultiActionAgent.aplanK  s      ( JFI35GHI  	  $}44Y7  5     * * * * * * *e  '#(LL E)LL    "&!6!6Y7 "7 " "      L r   r   rA   r   r   r8   r>   r;   r   r     s         %%CCCC0 "N""""!#O#### O     : $  L $ $ $ X$ # # # X#  $% % % % %T  $) ) ) ) ) ) )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_parserr3   stopr2   c                V    t          t          | j        j                  dhz
            S )r   rC   listsetr   rT   r9   s    r;   rT   zLLMSingleActionAgent.input_keys  s(     C1226J5KKLLLr>   rF   r	   rp   c                N    t                                                      }|d= |S r   r   rs   ry   r   s      r;   ry   zLLMSingleActionAgent.dict  !    /"r>   NrC   rD   rE   r   rG   c                l     | j         j        d|| j        |d|}| 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.
        rC   r   rE   r8   )r   runr   r   r   r:   rC   rE   rF   r7   s        r;   rK   zLLMSingleActionAgent.plan  sR    " $# 
1
 
 	
 
 !''///r>   c                |   K    | j         j        d|| j        |d| d{V }| j                            |          S )rN   r  Nr8   )r   arunr   r   r   r  s        r;   rO   zLLMSingleActionAgent.aplan  st      " +t~* 
1
 
 	
 
 
 
 
 
 
 
 !''///r>   c                V    dt          | j                  dk    rdn| j        d         dS )r   r[   r   
llm_prefixobservation_prefix)lenr   r9   s    r;   r   z,LLMSingleActionAgent.tool_run_logging_kwargs  s5     (+DI!(;(;""1
 
 	
r>   r   r   rA   r   r   )r   r   r   r   r   r   rT   ry   rK   rO   r   r   r   s   @r;   r   r   w  s          /.$$$$$)OOO%M M M XM       $0 0 0 0 08  $0 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<   	 d8 fdZd9d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dAd%                        ZeedAd&                        ZeedBd*                        ZedCd,            ZeedDd-                        Ze	 	 dEdFd3            ZdGd6ZdHd7Z xZS )I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_toolsrF   r	   r2   rp   c                N    t                                                      }|d= |S r   r   r   s      r;   ry   z
Agent.dict  r   r>   c                    | j         S )zGet allowed tools.)r  r9   s    r;   rB   zAgent.get_allowed_tools  s    !!r>   r3   c                    dgS r5   r8   r9   s    r;   r<   zAgent.return_values  r=   r>   r   rV   c                     t          d          )zsFix the text.

        Args:
            text: Text to fix.

        Returns:
            str: Fixed text.
        z(fix_text not implemented for this agent.r_   r   s     r;   	_fix_textzAgent._fix_text  s     CDDDr>   c                r    d| j                                          d| j                                          gS )N
z
	)r
  rstripr9   s    r;   _stopzAgent._stop  sB     4(//113354*113355
 	
r>   rC   rD   Union[str, list[BaseMessage]]c                \    d}|D ]&\  }}||j         z  }|d| j         | d| j         z  }'|S )zJConstruct the scratchpad that lets the agent continue its thought process.r[   r  )logr
  r	  )r:   rC   thoughtsactionobservations        r;   _construct_scratchpadzAgent._construct_scratchpad  sW     #5 	W 	WFK
"HVT4VkVVT_VVVHHr>   rE   r   rG   c                z     | j         |fi |} | j        j        dd|i|}| j                            |          S )rI   rE   r8   )get_full_inputsr   predictr   r   )r:   rC   rE   rF   full_inputsfull_outputs         r;   rK   z
Agent.plan  sU    " +d*+=HHHH,dn,PPyPKPP!''444r>   c                   K    | j         |fi |} | j        j        dd|i| d{V }| j                            |           d{V }|S )rN   rE   Nr8   )r!  r   apredictr   aparse)r:   rC   rE   rF   r#  r$  agent_outputs          r;   rO   zAgent.aplan#  s      " +d*+=HHHH3DN3WWiW;WWWWWWWW!/66{CCCCCCCCr>   builtins.dict[str, Any]c                P    |                      |          }|| 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  )r:   rC   rF   r  
new_inputsr#  s         r;   r!  zAgent.get_full_inputs9  s<     --.@AA*2DJGG
..:.r>   c                V    t          t          | j        j                  dhz
            S )rS   r,  r   r9   s    r;   rT   zAgent.input_keysK  s(     C1226H5IIJJJr>   aftermoder(   c                n   | j         j        }d|j        vrt                              d           |j                            d           t          |t                    r|xj        dz  c_        nEt          |t                    r|xj
        dz  c_
        nt          d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appendru   r   templater   r   r_   type)r:   r3  s     r;   validate_promptzAgent.validate_promptS  s     &V%;;;NN=   "))*<===&.11 O#99F$9:: O!77 !MtF||!M!MNNNr>   c                    dS )z&Prefix to append the observation with.Nr8   r9   s    r;   r
  zAgent.observation_prefixp  rL   r>   c                    dS )z#Prefix to append the LLM call with.Nr8   r9   s    r;   r	  zAgent.llm_prefixu  rL   r>   rc   rd   r   c                    dS )zCreate a prompt for this class.

        Args:
            tools: Tools to use.

        Returns:
            BasePromptTemplate: Prompt template.
        Nr8   rj   rc   s     r;   create_promptzAgent.create_promptz  rL   r>   r|   c                    dS )zgValidate that appropriate tools are passed in.

        Args:
            tools: Tools to use.
        Nr8   r>  s     r;   _validate_toolszAgent._validate_tools  s	     	r>   c                    dS )z)Get default output parser for this class.Nr8   )rj   rF   s     r;   _get_default_output_parserz Agent._get_default_output_parser  rL   r>   rb   r   re   rf   Optional[AgentOutputParser]c                    |                      |           t          ||                     |          |          }d |D             }|p|                                 } | d|||d|S )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.
        )rb   r3  re   c                    g | ]	}|j         
S r8   name.0tools     r;   
<listcomp>z,Agent.from_llm_and_tools.<locals>.<listcomp>  s    222Ddi222r>   )r   r  r   r8   )rA  r.   r?  rC  )	rj   rb   rc   re   r   rF   r   
tool_names_output_parsers	            r;   rk   zAgent.from_llm_and_tools  s    * 	E"""$$U++-
 
 
	
 32E222
&J#*H*H*J*Js 
$(
 
 	
 
 	
r>   rU   r   c                   |dk    rt          ddid          S |dk    rd}|D ]&\  }}||j        z  }|d| j         | d| j         z  }'|dz  }|| j        d}i ||} | j        j        di |}	| j                            |	          }
t          |
t                     r|
S t          d|	i|	          S t          d	|           )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'].
        rY   r7   rZ   r[   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 Nr8   )r   r  r
  r	  r  r   r"  r   r   ru   r_   )r:   rU   rC   rF   r  r  r  r-  r#  r$  parsed_outputs              r;   ra   zAgent.return_stopped_response  s;   ( !G++PQSU   #j00H'9  #FJ&R0R+RRRR VH /7
KKJ2V2z2K0$.0??;??K .44[AAM-55 I$$ #Hk#:KHHH/,/ /  r>   c                     | j         | j        dS )r   r  r  r9   s    r;   r   zAgent.tool_run_logging_kwargs  s     /"&"9
 
 	
r>   r   r   r   )r   rV   r2   rV   )rC   rD   r2   r  rA   r   )rC   rD   rF   r	   r2   r)  r2   r(   r   )rc   rd   r2   r   )rc   rd   r2   r|   )rF   r	   r2   r   )NN)rb   r   rc   rd   re   rf   r   rD  rF   r	   r2   r  r   r   )r   r   r   r   r   r  ry   rB   r   r<   r  r  r  rK   rO   r!  rT   r'   r:  r   r
  r	  r   r?  rA  rC  rk   ra   r   r   r   s   @r;   r  r    s          $$$$$))-M----F     " " " "    X	E 	E 	E 	E 
 
 
 X
     $5 5 5 5 50  $    ,   $ K K K XK _'"""   #"8 5 5 5 ^ X5 2 2 2 ^ X2    ^ [    [ 8 8 8 ^ [8 
 ;?59!
 !
 !
 !
 [!
F5 5 5 5n
 
 
 
 
 
 
 
r>   r  c                  L    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dS )ExceptionToolz!Tool that just returns the query.
_ExceptionrV   rH  zException tooldescriptionNqueryrun_manager#Optional[CallbackManagerForToolRun]r2   c                    |S rA   r8   r:   rX  rY  s      r;   _runzExceptionTool._run   s	    
 r>   (Optional[AsyncCallbackManagerForToolRun]c                
   K   |S rA   r8   r\  s      r;   _arunzExceptionTool._arun  s      
 r>   rA   )rX  rV   rY  rZ  r2   rV   )rX  rV   rY  r^  r2   rV   )	r   r   r   r   rH  r   rW  r]  r`  r8   r>   r;   rU  rU    s         ++D'K''''"
 <@     AE      r>   rU  c                  4   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	 didjd            Z ed          dkd             Z ed!          edld$                        Zedmd&            Zdnd*Zdnd+Z	 diddd,dod1Zedpd3            Zedpd4            Zdqd7Zdrd<Z	 didsdDZ	 didtdFZdudIZ	 didvdOZ	 didwdQZ	 didxdUZ	 didydVZ	 didzdXZ 	 did{dYZ!	 did|dZZ"	 did}d[Z#d~d_Z$dd`Z%	 diddfZ&	 diddhZ'dS )AgentExecutorzAgent that is using tools.<Union[BaseSingleActionAgent, BaseMultiActionAgent, Runnable]agentrd   rc   Fr   return_intermediate_steps   zOptional[int]max_iterationsNzOptional[float]max_execution_timerY   rV   rU   z8Union[bool, str, Callable[[OutputParserException], str]]handle_parsing_errorszTUnion[int, Callable[[list[tuple[AgentAction, str]]], list[tuple[AgentAction, str]]]]trim_intermediate_stepsrE   r   rF   r	   r2   c                     | 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.
        )rd  rc   rE   r8   r8   )rj   rd  rc   rE   rF   s        r;   from_agent_and_toolsz"AgentExecutor.from_agent_and_toolsC  s5    & s 

 
 	
 
 	
r>   r/  r0  r(   c                    | j         }| j        }|                                }|Jt          |          t          d |D                       k    r t	          d| dd |D              d          | S )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.
        Nc                    g | ]	}|j         
S r8   rG  rI  s     r;   rL  z0AgentExecutor.validate_tools.<locals>.<listcomp>n  s    )F)F)F$))F)F)Fr>   zAllowed tools (z!) different than provided tools (c                    g | ]	}|j         
S r8   rG  rI  s     r;   rL  z0AgentExecutor.validate_tools.<locals>.<listcomp>q  s    'D'D'Dd	'D'D'Dr>   ))rd  rc   rB   r   r_   )r:   rd  rc   r  s       r;   validate_toolszAgentExecutor.validate_tools]  s     

//11$=!!S)F)F)F)F)F%G%GGG Hm H H'D'De'D'D'DH H H   r>   beforevaluesry   c                t   |                     d          }|rt          |t                    r	 |j        }|t          t
          t                   t          f         k    }n# t          $ r}d}Y d}~nd}~ww xY w|	                    dd          }|rt          ||          |d<   nt          ||          |d<   |S )zConvert runnable to agent if passed in.

        Args:
            values: Values to validate.

        Returns:
            Dict: Validated values.
        rd  FNr   T)r   r   )getru   r   
OutputTyper   r   r   r   	Exceptionpopr   r   )rj   rt  rd  output_typemulti_action_r   s          r;   validate_runnable_agentz%AgentExecutor.validate_runnable_agentu  s     

7## 	Zx00 	T#.  +eD4E{4R.SS  % % %$%
 %jj):DAAO ":"O# # #w #0"O# # #w s   A 
A4(A//A42Union[BaseSingleActionAgent, BaseMultiActionAgent]c                x    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.
        )ru   rd  r   r   RunnableAgentTyper9   s    r;   _action_agentzAgentExecutor._action_agent  s3     dj(++ 	)4:666:r>   rz   r{   r|   c                     t          d          )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  r:   rz   s     r;   r   zAgentExecutor.save  s     !
 
 	
r>   c                6    | j                             |          S )zZSave the underlying agent.

        Args:
            file_path: Path to save to.
        )r  r   r  s     r;   
save_agentzAgentExecutor.save_agent  s     !&&y111r>   )include_run_infoasync_r   r  r  r*   c               4    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  )r:   r   rE   r  r  s        r;   iterzAgentExecutor.iter  s,    & %-
 
 
 	
r>   r3   c                    | j         j        S )rS   )r  rT   r9   s    r;   rT   zAgentExecutor.input_keys  s     !,,r>   c                H    | j         r| j        j        dgz   S | j        j        S )z@Return the singular output key.

        :meta private:
        rC   )re  r  r<   r9   s    r;   output_keyszAgentExecutor.output_keys  s0     ) 	4%37K6LLL%33r>   rH  r#   c                0    d | j         D             |         S )zLookup tool by name.

        Args:
            name: Name of tool.

        Returns:
            BaseTool: Tool object.
        c                    i | ]
}|j         |S r8   rG  rI  s     r;   
<dictcomp>z-AgentExecutor.lookup_tool.<locals>.<dictcomp>  s    777D	4777r>   )rc   )r:   rH  s     r;   lookup_toolzAgentExecutor.lookup_tool  s     87DJ777==r>   
iterationsinttime_elapsedfloatc                V    | j         || j         k    rdS | j        || j        k    rdS dS )NFT)rg  rh  )r:   r  r  s      r;   _should_continuezAgentExecutor._should_continue  s>    *zT=P/P/P5#/ 7775tr>   r7   r   rC   r   rY  $Optional[CallbackManagerForChainRun]dict[str, Any]c                j    |r|                     |d| j                   |j        }| j        r||d<   |S Ngreen)colorverboserC   on_agent_finishr  r<   re  r:   r7   rC   rY  r   s        r;   _returnzAgentExecutor._return  sO      	U''gt|'TTT+) 	D1CL-.r>   )Optional[AsyncCallbackManagerForChainRun]c                z   K   |r#|                     |d| j                   d {V  |j        }| j        r||d<   |S r  r  r  s        r;   _areturnzAgentExecutor._areturn  s{        	--gt| .          +) 	D1CL-.r>   NextStepOutput1Union[AgentFinish, list[tuple[AgentAction, str]]]c                    t          |d         t                    rt          |          dk    sJ |d         S d |D             S )Nrj     c                T    g | ]%}t          |t                    |j        |j        f&S r8   )ru   r   r  r  rJ  as     r;   rL  z4AgentExecutor._consume_next_step.<locals>.<listcomp>!  s@       ./Z9=U=U1=)  r>   )ru   r   r  )r:   rt  s     r;   _consume_next_stepz AgentExecutor._consume_next_step  s\     fRj+.. 	v;;!####": 39   r>   name_to_tool_mapdict[str, BaseTool]color_mappingdict[str, str]rD   c           
     n    |                      d |                     |||||          D                       S )Nc                    g | ]}|S r8   r8   r  s     r;   rL  z1AgentExecutor._take_next_step.<locals>.<listcomp>.  s(     	 	 	 	 	 	r>   )r  _iter_next_stepr:   r  r  r   rC   rY  s         r;   _take_next_stepzAgentExecutor._take_next_step%  sW     &&	 	--$!& 	 	 	
 
 	
r>   4Iterator[Union[AgentFinish, AgentAction, AgentStep]]c              #    K   	 |                      |          } | j        j        |fd|r|                                ndi|}n# t          $ r}t          | j        t                    r	| j         }nd}|rt          dt          |                     t          |          }	t          | j        t                    r3|j
        r)t          |j                  }
t          |j                  }	n^d}
n[t          | j        t                    r| j        }
n9t          | j                  r|                     |          }
nt          d          t          d|
|	          }|r|                    |d	           | j                                        } t#                      j        |j        f| j        d|r|                                ndd
|}
t+          ||
          V  Y d}~dS d}~ww xY wt          |t,                    r|V  dS t          |t                    r|g}n|}|D ]}|V  |D ]}|                     ||||          V  dS )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`rV  r  r  r  r  rE   r  r  )_prepare_intermediate_stepsr  rK   	get_childr   ru   ri  r   r_   rV   send_to_llmr  
llm_outputcallabler   on_agent_actionr   rU  r  
tool_inputr  r   r   _perform_agent_action)r:   r  r  r   rC   rY  r7   eraise_errorr   r  tool_run_kwargsactionsagent_actions                 r;   r  zAgentExecutor._iter_next_step:  s     .	!%!A!ABT!U!U -T'," 5@J+//111d  FF
 % %	 %	 %	$4d;; $"&"<<#  3 +.a&&3 3   q66D$4d;; S= C"%am"4"4Kq|,,DD"BKKD6<< S"8$455 S"88;; !QRRR {DAAF C++F'+BBB"0HHJJO--//-!5@J+//111d	 
 " K 6{CCCCCCFFFFFK%	P fk** 	LLLF fk** 	hGGG# 	 	L# 	 	L,, -{     	 	s   A A G-FG((G-r  r   r   c                B   |r|                     |d           |j        |v rt||j                 }|j        }||j                 }| j                                        }|rd|d<    |j        |j        f| j        ||r|                                nd d|}	ny| j                                        } t                      j        |j        t          |                                          df| j        d |r|                                nd d|}	t          ||	          S )Nr  r  r[   r	  r  requested_tool_nameavailable_tool_namesr  )r  rK  return_directr  r   r  r  r  r  r,   r   keysr   
r:   r  r  r  rY  rK  r  r  r  r  s
             r;   r  z#AgentExecutor._perform_agent_action  so     	E''G'DDD 000#L$56D .M!,"34E"0HHJJO 302-"$('5@J+//111d	 
 " KK #0HHJJO++--++7+<,01A1F1F1H1H,I,I 	
 5@J+//111d	 	 "	 	K +FFFFr>   c           
     ~   K   |                      d |                     |||||          2              d {V           S )Nc                $   K   g | 3 d {V 	 }|6 S rA   r8   r  s     r;   rL  z2AgentExecutor._atake_next_step.<locals>.<listcomp>  sO       	 	 	 	 	 	 	 	 	 	 	 	 	s   )r  _aiter_next_stepr  s         r;   _atake_next_stepzAgentExecutor._atake_next_step  sy       &&	 	#44$!&   	 	 	 	 	 	 	 	 	
 
 	
r>   9AsyncIterator[Union[AgentFinish, AgentAction, AgentStep]]c                  K   	                       |          }  j        j        |fdr                                ndi| d{V }n# t          $ r}t           j        t                    r	 j         }nd}|rt          dt          |                     t          |          }	t           j        t                    r3|j
        r)t          |j                  }
t          |j                  }	n^d}
n[t           j        t                    r j        }
n9t           j                  r                     |          }
nt          d          t          d|
|	          } j                                        } t!                      j        |j        f j        dr                                ndd| d{V }
t)          ||
	          W V  Y d}~dS d}~ww xY wt          |t*                    r|W V  dS t          |t                    r|g}n|}|D ]}|W V  t-          j         fd
|D               d{V }|D ]}|W V  dS )r  rE   NFr  r  r  rV  r  r  c                @    g | ]}                     |          S r8   )_aperform_agent_action)rJ  r  r  r  rY  r:   s     r;   rL  z2AgentExecutor._aiter_next_step.<locals>.<listcomp>  sD        ! ++$m\;   r>   )r  r  rO   r  r   ru   ri  r   r_   rV   r  r  r  r  r   r   rU  r  r  r  r   r   asynciogather)r:   r  r  r   rC   rY  r7   r  r  r   r  r  r  r  resultr   s   ```  `          r;   r  zAgentExecutor._aiter_next_step  sk     ,	!%!A!ABT!U!U 44-3" 5@J+//111d        FF
 % #	 #	 #	$4d;; $"&"<<#  3 +.a&&3 3   q66D$4d;; S= C"%am"4"4Kq|,,DD"BKKD6<< S"8$455 S"88;; !QRRR {DAAF"0HHJJO 4 4!!5@J+//111d	! !
 "! !      K 6{CCCCCCCFFFFFG#	L fk** 	LLLLF fk** 	hGGG# 	 	L ~       %,	  
 
 
 
 
 
 
  	 	EKKKKK	 	s   AA G%E?G  G%c                v  K   |r#|                     || j        d           d {V  |j        |v rz||j                 }|j        }||j                 }| j                                        }|rd|d<    |j        |j        f| j        ||r|                                nd d| d {V }	n| j                                        } t                      j        |j        t          |                                          df| j        d |r|                                nd d| d {V }	t          ||	          S )Nr  )r  r  r[   r	  r  r  r  )r  r  rK  r  r  r   r  r  r  r,   r   r  r   r  s
             r;   r  z$AgentExecutor._aperform_agent_action  s       	--dl' .           000#L$56D .M!,"34E"0HHJJO 302- )	'!5@J+//111d	! !
 "! !      KK #0HHJJO 2 2+7+<,01A1F1F1H1H,I,I 	!
 5@J+//111d	! 	! "	! 	! 	 	 	 	 	 	K +FFFFr>   c                   d | j         D             }t          d | j         D             ddg          }g }d}d}t          j                    }|                     ||          r|                     |||||          }	t          |	t                    r|                     |	||          S |                    |	           t          |	          d	k    r7|	d         }
| 
                    |
          }||                     |||          S |d	z  }t          j                    |z
  }|                     ||           | j        j        | j        |fi |}|                     |||          S )
z(Run text through and get agent response.c                    i | ]
}|j         |S r8   rG  rI  s     r;   r  z'AgentExecutor._call.<locals>.<dictcomp>H      CCCDItCCCr>   c                    g | ]	}|j         
S r8   rG  rI  s     r;   rL  z'AgentExecutor._call.<locals>.<listcomp>K      ...4TY...r>   r  redexcluded_colorsr           rY  r  )rc   r$   timer  r  ru   r   r  extendr  _get_tool_returnr  ra   rU   r:   r   rY  r  r  rC   r  r  
start_timenext_step_outputnext_step_actiontool_returnr7   s                r;   _callzAgentExecutor._callA  s    DC
CCC)..4:...%@P
 
 
 =?
Y[[
##J== 	4#33 "'  4     *K88 ||$&8k $    %%&6777#$$))#3A#6 "334DEE*<<#%7[ (    !OJ9;;3L/ ##J== 	40 <#;&(:
 
>D
 
 ||F$6K|PPPr>   c                |  K   d | j         D             }t          d | j         D             dg          }g }d}d}t          j                    }	 t          | j                  4 d{V  |                     ||          r|                     |||||           d{V }	t          |	t                    r0| 	                    |	||           d{V cddd          d{V  S |
                    |	           t          |	          d	k    rO|	d         }
|                     |
          }|0| 	                    |||           d{V cddd          d{V  S |d	z  }t          j                    |z
  }|                     ||           | j        j        | j        |fi |}| 	                    |||           d{V cddd          d{V  S # 1 d{V swxY w Y   dS # t           t"          j        f$ r:  | j        j        | j        |fi |}| 	                    |||           d{V cY S w xY w)
z.Async run text through and get agent response.c                    i | ]
}|j         |S r8   rG  rI  s     r;   r  z(AgentExecutor._acall.<locals>.<dictcomp>w  r  r>   c                    g | ]	}|j         
S r8   rG  rI  s     r;   rL  z(AgentExecutor._acall.<locals>.<listcomp>z  r  r>   r  r  r   r  Nr  r  )rc   r$   r  r/   rh  r  r  ru   r   r  r  r  r  r  ra   rU   TimeoutErrorr  r  s                r;   _acallzAgentExecutor._acallp  sI      DC
CCC)..4:...	
 
 
 =?
Y[[
*	&t'>?? ! ! ! ! ! ! ! !++JEE <-1-B-B(%*$/ .C . . ( ( ( ( ( ($ ""2K@@ %)]],.(3 &3 & &            ! ! ! ! ! ! ! ! ! ! ! ! ! !  '--.>???+,,11+;A+>(&*&;&;<L&M&M&2)- +-?[ *7 * * $ $ $ $ $ $-! ! ! ! ! ! ! ! ! ! ! ! ! !4 !OJ#'9;;#;L5 ++JEE <6 D+C.0B FL  "]].K +        ?! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !D g23 	 	 	?T'?*,> BH F * '           	sR   G+ )A*GG+ &A$G
G+ A(GG+ 
G""G+ %G"&G+ +AH;:H;r  tuple[AgentAction, str]Optional[AgentFinish]c                    |\  }}d | j         D             }d}t          | j        j                  dk    r| j        j        d         }|j        |v r$||j                 j        rt          ||id          S dS )z&Check if the tool is a returning tool.c                    i | ]
}|j         |S r8   rG  rI  s     r;   r  z2AgentExecutor._get_tool_return.<locals>.<dictcomp>  r  r>   r7   r   r[   N)rc   r  r  r<   rK  r  r   )r:   r  r  r  r  return_value_keys         r;   r  zAgentExecutor._get_tool_return  s     %5!kCC
CCC#t!/00144#1?B 000 12@ "%{3   tr>   c                    t          | j        t                    r| j        dk    r|| j         d          S t          | j                  r|                     |          S |S )Nr   )ru   rk  r  r  )r:   rC   s     r;   r  z)AgentExecutor._prepare_intermediate_steps  sl     t3S99	&,q00%t'C&C&E&EFFd233 	&//0BCCC%%r>   inputUnion[dict[str, Any], Any]r   Optional[RunnableConfig]Iterator[AddableDict]c           	   +     K   t          |          }t          | ||                    d          f|                    d          |                    d          |                    d          |                    d          dd|}|E d{V  dS )	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*   rv  )r:   r  r   rF   iterators        r;   r   zAgentExecutor.stream  s        v&&(JJ{##

 F##ZZ
++ZZ
++::h''

 

 

 

 r>   AsyncIterator[AddableDict]c           	    0  K   t          |          }t          | ||                    d          f|                    d          |                    d          |                    d          |                    d          dd|}|2 3 d{V }|W V  6 dS )	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  )r:   r  r   rF   r	  steps         r;   r   zAgentExecutor.astream  s      " v&&(JJ{##

 F##ZZ
++ZZ
++::h''

 

 

 

 # 	 	 	 	 	 	 	$JJJJJ #((s   BrA   )
rd  rc  rc   rd   rE   r   rF   r	   r2   rb  rS  )rt  ry   r2   r	   )r2   r~  r   )
r   r	   rE   r   r  r   r  r   r2   r*   r   )rH  rV   r2   r#   )r  r  r  r  r2   r   )r7   r   rC   r   rY  r  r2   r  )r7   r   rC   r   rY  r  r2   r  )rt  r  r2   r  )r  r  r  r  r   r  rC   rD   rY  r  r2   r  )r  r  r  r  r   r  rC   rD   rY  r  r2   r  )
r  r  r  r  r  r   rY  r  r2   r   )r  r  r  r  r   r  rC   rD   rY  r  r2   r  )r  r  r  r  r   r  rC   rD   rY  r  r2   r  )
r  r  r  r  r  r   rY  r  r2   r   )r   r  rY  r  r2   r  )r   r  rY  r  r2   r  )r  r  r2   r  )rC   rD   r2   rD   )r  r  r   r   rF   r	   r2   r  )r  r  r   r   rF   r	   r2   r
  )(r   r   r   r   r   re  rg  rh  rU   ri  rk  r   rm  r'   rr  r}  r   r  r   r  r  rT   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r8   r>   r;   rb  rb    s$        $$GGGG3-&+++++3$&N&&&&9 +/.... ")(((( 	      	      
  $	
 
 
 
 [
2 _'"""   #". _(###   [ $#:    X
 
 
 
2 2 2 2  $

 "'
 
 
 
 
 
6 - - - X- 4 4 4 X4	> 	> 	> 	>	 	 	 	 =A	    " BF	    	 	 	 	" =A
 
 
 
 
6 =AK K K K Kd =A%G %G %G %G %GZ BF
 
 
 
 
6 BFS S S S St BF'G 'G 'G 'G 'GX =A-Q -Q -Q -Q -Qd BF< < < < <|   $& & & &  ,0    B ,0      r>   rb  )`r   
__future__r   r  builtinsr   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(   langchain._api.deprecationr)   langchain.agents.agent_iteratorr*   langchain.agents.agent_typesr+   langchain.agents.toolsr,   langchain.chains.baser-   langchain.chains.llmr.   langchain.utilities.asyncior/   	getLoggerr   r5  r1   r   r   r   r   r   r   r   r  rU  r  r  rb  r8   r>   r;   <module>r,     s   K K " " " " " "            = = = = = = = = = =                     * * * * * * E E E E E E E E E E                < ; ; ; ; ; < < < < < < / / / / / / : : : : : : 5 5 5 5 5 5 A A A A A A 8 8 8 8 8 8 L L L L L L L L L L 6 6 6 6 6 6 ) ) ) ) ) ) 8 8 8 8 8 8 ; ; ; ; ; ; ; ; ; ; " " " " " " @ @ @ @ @ @ A A A A A A 2 2 2 2 2 2 . . . . . . ' ' ' ' ' ' ) ) ) ) ) ) 7 7 7 7 7 7		8	$	$g g g g gI g g gTR R R R R9 R R Rj3 3 3 3 3({K/G)HI 3 3 3    U4,k9:;  *j j j j j) j j jZr r r r r3 r r rj %  
P
 P
 P
 P
 P
0 P
 P
 
P
f %  
a
 a
 a
 a
 a
! a
 a
 
a
H	    H   . eKi?@A-)AAB v v v v vE v v v v vr>   