
    Ngp                       d Z ddlmZ ddlZddlmZ ddlmZmZm	Z	 ddl
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 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* ddl+m,Z, ddl-m.Z.m/Z/ erddl0m1Z1 ddl2m3Z3 	 ddl4m5Z5m6Z6 n# e7$ r dfdZ5dfd Z6Y nw xY wd!Z8dgd%Z9dhd'Z:did)Z;djd+Z<dkd-Z=dld.Z>dmd0Z?dnd2Z@dod4ZAdld5ZBdpd7ZCdqd9ZDdld:ZEdrd<ZFdsd>ZGdtd@ZHdudBZIdvdDZJdwdFZKdxdHZLi dIeKdJe:dKe9dLe>dMe?dNe@dOeLdPeBdQeDdRe;dSe<dTe=dUeAdVeCdWeEdXeFdYeIeGeHeJdZZM ed[d\d]^          dyd`            ZN ed[d\d]^          dzdc            ZOd{deZPdS )|z!Functionality for loading chains.    )annotationsN)Path)TYPE_CHECKINGAnyUnion)
deprecated)_load_output_parserload_promptload_prompt_from_config)ReduceDocumentsChain)APIChain)Chain)MapReduceDocumentsChain)MapRerankDocumentsChain)RefineDocumentsChain)StuffDocumentsChain)HypotheticalDocumentEmbedder)LLMChain)LLMCheckerChain)LLMMathChain)QAWithSourcesChain)RetrievalQAWithSourcesChain)VectorDBQAWithSourcesChain)RetrievalQA
VectorDBQAGraphCypherQAChainLLMRequestsChain)load_llmload_llm_from_configargsr   kwargsreturnNonec                      t          d          )NzTo use this load_llm functionality you must install the langchain_community package. You can install it with `pip install langchain_community`ImportErrorr"   r#   s     T/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain/chains/loading.pyr    r    *   s    H
 
 	
    c                      t          d          )NzTo use this load_llm_from_config functionality you must install the langchain_community package. You can install it with `pip install langchain_community`r'   r)   s     r*   r!   r!   1   s     H
 
 	
r+   zHhttps://raw.githubusercontent.com/hwchase17/langchain-hub/master/chains/configdictr   c                   d| v r#|                      d          }t          |fi |}n4d| v r!t          |                      d          fi |}nt          d          d| v r%|                      d          }t	          |          }n6d| v r#t          |                      d                    }nt          d          t          |            t          d||d| S )	z Load LLM chain from config dict.llmllm_path+One of `llm` or `llm_path` must be present.promptprompt_pathz1One of `prompt` or `prompt_path` must be present.r0   r3    )popr!   r    
ValueErrorr   r
   r	   r   )r-   r#   
llm_configr0   prompt_configr3   s         r*   _load_llm_chainr;   >   s    ZZ&&
":8888	v		vzz*--8888FGGG6

8,,(77	&	 	 VZZ6677LMMM5F55f555r+   r   c                (   d| v r#|                      d          }t          |fi |}n4d| v r!t          |                      d          fi |}nt          d          d|v r|                     d          }nt          d          t	          d||d| S )z;Load hypothetical document embedder chain from config dict.	llm_chainllm_chain_path7One of `llm_chain` or `llm_chain_path` must be present.
embeddingsz`embeddings` must be present.)r=   base_embeddingsr6   )r7   load_chain_from_config
load_chainr8   r   )r-   r#   llm_chain_configr=   r@   s        r*   _load_hyde_chainrE   T   s    f!::k22*+;FFvFF			V	#	#vzz*:;;FFvFF		RSSSvZZ--

8999' "    r+   r   c                   d| v r#|                      d          }t          |fi |}n4d| v r!t          |                      d          fi |}nt          d          t	          |t
                    st          d|           d| v r%|                      d          }t          |          }n6d| v r#t          |                      d                    }nt          d          t          d	||d| S )
