
    @h5                       S r SSKJr  SSKJr  SSKJrJrJr  SSK	J
r
  SSKJr  SSKJr  SSKJr  SS	KJrJr  SS
KJr  SSKJr  SSKJrJrJr  SSKJr  SSKJr  SSK J!r!  SSK"J#r#  SSK$J%r%  \(       a  SSK&J'r'  SS1r(\
" S\SS9 " S S\5      5       r)\
" S\SS9 " S S5      5       r*\
" S\SS9 " S S\)5      5       r+\
" S\SS9 " S S\5      5       r,g )!zPChain that implements the ReAct paper from https://arxiv.org/pdf/2210.03629.pdf.    )annotations)Sequence)TYPE_CHECKINGAnyOptional)
deprecated)Document)BaseLanguageModel)BasePromptTemplate)BaseToolTool)Field)AGENT_DEPRECATION_WARNING)AgentAgentExecutorAgentOutputParser)	AgentTypeReActOutputParserTEXTWORLD_PROMPTWIKI_PROMPT)validate_tools_single_input)DocstoreLookupSearchz0.1.0z1.0)messageremovalc                     ^  \ rS rSr% Sr\" \S9rS\S'   \	SS j5       r
\SS j5       r\	SS j5       r\	SU 4S	 jj5       r\SS
 j5       r\SS j5       r\SS j5       rSrU =r$ )ReActDocstoreAgent   zAgent for the ReAct chain.)default_factoryr   output_parserc                    [        5       $ )Nr   )clskwargss     S/var/www/html/shao/venv/lib/python3.13/site-packages/langchain/agents/react/base.py_get_default_output_parser-ReActDocstoreAgent._get_default_output_parser(   s     ""    c                "    [         R                  $ )z#Return Identifier of an agent type.)r   REACT_DOCSTOREselfs    r(   _agent_typeReActDocstoreAgent._agent_type,   s     '''r+   c                    [         $ zReturn default prompt.r   r&   toolss     r(   create_prompt ReActDocstoreAgent.create_prompt1   s
     r+   c                  > [        U R                  U5        [        TU ]  U5        [	        U5      [	        [
        5      :w  a  SU 3n[        U5      eU Vs1 sH  o3R                  iM     nnU[
        :w  a  SU 3n[        U5      eg s  snf )Nz-Exactly two tools must be specified, but got z,Tool names should be Lookup and Search, got )r   __name__super_validate_toolslen_LOOKUP_AND_SEARCH_TOOLS
ValueErrornamer&   r5   msgtool
tool_names	__class__s        r(   r;   "ReActDocstoreAgent._validate_tools6   s    #CLL%8&u:566A%ICS/!,12EDiiE
211@MCS/! 2 3s   Bc                    g)z&Prefix to append the observation with.zObservation:  r.   s    r(   observation_prefix%ReActDocstoreAgent.observation_prefixB   s     r+   c                    S/$ )Nz
Observation:rG   r.   s    r(   _stopReActDocstoreAgent._stopG   s     !!r+   c                    g)z#Prefix to append the LLM call with.zThought:rG   r.   s    r(   
llm_prefixReActDocstoreAgent.llm_prefixK   s     r+   rG   )r'   r   returnr   rP   strr5   Sequence[BaseTool]rP   r   r5   rT   rP   NonerP   z	list[str])r9   
__module____qualname____firstlineno____doc__r   r   r$   __annotations__classmethodr)   propertyr0   r6   r;   rH   rK   rN   __static_attributes____classcell__rD   s   @r(   r!   r!      s     %',=N'OM$O# # ( (   	" 	"   " "  r+   r!   c                  ^    \ rS rSrSrS
S jrSS jrSS jr\SS j5       r	\SS j5       r
Srg	)DocstoreExplorerQ   z5Class to assist with exploration of a document store.c                :    Xl         SU l        SU l        SU l        g)z=Initialize with a docstore, and set initial document to None.N r   )docstoredocument
lookup_strlookup_index)r/   rg   s     r(   __init__DocstoreExplorer.__init__Y   s     ,0r+   c                    U R                   R                  U5      n[        U[        5      (       a  X l        U R
                  $ SU l        U$ )z5Search for a term in the docstore, and if found save.N)rg   search
isinstancer	   rh   _summary)r/   termresults      r(   rn   DocstoreExplorer.search`   s>    %%d+fh''"M== r+   c                   U R                   c  Sn[        U5      eUR                  5       U R                  :w  a  UR                  5       U l        SU l        OU =R                  S-  sl        U R
                   Vs/ sH$  o0R                  UR                  5       ;   d  M"  UPM&     nn[        U5      S:X  a  gU R                  [        U5      :  a  gSU R                  S-    S[        U5       S3nU S	X@R                      3$ s  snf )
z%Lookup a term in document (if saved).z/Cannot lookup without a successful search firstr      z
No ResultszNo More Resultsz(Result /) )rh   r>   lowerri   rj   _paragraphsr<   )r/   rq   rA   plookupsresult_prefixs         r(   lookupDocstoreExplorer.lookupi   s    == CCS/!::<4??*"jjlDO !D""..O.//QWWY2N1.Ow<1G,$"4#4#4q#8"93w<.J'*;*;"<!=>> Ps   9 DDc                     U R                   S   $ )Nr   )rz   r.   s    r(   rp   DocstoreExplorer._summary{   s    ""r+   c                    U R                   c  Sn[        U5      eU R                   R                  R                  S5      $ )Nz(Cannot get paragraphs without a documentz

)rh   r>   page_contentsplit)r/   rA   s     r(   rz   DocstoreExplorer._paragraphs   s6    == <CS/!}}))//77r+   )rg   rh   rj   ri   N)rg   r   )rq   rR   rP   rR   rQ   rW   )r9   rX   rY   rZ   r[   rk   rn   r~   r^   rp   rz   r_   rG   r+   r(   rc   rc   Q   s?     @?$ # # 8 8r+   rc   c                  N   ^  \ rS rSrSr\SS j5       r\SU 4S jj5       rSrU =r	$ )ReActTextWorldAgent   z$Agent for the ReAct TextWorld chain.c                    [         $ r3   r   r4   s     r(   r6   !ReActTextWorldAgent.create_prompt   s
      r+   c                   > [        U R                  U5        [        TU ]  U5        [	        U5      S:w  a  SU 3n[        U5      eU Vs1 sH  o3R                  iM     nnUS1:w  a  SU 3n[        U5      eg s  snf )Nru   z,Exactly one tool must be specified, but got PlayzTool name should be Play, got )r   r9   r:   r;   r<   r>   r?   r@   s        r(   r;   #ReActTextWorldAgent._validate_tools   s    #CLL%8&u:?@HCS/!,12EDiiE
2&!2:,?CS/! " 3s   
A8rG   rS   rU   )
r9   rX   rY   rZ   r[   r]   r6   r;   r_   r`   ra   s   @r(   r   r      s.     /    	" 	"r+   r   c                  0   ^  \ rS rSrSrSU 4S jjrSrU =r$ )
ReActChain   z3[Deprecated] Chain that implements the ReAct paper.c                   > [        U5      n[        SUR                  SS9[        SUR                  SS9/n[        R                  X5      n[        TU ]  " SXeS.UD6  g)	z'Initialize with the LLM and a docstore.r   z"Search for a term in the docstore.)r?   funcdescriptionr   zLookup a term in the docstore.)agentr5   NrG   )rc   r   rn   r~   r!   from_llm_and_toolsr:   rk   )r/   llmrg   r'   docstore_explorerr5   r   rD   s          r(   rk   ReActChain.__init__   sl    ,X6&--@
 &--<
 #55cA<u<V<r+   rG   )r   r
   rg   r   r'   r   )r9   rX   rY   rZ   r[   rk   r_   r`   ra   s   @r(   r   r      s     >= =r+   r   N)-r[   
__future__r   collections.abcr   typingr   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=   r!   rc   r   r   rG   r+   r(   <module>r      s    V " $ / / * - < 5 /  @ J J 2 B D : >: %h/  %
+ +
+\ %
.8 .8
.8b %
", "
"* %
= =
=r+   