
    hj2                     &   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jV                  e,      Z- G d de      Z.y)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                   2   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<   	 	 d3deeef   dee   deeef   fdZ	 d3d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%	 	 	 	 	 d4d&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
d/Z/e0dededed&e&d)ede1fd0       Z2e%d5d1       Z3e%d&e&d)ede!e4   fd2       Z5y)6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                   j                         j                         }|xs t        j                         }|| j
                     }|j                  | j                        }|j                  | j                        }| j                  j                  |      \  }}	dt        j                  | j                        j                  v }
|
r| j                  ||||      }n| j                  |||      }| j                  j!                  |||j#                               }| 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                n/var/www/html/eduruby.in/venv/lib/python3.12/site-packages/langchain_community/chains/pebblo_retrieval/base.py_callzPebbloRetrievalQA._callU   sv     ''++-779"S&@&Q&Q&S$..)zz$"7"78!::d&?&?@!^^AA(K? W..t~~>III 	 >>,(8l " D >>(L:JKD--11 8|?U?U?W 2 
 	""MMNN""
	
 ''OOV-?FFOOV,,    c                   K   t         j                   j                         j                         }|xs t        j                         }|| j
                     }|j                  | j                        }|j                  | j                        }dt        j                  | j                        j                  v }| j                  j                  |       d{   \  }	}
|r| j                  ||||       d{   }n| j                  |||       d{   }| j                  j!                  |||j#                                d{   }| j                  j%                  | j&                  | j(                  |||||
|| j*                  	       d{    | j,                  r| j.                  |d|iS | j.                  |iS 7 7 7 7 }7 6w)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"X&E&V&V&X$..)zz$"7"78!::d&?&?@W..t?JJJ 	 $(>>#H#H#RR?,(8l )  D <AQRRD3388 8|?U?U?W 9 
 
 nn))MMNN""

 
	
 
	
 ''OOV-?FFOOV,,7 S S

	
s[   CG	F?!G	7G8G	G3G	GAG	G/G	G	G	G	G	forbid)populate_by_namearbitrary_types_allowedextrac                 H    | j                   | j                  | j                  gS )z,Input keys.

        :meta private:
        )r"   r)   r+   rO   s    rW   
input_keyszPebbloRetrievalQA.input_keys   s!      5 5t7P7PQQrY   c                 D    | 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-     (''/00LrY   c                      y)zReturn the chain type.pebblo_retrieval_qa re   s    rW   _chain_typezPebbloRetrievalQA._chain_type   s     %rY   llm
chain_typechain_type_kwargskwargsc
                     ddl m} |xs i } ||fd|i|}t        j                  d||||d|
}t	        ||	|      }|j                  |        | d|||||||	|d|
S )zLoad chain from chain type.r   )load_qa_chainro   )r,   r.   r-   rn   )r/   r2   r0   )r    r,   r-   r.   r/   r0   r2   r6   rl   )#langchain.chains.question_answeringrs   r   _get_app_detailsr   send_app_discover)clsrn   r,   r.   r-   ro   rp   r/   r0   r2   rq   rs   _chain_type_kwargsr    appr6   s                   rW   from_chain_typez!PebbloRetrievalQA.from_chain_type   s     	F.4""/#
&#
*<#

 %55 
#	

 
 . 3)
	 	##C( 

$;#) 3

 

 
	
rY   )prealwaysc                     |j                   j                  j                  t        vr4t	        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)rw   r'   s     rW   validate_vectorstorez&PebbloRetrievalQA.validate_vectorstore  sd       **33;QQ!!7 8 9!--77@@AM 
 rY   r?   c                    t        | j                  ||       | j                  j                  ||j                               S )	Get docs.r@   )r   r'   get_relevant_documentsrM   rO   r?   r(   r*   r8   s        rW   rJ   zPebbloRetrievalQA._get_docs  s?     	 >NO~~44 5 5 7 5 
 	
rY   c                   K   t        | j                  ||       | j                  j                  ||j                                d{   S 7 w)r   r   N)r   r'   aget_relevant_documentsrM   r   s        rW   r[   zPebbloRetrievalQA._aget_docs-  sM      	 >NO^^;; 5 5 7 < 
 
 	
 
s   AAA	A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.   rn   rq   r   r   r   ry   s	            rW   ru   z"PebbloRetrievalQA._get_app_details;  s_     )]	7"44SCFC#)$* 56
 
rY   c                     d| _         y )NT)r3   )rw   s    rW   set_discover_sentz#PebbloRetrievalQA.set_discover_sentX  s
    !rY   c                 :   |j                   }t        | j                  t        |j	                  d|j	                  d            |j
                  j                        t        |d   j                  j
                  j                  t        |d   j                  d      r,t        |d   j                  j                  j                        nFt        |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   )rw   rn   rq   llm_dictr   s        rW   r   z#PebbloRetrievalQA.get_chain_details\  s     <<\\!lHLL4IJ==11
 #K0<<FFOO #6+#6#B#BMR ),";/;;GGMM)  'vk':'F'FU  { 3 ? ? J J P PQ!%
. rY   )N)stuffNNNr1   )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   dictrz   r   r   r   r   r   rJ   r[   staticmethodr   ru   r   r   r   rl   rY   rW   r   r   -   s   
 760IsJ$)T)-&+D&9I#9+*c*: 2#24MJ!GXc]!'$(NHSM(&&O ND :"t">+01,I(  &
 =A3-S#X3- 893- 
c3h	3-p BF4-S#X4- =>4- 
c3h	4-l  $L RDI R R T#Y   %S % %  ",0!%(,#*/
/
 /
 	/

 /
 /
 $D>/
 #/
 !/
 !/
 /
 
/
 /
b {T2,	 3

 {+
 #?3	
 0
 
h


 {+
 #?3	
 5
 
h
   	
  
 8 " " %#%/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      sz   
    & , , ' M . < < 1 1    
		8	$U UrY   