
    h5                       d 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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' ddh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,y )!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                       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_parserc                    t               S )Nr   )clskwargss     Y/var/www/html/eduruby.in/venv/lib/python3.12/site-packages/langchain/agents/react/base.py_get_default_output_parserz-ReActDocstoreAgent._get_default_output_parser(   s     ""    c                "    t         j                  S )z#Return Identifier of an agent type.)r   REACT_DOCSTOREselfs    r'   _agent_typezReActDocstoreAgent._agent_type,   s     '''r)   c                    t         S zReturn default prompt.r   r%   toolss     r'   create_promptz ReActDocstoreAgent.create_prompt1   s
     r)   c                   t        | j                  |       t        |   |       t	        |      t	        t
              k7  rd| }t        |      |D ch c]  }|j                   }}|t
        k7  rd| }t        |      y c c}w )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%   r2   msgtool
tool_names	__class__s        r'   r7   z"ReActDocstoreAgent._validate_tools6   s    #CLL%8&u:566A%ICS/!,12Ddii2
211@MCS/! 2 3s   Bc                     y)z&Prefix to append the observation with.zObservation:  r,   s    r'   observation_prefixz%ReActDocstoreAgent.observation_prefixB   s     r)   c                    dgS )Nz
Observation:rB   r,   s    r'   _stopzReActDocstoreAgent._stopG   s     !!r)   c                     y)z#Prefix to append the LLM call with.zThought:rB   r,   s    r'   
llm_prefixzReActDocstoreAgent.llm_prefixK   s     r)   )r&   r   returnr   rH   strr2   Sequence[BaseTool]rH   r   r2   rL   rH   NonerH   z	list[str])r5   
__module____qualname____doc__r   r   r#   __annotations__classmethodr(   propertyr.   r3   r7   rC   rE   rG   __classcell__r@   s   @r'   r!   r!      s     %',=N'OM$O# # ( (   	" 	"   " "  r)   r!   c                  L    e Zd ZdZddZd	dZd	dZed
d       Zedd       Z	y)DocstoreExplorerz5Class to assist with exploration of a document store.c                <    || _         d| _        d| _        d| _        y)z=Initialize with a docstore, and set initial document to None.N r   )docstoredocument
lookup_strlookup_index)r-   r\   s     r'   __init__zDocstoreExplorer.__init__Y   s     ,0r)   c                    | j                   j                  |      }t        |t              r|| _        | j
                  S d| _        |S )z5Search for a term in the docstore, and if found save.N)r\   search
isinstancer	   r]   _summary)r-   termresults      r'   rb   zDocstoreExplorer.search`   s=    %%d+fh'"DM== r)   c                   | j                   d}t        |      |j                         | j                  k7  r|j                         | _        d| _        n| xj                  dz  c_        | j
                  D cg c]!  }| j                  |j                         v s |# }}t        |      dk(  ry| j                  t        |      k\  ryd| j                  dz    dt        |       d}| d	|| j                      S c c}w )
z%Lookup a term in document (if saved).z/Cannot lookup without a successful search firstr      z
No ResultszNo More Resultsz(Result /) )r]   r:   lowerr^   r_   _paragraphsr8   )r-   re   r=   plookupsresult_prefixs         r'   lookupzDocstoreExplorer.lookupi   s    == CCS/!::<4??*"jjlDO !D""..O$//QWWY2N1OOw<1G,$"4#4#4q#8"93w<.J'$*;*;"<!=>> Ps   7!C:C:c                     | j                   d   S )Nr   )rm   r,   s    r'   rd   zDocstoreExplorer._summary{   s    ""r)   c                ~    | j                   d}t        |      | j                   j                  j                  d      S )Nz(Cannot get paragraphs without a documentz

)r]   r:   page_contentsplit)r-   r=   s     r'   rm   zDocstoreExplorer._paragraphs   s6    == <CS/!}}))//77r)   N)r\   r   )re   rJ   rH   rJ   rI   rO   )
r5   rP   rQ   rR   r`   rb   rq   rU   rd   rm   rB   r)   r'   rY   rY   Q   s?     @?$ # # 8 8r)   rY   c                  @     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.c                    t         S r0   r   r1   s     r'   r3   z!ReActTextWorldAgent.create_prompt   s
      r)   c                    t        | j                  |       t        |   |       t	        |      dk7  rd| }t        |      |D ch c]  }|j                   }}|dhk7  rd| }t        |      y c c}w )Nrh   z,Exactly one tool must be specified, but got PlayzTool name should be Play, got )r   r5   r6   r7   r8   r:   r;   r<   s        r'   r7   z#ReActTextWorldAgent._validate_tools   s    #CLL%8&u:?@HCS/!,12Ddii2
2&!2:,?CS/! " 3s   	A5rK   rM   )r5   rP   rQ   rR   rT   r3   r7   rV   rW   s   @r'   rw   rw      s.     /    	" 	"r)   rw   c                  $     e Zd ZdZd fdZ xZS )
ReActChainz3[Deprecated] Chain that implements the ReAct paper.c                    t        |      }t        d|j                  d      t        d|j                  d      g}t        j                  ||      }t        |   d||d| y)	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.)agentr2   NrB   )rY   r   rb   rq   r!   from_llm_and_toolsr6   r`   )r-   llmr\   r&   docstore_explorerr2   r   r@   s          r'   r`   zReActChain.__init__   sp    ,X6&--@
 &--<
 #55c5A<uE<V<r)   )r   r
   r\   r   r&   r   )r5   rP   rQ   rR   r`   rV   rW   s   @r'   r|   r|      s     >= =r)   r|   N)-rR   
__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   r9   r!   rY   rw   r|   rB   r)   r'   <module>r      s    V " $ / / * - < 5 /  @ J J 2 B D : >: %h/  %
+ +
+\ %
.8 .8
.8b %
", "
"* %
= =
=r)   