a
    ~g                     @  s^  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rddl&m'Z' e
deddG dd deZ(e
deddG dd dZ)e
deddG dd de(Z*e
deddG d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                      s   e Zd ZU dZeedZded< edddddZ	e
d	d
ddZedddddZeddd fddZe
d	d
ddZe
dd
ddZe
d	d
ddZ  ZS )ReActDocstoreAgentzAgent for the ReAct chain.)default_factoryr   output_parserr   )kwargsreturnc                 K  s   t  S )Nr   )clsr!    r$   `/var/www/html/emsaiapi.evdpl.com/venv/lib/python3.9/site-packages/langchain/agents/react/base.py_get_default_output_parser$   s    z-ReActDocstoreAgent._get_default_output_parserstrr"   c                 C  s   t jS )z#Return Identifier of an agent type.)r   REACT_DOCSTOREselfr$   r$   r%   _agent_type(   s    zReActDocstoreAgent._agent_typeSequence[BaseTool]r   toolsr"   c                 C  s   t S zReturn default prompt.r   r#   r/   r$   r$   r%   create_prompt-   s    z ReActDocstoreAgent.create_promptNonec                   s^   t | j| t | t|dkr2td| dd |D }|ddhkrZtd| d S )N   z-Exactly two tools must be specified, but got c                 S  s   h | ]
}|j qS r$   name.0toolr$   r$   r%   	<setcomp>8       z5ReActDocstoreAgent._validate_tools.<locals>.<setcomp>LookupSearchz,Tool names should be Lookup and Search, got r   __name__super_validate_toolslen
ValueErrorr#   r/   
tool_names	__class__r$   r%   rA   2   s    z"ReActDocstoreAgent._validate_toolsc                 C  s   dS )z&Prefix to append the observation with.zObservation: r$   r*   r$   r$   r%   observation_prefix>   s    z%ReActDocstoreAgent.observation_prefix	List[str]c                 C  s   dgS )Nz
Observation:r$   r*   r$   r$   r%   _stopC   s    zReActDocstoreAgent._stopc                 C  s   dS )z#Prefix to append the LLM call with.zThought:r$   r*   r$   r$   r%   
llm_prefixG   s    zReActDocstoreAgent.llm_prefix)r?   
__module____qualname____doc__r   r   r    __annotations__classmethodr&   propertyr,   r2   rA   rH   rJ   rK   __classcell__r$   r$   rF   r%   r      s    
r   c                   @  sb   e Zd ZdZddddZddddd	Zdddd
dZeddddZeddddZ	dS )DocstoreExplorerz5Class to assist with exploration of a document store.r   )docstorec                 C  s   || _ d| _d| _d| _dS )z=Initialize with a docstore, and set initial document to None.N r   )rT   document
lookup_strlookup_index)r+   rT   r$   r$   r%   __init__U   s    zDocstoreExplorer.__init__r'   )termr"   c                 C  s0   | j |}t|tr"|| _| jS d| _|S dS )z5Search for a term in the docstore, and if found save.N)rT   search
isinstancer	   rV   _summary)r+   rZ   resultr$   r$   r%   r[   \   s    
zDocstoreExplorer.searchc                   s    j du rtd|  jkr2|  _d _n  jd7  _ fdd jD }t|dkrddS  jt|krvdS d	 jd  d
t| d}| d| j  S dS )z%Lookup a term in document (if saved).Nz/Cannot lookup without a successful search firstr      c                   s   g | ]} j | v r|qS r$   )rW   lower)r8   pr*   r$   r%   
<listcomp>o   r;   z+DocstoreExplorer.lookup.<locals>.<listcomp>z
No ResultszNo More Resultsz(Result /) )rV   rC   r`   rW   rX   _paragraphsrB   )r+   rZ   ZlookupsZresult_prefixr$   r*   r%   lookupf   s    

zDocstoreExplorer.lookupr(   c                 C  s
   | j d S )Nr   )rf   r*   r$   r$   r%   r]   x   s    zDocstoreExplorer._summaryrI   c                 C  s    | j d u rtd| j jdS )Nz(Cannot get paragraphs without a documentz

)rV   rC   page_contentsplitr*   r$   r$   r%   rf   |   s    
zDocstoreExplorer._paragraphsN)
r?   rL   rM   rN   rY   r[   rg   rQ   r]   rf   r$   r$   r$   r%   rS   M   s   
rS   c                      s@   e Zd ZdZedddddZeddd fdd	Z  ZS )
ReActTextWorldAgentz$Agent for the ReAct TextWorld chain.r-   r   r.   c                 C  s   t S r0   r   r1   r$   r$   r%   r2      s    z!ReActTextWorldAgent.create_promptr3   c                   s\   t | j| t | t|dkr2td| dd |D }|dhkrXtd| d S )Nr_   z,Exactly one tool must be specified, but got c                 S  s   h | ]
}|j qS r$   r5   r7   r$   r$   r%   r:      r;   z6ReActTextWorldAgent._validate_tools.<locals>.<setcomp>ZPlayzTool name should be Play, got r>   rD   rF   r$   r%   rA      s    
z#ReActTextWorldAgent._validate_tools)r?   rL   rM   rN   rP   r2   rA   rR   r$   r$   rF   r%   rj      s
   rj   c                      s*   e Zd ZdZdddd fddZ  ZS )
ReActChainz3[Deprecated] Chain that implements the ReAct paper.r
   r   r   )llmrT   r!   c                   sP   t |}td|jddtd|jddg}t||}t jf ||d| dS )z'Initialize with the LLM and a docstore.r=   z"Search for a term in the docstore.)r6   funcdescriptionr<   zLookup a term in the docstore.)agentr/   N)rS   r   r[   rg   r   from_llm_and_toolsr@   rY   )r+   rl   rT   r!   Zdocstore_explorerr/   ro   rF   r$   r%   rY      s    zReActChain.__init__)r?   rL   rM   rN   rY   rR   r$   r$   rF   r%   rk      s   rk   N),rN   
__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   Z$langchain.agents.react.output_parserr   Z'langchain.agents.react.textworld_promptr   Z"langchain.agents.react.wiki_promptr   langchain.agents.utilsr   Z!langchain_community.docstore.baser   r   rS   rj   rk   r$   r$   r$   r%   <module>   sR   .1