
    Ng%                         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'	 	 	 	 	 d;dedee         de&dee%         dee	         de
ded efd"Z(	 	 	 	 	 	 	 	 	 	 	 d<d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*	 	 	 	 	 	 	 	 d=ded%ee         d0ee         de&d1e&d2ee         dee%         dee	         de
ded efd3Z+ ed4d5d67          	 	 	 d>ded9e&dee%         dee	         ded efd:            Z,dS )?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dS )LoadingCallablez2Interface for loading the combine documents chain.llmkwargsreturnc                     dS )z-Callable to load the combine documents chain.N )selfr   r   s      e/var/www/html/ai-engine/env/lib/python3.11/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      sF        <<<$<03<	"< < < < < <r!   r   FcontextscoreanswerNr   promptverbosedocument_variable_namerank_key
answer_keycallback_manager	callbacksr   r   c           
      P    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   $   sa     )  I # 5)    r!   c           	          |pt           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   sy     D4??DDG)  I  5)    r!   	summaries  question_promptcombine_promptcombine_document_variable_name!map_reduce_document_variable_namecollapse_prompt
reduce_llmcollapse_llm	token_maxc           
         |pt           j                            |           }|pt           j                            |           }t	          | |||	|
          }|p| }t	          ||||	|
          }t          ||||	|
          }|d }|t          d          n)|p| }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_chainrC   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@   rA   rB   r*   r.   r/   rC   r   _question_prompt_combine_prompt	map_chain_reduce_llmreduce_chainrE   collapse_chain_collapse_llmrG   s                         r   _load_map_reduce_chainrR   ]   s     	U,EPPQTUU  	S+CNNsSS  )  I #K)  L 2=)   #>   $ %+,!&!1#   $B-
 
 
 2 7!/	   # @5)    r!   context_strexisting_answerrefine_promptinitial_response_name
refine_llmc	                    |pt           j                            |           }
|pt           j                            |           }t	          | |
|||          }|p| }t	          |||||          }t          d|||||||d|	S )Nr1   )initial_llm_chainrefine_llm_chainr+   rV   r*   r.   r/   r   )r   rH   r7   REFINE_PROMPT_SELECTORr   r   )r   r<   rU   r+   rV   rW   r*   r.   r/   r   rK   _refine_promptinitial_chain_refine_llmrefine_chains                  r   _load_refine_chainr`      s     	R>BMMcRR  # n&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stuff
chain_typec                     t           t          t          t          d}||vr't	          d| d|                                            ||         | 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.
    )rd   
map_reducerefine
map_rerankzGot unsupported chain type: z. Should be one of )r*   r.   )r9   rR   r`   r3   rJ   keys)r   re   r*   r.   r   loader_mappings         r   load_qa_chainrl      s    F #,$,	5 5N ''8: 8 8 . 3 3 5 58 8
 
 	
 &>*%/? CI  r!   )Nr&   NNN)NNr:   r&   NNNNNNr;   )NNrS   rT   NNNN)rd   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   intrR   r`   rl   r   r!   r   <module>r      s   % % 3 3 3 3 3 3 3 3 3 3 3 3 * * * * * * C C C C C C C C < < < < < < 5 5 5 5 5 5 1 1 1 1 1 1 M M M M M M Q Q Q Q Q Q Q Q Q Q Q Q J J J J J J H H H H H H ) ) ) ) ) )         
     
< < < < <h < < < "3"+6: 	   	
   23      > ,0"+"6: 	'(   d^	
 23      < 5937*5-648.204"6:O O	O01O /0O %(	O
 (+O 01O *+O ,-O d^O 23O O O O O O O Oh 5926"/!2.2"6:* *	*01* ./*  	*
 * *+* d^* 23* * * * * * *Z 
	@	    "6:	! !	!! d^! 23	!
 ! ! ! ! ! ! !r!   