Nr=   r>   r?   Expected LLMChain, got document_promptdocument_prompt_pathzCOne of `document_prompt` or `document_prompt_path` must be present.)r=   rH   r6   )	r7   rB   rC   r8   
isinstancer   r   r
   r   )r-   r#   rD   r=   r:   rH   s         r*   _load_stuff_documents_chainrK   h   s2   f!::k22*+;FFvFF			V	#	#vzz*:;;FFvFF		RSSSi** @>9>>???F""

#4551-@@	6	)	)%fjj1G&H&HIIQ
 
 	
  _ @F  r+   r   c                   d| v r#|                      d          }t          |fi |}n4d| v r!t          |                      d          fi |}nt          d          t	          |t
                    st          d|           d| v r!t          |                      d          fi |}n2d| v r!t          |                      d          fi |}nt          | fi |}t          d||d| S )	Nr=   r>   r?   rG   reduce_documents_chainreduce_documents_chain_path)r=   rM   r6   )r7   rB   rC   r8   rJ   r   _load_reduce_documents_chainr   )r-   r#   rD   r=   rM   s        r*    _load_map_reduce_documents_chainrP      s]    f!::k22*+;FFvFF			V	#	#vzz*:;;FFvFF		RSSSi** @>9>>???6))!7JJ/00"
 "
4:"
 "
 
'&	0	0!+JJ455"
 "
9?"
 "
 ">f!O!O!O!O" 5    r+   r   c                   d }d }d| v r#|                      d          }t          |fi |}nd| v r#|                      d          }t          |fi |}nYd| v r!t          |                      d          fi |}n4d| v r!t          |                      d          fi |}nt          d          d| v r(|                      d          }|d }nt          |fi |}nud| v r!t          |                      d          fi |}nPd| v r(|                      d          }|d }n2t          |fi |}n$d	| v r t          |                      d	          fi |}t	          d||d
| S )Ncombine_documents_chaincombine_document_chaincombine_documents_chain_pathcombine_document_chain_pathSOne of `combine_documents_chain` or `combine_documents_chain_path` must be present.collapse_documents_chaincollapse_documents_chain_pathcollapse_document_chaincollapse_document_chain_path)rR   rW   r6   )r7   rB   rC   r8   r   )r-   r#   rR   rW   combine_document_chain_configcollapse_document_chain_configs         r*   rO   rO      sn   "# F**(.

3L(M(M%"8)#
 #
-3#
 #
 
"V	+	+(.

3K(L(L%"8)#
 #
-3#
 #
 
(6	1	1",JJ566#
 #
:@#
 #
 
'&	0	0",JJ455#
 #
9?#
 #
 >
 
 	

 "V++)/4N)O)O&)1'+$$'=.( (28( ($$ 
)F	2	2#-JJ677$
 $
;A$
 $
   
#f	,	,)/4M)N)N&)1'+$$'=.( (28( ($$ 
(6	1	1#-JJ566$
 $
:@$
 $
     7!9    r+   c                .   ddl m} d }d| v r#|                     d          }t          |fi |}nd| v r!t	          |                     d          fi |}n[d| v r#|                     d          }t          |fi |}n4d| v r!t          |                     d          fi |}nt          d          d| v r%|                     d          }t          |          }n&d	| v r"t          |                     d	                    }|r |d||d
| S  |d||d| S )Nr   )LLMBashChainr=   r>   r0   r1   r?   r3   r4   r=   r3   r5   r6   )
$langchain_experimental.llm_bash.baser^   r7   rB   rC   r!   r    r8   r   r
   )	r-   r#   r^   r=   rD   r9   r0   r:   r3   s	            r*   _load_llm_bash_chainra      s~   AAAAAAIf!::k22*+;FFvFF			V	#	#vzz*:;;FFvFF			&ZZ&&
":8888 
v		vzz*--8888RSSS6

