
    NgT2                     *   d Z ddlZddlZddlZddlmZ ddlmZmZm	Z	m
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mZmZ ddlmZmZ ddlm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z& ddl'm(Z(m)Z)m*Z*  ej+        e,          Z- G d de          Z.dS )zo
Pebblo Retrieval Chain with Identity & Semantic Enforcement for question-answering
against a vector database.
    N)version)AnyDictListOptional)Chain)BaseCombineDocumentsChain)AsyncCallbackManagerForChainRunCallbackManagerForChainRun)Document)BaseLanguageModel)VectorStoreRetriever)
ConfigDictField	validator)SUPPORTED_VECTORSTORESset_enforcement_filters)AppAuthContext	ChainInfo	FrameworkModelSemanticContextVectorDB)PLUGIN_VERSIONPebbloRetrievalAPIWrapperget_runtimec                      e Zd ZU dZeed<   	 dZeed<   dZeed<   dZ	e
ed<   	  ed	
          Zeed<   	 dZeed<   	 dZeed<   	 eed<   	 eed<   	 eed<   	 dZee         ed<   	 dZee         ed<   	 dZeed<   	 dZe
ed<   	 d	Ze
ed<   	  ee          Zeed<   	 	 d4deeef         dee         deeef         fdZ	 d4deeef         dee         deeef         fd Z ed	d	d!"          Ze de!e         fd#            Z"e de!e         fd$            Z#e defd%            Z$e%	 	 	 	 	 d5d'e&dededed(ed)ee'         dee         dee         ded*edd fd+            Z( e)dd	d	,          dedefd-            Z*d.edee+         dee,         dede!e-         f
d/Z.d.edee+         dee,         dede!e-         f
d0Z/e0dededed'e&de1f
d1            Z2e%d6d2            Z3e%d'e&d*ede!e4         fd3            Z5dS )7PebbloRetrievalQAzt
    Retrieval Chain with Identity & Semantic Enforcement for question-answering
    against a vector database.
    combine_documents_chainquery	input_keyresult
output_keyFreturn_source_documentsT)exclude	retrieverauth_contextauth_context_keysemantic_contextsemantic_context_keyapp_nameownerdescriptionNapi_keyclassifier_urllocalclassifier_location_discover_sentenable_prompt_gov)default_factory	pb_clientinputsrun_managerreturnc                    t           j                                                                         }|pt          j                    }|| j                 }|                    | j                  }|                    | j                  }| j	        
                    |          \  }}	dt          j        | j                  j        v }
|
r|                     ||||          }n|                     |||          }| j                            |||                                          }| j	                            | j        | j        |||||	|| j        	  	         | j        r| j        |d|iS | j        |iS )h  Run get_relevant_text and llm on input query.

        If chain has 'return_source_documents' as 'True', returns
        the retrieved documents as well under the key 'source_documents'.

        Example:
        .. code-block:: python

        res = indexqa({'query': 'This is my query'})
        answer, docs = res['result'], res['source_documents']
        r8   r8   input_documentsquestion	callbackssource_documents)datetimenow	isoformatr   get_noop_managerr"   getr)   r+   r6   check_prompt_validityinspect	signature	_get_docs
parametersr    run	get_childsend_promptr,   r'   r4   r%   r$   )selfr7   r8   prompt_time_run_managerr?   r(   r*   _prompt_entitiesaccepts_run_managerdocsanswers                l/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/chains/pebblo_retrieval/base.py_callzPebbloRetrievalQA._callU   s     '++--7799"S&@&Q&S&S$.)zz$"788!::d&?@@!^AA(KK? W.t~>>II 	  	L>>,(8l "  DD >>(L:JKKD-11 8|?U?U?W?W 2 
 
 	""MN"
	
 
	
 
	
 ' 	-OV-?FFOV,,    c                 $  K   t           j                                                                         }|pt          j                    }|| j                 }|                    | j                  }|                    | j                  }dt          j
        | j                  j        v }| j                            |           d{V \  }	}
