
    3fi                       d 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 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Z$ejB                  ejJ                  ddd	 	 	 	 	 	 	 	 	 	 	 	 	 d*dZ&ejN                  ejP                  ejJ                  dddddddd
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d+dZ)ejT                  ejV                  ejJ                  d d!ddd"	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d,d#Z, e	d$d%d&'      	 	 d-	 	 	 	 	 	 	 	 	 d.d(       Z-y)/z,Load question answering with sources chains.    )annotations)Mapping)AnyProtocol)
deprecated)BaseLanguageModel)BasePromptTemplate)BaseCombineDocumentsChain)MapReduceDocumentsChain)MapRerankDocumentsChain)ReduceDocumentsChain)RefineDocumentsChain)StuffDocumentsChain)LLMChain)map_reduce_promptrefine_promptsstuff_prompt)PROMPTc                  $    e Zd ZdZ	 	 	 	 	 	 ddZy)LoadingCallablez2Interface for loading the combine documents chain.c                     y)z-Callable to load the combine documents chain.N )selfllmkwargss      n/var/www/auto_recruiter/arenv/lib/python3.12/site-packages/langchain_classic/chains/qa_with_sources/loading.py__call__zLoadingCallable.__call__$   s        N)r   r   r   r   returnr
   )__name__
__module____qualname____doc__r   r   r   r   r   r   !   s&    <<< < 
#	<r   r   Fcontextscoreanswer)promptverbosedocument_variable_namerank_key
answer_keyc               >    t        | ||      }t        d||||d|S )Nr   r'   r(   )	llm_chainr*   r+   r)   r   )r   r   )r   r'   r(   r)   r*   r+   r   r.   s           r   _load_map_rerank_chainr/   ,   s:     SAI" 5	
  r   	summariesN)r'   document_promptr)   r(   c               >    t        | ||      }t        d||||d|S )Nr-   r.   r)   r1   r(   r   )r   r   )r   r'   r1   r)   r(   r   r.   s          r   _load_stuff_chainr4   @   s:     SAI 5'	
  r   i  )
question_promptcombine_promptr1   combine_document_variable_name!map_reduce_document_variable_namecollapse_prompt
reduce_llmcollapse_llmr(   	token_maxc       
           t        | ||	      }|xs | }t        |||	      }t        ||||	      }|d }|-d}t        |      |xs | }t        t        |||	      ||      }t        |||
|	      }t	        d||||	d|S )Nr-   r3   zfcollapse_llm provided, but collapse_prompt was not: please provide one or stop providing collapse_llm.)r.   r)   r1   )combine_documents_chaincollapse_documents_chainr<   r(   )r.   reduce_documents_chainr)   r(   r   )r   r   
ValueErrorr   r   )r   r5   r6   r1   r7   r8   r9   r:   r;   r(   r<   r   	map_chain_reduce_llmreduce_chainr>   collapse_chainmsg_collapse_llmr@   s                       r   _load_map_reduce_chainrH   S   s     S'JI#KNGTL1='	 #>  S/!$+,!&
 $B+
 2 7!/	 # 5@	
  r   context_strexisting_answer)r5   refine_promptr1   r)   initial_response_name
refine_llmr(   c          
     j    t        | ||      }	|xs | }
t        |
||      }t        d|	|||||d|S )Nr-   )initial_llm_chainrefine_llm_chainr)   rL   r1   r(   r   )r   r   )r   r5   rK   r1   r)   rL   rM   r(   r   initial_chain_refine_llmrefine_chains               r   _load_refine_chainrT      sX     _gNM#KM7SL '%53'  r   z0.2.13z1.0aD  This function is deprecated. Refer to this guide on retrieval and question answering with sources: https://python.langchain.com/docs/how_to/qa_sources/
See also 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
)sinceremovalmessagec                    t         t        t        t        d}||vr!d| d|j	                          }t        |      ||   } || fd|i|S )a	  Load a question answering with sources 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", "refine" and "map_rerank".
        verbose: Whether chains should be run in verbose mode or not. Note that this
            applies to all chains that make up the final chain.
        **kwargs: Additional keyword arguments.

    Returns:
        A chain to use for question answering with sources.
    )stuff
map_reducerefine
map_rerankzGot unsupported chain type: z. Should be one of r(   )r4   rH   rT   r/   keysrA   )r   
chain_typer(   r   loader_mappingrF   _funcs          r   load_qa_with_sources_chainra      sr    F #,$,	5N '*:, 7  . 3 3 568 	 o+J7E0g000r   )r   r   r'   r	   r(   boolr)   strr*   rc   r+   rc   r   r   r   r   )r   r   r'   r	   r1   r	   r)   rc   r(   bool | Noner   r   r   r   )r   r   r5   r	   r6   r	   r1   r	   r7   rc   r8   rc   r9   zBasePromptTemplate | Noner:   BaseLanguageModel | Noner;   re   r(   rd   r<   intr   r   r   r   )r   r   r5   r	   rK   r	   r1   r	   r)   rc   rL   rc   rM   re   r(   rd   r   r   r   r   )rY   N)
r   r   r^   rc   r(   rd   r   r   r   r
   ).r#   
__future__r   collections.abcr   typingr   r   langchain_core._apir   langchain_core.language_modelsr   langchain_core.promptsr	   /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.reducer   1langchain_classic.chains.combine_documents.refiner   0langchain_classic.chains.combine_documents.stuffr   langchain_classic.chains.llmr   (langchain_classic.chains.qa_with_sourcesr   r   r   =langchain_classic.chains.question_answering.map_rerank_promptr   MAP_RERANK_PROMPTr   r/   EXAMPLE_PROMPTr4   QUESTION_PROMPTCOMBINE_PROMPTrH   DEFAULT_TEXT_QA_PROMPTDEFAULT_REFINE_PROMPTrT   ra   r   r   r   <module>r|      s   2 " #   * < 5 U S R P 1 

<h < "3"+	  	
      . ".!4!4*6*E*E"-	  (	
     , +<*K*K):)I)I*;*J*J*5-615+/-17	7 (7 '	7
 (7 %(7 (+7 /7 )7 +7 7 7 7 7z +9*O*O(6(L(L*8*G*G"/!2+/	 ( &	
 (    )   4 
	j	"  1	 1 1  1 	 1
  1 1r   