
    Ng                       d Z ddlmZ ddlmZmZmZmZmZ ddl	m
Z
 ddlmZ ddlmZ ddlmZ ddlmZmZ dd	lmZ dd
lmZ ddlmZmZmZ ddlmZ ddlmZ ddl m!Z! ddl"m#Z# ddl$m%Z% erddl&m'Z'  e
ded           G d de                      Z( e
ded           G d d                      Z) e
ded           G d de(                      Z* e
ded           G d de                      Z+dS )zPChain that implements the ReAct paper from https://arxiv.org/pdf/2210.03629.pdf.    )annotations)TYPE_CHECKINGAnyListOptionalSequence)
deprecated)Document)BaseLanguageModel)BasePromptTemplate)BaseToolTool)Field)AGENT_DEPRECATION_WARNING)AgentAgentExecutorAgentOutputParser)	AgentTypeReActOutputParserTEXTWORLD_PROMPTWIKI_PROMPT)validate_tools_single_input)Docstorez0.1.0z1.0)messageremovalc                       e Zd ZU dZ ee          Zded<   edd            Z	e
dd
            Zedd            Zed fd            Ze
dd            Ze
dd            Ze
dd            Z xZS )ReActDocstoreAgentzAgent for the ReAct chain.)default_factoryr   output_parserkwargsr   returnc                    t                      S )Nr   )clsr#   s     W/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain/agents/react/base.py_get_default_output_parserz-ReActDocstoreAgent._get_default_output_parser$   s     """    strc                    t           j        S )z#Return Identifier of an agent type.)r   REACT_DOCSTOREselfs    r'   _agent_typezReActDocstoreAgent._agent_type(   s     ''r)   toolsSequence[BaseTool]r   c                    t           S zReturn default prompt.r   r&   r0   s     r'   create_promptz ReActDocstoreAgent.create_prompt-   s
     r)   Nonec                
   t          | j        |           t                                          |           t	          |          dk    rt          d|           d |D             }|ddhk    rt          d|           d S )N   z-Exactly two tools must be specified, but got c                    h | ]	}|j         
S  name.0tools     r'   	<setcomp>z5ReActDocstoreAgent._validate_tools.<locals>.<setcomp>8       222Ddi222r)   LookupSearchz,Tool names should be Lookup and Search, got r   __name__super_validate_toolslen
ValueErrorr&   r0   
tool_names	__class__s      r'   rG   z"ReActDocstoreAgent._validate_tools2   s    #CL%888&&&u::??TUTTUUU22E222
(H---KzKK   .-r)   c                    dS )z&Prefix to append the observation with.zObservation: r:   r-   s    r'   observation_prefixz%ReActDocstoreAgent.observation_prefix>   s	     r)   	List[str]c                    dgS )Nz
Observation:r:   r-   s    r'   _stopzReActDocstoreAgent._stopC   s     !!r)   c                    dS )z#Prefix to append the LLM call with.zThought:r:   r-   s    r'   
llm_prefixzReActDocstoreAgent.llm_prefixG   s	     zr)   )r#   r   r$   r   r$   r*   r0   r1   r$   r   r0   r1   r$   r6   r$   rO   )rE   
__module____qualname____doc__r   r   r"   __annotations__classmethodr(   propertyr/   r5   rG   rN   rQ   rS   __classcell__rL   s   @r'   r    r       s0         %$',u=N'O'O'OMOOOO# # # [# ( ( ( X(    [ 	 	 	 	 	 [	    X " " " X"    X    r)   r    c                  Z    e Zd ZdZddZddZdd	Zedd
            Zedd            Z	dS )DocstoreExplorerz5Class to assist with exploration of a document store.docstorer   c                >    || _         d| _        d| _        d| _        dS )z=Initialize with a docstore, and set initial document to None.N r   )rb   document