|r |                     ||||           d{V }n|                     |||           d{V }| j                            |||                                           d{V }| j                            | j        | j        |||||
|| j        	  	         d{V  | j        r| j        |d|iS | j        |iS )r;   r8   Nr<   r=   rA   )rB   rC   rD   r
   rE   r"   rF   r)   r+   rH   rI   
_aget_docsrK   r6   acheck_prompt_validityr    arunrM   asend_promptr,   r'   r4   r%   r$   )rO   r7   r8   rP   rQ   r?   r(   r*   rT   rR   rS   rU   rV   s                rW   _acallzPebbloRetrievalQA._acall   s       '++--7799"X&E&V&X&X$.)zz$"788!::d&?@@W.t??JJ 	 $(>#H#H#R#RRRRRRR? 	S,(8l )        DD <AQRRRRRRRRD388 8|?U?U?W?W 9 
 
 
 
 
 
 
 
 n))MN"

 

 
	
 
	
 
	
 
	
 
	
 
	
 
	
 ' 	-OV-?FFOV,,rY   forbid)populate_by_namearbitrary_types_allowedextrac                 *    | j         | j        | j        gS )z,Input keys.

        :meta private:
        )r"   r)   r+   rO   s    rW   
input_keyszPebbloRetrievalQA.input_keys   s      5t7PQQrY   c                 0    | j         g}| j        r|dgz  }|S )z-Output keys.

        :meta private:
        rA   )r$   r%   )rO   _output_keyss     rW   output_keyszPebbloRetrievalQA.output_keys   s-     (' 	1/00LrY   c                     dS )zReturn the chain type.pebblo_retrieval_qa re   s    rW   _chain_typezPebbloRetrievalQA._chain_type   s
     %$rY   stuffllm
chain_typechain_type_kwargskwargsc
                     ddl m} |pi } ||fd|i|}t          j        d||||d|
}t	          ||	|          }|                    |            | d|||||||	|d|
S )zLoad chain from chain type.r   )load_qa_chainrp   )r,   r.   r-   ro   )r/   r2   r0   )r    r,   r-   r.   r/   r0   r2   r6   rl   )#langchain.chains.question_answeringrt   r   _get_app_detailsr   send_app_discover)clsro   r,   r.   r-   rp   rq   r/   r0   r2   rr   rt   _chain_type_kwargsr    appr6   s                   rW   from_chain_typez!PebbloRetrievalQA.from_chain_type   s     	FEEEEE.4""/-#
 #
&#
*<#
 #

 %5 
#	
 

 
 
 . 3)
 
 
	 	##C(((s 

$;#) 3

 

 

 

 
	
rY   )prealwaysc                     |j         j        j        t          vr*t	          dt           d|j         j        j         d          |S )z[
        Validate that the vectorstore of the retriever is supported vectorstores.
        zFVectorstore must be an instance of one of the supported vectorstores: z. Got 'z
' instead.)vectorstore	__class____name__r   
ValueError)rx   r'   s     rW   validate_vectorstorez&PebbloRetrievalQA.validate_vectorstore  sf      *3;QQQM!7M M!-7@M M M  
 rY   r?   c                    t          | j        ||           | j                            ||                                          S )	Get docs.r@   )r   r'   get_relevant_documentsrM   rO   r?   r(   r*   r8   s        rW   rJ   zPebbloRetrievalQA._get_docs  sI     	 >NOOO~44 5 5 7 7 5 
 
 	
