a
    ag                  	   @  s$  d Z ddlmZ ddlZddlmZ ddl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 eejd Zeed Z eed Z!eed Z"eed Z#d!ddddddddddZ$eddddG dd  d eZ%dS )"z/Chain for summarization with self-verification.    )annotationsN)Path)AnyDictListOptional)
deprecated)CallbackManagerForChainRun)BaseLanguageModel)PromptTemplate)
ConfigDictmodel_validator)Chain)LLMChain)SequentialChainZpromptszcreate_facts.txtzcheck_facts.txtzrevise_summary.txtzare_all_true_prompt.txtFr
   r   boolr   )llmcreate_assertions_promptcheck_assertions_promptrevised_summary_promptare_all_true_promptverbosereturnc              
   C  sR   t t| |d|dt| |d|dt| |d|dt| d||dgdgddg|d}|S )	NZ
assertions)r   prompt
output_keyr   Zchecked_assertionsrevised_summaryall_true)r   r   r   r   summary)chainsZinput_variablesZoutput_variablesr   )r   r   )r   r   r   r   r   r   chain r    }/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/langchain/chains/llm_summarization_checker/base.py_load_sequential_chain   s>    r"   z0.2.13zSee LangGraph guides for a variety of self-reflection and corrective strategies for question-answering and other tasks: https://langchain-ai.github.io/langgraph/tutorials/rag/langgraph_self_rag/z1.0)ZsincemessageZremovalc                   @  s  e Zd ZU dZded< dZded< eZded< eZ	ded	< e
Zded
< eZded< dZded< dZded< dZded< edddZeddedddddZeddd d!Zeddd"d#Zd2d$d%d&d'd(d)Zeddd*d+Zeeee
ed,fd-ddddd.dd d/d0d1ZdS )3LLMSummarizationCheckerChainaV  Chain for question-answering with self-verification.

    Example:
        .. code-block:: python

            from langchain_community.llms import OpenAI
            from langchain.chains import LLMSummarizationCheckerChain
            llm = OpenAI(temperature=0.0)
            checker_chain = LLMSummarizationCheckerChain.from_llm(llm)
    r   sequential_chainNzOptional[BaseLanguageModel]r   r   r   r   r   r   querystr	input_keyresultr      int
max_checksTZforbid)Zarbitrary_types_allowedextrabefore)moder   r   )valuesr   c              
   C  sn   d|v rjt d d|vrj|d d urjt|d |dt|dt|dt|dt|dd	d
|d< |S )Nr   zDirectly instantiating an LLMSummarizationCheckerChain with an llm is deprecated. Please instantiate with sequential_chain argument or using the from_llm class method.r%   r   r   r   r   r   Fr   )warningswarnr"   getCREATE_ASSERTIONS_PROMPTCHECK_ASSERTIONS_PROMPTREVISED_SUMMARY_PROMPTARE_ALL_TRUE_PROMPT)clsr0   r    r    r!   raise_deprecationq   s    





z.LLMSummarizationCheckerChain.raise_deprecationz	List[str])r   c                 C  s   | j gS )z?Return the singular input key.

        :meta private:
        )r(   selfr    r    r!   
input_keys   s    z'LLMSummarizationCheckerChain.input_keysc                 C  s   | j gS )z@Return the singular output key.

        :meta private:
        )r   r;   r    r    r!   output_keys   s    z(LLMSummarizationCheckerChain.output_keyszDict[str, Any]z$Optional[CallbackManagerForChainRun]zDict[str, str])inputsrun_managerr   c           	      C  s   |p
t  }d}d}d }|| j }|}|s|| jk r| jd|i| d}|d7 }|d  dkrdq| jrvt|d  |d }q&|st	d	| j
|d  iS )
NFr   r   )	callbacks   r   Truer   zNo output from chain)r	   Zget_noop_managerr(   r,   r%   Z	get_childstripr   print
ValueErrorr   )	r<   r?   r@   Z_run_managerr   countoutputZoriginal_inputZchain_inputr    r    r!   _call   s&    

z"LLMSummarizationCheckerChain._callc                 C  s   dS )NZllm_summarization_checker_chainr    r;   r    r    r!   _chain_type   s    z(LLMSummarizationCheckerChain._chain_typeFr
   r   )r   r   r   r   r   r   kwargsr   c           	      K  s(   t ||||||d}| f ||d|S )Nr1   )r%   r   )r"   )	r9   r   r   r   r   r   r   rK   r   r    r    r!   from_llm   s    z%LLMSummarizationCheckerChain.from_llm)N)__name__
__module____qualname____doc____annotations__r   r5   r   r6   r   r7   r   r8   r   r(   r   r,   r   Zmodel_configr   classmethodr:   propertyr=   r>   rI   rJ   rL   r    r    r    r!   r$   E   s@   


 r$   )F)&rP   
__future__r   r2   pathlibr   typingr   r   r   r   Zlangchain_core._apir   Zlangchain_core.callbacksr	   Zlangchain_core.language_modelsr
   Zlangchain_core.prompts.promptr   Zpydanticr   r   Zlangchain.chains.baser   Zlangchain.chains.llmr   Zlangchain.chains.sequentialr   __file__parentZPROMPTS_DIR	from_filer5   r6   r7   r8   r"   r$   r    r    r    r!   <module>   s2   	 *	