o
    .ifb                     @   s  d Z ddlZddlmZ ddlmZmZ ddlZddlm	Z	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, ddl-m.Z. ddl/m0Z0 ddl1m2Z2m3Z3 dZ4de5dede$fddZ6de5dede"fdd Z7de5dedefd!d"Z8de5dedefd#d$Z9de5dedefd%d&Z:de5dedefd'd(Z;de5dede&fd)d*Z<de5dede(fd+d,Z=de5dedefd-d.Z>de5dedefd/d0Z?de5dedefd1d2Z@de5dede,fd3d4ZAde5dedefd5d6ZBde5dede0fd7d8ZCde5dede2fd9d:ZDde5dede.fd;d<ZEde5dede3fd=d>ZFde5dede fd?d@ZGde5dedefdAdBZHde5dede*fdCdDZIi dEeHdFe7dGe6dHe;dIe<dJe=dKeIdLe?dMeAdNe8dOe9dPe:dQe>dRe@dSeBdTeCdUeFeDeEeGdVZJde5dedefdWdXZKdYeeLef dedefdZd[ZMd\eeLef dedefd]d^ZNdS )_z!Functionality for loading chains.    N)Path)AnyUnion)load_llmload_llm_from_config)_load_output_parserload_promptload_prompt_from_config)try_load_from_hub)ReduceDocumentsChain)APIChain)Chain)MapReduceDocumentsChain)MapRerankDocumentsChain)RefineDocumentsChain)StuffDocumentsChain)GraphCypherQAChain)HypotheticalDocumentEmbedder)LLMChain)LLMCheckerChain)LLMMathChain)LLMRequestsChain)QAWithSourcesChain)RetrievalQAWithSourcesChain)VectorDBQAWithSourcesChain)RetrievalQA
VectorDBQAzHhttps://raw.githubusercontent.com/hwchase17/langchain-hub/master/chains/configkwargsreturnc                 K   s   d| v r|  d}t|}nd| v rt|  d}ntdd| v r,|  d}t|}nd| v r8t|  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#   N )popr   r   
ValueErrorr	   r   r   r   )r   r   
llm_configr    prompt_configr#   r&   r&   Q/var/www/html/corbot_env/lib/python3.10/site-packages/langchain/chains/loading.py_load_llm_chain$   s   



r,   c                 K   sl   d| v r|  d}t|}nd| v rt|  d}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_embeddingsNr&   )r'   load_chain_from_config
load_chainr(   r   )r   r   llm_chain_configr-   r0   r&   r&   r+   _load_hyde_chain:   s   

r5   c                 K   s   d| v r|  d}t|}nd| v rt|  d}ntdt|ts*td| d| v r8|  d}t|}nd| v rDt|  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-   r7   r&   )	r'   r2   r3   r(   
isinstancer   r	   r   r   )r   r   r4   r-   r*   r7   r&   r&   r+   _load_stuff_documents_chainL   s*   




r:   c                 K   s   d| v r|  d}t|}nd| v rt|  d}ntdt|ts*td| d| v r6t|  d}nd| v rBt|  d}nt| }td||d| S )	Nr-   r.   r/   r6   reduce_documents_chainreduce_documents_chain_path)r-   r;   r&   )r'   r2   r3   r(   r9   r   _load_reduce_documents_chainr   )r   r   r4   r-   r;   r&   r&   r+    _load_map_reduce_documents_chaing   s*   


r>   c                 K   s  d }d }d| v r|  d}t|}n*d| v r |  d}t|}nd| v r,t|  d}nd| v r8t|  d}ntdd| v rQ|  d}|d u rLd }n1t|}n,d| v r]t|  d}n d| v rr|  d}|d u rmd }nt|}nd	| v r}t|  d	}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)r?   rD   r&   )r'   r2   r3   r(   r   )r   r   r?   rD   combine_document_chain_configcollapse_document_chain_configr&   r&   r+   r=      sV   





r=   c           	      K   s   ddl m} d }d| v r| d}t|}n*d| v r"t| d}nd| v r0| d}t|}nd| v r<t| d}ntdd| v rN| d}t|}nd	| v rYt	| d	}|re|d||d
| S |d||d| S )Nr   )LLMBashChainr-   r.   r    r!   r/   r#   r$   r-   r#   r%   r&   )
$langchain_experimental.llm_bash.baserJ   r'   r2   r3   r   r   r(   r	   r   )	r   r   rJ   r-   r4   r)   r    r*   r#   r&   r&   r+   _load_llm_bash_chain   s*   





rM   c                 K   s  d| v r|  d}t|}nd| v rt|  d}ntdd| v r,|  d}t|}nd| v r7t|  d}d| v rE|  d}t|}nd| v rPt|  d}d| v r^|  d}t|}	nd	| v rit|  d	}	d
| v rw|  d
}
t|
}nd| v rt|  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    rN   rP   rR   rT   r&   )r'   r   r   r(   r	   r   r   )r   r   r)   r    !create_draft_answer_prompt_configrN   list_assertions_prompt_configrP   check_assertions_prompt_configrR   revised_answer_prompt_configrT   r&   r&   r+   _load_llm_checker_chain   sV   







rZ   c                 K   s   d }d| v r|  d}t|}n*d| v rt|  d}nd| v r*|  d}t|}nd| v r6t|  d}ntdd| v rH|  d}t|}nd| v rSt|  d}|r_td
||d| S td
||d	| S )Nr-   r.   r    r!   r/   r#   r$   rK   r%   r&   )	r'   r2   r3   r   r   r(   r	   r   r   )r   r   r-   r4   r)   r    r*   r#   r&   r&   r+   _load_llm_math_chain  s(   





