
    3fi%%                        d Z ddlmZ ddl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	dz  d e
d!ed"efd#Z'dddddd$dededz  de&de%dz  de	dz  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dz  d*edz  d+e&d,e&d-edz  d.edz  d/edz  de%dz  de	dz  d e
d0e)d!ed"efd1Z*ddd2d3ddddd4ded)edz  d5edz  de&d6e&d7edz  de%dz  de	dz  d e
d!ed"efd8Z+ ed9d:d;<      	 	 	 d?ded=e&de%dz  de	dz  d!ed"efd>       Z,y)@zLoad question answering chains.    )Mapping)Any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      o/var/www/auto_recruiter/arenv/lib/python3.12/site-packages/langchain_classic/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   r1   s
             r   _load_map_rerank_chainr2   +   sM     )I # 5)  r    )r(   r*   r)   r-   r.   c          	          |xs t         j                  j                  |       }t        | ||||      }t	        d|||||d|S )Nr0   r1   r*   r)   r-   r.   r   )r   PROMPT_SELECTOR
get_promptr   r   )	r   r(   r*   r)   r-   r.   r   _promptr1   s	            r   _load_stuff_chainr8   I   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?   r@   rA   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 )Nr0   r4   zfcollapse_llm provided, but collapse_prompt was not: please provide one or stop providing collapse_llm.)r1   r*   r)   r-   )combine_documents_chaincollapse_documents_chainrA   r)   )r1   r*   reduce_documents_chainr)   r-   r.   r   )	r   QUESTION_PROMPT_SELECTORr6   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msg_collapse_llmrE   s                          r   _load_map_reduce_chainrQ   f   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.   rT   rU   rV   c                    |xs t         j                  j                  |       }
|xs t         j                  j                  |       }t	        | |
|||      }|xs | }t	        |||||      }t        d|||||||d|	S )Nr0   )initial_llm_chainrefine_llm_chainr*   rU   r)   r-   r.   r   )r   rF   r6   REFINE_PROMPT_SELECTORr   r   )r   r:   rT   r*   rU   rV   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!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.
        **kwargs: Additional keyword arguments.

    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-   )r8   rQ   r_   r2   keysrH   )r   rc   r)   r-   r   loader_mappingrO   s          r   load_qa_chainrk      s    H #,$,	5N '*:, 7  . 3 3 568 	 o%>*%) 	 r    )re   NN)-r$   collections.abcr   typingr   r   langchain_core._apir   langchain_core.callbacksr   r   langchain_core.language_modelsr	   langchain_core.promptsr
   langchain_classic.chainsr   /langchain_classic.chains.combine_documents.baser   5langchain_classic.chains.combine_documents.map_reducer   5langchain_classic.chains.combine_documents.map_rerankr   1langchain_classic.chains.combine_documents.refiner   0langchain_classic.chains.combine_documents.stuffr   langchain_classic.chains.llmr   +langchain_classic.chains.question_answeringr   r   r   =langchain_classic.chains.question_answering.map_rerank_promptr   MAP_RERANK_PROMPTr   boolstrr2   r8   intrQ   r_   rk   r   r    r   <module>r      sA   % #   * C < 5 9 U S P 1 

<h < "3"+37	  	
     *D0   B )-"+37	 %  	
 D[ *D0   @ 2604*5-615+/-137Q	Q ($.Q '-	Q
 %(Q (+Q ($.Q "D(Q $d*Q D[Q *D0Q Q Q Q Qn 26/3"/!2+/37+	+ ($.+ &,	+
  + + "D(+ D[+ *D0+ + + +\ 
	@	  37	&	&& D[& *D0	&
 & &&r    