
    Ng                       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mZ ddl	m
Z
 ddlmZmZmZmZmZmZ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lAmBZB ddlCmDZD ddlEmFZF ddlGmHZH ddlImJZJ ddlKmLZL ddlMmNZN ddlOmPZP  ejQ        eR          ZS G d de>          ZT G d  d!e>          ZU G d" d#e,eeef                            ZV G d$ d%e,eee         ef                            ZW G d& d'eT          ZX G d( d)eU          ZY ed*eDd+,           G d- d.eT                      ZZ ed*eDd+,           G d/ d0eT                      Z[ G d1 d2e:          Z\eeeeef                  Z]eeXeYf         Z^ G d3 d4eL          Z_dS )5zEChain that takes in an input and produces an action and action input.    )annotationsN)abstractmethod)Path)AnyAsyncIteratorCallableDictIteratorListOptionalSequenceTuple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    R/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain/agents/agent.pyreturn_valuesz#BaseSingleActionAgent.return_values@        z    Optional[List[str]]c                    d S Nr;   r<   s    r>   get_allowed_toolsz'BaseSingleActionAgent.get_allowed_toolsE   s    trA   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.
        Nr;   r=   rF   rH   rI   s       r>   planzBaseSingleActionAgent.planH         rA   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.
        Nr;   rM   s       r>   aplanzBaseSingleActionAgent.aplan[   
        rA   c                    dS 7Return the input keys.

        :meta private:
        Nr;   r<   s    r>   
input_keysz BaseSingleActionAgent.input_keysn   rO   rA   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.
        forcer:   3Agent stopped due to iteration limit or time limit. 'Got unsupported early_stopping_method ``r   
ValueErrorr=   rX   rF   rI   s       r>   return_stopped_responsez-BaseSingleActionAgent.return_stopped_responsev   sP    ( !G++PQSU   R:ORRR  rA   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)clsre   rf   rh   rI   s        r>   from_llm_and_toolsz(BaseSingleActionAgent.from_llm_and_tools   s
    & "!rA   c                    t           z#Return Identifier of an agent type.rk   r<   s    r>   _agent_typez!BaseSingleActionAgent._agent_type   
     "!rA   r	   c                    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_dumprq   rl   
isinstancer.   rY   value)r=   rI   _dictrt   	__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_okrt   Agent z does not support saving.jsonw   indentNz.yamlz.ymlFdefault_flow_style must be json or yaml)rw   rY   r   parentmkdirr{   rl   suffixopenjsondumpendswithyamlrb   )r=   r|   	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.r;   r<   s    r>   tool_run_logging_kwargsz-BaseSingleActionAgent.tool_run_logging_kwargs   s    	rA   r5   r6   r5   rB   rD   rF   rG   rH   r   rI   r   r5   rJ   rX   rY   rF   rG   rI   r   r5   r   )
re   r   rf   rg   rh   ri   rI   r   r5   r4   r5   rY   rI   r   r5   r	   r|   r}   r5   r~   r5   r	   )__name__
__module____qualname____doc__propertyr?   rE   r   rN   rR   rW   rd   classmethodrn   rq   r{   r   r   __classcell__rz   s   @r>   r4   r4   =   s~       ))   X      $    ^$   $    ^$    ^ X   < 
 ;?	" " " " ["( " " " X"     "!B !B !B !BF       rA   r4   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.r5   r6   c                    dgS r8   r;   r<   s    r>   r?   z"BaseMultiActionAgent.return_values   r@   rA   rB   c                    dS )z]Get allowed tools.

        Returns:
            Optional[List[str]]: Allowed tools.
        Nr;   r<   s    r>   rE   z&BaseMultiActionAgent.get_allowed_tools   s	     trA   NrF   rG   rH   r   rI   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.
        Nr;   rM   s       r>   rN   zBaseMultiActionAgent.plan   rO   rA   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.
        Nr;   rM   s       r>   rR   zBaseMultiActionAgent.aplan
  rS   rA   c                    dS rU   r;   r<   s    r>   rW   zBaseMultiActionAgent.input_keys  rO   rA   rX   rY   r   c                X    |dk    rt          ddid          S t          d| d          )r[   r\   r:   z$Agent stopped due to max iterations.r^   r_   r`   ra   rc   s       r>   rd   z,BaseMultiActionAgent.return_stopped_response%  sG    ( !G++*PQSUVVVR:ORRR  rA   c                    t           rp   rk   r<   s    r>   rq   z BaseMultiActionAgent._agent_typeA  rr   rA   r	   c                    t                                                      }	 t          | j                  |d<   n# t          $ r Y nw xY w|S )*Return dictionary representation of agent.rt   )ru   rv   rY   rq   rl   r=   rI   ry   rz   s      r>   r{   zBaseMultiActionAgent.dictF  sX    ""$$	 !122E'NN" 	 	 	D	s   ; 
AAr|   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")
        rt   r   z does not support saving.Tr   r   r   r   r   Nr   Fr   r   )rw   rY   r   r{   rl   r   r   r   r   r   r   r   r   rb   )r=   r|   r   r   r   r   s         r>   r   zBaseMultiActionAgent.saveO  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   r;   r<   s    r>   r   z,BaseMultiActionAgent.tool_run_logging_kwargsv  s	     	rA   r   r   rD   rF   rG   rH   r   rI   r   r5   r   r   r   r   r   r   )r   r   r   r   r   r?   rE   r   rN   rR   rW   rd   rq   r{   r   r   r   r   s   @r>   r   r      sT       ((   X      $    ^$   $    ^$    ^ X   8 " " " X"     %B %B %B %BN       rA   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.textrY   r5   rJ   c                    dS )z$Parse text into agent action/finish.Nr;   r=   r   s     r>   parsezAgentOutputParser.parse  rO   rA   N)r   rY   r5   rJ   r   r   r   r   r   r   r;   rA   r>   r   r   |  s8        GG3 3 3 ^3 3 3rA   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   rY   r5   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.
        Nr;   r   s     r>   r   z"MultiActionAgentOutputParser.parse  rO   rA   N)r   rY   r5   r   r   r;   rA   r>   r   r     s>         
 	 	 	 ^	 	 	rA   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]]runnabler6   input_keys_argreturn_keys_argTboolstream_runnablearbitrary_types_allowedr5   c                    | j         S r9   r   r<   s    r>   r?   zRunnableAgent.return_values       ##rA   c                    | j         S )zReturn the input keys.r   r<   s    r>   rW   zRunnableAgent.input_keys  s     ""rA   NrF   rG   rH   r   rI   r   rJ   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.
        rF   NrH   configr   r   streaminvoker=   rF   rH   rI   inputsfinal_outputchunks          r>   rN   zRunnableAgent.plan  s    " JFI35GHI  	Y --fk9=U-VV * *'#(LL E)LL	*  =//Y?W/XXLrA   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.
        rF   NrH   r   r   r   astreamainvoker   s          r>   rR   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   rD   r   r   r   r   r   __annotations__r   r   r   r)   model_configr   r?   rW   rN   rR   r;   rA   r>   r   r     s         %%====/ "N""""!#O#### O     : $  L $ $ $ X$ # # # X#  $" " " " "N  $( ( ( ( ( ( (rA   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   r6   r   r   Tr   r   r   r5   c                    | j         S r   r   r<   s    r>   r?   z&RunnableMultiActionAgent.return_values  r   rA   c                    | j         S )QReturn the input keys.

        Returns:
            List of input keys.
        r   r<   s    r>   rW   z#RunnableMultiActionAgent.input_keys  s     ""rA   NrF   rG   rH   r   rI   r   r   c                    i |d|i}d}| j         r,| j                            |d|i          D ]}||}||z  }n| j                            |d|i          }|S r   r   r   s          r>   rN   zRunnableMultiActionAgent.plan(  s    ( JFI35GHI  	Y --fk9=U-VV * *'#(LL E)LL	*  =//Y?W/XXLrA   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>   rR   zRunnableMultiActionAgent.aplanO  s      ( JFI35GHI  	  $}44Y7  5     * * * * * * *e  '#(LL E)LL    "&!6!6Y7 "7 " "      L r   r   rD   r   r   r;   rA   r>   r   r     s         %%CCCC0 "N""""!#O#### O     : $  L $ $ $ X$ # # # X#  $% % % % %T  $) ) ) ) ) ) )rA   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.r1   	llm_chainr   output_parserr6   stopr5   c                V    t          t          | j        j                  dhz
            S )r   rF   listsetr   rW   r<   s    r>   rW   zLLMSingleActionAgent.input_keys  s(     C1226J5KKLLLrA   rI   r   r	   c                N    t                                                      }|d= |S r   r   ru   r{   r   s      r>   r{   zLLMSingleActionAgent.dict  !    /"rA   NrF   rG   rH   r   rJ   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.
        rF   r   rH   r;   )r   runr   r   r   r=   rF   rH   rI   r:   s        r>   rN   zLLMSingleActionAgent.plan  sR    " $# 
1
 
 	
 
 !''///rA   c                |   K    | j         j        d|| j        |d| d{V }| j                            |          S )rQ   r  Nr;   )r   arunr   r   r   r  s        r>   rR   zLLMSingleActionAgent.aplan  st      " +t~* 
1
 
 	
 
 
 
 
 
 
 
 !''///rA   c                V    dt          | j                  dk    rdn| j        d         dS )r   r^   r   
llm_prefixobservation_prefix)lenr   r<   s    r>   r   z,LLMSingleActionAgent.tool_run_logging_kwargs  s5     (+DI!(;(;""1
 
 	
rA   r   r   rD   r   r   )r   r   r   r   r   r   rW   r{   rN   rR   r   r   r   s   @r>   r   r   {  s          /.$$$$$)OOO%M M M XM       $0 0 0 0 08  $0 0 0 0 02
 
 
 
 
 
 
 
rA   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.
    r1   r   r   r   NrB   allowed_toolsrI   r   r5   r	   c                N    t                                                      }|d= |S r   r  r   s      r>   r{   z
Agent.dict  r  rA   c                    | j         S )zGet allowed tools.)r  r<   s    r>   rE   zAgent.get_allowed_tools  s    !!rA   r6   c                    dgS r8   r;   r<   s    r>   r?   zAgent.return_values  r@   rA   r   rY   c                     t          d          )zsFix the text.

        Args:
            text: Text to fix.

        Returns:
            str: Fixed text.
        z(fix_text not implemented for this agent.rb   r   s     r>   	_fix_textzAgent._fix_text  s     CDDDrA   c                r    d| j                                          d| j                                          gS )N
z
	)r  rstripr<   s    r>   _stopzAgent._stop  sB     4(//113354*113355
 	
rA   rF   rG   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=   rF   thoughtsactionobservations        r>   _construct_scratchpadzAgent._construct_scratchpad  sW     #5 	W 	WFK
"HVT4VkVVT_VVVHHrA   rH   r   rJ   c                z     | j         |fi |} | j        j        dd|i|}| j                            |          S )rL   rH   r;   )get_full_inputsr   predictr   r   )r=   rF   rH   rI   full_inputsfull_outputs         r>   rN   z
Agent.plan  sU    " +d*+=HHHH,dn,PPyPKPP!''444rA   c                   K    | j         |fi |} | j        j        dd|i| d{V }| j                            |           d{V }|S )rQ   rH   Nr;   )r#  r   apredictr   aparse)r=   rF   rH   rI   r%  r&  agent_outputs          r>   rR   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rA   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=   rF   rI   r  
new_inputsr%  s         r>   r#  zAgent.get_full_inputs=  s<     --.@AA*2DJGG
..:.rA   c                V    t          t          | j        j                  dhz
            S )rV   r.  r   r<   s    r>   rW   zAgent.input_keysO  s(     C1226H5IIJJJrA   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appendrw   r!   templater    r   rb   type)r=   r5  s     r>   validate_promptzAgent.validate_promptW  s     &V%;;;NN=   "))*<===&.11 O#99F$9:: O!77 !MtF||!M!MNNNrA   c                    dS )z&Prefix to append the observation with.Nr;   r<   s    r>   r  zAgent.observation_prefixt  rO   rA   c                    dS )z#Prefix to append the LLM call with.Nr;   r<   s    r>   r  zAgent.llm_prefixy  rO   rA   rf   rg   r   c                    dS )zCreate a prompt for this class.

        Args:
            tools: Tools to use.

        Returns:
            BasePromptTemplate: Prompt template.
        Nr;   rm   rf   s     r>   create_promptzAgent.create_prompt~  rO   rA   r~   c                    dS )zgValidate that appropriate tools are passed in.

        Args:
            tools: Tools to use.
        Nr;   r@  s     r>   _validate_toolszAgent._validate_tools  s	     	rA   c                    dS )z)Get default output parser for this class.Nr;   )rm   rI   s     r>   _get_default_output_parserz Agent._get_default_output_parser  rO   rA   re   r   rh   ri   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.
        )re   r5  rh   c                    g | ]	}|j         
S r;   name.0tools     r>   
<listcomp>z,Agent.from_llm_and_tools.<locals>.<listcomp>  s    222Ddi222rA   )r   r  r   r;   )rC  r1   rA  rE  )	rm   re   rf   rh   r   rI   r   
tool_names_output_parsers	            r>   rn   zAgent.from_llm_and_tools  s    * 	E"""$$U++-
 
 
	
 32E222
&J#*H*H*J*Js 
$(
 
 	
 
 	
rA   rX   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'].
        r\   r:   r]   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 Nr;   )r   r  r  r  r  r   r$  r   r   rw   rb   )r=   rX   rF   rI   r  r  r   r/  r%  r&  parsed_outputs              r>   rd   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/,/ /  rA   c                     | j         | j        dS )r   r
  r
  r<   s    r>   r   zAgent.tool_run_logging_kwargs  s     /"&"9
 
 	
rA   r   r   r   )r   rY   r5   rY   )rF   rG   r5   r  rD   r   )rF   rG   rI   r   r5   r+  r5   r+   r   )rf   rg   r5   r   )rf   rg   r5   r~   )rI   r   r5   r   )NN)re   r   rf   rg   rh   ri   r   rF  rI   r   r5   r  r   r   )r   r   r   r   r   r  r{   rE   r   r?   r  r  r!  rN   rR   r#  rW   r*   r<  r   r  r  r   rA  rC  rE  rn   rd   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
 
 
 
 
 
 
 
rA   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.
_ExceptionrY   rJ  zException tooldescriptionNqueryrun_manager#Optional[CallbackManagerForToolRun]r5   c                    |S rD   r;   r=   rZ  r[  s      r>   _runzExceptionTool._run  s	    
 rA   (Optional[AsyncCallbackManagerForToolRun]c                
   K   |S rD   r;   r^  s      r>   _arunzExceptionTool._arun  s      
 rA   rD   )rZ  rY   r[  r\  r5   rY   )rZ  rY   r[  r`  r5   rY   )	r   r   r   r   rJ  r   rY  r_  rb  r;   rA   r>   rW  rW    s         ++D'K''''"
 <@     AE      rA   rW  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]agentrg   rf   Fr   return_intermediate_steps   zOptional[int]max_iterationsNzOptional[float]max_execution_timer\   rY   rX   z8Union[bool, str, Callable[[OutputParserException], str]]handle_parsing_errorszTUnion[int, Callable[[List[Tuple[AgentAction, str]]], List[Tuple[AgentAction, str]]]]trim_intermediate_stepsrH   r   rI   r   r5   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.
        )rf  rf   rH   r;   r;   )rm   rf  rf   rH   rI   s        r>   from_agent_and_toolsz"AgentExecutor.from_agent_and_toolsG  s5    & s 

 
 	
 
 	
rA   r1  r2  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 r;   rI  rK  s     r>   rN  z0AgentExecutor.validate_tools.<locals>.<listcomp>r  s    )F)F)F$))F)F)FrA   zAllowed tools (z!) different than provided tools (c                    g | ]	}|j         
S r;   rI  rK  s     r>   rN  z0AgentExecutor.validate_tools.<locals>.<listcomp>u  s    'D'D'Dd	'D'D'DrA   ))rf  rf   rE   r   rb   )r=   rf  rf   r  s       r>   validate_toolszAgentExecutor.validate_toolsa  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   rA   beforevaluesr	   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.
        rf  FNr   T)r   r   )getrw   r"   
OutputTyper   r   r   r   	Exceptionpopr   r   )rm   rv  rf  output_typemulti_action_r   s          r>   validate_runnable_agentz%AgentExecutor.validate_runnable_agenty  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.
        )rw   rf  r"   r   RunnableAgentTyper<   s    r>   _action_agentzAgentExecutor._action_agent  s3     dj(++ 	)4:666:rA   r|   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=   r|   s     r>   r   zAgentExecutor.save  s     !
 
 	
rA   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1rA   )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   rH   r  r  s        r>   iterzAgentExecutor.iter  s,    & %-
 
 
 	
rA   r6   c                    | j         j        S )rV   )r  rW   r<   s    r>   rW   zAgentExecutor.input_keys  s     !,,rA   c                H    | j         r| j        j        dgz   S | j        j        S )z@Return the singular output key.

        :meta private:
        rF   )rg  r  r?   r<   s    r>   output_keyszAgentExecutor.output_keys  s0     ) 	4%37K6LLL%33rA   rJ  r&   c                0    d | j         D             |         S )zLookup tool by name.

        Args:
            name: Name of tool.

        Returns:
            BaseTool: Tool object.
        c                    i | ]
}|j         |S r;   rI  rK  s     r>   
<dictcomp>z-AgentExecutor.lookup_tool.<locals>.<dictcomp>  s    777D	4777rA   )rf   )r=   rJ  s     r>   lookup_toolzAgentExecutor.lookup_tool  s     87DJ777==rA   
iterationsinttime_elapsedfloatc                V    | j         || j         k    rdS | j        || j        k    rdS dS )NFT)ri  rj  )r=   r  r  s      r>   _should_continuezAgentExecutor._should_continue  s>    *zT=P/P/P5#/ 7775trA   r:   r   rF   r   r[  $Optional[CallbackManagerForChainRun]r+  c                j    |r|                     |d| j                   |j        }| j        r||d<   |S Ngreen)colorverboserF   on_agent_finishr  r?   rg  r=   r:   rF   r[  r   s        r>   _returnzAgentExecutor._return  sO      	U''gt|'TTT+) 	D1CL-.rA   )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-.rA   NextStepOutput1Union[AgentFinish, List[Tuple[AgentAction, str]]]c                    t          |d         t                    rt          |          dk    sJ |d         S d |D             S )Nrl     c                T    g | ]%}t          |t                    |j        |j        f&S r;   )rw   r   r  r   rL  as     r>   rN  z4AgentExecutor._consume_next_step.<locals>.<listcomp>%  s@       ./Z9=U=U1=)  rA   )rw   r   r  )r=   rv  s     r>   _consume_next_stepz AgentExecutor._consume_next_step  s\     fRj+.. 	v;;!####": 39   rA   name_to_tool_mapDict[str, BaseTool]color_mappingDict[str, str]rG   c           
     n    |                      d |                     |||||          D                       S )Nc                    g | ]}|S r;   r;   r  s     r>   rN  z1AgentExecutor._take_next_step.<locals>.<listcomp>2  s(     	 	 	 	 	 	rA   )r  _iter_next_stepr=   r  r  r   rF   r[  s         r>   _take_next_stepzAgentExecutor._take_next_step)  sW     &&	 	--$!& 	 	 	
 
 	
rA   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.
        rH   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`rX  r  r  r  r  rH   r  r   )_prepare_intermediate_stepsr  rN   	get_childr   rw   rk  r   rb   rY   send_to_llmr   
llm_outputcallabler   on_agent_actionr   rW  r  
tool_inputr  r   r   _perform_agent_action)r=   r  r  r   rF   r[  r:   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  rM  return_directr  r   r  r  r  r  r/   r   keysr   
r=   r  r  r  r[  rM  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FrA   c           
     ~   K   |                      d |                     |||||          2              d {V           S )Nc                $   K   g | 3 d {V 	 }|6 S rD   r;   r  s     r>   rN  z2AgentExecutor._atake_next_step.<locals>.<listcomp>  sO       	 	 	 	 	 	 	 	 	 	 	 	 	s   )r  _aiter_next_stepr  s         r>   _atake_next_stepzAgentExecutor._atake_next_step  sy       &&	 	#44$!&   	 	 	 	 	 	 	 	 	
 
 	
rA   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  rH   NFr  r  r  rX  r  r  c                @    g | ]}                     |          S r;   )_aperform_agent_action)rL  r  r  r  r[  r=   s     r>   rN  z2AgentExecutor._aiter_next_step.<locals>.<listcomp>  sD        ! ++$m\;   rA   )r  r  rR   r  r   rw   rk  r   rb   rY   r  r   r  r  r   r   rW  r  r  r  r   r   asynciogather)r=   r  r  r   rF   r[  r:   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  rM  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FrA   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 r;   rI  rK  s     r>   r  z'AgentExecutor._call.<locals>.<dictcomp>L      CCCDItCCCrA   c                    g | ]	}|j         
S r;   rI  rK  s     r>   rN  z'AgentExecutor._call.<locals>.<listcomp>O      ...4TY...rA   r  redexcluded_colorsr           r[  r  )rf   r'   timer  r  rw   r   r  extendr  _get_tool_returnr  rd   rX   r=   r   r[  r  r  rF   r  r  
start_timenext_step_outputnext_step_actiontool_returnr:   s                r>   _callzAgentExecutor._callE  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PrA   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 r;   rI  rK  s     r>   r  z(AgentExecutor._acall.<locals>.<dictcomp>{  r  rA   c                    g | ]	}|j         
S r;   rI  rK  s     r>   rN  z(AgentExecutor._acall.<locals>.<listcomp>~  r  rA   r  r  r   r  Nr  r  )rf   r'   r  r2   rj  r  r  rw   r   r  r  r  r  r  rd   rX   TimeoutErrorr  r  s                r>   _acallzAgentExecutor._acallt  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 r;   rI  rK  s     r>   r  z2AgentExecutor._get_tool_return.<locals>.<dictcomp>  r  rA   r:   r   r^   N)rf   r  r  r?   rM  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   trA   c                    t          | j        t                    r| j        dk    r|| j         d          S t          | j                  r|                     |          S |S )Nr   )rw   rm  r  r  )r=   rF   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%%rA   inputUnion[Dict[str, Any], Any]r   Optional[RunnableConfig]Iterator[AddableDict]c           	   +  "  K   t          |          }t          | ||                    d          f|                    d          |                    d          |                    d          |                    d          dd|}|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.
        rH   r  metadatarun_namerun_idTr  r  r  r  yield_actionsNr$   r-   rx  r=   r  r   rI   iteratorsteps         r>   r   zAgentExecutor.stream  s        v&&(JJ{##

 F##ZZ
++ZZ
++::h''

 

 

 

  	 	DJJJJ	 	rA   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.
        rH   r  r  r  r  Tr  Nr	  r
  s         r>   r   zAgentExecutor.astream  s      " v&&(JJ{##

 F##ZZ
++ZZ
++::h''

 

 

 

 # 	 	 	 	 	 	 	$JJJJJ #((s   BrD   )
rf  re  rf   rg   rH   r   rI   r   r5   rd  rU  )rv  r	   r5   r   )r5   r  r   )
r   r   rH   r   r  r   r  r   r5   r-   r   )rJ  rY   r5   r&   )r  r  r  r  r5   r   )r:   r   rF   r   r[  r  r5   r+  )r:   r   rF   r   r[  r  r5   r+  )rv  r  r5   r  )r  r  r  r  r   r  rF   rG   r[  r  r5   r  )r  r  r  r  r   r  rF   rG   r[  r  r5   r  )
r  r  r  r  r  r   r[  r  r5   r   )r  r  r  r  r   r  rF   rG   r[  r  r5   r  )r  r  r  r  r   r  rF   rG   r[  r  r5   r  )
r  r  r  r  r  r   r[  r  r5   r   )r   r  r[  r  r5   r+  )r   r  r[  r  r5   r  )r  r  r5   r  )rF   rG   r5   rG   )r  r   r   r  rI   r   r5   r  )r  r   r   r  rI   r   r5   r  )(r   r   r   r   r   rg  ri  rj  rX   rk  rm  r   ro  r*   rt  r  r   r  r   r  r  rW   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r;   rA   r>   rd  rd    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    D ,0      rA   rd  )`r   
__future__r   r  r   loggingr  abcr   pathlibr   typingr   r   r   r	   r
   r   r   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.baser0   langchain.chains.llmr1   langchain.utilities.asyncior2   	getLoggerr   r7  r4   r   r   r   r   r   r   r  rW  r  r  rd  r;   rA   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 w w w w wE w w w w wrA   