
    ih                       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+y)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_parserc                    t               S )Nr   )clskwargss     Y/var/www/html/dev/engine/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_prompt-   s
     r(   c                    t        | j                  |       t        |   |       t	        |      dk7  rt        d|       |D ch c]  }|j                   }}|ddhk7  rt        d|       y c c}w )N   z-Exactly two tools must be specified, but got LookupSearchz,Tool names should be Lookup and Search, got r   __name__super_validate_toolslen
ValueErrornamer$   r1   tool
tool_names	__class__s       r&   r:   z"ReActDocstoreAgent._validate_tools2   s    #CLL%8&u:?LUGTUU,12Ddii2
2(H-->zlK  . 3s   A2c                     y)z&Prefix to append the observation with.zObservation:  r+   s    r&   observation_prefixz%ReActDocstoreAgent.observation_prefix>   s     r(   c                    dgS )Nz
Observation:rC   r+   s    r&   _stopzReActDocstoreAgent._stopC   s     !!r(   c                     y)z#Prefix to append the LLM call with.zThought:rC   r+   s    r&   
llm_prefixzReActDocstoreAgent.llm_prefixG   s     r(   )r%   r   returnr   rI   strr1   Sequence[BaseTool]rI   r   r1   rM   rI   NonerI   z	List[str])r8   
__module____qualname____doc__r   r   r"   __annotations__classmethodr'   propertyr-   r2   r:   rD   rF   rH   __classcell__rA   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__U   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&   rc   zDocstoreExplorer.search\   s=    %%d+fh'"DM==  DMMr(   c                   | j                   t        d      |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`   _paragraphsr;   )r,   rf   plookupsresult_prefixs        r&   lookupzDocstoreExplorer.lookupf   s    == NOO::<4??*"jjlDO !D""..O$//QWWY2N1OOw<1#g,.$&t'8'81'<&=Qs7|nANM#_Agd.?.?&@%ABB Ps   5!C8C8c                     | j                   d   S )Nr   )rn   r+   s    r&   re   zDocstoreExplorer._summaryx   s    ""r(   c                z    | j                   t        d      | j                   j                  j                  d      S )Nz(Cannot get paragraphs without a documentz

)r^   r<   page_contentsplitr+   s    r&   rn   zDocstoreExplorer._paragraphs|   s3    == GHH}}))//77r(   N)r]   r   )rf   rK   rI   rK   rJ   rP   )
r8   rQ   rR   rS   ra   rc   rr   rV   re   rn   rC   r(   r&   rZ   rZ   M   s@     @C$ # # 8 8r(   rZ   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 r/   r   r0   s     r&   r2   z!ReActTextWorldAgent.create_prompt   s
      r(   c                    t        | j                  |       t        |   |       t	        |      dk7  rt        d|       |D ch c]  }|j                   }}|dhk7  rt        d|       y c c}w )Nri   z,Exactly one tool must be specified, but got PlayzTool name should be Play, got r7   r>   s       r&   r:   z#ReActTextWorldAgent._validate_tools   sz    #CLL%8&u:?KE7STT,12Ddii2
2&!=j\JKK " 3s   A1rL   rN   )r8   rQ   rR   rS   rU   r2   r:   rW   rX   s   @r&   rx   rx      s0     /    L Lr(   rx   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.r6   z"Search for a term in the docstore.)r=   funcdescriptionr5   zLookup a term in the docstore.)agentr1   NrC   )rZ   r   rc   rr   r    from_llm_and_toolsr9   ra   )r,   llmr]   r%   docstore_explorerr1   r   rA   s          r&   ra   zReActChain.__init__   sp    ,X6&--@
 &--<
 #55c5A<uE<V<r(   )r   r   r]   r   r%   r   )r8   rQ   rR   rS   ra   rW   rX   s   @r&   r}   r}      s     >= =r(   r}   N),rS   
__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    rZ   rx   r}   rC   r(   r&   <module>r      s    V " ? ? * - < 5 /  @ J J 2 B D : >: %
+ +
+\ %
.8 .8
.8b %
L, L
L& %
= =
=r(   