8,,(77	&	 	 VZZ6677 >|IiII&III|=F==f===r+   r   c           	     T   d| v r#|                      d          }t          |fi |}n4d| v r!t          |                      d          fi |}nt          d          d| v r%|                      d          }t	          |          }n&d| v r"t          |                      d                    }d| v r%|                      d          }t	          |          }n&d| v r"t          |                      d                    }d| v r%|                      d          }t	          |          }	n&d	| v r"t          |                      d	                    }	d
| v r%|                      d
          }
t	          |
          }n&d| v r"t          |                      d                    }t          d||||	|d| S )Nr0   r1   r2   create_draft_answer_promptcreate_draft_answer_prompt_pathlist_assertions_promptlist_assertions_prompt_pathcheck_assertions_promptcheck_assertions_prompt_pathrevised_answer_promptrevised_answer_prompt_path)r0   rc   re   rg   ri   r6   )r7   r!   r    r8   r   r
   r   )r-   r#   r9   r0   !create_draft_answer_prompt_configrc   list_assertions_prompt_configre   check_assertions_prompt_configrg   revised_answer_prompt_configri   s               r*   _load_llm_checker_chainro      s   ZZ&&
":8888	v		vzz*--8888FGGG#v--,2JJ7S,T,T)%<-&
 &
"" 
+f	4	4%0JJ899&
 &
"  6))(.

3K(L(L%!89V!W!W	&&	0	0!,VZZ8U-V-V!W!W F**)/4M)N)N&"9*#
 #
 
(6	1	1"-JJ566#
 #
 &(('-zz2I'J'J$ 78T U U	%	/	/ +FJJ7S,T,T U U #=5 73    r+   r   c                2   d }d| v r#|                      d          }t          |fi |}nd| v r!t          |                      d          fi |}n[d| v r#|                      d          }t          |fi |}n4d| v r!t	          |                      d          fi |}nt          d          d| v r%|                      d          }t          |          }n&d| v r"t          |                      d                    }|rt          d
||d| S t          d
||d	| S )Nr=   r>   r0   r1   r?   r3   r4   r_   r5   r6   )	r7   rB   rC   r!   r    r8   r   r
   r   )r-   r#   r=   rD   r9   r0   r:   r3   s           r*   _load_llm_math_chainrq   +  sh   If!::k22*+;FFvFF			V	#	#vzz*:;;FFvFF			&ZZ&&
":8888 
v		vzz*--8888RSSS6

8,,(77	&	 	 VZZ6677 >IiII&III=F==f===r+   r   c                    d| v r#|                      d          }t          |fi |}n4d| v r!t          |                      d          fi |}nt          d          t	          dd|i| S )Nr=   r>   r?   r6   )r7   rB   rC   r8   r   )r-   r#   rD   r=   s       r*    _load_map_rerank_documents_chainrs   G  s     f!::k22*+;FFvFF			V	#	#vzz*:;;FFvFF		RSSS"AAYA&AAAr+   c                    ddl m} d| v r#|                     d          }t          |fi |}n4d| v r!t	          |                     d          fi |}nt          d           |dd|i| S )Nr   )PALChainr=   r>   r?   r6   ) langchain_experimental.pal_chainru   r7   rB   rC   r8   )r-   r#   ru   rD   r=   s        r*   _load_pal_chainrw   T  s    999999f!::k22*+;FFvFF			V	#	#vzz*:;;FFvFF		RSSS822i26222r+   r   c                ,   d| v r#|                      d          }t          |fi |}n4d| v r!t          |                      d          fi |}nt          d          d| v r#|                      d          }t          |fi |}n4d| v r!t          |                      d          fi |}nt          d          d| v r%|                      d          }t	          |          }n&d| v r"t          |                      d                    }t          d
|||d	| S )Ninitial_llm_chaininitial_llm_chain_pathzGOne of `initial_llm_chain` or `initial_llm_chain_path` must be present.refine_llm_chainrefine_llm_chain_pathzEOne of `refine_llm_chain` or `refine_llm_chain_path` must be present.rH   rI   )ry   r{   rH   r6   )r7   rB   rC   r8   r   r
   r   )r-   r#   initial_llm_chain_configry   refine_llm_chain_configr{   r:   rH   s           r*   _load_refine_documents_chainr   a  s   f$$#)::.A#B#B 23KVVvVV	!V	+	+&vzz2J'K'KVVvVVU
 
 	
 V##"(**-?"@"@12ITTVTT	 F	*	*%fjj1H&I&ITTVTTS
 
 	
 F""

