
    ihp                       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 dZ8dKdZ9dLdZ:dMdZ;	 	 	 	 	 	 dNd Z<dOd!Z=dPd"Z>dQd#Z?dRd$Z@	 	 	 	 	 	 dSd%ZAdPd&ZBdTd'ZCdUd(ZDdPd)ZE	 	 	 	 	 	 dVd*ZFdWd+ZG	 	 	 	 	 	 dXd,ZHdYd-ZIdZd.ZJd[d/ZKd\d0ZLi d1eKd2e:d3e9d4e>d5e?d6e@d7eLd8eBd9eDd:e;d;e<d<e=d=eAd>eCd?eEd@eFdAeIeGeHeJdBZM edCdDdEF      d]dG       ZN edCdDdEF      d^dH       ZOd_dIZPy# e7$ r dJdZ5	 	 	 	 	 	 dJdZ6Y w xY w)`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_configc                     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argskwargss     V/var/www/html/dev/engine/venv/lib/python3.12/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/c                d   d| v r| j                  d      }t        |fi |}n+d| v rt        | j                  d      fi |}nt        d      d| v r| j                  d      }t	        |      }n*d| v rt        | j                  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.r,   r/    )popr!   r    
ValueErrorr   r
   r	   r   )configr'   
llm_configr,   prompt_configr/   s         r(   _load_llm_chainr8   >   s    ZZ&
":88	v	vzz*-88FGG6

8,(7	&	 VZZ67LMM5F5f55r)   c                    d| v r| j                  d      }t        |fi |}n+d| v rt        | j                  d      fi |}nt        d      d|v r|j                  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_embeddingsr2   )r3   load_chain_from_config
load_chainr4   r   )r5   r'   llm_chain_configr:   r=   s        r(   _load_hyde_chainrB   T   s    f!::k2*+;FvF		V	#vzz*:;FvF	RSSvZZ-
899' "  r)   c                   d| v r| j                  d      }t        |fi |}n+d| v rt        | j                  d      fi |}nt        d      t	        |t
              st        d|       d| v r| j                  d      }t        |      }n*d| v rt        | j                  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:   rE   r2   )	r3   r?   r@   r4   
isinstancer   r   r
   r   )r5   r'   rA   r:   r7   rE   s         r(   _load_stuff_documents_chainrH   h   s    f!::k2*+;FvF		V	#vzz*:;FvF	RSSi*29+>??F"

#451-@	6	)%fjj1G&HIQ
 	
  _@F r)   c                   d| v r| j                  d      }t        |fi |}n+d| v rt        | j                  d      fi |}nt        d      t	        |t
              st        d|       d| v rt        | j                  d      fi |}n,d| v rt        | j                  d      fi |}nt        | fi |}t        d||d| S )	Nr:   r;   r<   rD   reduce_documents_chainreduce_documents_chain_path)r:   rJ   r2   )r3   r?   r@   r4   rG   r   _load_reduce_documents_chainr   )r5   r'   rA   r:   rJ   s        r(    _load_map_reduce_documents_chainrM      s     f!::k2*+;FvF		V	#vzz*:;FvF	RSSi*29+>??6)!7JJ/0"
4:"
 
'&	0!+JJ45"
9?"
 ">f!O!O" 5  r)   c                ^   d }d }d| v r| j                  d      }t        |fi |}nmd| v r| j                  d      }t        |fi |}nKd| v rt        | j                  d      fi |}n+d| v rt        | j                  d      fi |}nt        d      d| v r#| j                  d      }|d }nst        |fi |}nfd| v rt        | j                  d      fi |}nFd| v r#| j                  d      }|d }n,t        |fi |}nd	| v rt        | j                  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)rO   rT   r2   )r3   r?   r@   r4   r   )r5   r'   rO   rT   combine_document_chain_configcollapse_document_chain_configs         r(   rL   rL      s   "# F*(.

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

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

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

8,(7	&	 VZZ67IiI&II=F=f==r)   c           	        d| v r| j                  d      }t        |fi |}n+d| v rt        | j                  d      fi |}nt        d      d| v r| j                  d      }t	        |      }nd| v rt        | j                  d            }d| v r| j                  d      }t	        |      }nd| v rt        | j                  d            }d| v r| j                  d      }t	        |      }	nd	| v rt        | j                  d	            }	d
| v r| j                  d
      }
