o
    Jjg                     @   sl   d dl 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 dZdZd	Zd
ZG dd de	ZdS )    N)Union)AgentActionAgentFinish)OutputParserException)AgentOutputParser)FORMAT_INSTRUCTIONSzFinal Answer:z1Invalid Format: Missing 'Action:' after 'Thought:z7Invalid Format: Missing 'Action Input:' after 'Action:'zHParsing LLM output produced both a final answer and a parse-able action:c                   @   sZ   e Zd ZU dZeZeed< 	 defddZdede	e
ef fddZedefd	d
ZdS )MRKLOutputParserz&MRKL Output parser for the chat agent.format_instructionsreturnc                 C   s   | j S )z<Returns formatting instructions for the given output parser.)r	   self r   [/var/www/html/zoom/venv/lib/python3.10/site-packages/langchain/agents/mrkl/output_parser.pyget_format_instructions   s   z(MRKLOutputParser.get_format_instructionstextc           
      C   sZ  t |v }d}t||tj}|rH|rH|t ||dk r?|t tt  }|d|}td|||  i|d| S t	t
 d| |rm|d }|d}|d	}	|	d
du rg|	d}	t||	|S |r}td|t d  i|S td|tjst	d| dt|ddtd|tjst	d| dt|ddt	d| d)a*  Parse the output from the agent into
        an AgentAction or AgentFinish object.

        Args:
            text: The text to parse.

        Returns:
            An AgentAction or AgentFinish object.

        Raises:
            OutputParserException: If the output could not be parsed.
        zFAction\s*\d*\s*:[\s]*(.*?)[\s]*Action\s*\d*\s*Input\s*\d*\s*:[\s]*(.*)r   z

outputNz:        zSELECT F"zAction\s*\d*\s*:[\s]*(.*?)zCould not parse LLM output: ``T)observation
llm_outputsend_to_llmz,[\s]*Action\s*\d*\s*Input\s*\d*\s*:[\s]*(.*))FINAL_ANSWER_ACTIONresearchDOTALLfindgrouplenr   stripr   .FINAL_ANSWER_AND_PARSABLE_ACTION_ERROR_MESSAGE
startswithr   split*MISSING_ACTION_AFTER_THOUGHT_ERROR_MESSAGE/MISSING_ACTION_INPUT_AFTER_ACTION_ERROR_MESSAGE)
r   r   includes_answerregexaction_matchstart_index	end_indexactionaction_input
tool_inputr   r   r   parse    sT   




zMRKLOutputParser.parsec                 C   s   dS )Nmrklr   r   r   r   r   _typea   s   zMRKLOutputParser._typeN)__name__
__module____qualname____doc__r   r	   str__annotations__r   r   r   r   r0   propertyr2   r   r   r   r   r      s   
 Ar   )r   typingr   langchain_core.agentsr   r   langchain_core.exceptionsr   langchain.agents.agentr   langchain.agents.mrkl.promptr   r   r&   r'   r#   r   r   r   r   r   <module>   s    