
    ih%                        d Z ddlmZmZmZ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 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 ddlmZ ddlmZmZm Z  ddl!m"Z#  G d de      Z$e#ddddddfdedede%de&de&de&dee	   de
ded efd!Z'	 	 	 	 	 d6dedee   de&dee%   dee	   de
ded efd"Z(	 	 	 	 	 	 	 	 	 	 	 d7ded#ee   d$ee   d%e&d&e&d'ee   d(ee   d)ee   dee%   dee	   de
d*e)ded efd+Z*	 	 	 	 	 	 	 	 d8ded#ee   d,ee   de&d-e&d.ee   dee%   dee	   de
ded efd/Z+ ed0d1d23      	 	 	 d9ded4e&dee%   dee	   ded efd5       Z,y):zLoad question answering chains.    )AnyMappingOptionalProtocol)
deprecated)BaseCallbackManager	Callbacks)BaseLanguageModel)BasePromptTemplate)ReduceDocumentsChain)BaseCombineDocumentsChain)MapReduceDocumentsChain)MapRerankDocumentsChain)RefineDocumentsChain)StuffDocumentsChain)LLMChain)map_reduce_promptrefine_promptsstuff_prompt)PROMPTc                   $    e Zd ZdZdededefdZy)LoadingCallablez2Interface for loading the combine documents chain.llmkwargsreturnc                      y)z-Callable to load the combine documents chain.N )selfr   r   s      g/var/www/html/dev/engine/venv/lib/python3.12/site-packages/langchain/chains/question_answering/chain.py__call__zLoadingCallable.__call__   s        N)__name__
__module____qualname____doc__r
   r   r   r    r   r!   r   r   r      s"    <<$<03<	"<r!   r   FcontextscoreanswerNr   promptverbosedocument_variable_namerank_key
answer_keycallback_manager	callbacksr   r   c           
      F    t        | ||||      }	t        d|	|||||d|S )Nr   r)   r*   r.   r/   )	llm_chainr,   r-   r+   r*   r.   r   )r   r   )
r   r)   r*   r+   r,   r-   r.   r/   r   r2   s
             r   _load_map_rerank_chainr3   $   sM     )I # 5)  r!   c           	          |xs t         j                  j                  |       }t        | ||||      }t	        d|||||d|S )Nr1   r2   r+   r*   r.   r/   r   )r   PROMPT_SELECTOR
get_promptr   r   )	r   r)   r+   r*   r.   r/   r   _promptr2   s	            r   _load_stuff_chainr9   A   se     D44??DG)I  5)  r!   question_promptcombine_promptcombine_document_variable_name!map_reduce_document_variable_namecollapse_prompt
reduce_llmcollapse_llm	token_maxc           
         |xs t         j                  j                  |       }|xs t         j                  j                  |       }t	        | |||	|
      }|xs | }t	        ||||	|
      }t        ||||	|
      }|d }|.t        d      |xs | }t        t	        ||||	|
      |||	      }t        ||||      }t        d|||||	|
d|S )Nr1   r5   zfcollapse_llm provided, but collapse_prompt was not: please provide one or stop providing collapse_llm.)r2   r+   r*   r.   )combine_documents_chaincollapse_documents_chainrA   r*   )r2   r+   reduce_documents_chainr*   r.   r/   r   )	r   QUESTION_PROMPT_SELECTORr7   COMBINE_PROMPT_SELECTORr   r   
ValueErrorr   r   )r   r:   r;   r<   r=   r>   r?   r@   r*   r.   r/   rA   r   _question_prompt_combine_prompt	map_chain_reduce_llmreduce_chainrC   collapse_chain_collapse_llmrE   s                         r   _load_map_reduce_chainrP   ]   sH     	U,EEPPQTU  	S+CCNNsS  )I #K)L 2=) #> 
 %+,!&!1# $B-
 2 7!/	 # @5)  r!   refine_promptinitial_response_name
refine_llmc	                     |xs t         j                  j                  |       }
|xs t         j                  j                  |       }t	        | |
|||      }|xs | }t	        |||||      }t        d|||||||d|	S )Nr1   )initial_llm_chainrefine_llm_chainr+   rR   r*   r.   r/   r   )r   rF   r7   REFINE_PROMPT_SELECTORr   r   )r   r:   rQ   r+   rR   rS   r*   r.   r/   r   rI   _refine_promptinitial_chain_refine_llmrefine_chains                  r   _load_refine_chainr\      s     	R>BBMMcR  # n&K&K&V&V'N )M #K)L   	'%53)	 	 	r!   z0.2.13z1.0a1  This class is deprecated. See the following migration guides for replacements based on `chain_type`:
stuff: https://python.langchain.com/docs/versions/migrating_chains/stuff_docs_chain
map_reduce: https://python.langchain.com/docs/versions/migrating_chains/map_reduce_chain
refine: https://python.langchain.com/docs/versions/migrating_chains/refine_chain
map_rerank: https://python.langchain.com/docs/versions/migrating_chains/map_rerank_docs_chain

See also guides on retrieval and question-answering here: https://python.langchain.com/docs/how_to/#qa-with-rag)sinceremovalmessage
chain_typec                     t         t        t        t        d}||vrt	        d| d|j                                 ||   | f||d|S )a  Load question answering chain.

    Args:
        llm: Language Model to use in the chain.
        chain_type: Type of document combining chain to use. Should be one of "stuff",
            "map_reduce", "map_rerank", and "refine".
        verbose: Whether chains should be run in verbose mode or not. Note that this
            applies to all chains that make up the final chain.
        callback_manager: Callback manager to use for the chain.

    Returns:
        A chain to use for question answering.
    )stuff
map_reducerefine
map_rerankzGot unsupported chain type: z. Should be one of )r*   r.   )r9   rP   r\   r3   rH   keys)r   r`   r*   r.   r   loader_mappings         r   load_qa_chainrh      s{    F #,$,	5N '*:, 7  . 3 3 568
 	
 &>*%/?CI r!   )Nr&   NNN)NN	summariesr&   NNNNNNi  )NNcontext_strexisting_answerNNNN)rb   NN)-r%   typingr   r   r   r   langchain_core._apir   langchain_core.callbacksr   r	   langchain_core.language_modelsr
   langchain_core.promptsr   langchain.chainsr   'langchain.chains.combine_documents.baser   -langchain.chains.combine_documents.map_reducer   -langchain.chains.combine_documents.map_rerankr   )langchain.chains.combine_documents.refiner   (langchain.chains.combine_documents.stuffr   langchain.chains.llmr   #langchain.chains.question_answeringr   r   r   5langchain.chains.question_answering.map_rerank_promptr   MAP_RERANK_PROMPTr   boolstrr3   r9   intrP   r\   rh   r   r!   r   <module>r~      s>   % 3 3 * C < 5 1 M Q Q J H ) 

<h < "3"+6:	   	
   23   > ,0"+"6:	'(   d^	
 23   < 5937*5-648.204"6:O	O01O /0O %(	O
 (+O 01O *+O ,-O d^O 23O O O O Oh 5926"/!2.2"6:*	*01* ./*  	*
 * *+* d^* 23* * * *Z 
	@	  "6:	!	!! d^! 23	!
 ! !!r!   