rY   c                   K   t          | j        ||           | j                            ||                                           d{V S )r   r   N)r   r'   aget_relevant_documentsrM   r   s        rW   r[   zPebbloRetrievalQA._aget_docs-  sk       	 >NOOO^;; 5 5 7 7 < 
 
 
 
 
 
 
 
 	
rY   c                     t                      \  }}t          j        |fi |}t          | |||||t          t          dt          d                              }|S )z[Fetch app details. Internal method.
        Returns:
            App: App details.
        langchain_community)namer   )r   r-   r.   runtime	frameworkchainsplugin_versionclient_version)r   r   get_chain_detailsr   r   r   r   )	r,   r-   r.   ro   rr   r   r   r   rz   s	            rW   rv   z"PebbloRetrievalQA._get_app_details;  s{     )]]	7"4SCCFCC#)$* 566  
 
 
 
rY   c                     d| _         d S )NT)r3   )rx   s    rW   set_discover_sentz#PebbloRetrievalQA.set_discover_sentT  s    !rY   c                 
   |j         }t          | j        t          |                    d|                    d                    |j        j                  t          |d         j        j        j        t          |d         j        d          r$t          |d         j        j
        j                  n@t          |d         j        d          r$t          |d         j        j        j                  nd          g	          g}|S )
z
        Get chain details.

        Args:
            llm (BaseLanguageModel): Language model instance.
            **kwargs: Additional keyword arguments.

        Returns:
            List[ChainInfo]: Chain details.
        
model_namemodel)r   vendorr'   _embeddings
_embeddingN)r   embedding_model)r   r   
vector_dbs)__dict__r   r   r   rF   r   r   r   hasattrstrr   r   r   )rx   ro   rr   llm_dictr   s        rW   r   z#PebbloRetrievalQA.get_chain_detailsX  s	    <\!lHLL4I4IJJ=1  
 #K0<FO #6+#6#BMRR)";/;GM) ) )  'vk':'FUU&C{ 3 ? J PQQQ!%    
. rY   )N)rn   NNNr1   )r9   N)6r   
__module____qualname____doc__r	   __annotations__r"   r   r$   r%   boolr   r'   r   r)   r+   r/   r   r0   r2   r3   r4   r   r6   r   r   r   rX   r
   r_   r   model_configpropertyr   rf   ri   rm   classmethodr   dictr{   r   r   r   r   r   rJ   r[   staticmethodr   rv   r   r   r   rl   rY   rW   r   r   -   s         
 76660IsJ$)T)))-&+eD&9&9&9I#999+*c***: 2#2224MMMJJJ!GXc]!!!'$(NHSM(((&&&&O ND   :"t""">+051, , ,I(    &
 =A3- 3-S#X3- 893- 
c3h	3- 3- 3- 3-p BF4- 4-S#X4- =>4- 
c3h	4- 4- 4- 4-l : $  L RDI R R R XR T#Y    X %S % % % X%  ",0!%(,#*/
 /
/
 /
 	/

 /
 /
 $D>/
 #/
 !/
 !/
 /
 
/
 /
 /
 [/
b Y{T222,	   32

 {+
 #?3	
 0
 
h
 
 
 


 {+
 #?3	
 5
 
h
 
 
 
 !03:K	   \0 " " " [" %#%/2%	i% % % [% % %rY   r   )/r   rB   rH   loggingimportlib.metadatar   typingr   r   r   r   langchain.chains.baser   'langchain.chains.combine_documents.baser	   langchain_core.callbacksr
   r   langchain_core.documentsr   langchain_core.language_modelsr   langchain_core.vectorstoresr   pydanticr   r   r   ?langchain_community.chains.pebblo_retrieval.enforcement_filtersr   r   2langchain_community.chains.pebblo_retrieval.modelsr   r   r   r   r   r   r   5langchain_community.chains.pebblo_retrieval.utilitiesr   r   r   	getLoggerr   loggerr   rl   rY   rW   <module>r      s
   
    & & & & & & , , , , , , , , , , , , ' ' ' ' ' ' M M M M M M        . - - - - - < < < < < < < < < < < < 1 1 1 1 1 1 1 1 1 1                                  
	8	$	$Q Q Q Q Q Q Q Q Q QrY   