§
    šŠtjT1  ã                   ó*  — 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*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                ún/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/chains/pebblo_retrieval/base.pyÚ_callzPebbloRetrievalQA._callU   s‡  € õ  Ô'×+Ò+Ñ-Ô-×7Ò7Ñ9Ô9ˆØ"ÐSÕ&@Ô&QÑ&SÔ&SˆØ˜$œ.Ô)ˆØ—z’z $Ô"7Ñ8Ô8ˆØ!Ÿ:š: dÔ&?Ñ@Ô@ÐØ!œ^×AÒAÀ(ÑKÔKÑˆˆ?ð �WÔ.¨t¬~Ñ>Ô>ÔIÐIð 	ð ð 	LØ—>’>Ø˜,Ð(8Àlð "ñ ô ˆDˆDð —>’> (¨LÐ:JÑKÔKˆDØÔ-×1Ò1Ø ¨8¸|×?UÒ?UÑ?WÔ?Wð 2ñ 
ô 
ˆð 	Œ×"Ò"ØŒMØŒNØØØØØØØÔ"ñ
	
ô 
	
ð 
	
ð Ô'ð 	-Ø”O VÐ-?ÀÐFÐFà”O VÐ,Ð,ó    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ˆØ˜$œ.Ô)ˆØ—z’z $Ô"7Ñ8Ô8ˆØ!Ÿ:š: dÔ&?Ñ@Ô@Ðà�WÔ.¨t¬Ñ?Ô?ÔJÐJð 	ð $(¤>×#HÒ#HÈÑ#RÔ#RÐRÐRÐRÐRÐRÐRÑˆˆ?àð 	SØŸšØ˜,Ð(8Àlð )ñ ô ð ð ð ð ð ð ˆDˆDð Ÿš¨°<ÐAQÑRÔRÐRÐRÐRÐRÐRÐRˆDØÔ3×8Ò8Ø ¨8¸|×?UÒ?UÑ?WÔ?Wð 9ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
ˆð Œn×)Ò)ØŒMØŒNØØØØØØØÔ"ñ

ô 

ð 
	
ð 
	
ð 
	
ð 
	
ð 
	
ð 
	
ð 
	
ð Ô'ð 	-Ø”O VÐ-?ÀÐFÐFà”O VÐ,Ð,rY   Úforbid)Úpopulate_by_nameÚarbitrary_types_allowedÚextrac                 ó*   — | j         | j        | j        gS )zInput keys.)r"   r)   r+   ©rO   s    rW   Ú
input_keyszPebbloRetrievalQA.input_keysÆ   s   € ð ” Ô 5°tÔ7PÐQÐQrY   c                 ó0   — | j         g}| j        r|dgz  }|S )zOutput keys.rA   )r$   r%   )rO   Ú_output_keyss     rW   Úoutput_keyszPebbloRetrievalQA.output_keysË   s-   € ð œÐ(ˆØÔ'ð 	1ØÐ/Ð0Ñ0ˆLØÐ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_classic.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õ   € ð 	NÐMÐMÐMÐMÐMà.Ð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                             |d|                     ¦   «         i¬¦  «        S )ú	Get docs.r@   ©Úconfig)r   r'   ÚinvokerM   ©rO   r?   r(   r*   r8   s        rW   rJ   zPebbloRetrievalQA._get_docs  sN   € õ 	  ¤°Ð>NÑOÔOÐOØŒ~×$Ò$Ø˜k¨;×+@Ò+@Ñ+BÔ+BÐCð %ñ 
ô 
ð 	
rY   c             ƒ   óž   K  — t          | j        ||¦  «         | j                             |d|                     ¦   «         i¬¦  «        ƒ d{V —†S )r…   r@   r†   N)r   r'   ÚainvokerM   r‰   s        rW   r[   zPebbloRetrievalQA._aget_docs'  sp   è è € õ 	  ¤°Ð>NÑOÔOÐOØ”^×+Ò+Ø˜k¨;×+@Ò+@Ñ+BÔ+BÐCð ,ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
ð 	
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_details5  s{   € õ )™]œ]Ñˆ	�7Ý"Ô4°SÐCÐC¸FÐCÐCˆÝØØØ#ØØØÝ)Ý$Ø*ÝÐ 5Ñ6Ô6ðñ ô ð
ñ 
ô 
ˆð ˆ
rY   c                 ó   — d| _         d S )NT)r3   )rx   s    rW   Úset_discover_sentz#PebbloRetrievalQA.set_discover_sentR  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_detailsV  s	  € ð ”<ˆåØ”\ÝØ!Ÿš l°H·L²LÀÑ4IÔ4IÑJÔJØœ=Ô1ðñ ô õ
 Ø# KÔ0Ô<ÔFÔOõ # 6¨+Ô#6Ô#BÀMÑRÔRð)­Ø" ;Ô/Ô;ÔGÔMñ)ô )ð )õ  ' v¨kÔ':Ô'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Ø€IˆsÐÐÑØ€J�ÐÐÑØ$)Ð˜TÐ)Ð)Ñ)Ø-à&+ e°DÐ&9Ñ&9Ô&9€IÐ#Ð9Ð9Ñ9Ø+Ø*Ð�cÐ*Ð*Ñ*Ø:Ø 2Ð˜#Ð2Ð2Ñ2Ø4Ø€M€M�MØØ€J€J�JØØÐÐÑØØ!€GˆX�cŒ]Ð!Ð!Ñ!Ø'Ø$(€N�H˜S”MÐ(Ð(Ñ(ØØ&Ð˜Ð&Ð&Ñ&ØOØ €N�DÐ Ð Ñ Ø:Ø"Ð�tÐ"Ð"Ñ"Ø>Ø+0¨5Ø1ð,ñ ,ô ,€IÐ(ð ð ñ ð &ð
 =Að3-ð 3-à�S˜#�X”ð3-ð Ð8Ô9ð3-ð 
ˆc�3ˆhŒð	3-ð 3-ð 3-ð 3-ðp BFð4-ð 4-à�S˜#�X”ð4-ð Ð=Ô>ð4-ð 
ˆc�3ˆhŒð	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Œð
ð 
ð 
ð 
ð ðØðàðð ðð ð	ð
 ðð 
ðð ð ñ „\ðð8 ð"ð "ð "ñ „[ð"ð ð%Ø#ð%Ø/2ð%à	ˆiŒð%ð %ð %ñ „[ð%ð %ð %rY   r   )/r¥   rB   rH   ÚloggingÚimportlib.metadatar   Útypingr   r   r   r   Úlangchain_classic.chains.baser   Ú/langchain_classic.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
  ððð ð
 €€€Ø €€€Ø €€€Ø &Ð &Ð &Ð &Ð &Ð &Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,à /Ð /Ð /Ð /Ð /Ð /Ø UÐ UÐ UÐ UÐ UÐ Uðð ð ð ð ð ð ð ð .Ð -Ð -Ð -Ð -Ð -Ø <Ð <Ð <Ð <Ð <Ð <Ø <Ð <Ð <Ð <Ð <Ð <Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1ðð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð 
ˆÔ	˜8Ñ	$Ô	$€ðOð Oð Oð Oð O˜ñ Oô Oð Oð Oð OrY   