Ë
    µŒjj2  ã                   ó&  — 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                úz/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/chains/pebblo_retrieval/base.pyÚ_callzPebbloRetrievalQA._callU   sv  € ô  ×'Ñ'×+Ñ+Ó-×7Ñ7Ó9ˆØ"ÒSÔ&@×&QÑ&QÓ&SˆØ˜$Ÿ.™.Ñ)ˆØ—z‘z $×"7Ñ"7Ó8ˆØ!Ÿ:™: d×&?Ñ&?Ó@ÐØ!Ÿ^™^×AÑAÀ(ÓKÑˆˆ?ð œW×.Ñ.¨t¯~©~Ó>×IÑIÐIð 	ñ Ø—>‘>Ø˜,Ð(8Àlð "ó ‰Dð —>‘> (¨LÐ:JÓKˆDØ×-Ñ-×1Ñ1Ø ¨8¸|×?UÑ?UÓ?Wð 2ó 
ˆð 	�‰×"Ñ"Ø�M‰MØ�N‰NØØØØØØØ×"Ñ"ô
	
ð ×'Ò'Ø—O‘O VÐ-?ÀÐFÐFà—O‘O VÐ,Ð,ó    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ˆØ˜$Ÿ.™.Ñ)ˆØ—z‘z $×"7Ñ"7Ó8ˆØ!Ÿ:™: d×&?Ñ&?Ó@ÐàœW×.Ñ.¨t¯©Ó?×JÑJÐJð 	ð $(§>¡>×#HÑ#HÈÓ#R×RÑˆˆ?áØŸ™Ø˜,Ð(8Àlð )ó ÷ ‰Dð Ÿ™¨°<ÐAQÓR×RˆDØ×3Ñ3×8Ñ8Ø ¨8¸|×?UÑ?UÓ?Wð 9ó 
÷ 
ˆð �n‰n×)Ñ)Ø�M‰MØ�N‰NØØØØØØØ×"Ñ"ó

÷ 
	
ð 
	
ð ×'Ò'Ø—O‘O VÐ-?ÀÐFÐFà—O‘O VÐ,Ð,ð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Ñ 5°t×7PÑ7PÐ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Ñ0ˆLØÐ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Ñ4°SÑC¸FÑ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õ   € ð —<‘<ˆäØ—\‘\ÜØ!Ÿ™ l°H·L±LÀÓ4IÓJØŸ=™=×1Ñ1ôô
 Ø# KÑ0×<Ñ<×FÑF×OÑOô # 6¨+Ñ#6×#BÑ#BÀMÔRô ),Ø" ;Ñ/×;Ñ;×GÑG×MÑMô)ô  ' v¨kÑ':×'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Ø€IˆsÓØ€J�ÓØ$)Ð˜TÓ)Ø-á&+°DÔ&9€IÐ#Ó9Ø+Ø*Ð�cÓ*Ø:Ø 2Ð˜#Ó2Ø4ØƒMØØƒJØØÓØØ!€GˆX�c‰]Ó!Ø'Ø$(€N�H˜S‘MÓ(ØØ&Ð˜Ó&ØOØ €N�DÓ Ø:Ø"Ð�tÓ"Ø>Ù+0Ø1ô,€IÐ(ó ð &ð
 =Añ3-à�S˜#�X‘ð3-ð Ð8Ñ9ð3-ð 
ˆc�3ˆh‰ó	3-ðp BFñ4-à�S˜#�X‘ð4-ð Ð=Ñ>ð4-ð 
ˆc�3ˆh‰ó	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   