#4551-@@	6	)	)%fjj1G&H&HII +)'  	  r+   r   c                    d| v r#|                      d          }t          |fi |}n4d| v r!t          |                      d          fi |}nt          d          t	          dd|i| S )NrR   rT   rV   r6   )r7   rB   rC   r8   r   )r-   r#   combine_documents_chain_configrR   s       r*   _load_qa_with_sources_chainr     s     F**)/4M)N)N&"8*#
 #
.4#
 #
 
(6	1	1",JJ566#
 #
:@#
 #
 >
 
 	
 XX6MXQWXXXr+   c                   ddl m} d|v r|                    d          }nt          d          d| v r-|                     d          }t	          |fi |} |d||d| S d| v r#|                     d          }t          |fi |}n4d| v r!t          |                     d          fi |}nt          d	          d
| v r%|                     d
          }t          |          }	nd }	 |j        ||fd
|	i| S )Nr   )SQLDatabaseChaindatabasez`database` must be present.r=   )r=   r   r0   r1   r2   r3   r6   )	langchain_experimental.sqlr   r7   r8   rB   r!   r    r   from_llm)
r-   r#   r   r   rD   chainr9   r0   r:   r3   s
             r*   _load_sql_database_chainr     sS   ;;;;;;V::j))6777f!::k22&'7BB6BBM%(MMfMMMZZ&&
":8888	v		vzz*--8888FGGG6