lookup_strlookup_index)r.   rb   s     r'   __init__zDocstoreExplorer.__init__U   s%     ,0r)   termr*   r$   c                    | j                             |          }t          |t                    r|| _        | j        S d| _        |S )z5Search for a term in the docstore, and if found save.N)rb   search
isinstancer
   re   _summary)r.   ri   results      r'   rk   zDocstoreExplorer.search\   sD    %%d++fh'' 	"DM=  DMMr)   c                     j         t          d          |                                 j        k    r!|                                 _        d _        n xj        dz  c_         fd j        D             }t          |          dk    rdS  j        t          |          k    rdS d j        dz    d	t          |           d
}| d| j                  S )z%Lookup a term in document (if saved).Nz/Cannot lookup without a successful search firstr      c                J    g | ]}j         |                                v | S r:   )rf   lower)r>   pr.   s     r'   
<listcomp>z+DocstoreExplorer.lookup.<locals>.<listcomp>o   s-    OOO$/QWWYY2N2N12N2N2Nr)   z
No ResultszNo More Resultsz(Result /) )re   rI   rr   rf   rg   _paragraphsrH   )r.   ri   lookupsresult_prefixs   `   r'   lookupzDocstoreExplorer.lookupf   s    = NOOO::<<4?**"jjllDO !D"OOOOd.OOOw<<1<#g,,..$$Nt'81'<NNs7||NNNM#BBgd.?&@BBBr)   c                    | j         d         S )Nr   )rx   r-   s    r'   rm   zDocstoreExplorer._summaryx   s    ""r)   rO   c                l    | j         t          d          | j         j                            d          S )Nz(Cannot get paragraphs without a documentz

)re   rI   page_contentsplitr-   s    r'   rx   zDocstoreExplorer._paragraphs|   s2    = GHHH})//777r)   N)rb   r   )ri   r*   r$   r*   rT   rW   )
rE   rX   rY   rZ   rh   rk   r{   r]   rm   rx   r:   r)   r'   ra   ra   M   s         @?      C C C C$ # # # X# 8 8 8 X8 8 8r)   ra   c                  L     e Zd ZdZed	d            Zed
 fd            Z xZS )ReActTextWorldAgentz$Agent for the ReAct TextWorld chain.r0   r1   r$   r   c                    t           S r3   r   r4   s     r'   r5   z!ReActTextWorldAgent.create_prompt   s
      r)   r6   c                   t          | j        |           t                                          |           t	          |          dk    rt          d|           d |D             }|dhk    rt          d|           d S )Nrp   z,Exactly one tool must be specified, but got c                    h | ]	}|j         
S r:   r;   r=   s     r'   r@   z6ReActTextWorldAgent._validate_tools.<locals>.<setcomp>   rA   r)   PlayzTool name should be Play, got rD   rJ   s      r'   rG   z#ReActTextWorldAgent._validate_tools   s    #CL%888&&&u::??SESSTTT22E222
&!!JjJJKKK "!r)   rU   rV   )rE   rX   rY   rZ   r\   r5   rG   r^   r_   s   @r'   r   r      sy         /.      [  L L L L L [L L L L Lr)   r   c                  $     e Zd ZdZd	 fdZ xZS )

ReActChainz3[Deprecated] Chain that implements the ReAct paper.llmr   rb   r   r#   r   c                    t          |          }t          d|j        d          t          d|j        d          g}t                              ||          } t                      j        d||d| dS )	z'Initialize with the LLM and a docstore.rC   z"Search for a term in the docstore.)r<   funcdescriptionrB   zLookup a term in the docstore.)agentr0   Nr:   )ra   r   rk   r{   r    from_llm_and_toolsrF   rh   )r.   r   rb   r#   docstore_explorerr0   r   rL   s          r'   rh   zReActChain.__init__   s    ,X66&-@  
 &-<  
 #55c5AA<uE<<V<<<<<r)   )r   r   rb   r   r#   r   )rE   rX   rY   rZ   rh   r^   r_   s   @r'   r   r      sE         >== = = = = = = = = =r)   r   N),rZ   
__future__r   typingr   r   r   r   r   langchain_core._apir	   langchain_core.documentsr
   langchain_core.language_modelsr   langchain_core.promptsr   langchain_core.toolsr   r   pydanticr   langchain._api.deprecationr   langchain.agents.agentr   r   r   langchain.agents.agent_typesr   $langchain.agents.react.output_parserr   'langchain.agents.react.textworld_promptr   "langchain.agents.react.wiki_promptr   langchain.agents.utilsr   !langchain_community.docstore.baser   r    ra   r   r   r:   r)   r'   <module>r      s   V V " " " " " " ? ? ? ? ? ? ? ? ? ? ? ? ? ? * * * * * * - - - - - - < < < < < < 5 5 5 5 5 5 / / / / / / / /       @ @ @ @ @ @ J J J J J J J J J J 2 2 2 2 2 2 B B B B B B D D D D D D : : : : : : > > > > > > ;:::::: %  
+ + + + + + + 
+\ %  
.8 .8 .8 .8 .8 .8 .8 
.8b %  
L L L L L, L L 
L& %  
= = = = = = = 
= = =r)   