t	        |
      }nd| v rt        | j                  d            }t        d|	d| S )Nr,   r-   r.   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)r,   r`   rb   rd   rf   r2   )r3   r!   r    r4   r   r
   r   )r5   r'   r6   r,   !create_draft_answer_prompt_configr`   list_assertions_prompt_configrb   check_assertions_prompt_configrd   revised_answer_prompt_configrf   s               r(   _load_llm_checker_chainrl      s   ZZ&
":88	v	vzz*-88FGG#v-,2JJ7S,T)%<-&
" 
+f	4%0JJ89&
"  6)(.

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

8,(7	&	 VZZ67IiI&II=F=f==r)   c                    d| v r| j                  d      }t        |fi |}n+d| v rt        | j                  d      fi |}nt        d      t	        dd|i| S )Nr:   r;   r<   r2   )r3   r?   r@   r4   r   )r5   r'   rA   r:   s       r(    _load_map_rerank_documents_chainrp   G  sk     f!::k2*+;FvF		V	#vzz*:;FvF	RSS"AYA&AAr)   c                    ddl m} d| v r| j                  d      }t        |fi |}n+d| v rt	        | j                  d      fi |}nt        d       |dd|i| S )Nr   )PALChainr:   r;   r<   r2   ) langchain_experimental.pal_chainrr   r3   r?   r@   r4   )r5   r'   rr   rA   r:   s        r(   _load_pal_chainrt   T  sl    9f!::k2*+;FvF		V	#vzz*:;FvF	RSS2i2622r)   c                   d| v r| j                  d      }t        |fi |}n+d| v rt        | j                  d      fi |}nt        d      d| v r| j                  d      }t        |fi |}n+d| v rt        | j                  d      fi |}nt        d      d| v r| j                  d      }t	        |      }nd| v rt        | j                  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.rE   rF   )rv   rx   rE   r2   )r3   r?   r@   r4   r   r
   r   )r5   r'   initial_llm_chain_configrv   refine_llm_chain_configrx   r7   rE   s           r(   _load_refine_documents_chainr|   a  s   f$#)::.A#B 23KVvV	!V	+&vzz2J'KVvVU
 	
 V#"(**-?"@12ITVT	 F	*%fjj1H&ITVTS
 	
 F"

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

8,(7$$$S(L6LVLLr)   c                    d|v r|j                  d      }nt        d      d| v r| j                  d      }t        |fi |}n+d| v rt        | j                  d      fi |}nt        d      t	        d||d| S Nvectorstorez`vectorstore` must be present.rO   rQ   rS   )rO   r   r2   )r3   r4   r?   r@   r   r5   r'   r   r~   rO   s        r(   %_load_vector_db_qa_with_sources_chainr     s     jj/9:: F*)/4M)N&"8*#
.4#
 
(6	1",JJ56#
:@#
 >
 	
 &  7  r)   c                    d|v r|j                  d      }nt        d      d| v r| j                  d      }t        |fi |}n+d| v rt        | j                  d      fi |}nt        d      t	        d||d| S N	retrieverz`retriever` must be present.rO   rQ   rS   )rO   r   r2   )r3   r4   r?   r@   r   r5   r'   r   r~   rO   s        r(   _load_retrieval_qar     s    fJJ{+	788 F*)/4M)N&"8*#
.4#
 
(6	1",JJ56#
:@#
 >
 	
   7  r)   c                    d|v r|j                  d      }nt        d      d| v r| j                  d      }t        |fi |}n+d| v rt        | j                  d      fi |}nt        d      t	        d||d| S r   )r3   r4   r?   r@   r   r   s        r(   %_load_retrieval_qa_with_sources_chainr     s     fJJ{+	788 F*)/4M)N&"8*#
.4#
 
(6	1",JJ56#
:@#
 >
 	
 '  7  r)   c                    d|v r|j                  d      }nt        d      d| v r| j                  d      }t        |fi |}n+d| v rt        | j                  d      fi |}nt        d      t	        d||d| S r   )r3   r4   r?   r@   r   r   s        r(   _load_vector_db_qar      s    jj/9:: F*)/4M)N&"8*#
.4#
 
(6	1",JJ56#
:@#
 >
 	
   7  r)   c                N   d|v r|j                  d      }nt        d      d| v r| j                  d      }t        |fi |}nt        d      d| v r| j                  d      }t        |fi |}nt        d      	 ddlm}  |d|||d