8,,(77$$S(LL6LVLLLr+   r   c                (   d|v r|                     d          }nt          d          d| v r#|                      d          }t          |fi |}n4d| v r!t          |                      d          fi |}nt          d          t	          d||d| S Nvectorstorez`vectorstore` must be present.rR   rT   rV   )rR   r   r6   )r7   r8   rB   rC   r   r-   r#   r   r   rR   s        r*   %_load_vector_db_qa_with_sources_chainr     s     jj//9::: F**)/4M)N)N&"8*#
 #
.4#
 #
 
(6	1	1",JJ566#
 #
:@#
 #
 >
 
 	
 &  7    r+   r   c                (   d|v r|                     d          }nt          d          d| v r#|                      d          }t          |fi |}n4d| v r!t          |                      d          fi |}nt          d          t	          d||d| S N	retrieverz`retriever` must be present.rR   rT   rV   )rR   r   r6   )r7   r8   rB   rC   r   r-   r#   r   r   rR   s        r*   _load_retrieval_qar     s    fJJ{++		7888 F**)/4M)N)N&"8*#
 #
.4#
 #
 
(6	1	1",JJ566#
 #
:@#
 #
 >
 
 	
   7    r+   r   c                (   d|v r|                     d          }nt          d          d| v r#|                      d          }t          |fi |}n4d| v r!t          |                      d          fi |}nt          d          t	          d||d| S r   )r7   r8   rB   rC   r   r   s        r*   %_load_retrieval_qa_with_sources_chainr     s     fJJ{++		7888 F**)/4M)N)N&"8*#
 #
.4#
 #
 
(6	1	1",JJ566#
 #
:@#
 #
 >
 
 	
 '  7    r+   r   c                (   d|v r|                     d          }nt          d          d| v r#|                      d          }t          |fi |}n4d| v r!t          |                      d          fi |}nt          d          t	          d||d| S r   )r7   r8   rB   rC   r   r   s        r*   _load_vector_db_qar      s    jj//9::: F**)/4M)N)N&"8*#
 #
.4#
 #
 
(6	1	1",JJ566#
 #
:@#
 #
 >
 
 	
   7    r+   r   c                   d|v r|                     d          }nt          d          d| v r#|                      d          }t          |fi |}nt          d          d| v r#|                      d          }t          |fi |}nt          d          	 ddlm} n# t
          $ r t          d	          w xY w |d|||d
| S )Ngraphz`graph` must be present.cypher_generation_chainz*`cypher_generation_chain` must be present.qa_chainz`qa_chain` must be present.r   r   zTo use this GraphCypherQAChain functionality you must install the langchain_community package. You can install it with `pip install langchain_community`)r   r   r   r6   )r7   r8   rB   *langchain_community.chains.graph_qa.cypherr   r(   )r-   r#   r   cypher_generation_chain_configr   qa_chain_configr   r   s           r*   _load_graph_cypher_chainr     sD   &

7##3444 F**)/4M)N)N&"8*#
 #
.4#
 #
 EFFFV **Z00)/DDVDD6777
QQQQQQQ 
 
 
H
 
 	

   7  	  s   B B8r   c                   d| v r#|                      d          }t          |fi |}n6d| v r#t          |                      d                    }nt          d          d| v r#|                      d          }t          |fi |}n4d| v r!t          |                      d          fi |}nt          d          d|v r|                     d          }nt          d          t	          d
|||d	| S )Napi_request_chainapi_request_chain_pathzGOne of `api_request_chain` or `api_request_chain_path` must be present.api_answer_chainapi_answer_chain_pathzEOne of `api_answer_chain` or `api_answer_chain_path` must be present.requests_wrapperz#`requests_wrapper` must be present.)r   r   r   r6   )r7   rB   rC   r8   r   )r-   r#   api_request_chain_configr   api_answer_chain_configr   r   s          r*   _load_api_chainr   <  sY   f$$#)::.A#B#B 23KVVvVV	!V	+	+&vzz2J'K'KLLU
 
 	
 V##"(**-?"@"@12ITTVTT	 F	*	*%fjj1H&I&ITTVTTS
 
 	
 V##!::&899>??? +))  	  r+   r   c                ^   	 ddl m} n# t          $ r t          d          w xY wd| v r#|                     d          }t	          |fi |}n4d| v r!t          |                     d          fi |}nt          d          d|v r |                    d          } |d	||d| S  |d	d|i| S )
Nr   r   zTo use this LLMRequestsChain functionality you must install the langchain package. You can install it with `pip install langchain`r=   r>   r?   r   )r=   r   r6   )langchain.chains.llm_requestsr   r(   r7   rB   rC   r8   )r-   r#   r   rD   r=   r   s         r*   _load_llm_requests_chainr   [  s,   
BBBBBBB 
 
 
>
 
 	

 f!::k22*+;FFvFF			V	#	#vzz*:;;FFvFF		RSSSV##!::&899 
2B
 
FL
 
 	
  >>)>v>>>s   	 #	api_chain