r[   c                 K   N   d| v r|  d}t|}nd| v rt|  d}ntdtdd|i| S )Nr-   r.   r/   r&   )r'   r2   r3   r(   r   )r   r   r4   r-   r&   r&   r+    _load_map_rerank_documents_chain!  s   

r]   c                 K   sZ   ddl m} d| v r| d}t|}nd| v r t| d}ntd|dd|i| S )Nr   )PALChainr-   r.   r/   r&   ) langchain_experimental.pal_chainr^   r'   r2   r3   r(   )r   r   r^   r4   r-   r&   r&   r+   _load_pal_chain.  s   

r`   c                 K   s   d| v r|  d}t|}nd| v rt|  d}ntdd| v r,|  d}t|}nd| v r8t|  d}ntdd| v rJ|  d}t|}nd| v rUt|  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.r7   r8   )ra   rc   r7   r&   )r'   r2   r3   r(   r	   r   r   )r   r   initial_llm_chain_configra   refine_llm_chain_configrc   r*   r7   r&   r&   r+   _load_refine_documents_chain;  s8   





rg   c                 K   r\   )Nr?   rA   rC   r&   )r'   r2   r3   r(   r   )r   r   combine_documents_chain_configr?   r&   r&   r+   _load_qa_with_sources_chain[  s   

ri   c           
      K   s   ddl m} d|v r|d}ntdd| v r+| d}t|}|d||d| S d| v r9| d}t|}nd| v rEt| d}ntd	d
| v rW| d
}t|}	nd }	|j||fd
|	i| S )Nr   )SQLDatabaseChaindatabasez`database` must be present.r-   )r-   rk   r    r!   r"   r#   r&   )	langchain_experimental.sqlrj   r'   r(   r2   r   r   r	   from_llm)
r   r   rj   rk   r4   chainr)   r    r*   r#   r&   r&   r+   _load_sql_database_chaini  s&   




ro   c                 K   l   d|v r
| d}ntdd| v r|  d}t|}nd| v r(t|  d}ntdtd||d| S Nvectorstorez`vectorstore` must be present.r?   rA   rC   )r?   rr   r&   )r'   r(   r2   r3   r   r   r   rr   rh   r?   r&   r&   r+   %_load_vector_db_qa_with_sources_chain  "   

rt   c                 K   rp   N	retrieverz`retriever` must be present.r?   rA   rC   )r?   rw   r&   )r'   r(   r2   r3   r   r   r   rw   rh   r?   r&   r&   r+   _load_retrieval_qa  "   

ry   c                 K   rp   rv   )r'   r(   r2   r3   r   rx   r&   r&   r+   %_load_retrieval_qa_with_sources_chain  ru   r{   c                 K   rp   rq   )r'   r(   r2   r3   r   rs   r&   r&   r+   _load_vector_db_qa  rz   r|   c                 K   sz   d|v r
| d}ntdd| v r|  d}t|}ntdd| v r.|  d}t|}ntdt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~   r   r&   )r'   r(   r2   r   )r   r   r}   cypher_generation_chain_configr~   qa_chain_configr   r&   r&   r+   _load_graph_cypher_chain  s$   



r   c                 K   s   d| v r|  d}t|}nd| v rt|  d}ntdd| v r,|  d}t|}nd| v r8t|  d}ntdd|v rF| 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   r&   )r'   r2   r3   r(   r   )r   r   api_request_chain_configr   api_answer_chain_configr   r   r&   r&   r+   _load_api_chain  s4   



r   c                 K   st   d| v r|  d}t|}nd| v rt|  d}ntdd|v r1| d}td||d| S tdd|i| S )Nr-   r.   r/   r   )r-   r   r&   )r'   r2   r3   r(   r   )r   r   r4   r-   r   r&   r&   r+   _load_llm_requests_chain  s   


r   	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_chainr;   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_chainc                 K   sJ   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)r(   r'   type_to_loader_dict)r   r   config_typechain_loaderr&   r&   r+   r2   @  s   
r2   pathc                 K   s2   t | tdddhfi | }r|S t| fi |S )zAUnified method for loading a chain from LangChainHub or local fs.chainsjsonyaml)r
   _load_chain_from_file)r   r   
hub_resultr&   r&   r+   r3   M  s   
r3   filec                 K   s   t | tr
t| }n| }|jdkr+t|}t|}W d   n1 s%w   Y  n$|jdkrKt|d}t|}W d   n1 sEw   Y  nt	dd|v rZ|
d|d< d|v re|
d|d< t|fi |S )zLoad chain from file.z.jsonNz.yamlrzFile type must be json or yamlverbosememory)r9   strr   suffixopenr   loadr   	safe_loadr(   r'   r2   )r   r   	file_pathfr   r&   r&   r+   r   W  s&   




r   )O__doc__r   pathlibr   typingr   r   r    langchain_community.llms.loadingr   r   langchain_core.prompts.loadingr   r   r	   langchain_core.utils.loadingr
   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.graph_qa.cypherr   langchain.chains.hyde.baser   langchain.chains.llmr   !langchain.chains.llm_checker.baser   langchain.chains.llm_math.baser   langchain.chains.llm_requestsr   %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   URL_BASEdictr,   r5   r:   r>   r=   rM   rZ   r[   r]   r`   rg   ri   ro   rt   ry   r{   r|   r   r   r   r   r2   r   r3   r   r&   r&   r&   r+   <module>   s    
4.
 

	
"
