
    h%                        d 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
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d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ddd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d&dddddddd'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d0e*d!ed"efd1Z+ddd2d3ddddd4ded)ee   d5ee   de'd6e'd7ee   dee&   dee
   d ed!ed"efd8Z, ed9d:d;<      	 	 	 d?ded=e'dee&   dee
   d!ed"efd>       Z-y)@zLoad question answering chains.    )Mapping)Any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/eduruby.in/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&    <<< < 
#	<r!   r   FcontextscoreanswerN)promptverbosedocument_variable_namerank_key
answer_keycallback_manager	callbacksr   r)   r*   r+   r,   r-   r.   r/   r   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!   )r)   r+   r*   r.   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   E   se     D44??DG)I  5)  r!   	summariesi  )question_promptcombine_promptcombine_document_variable_name!map_reduce_document_variable_namecollapse_prompt
reduce_llmcollapse_llmr*   r.   r/   	token_maxr;   r<   r=   r>   r?   r@   rA   rB   c          
         |xs t         j                  j                  |       }|xs t         j                  j                  |       }t	        | |||	|
      }|xs | }t	        ||||	|
      }t        ||||	|
      }|d }|0d}t        |      |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_chainrB   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@   rA   r*   r.   r/   rB   r   _question_prompt_combine_prompt	map_chain_reduce_llmreduce_chainrD   collapse_chainmsg_collapse_llmrF   s                          r   _load_map_reduce_chainrR   b   sJ   " 	U,EEPPQTU  	S+CCNNsS  )I #K)L 2=) #>  S/!$+,!&!1# $B-
 2 7!/	 # @5)  r!   context_strexisting_answer)r;   refine_promptr+   initial_response_name
refine_llmr*   r.   r/   rU   rV   rW   c                    |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+   rV   r*   r.   r/   r   )r   rG   r7   REFINE_PROMPT_SELECTORr   r   )r   r;   rU   r+   rV   rW   r*   r.   r/   r   rJ   _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!d| d|j	                          }t        |       ||   | 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   rR   r`   r3   keysrI   )r   rd   r*   r.   r   loader_mappingrP   s          r   load_qa_chainrl      s    F #,$,	5N '*:, 7  . 3 3 568 	 o%>*%) 	 r!   )rf   NN).r%   collections.abcr   typingr   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      sK   % # * * * C < 5 1 M Q Q J H ) 

<h < "3"+6:	  	
     23   B ,0"+"6:	 '(  	
 d^ 23   @ 5937*5-648.204"6:Q	Q 01Q /0	Q
 %(Q (+Q 01Q *+Q ,-Q d^Q 23Q Q Q Q Qn 5926"/!2.2"6:+	+ 01+ ./	+
  + + *++ d^+ 23+ + + +\ 
	@	  "6:	%	%% d^% 23	%
 % %%r!   