hyde_chainr=   llm_bash_chainllm_checker_chainllm_math_chainllm_requests_chain	pal_chainqa_with_sources_chainstuff_documents_chainmap_reduce_documents_chainrM   map_rerank_documents_chainrefine_documents_chainsql_database_chainvector_db_qa_with_sources_chainvector_db_qa)retrieval_qaretrieval_qa_with_sources_chaingraph_cypher_chainz0.2.13zThis function is deprecated and will be removed in langchain 1.0. At that point chains must be imported from their respective modules.z1.0)sincemessageremovalr   c                    d| vrt          d          |                     d          }|t          vrt          d| d          t          |         } || fi |S )zLoad chain from Config Dict._typez#Must specify a chain Type in configzLoading z chain not supported)r8   r7   type_to_loader_dict)r-   r#   config_typechain_loaders       r*   rB   rB     sw     f>???**W%%K---EKEEEFFF&{3L<))&)))r+   pathUnion[str, Path]c                    t          | t                    r$|                     d          rt          d          t	          | fi |S )zAUnified method for loading a chain from LangChainHub or local fs.zlc://zLoading from the deprecated github-based Hub is no longer supported. Please use the new LangChain Hub at https://smith.langchain.com/hub instead.)rJ   str
startswithRuntimeError_load_chain_from_file)r   r#   s     r*   rC   rC     sX     $ 
!9!9 

 
 	

 !00000r+   filec                4   t          | t                    rt          |           }n| }|j        dk    r<t	          |          5 }t          j        |          }ddd           n# 1 swxY w Y   nf|j                            d          r=t	          |d          5 }t          j	        |          }ddd           n# 1 swxY w Y   nt          d          d|v r|                    d          |d<   d|v r|                    d          |d<   t          |fi |S )zLoad chain from file.z.jsonN)z.yamlz.ymlrzFile type must be json or yamlverbosememory)rJ   r   r   suffixopenjsonloadendswithyaml	safe_loadr8   r7   rB   )r   r#   	file_pathfr-   s        r*   r   r     s    $ JJ			7"")__ 	"Yq\\F	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"			"	"#4	5	5 ;)S!! 	'Q^A&&F	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 9::: F"JJy11y6!::h//x "&33F333s$   A##A'*A'B::B>B>)r"   r   r#   r   r$   r%   )r-   r.   r#   r   r$   r   )r-   r.   r#   r   r$   r   )r-   r.   r#   r   r$   r   )r-   r.   r#   r   r$   r   )r-   r.   r#   r   r$   r   )r-   r.   r#   r   r$   r   )r-   r.   r#   r   r$   r   )r-   r.   r#   r   r$   r   )r-   r.   r#   r   r$   r   )r-   r.   r#   r   r$   r   )r-   r.   r#   r   r$   r   )r-   r.   r#   r   r$   r   )r-   r.   r#   r   r$   r   )r-   r.   r#   r   r$   r   )r-   r.   r#   r   r$   r   )r-   r.   r#   r   r$   r   )r-   r.   r#   r   r$   r   )r-   r.   r#   r   r$   r   )r-   r.   r#   r   r$   r   )r   r   r#   r   r$   r   )r   r   r#   r   r$   r   )Q__doc__
__future__r   r   pathlibr   typingr   r   r   r   langchain_core._apir   langchain_core.prompts.loadingr	   r
   r   langchain.chainsr   langchain.chains.api.baser   langchain.chains.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.hyde.baser   langchain.chains.llmr   !langchain.chains.llm_checker.baser   langchain.chains.llm_math.baser   %langchain.chains.qa_with_sources.baser   *langchain.chains.qa_with_sources.retrievalr   *langchain.chains.qa_with_sources.vector_dbr   "langchain.chains.retrieval_qa.baser   r   r   r   r   r    langchain_community.llms.loadingr    r!   r(   URL_BASEr;   rE   rK   rP   rO   ra   ro   rq   rs   rw   r   r   r   r   r   r   r   r   r   r   r   rB   rC   r   r6   r+   r*   <module>r      s   ' ' " " " " " "        , , , , , , , , , ,  * * * * * *          2 1 1 1 1 1 . . . . . . ' ' ' ' ' ' Q Q Q Q Q Q Q Q Q Q Q Q J J J J J J H H H H H H C C C C C C ) ) ) ) ) ) = = = = = = 7 7 7 7 7 7 D D D D D D R R R R R R Q Q Q Q Q Q F F F F F F F F ?MMMMMM>>>>>>
OOOOOOOOO 
 
 

 
 
 

 
 
 
 
 

& V6 6 6 6,   (   6   @9 9 9 9x> > > ><+ + + +\> > > >8
B 
B 
B 
B
3 
3 
3 
3   @Y Y Y Y$M M M M6   8   4   8   4   D   >? ? ? ?4"  *	
 0 * 2  8 8 !"B : !"B : 2  &'L!" &#$ ''L2)   0 
	O   
* 
* 
* 
* 
	O   1 1 1 14 4 4 4 4 4s   B% %B54B5