| S # t
        $ r t        d	      w xY w)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   r2   )r3   r4   r?   *langchain_community.chains.graph_qa.cypherr   r$   )r5   r'   r   cypher_generation_chain_configr   qa_chain_configr   r   s           r(   _load_graph_cypher_chainr     s    &

7#344 F*)/4M)N&"8*#
.4#
 EFFV **Z0)/DVD677
Q   7 	   
H
 	

s   =B B$c                   d| v r| j                  d      }t        |fi |}n*d| v rt        | j                  d            }nt        d      d| v r| j                  d      }t        |fi |}n+d| v rt        | j                  d      fi |}nt        d      d|v r|j                  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   r2   )r3   r?   r@   r4   r   )r5   r'   api_request_chain_configr   api_answer_chain_configr   r   s          r(   _load_api_chainr   <  s    f$#)::.A#B 23KVvV	!V	+&vzz2J'KLU
 	
 V#"(**-?"@12ITVT	 F	*%fjj1H&ITVTS
 	
 V#!::&89>?? +)) 	 r)   c                .   	 ddl m} d| v r| j                  d      }t	        |fi |}n+d| v rt        | j                  d      fi |}nt        d      d|v r|j                  d      } |d	||d| S  |d	d|i| S # t        $ r t        d      w xY w)
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   r2   )langchain.chains.llm_requestsr   r$   r3   r?   r@   r4   )r5   r'   r   rA   r:   r   s         r(   _load_llm_requests_chainr   [  s    
B f!::k2*+;FvF		V	#vzz*:;FvF	RSSV#!::&89 
2B
FL
 	
  >)>v>>)  
>
 	

s   A? ?B	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_chainrJ   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removalc                    d| vrt        d      | j                  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)r4   r3   type_to_loader_dict)r5   r'   config_typechain_loaders       r(   r?   r?     s^     f>??**W%K--8K=0DEFF&{3L)&))r)   c                r    t        | t              r| j                  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.)rG   str
startswithRuntimeError_load_chain_from_file)pathr'   s     r(   r@   r@     s=     $!9
 	

 !000r)   c                   t        | t              rt        |       }n| }|j                  dk(  r*t	        |      5 }t        j                  |      }ddd       nQ|j                  j                  d      r+t	        |d      5 }t        j                  |      }ddd       nt        d      d|v r|j                  d      d<   d|v r|j                  d      d<   t        fi |S # 1 sw Y   ExY w# 1 sw Y   QxY w)zLoad chain from file.z.jsonN)z.yamlz.ymlrzFile type must be json or yamlverbosememory)rG   r   r   suffixopenjsonloadendswithyaml	safe_loadr4   r3   r?   )filer'   	file_pathfr5   s        r(   r   r     s     $J		7")_ 	"YYq\F	" 	"				"	"#4	5)S! 	'Q^^A&F	' 	' 9:: F"JJy1y6!::h/x "&3F33	" 	"	' 	's   C%?C1%C.1C:)r&   r   r'   r   returnNone)r5   dictr'   r   r   r   )r5   r   r'   r   r   r   )r5   r   r'   r   r   r   )r5   r   r'   r   r   r   )r5   r   r'   r   r   r   )r5   r   r'   r   r   r   )r5   r   r'   r   r   r   )r5   r   r'   r   r   r   )r5   r   r'   r   r   r   )r5   r   r'   r   r   r   )r5   r   r'   r   r   r   )r5   r   r'   r   r   r   )r5   r   r'   r   r   r   )r5   r   r'   r   r   r   )r5   r   r'   r   r   r   )r5   r   r'   r   r   r   )r5   r   r'   r   r   r   )r5   r   r'   r   r   r   )r5   r   r'   r   r   r   )r   Union[str, Path]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_BASEr8   rB   rH   rM   rL   r^   rl   rn   rp   rt   r|   r   r   r   r   r   r   r   r   r   r   r?   r@   r   r2   r)   r(   <module>r      s   ' "   , ,  *  2 . ' Q Q J H C ) = 7 D R Q FM>
O( V6,(6@9x><+\>8
B
B
B
B
3@Y$M684 84D>?4"  *	
 0 * 2  8 8 !"B : !"B : 2  &'L!" &#$ ''L2) 0 
	O 
*
* 
	O 114[  



!
	

s   E2 2FF