
    dhj2                     &   S r SSKrSSKrSSKrSSKJr  SSKJrJrJ	r	J
r
  SSKJr  SSKJr  SSKJrJr  SSKJr  SS	KJr  SS
KJr  SSKJrJrJr  SSKJrJr  SSKJ r J!r!J"r"J#r#J$r$J%r%J&r&  SSK'J(r(J)r)J*r*  \RV                  " \,5      r- " S S\5      r.g)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                   @   \ rS rSr% Sr\\S'    Sr\\S'   Sr	\\S'   Sr
\\S	'    \" S
S9r\\S'    Sr\\S'    Sr\\S'    \\S'    \\S'    \\S'    Sr\\   \S'    Sr\\   \S'    Sr\\S'    Sr\\S'    S
r\\S'    \" \S9r\\S'     S5S\\\4   S\\   S\\\4   4S  jjr S5S\\\4   S\\   S\\\4   4S! jjr\" S
S
S"S#9r \!S\"\   4S$ j5       r#\!S\"\   4S% j5       r$\!S\4S& j5       r%\&     S6S'\'S\S\S\S(\S)\\(   S\\   S\\   S\S*\SS 4S+ jj5       r)\*" SS
S
S,9S\S\4S- j5       r+S.\S\\,   S\\-   S\S\"\.   4
S/ jr/S.\S\\,   S\\-   S\S\"\.   4
S0 jr0\1S\S\S\S'\'S*\S\24S1 j5       r3\&S7S2 j5       r4\&S'\'S*\S\"\5   4S3 j5       r6S4r7g)8PebbloRetrievalQA-   zh
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                 6   [         R                   R                  5       R                  5       nU=(       d    [        R                  " 5       nXR
                     nUR                  U R                  5      nUR                  U R                  5      nU R                  R                  U5      u  pS[        R                  " U R                  5      R                  ;   n
U
(       a  U R                  XVXtS9nOU R                  XVU5      nU R                  R!                  XUR#                  5       S9nU R                  R%                  U R&                  U R(                  UUUUU	UU R*                  5	        U R,                  (       a  U R.                  USU0$ U R.                  U0$ )0  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']
r9   r9   input_documentsquestion	callbackssource_documents)datetimenow	isoformatr   get_noop_managerr#   getr*   r,   r7   check_prompt_validityinspect	signature	_get_docs
parametersr!   run	get_childsend_promptr-   r(   r5   r&   r%   )selfr8   r9   prompt_time_run_managerr@   r)   r+   _prompt_entitiesaccepts_run_managerdocsanswers                h/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/chains/pebblo_retrieval/base.py_callPebbloRetrievalQA._callU   sj     ''++-779"S&@&Q&Q&S..)zz$"7"78!::d&?&?@!^^AA(K W..t~~>III 	 >>(8 " D >>(:JKD--11 |?U?U?W 2 
 	""MMNN""
	
 ''OOV-?FFOOV,,    c                   #    [         R                   R                  5       R                  5       nU=(       d    [        R                  " 5       nXR
                     nUR                  U R                  5      nUR                  U R                  5      nS[        R                  " U R                  5      R                  ;   nU R                  R                  U5      I Sh  vN u  pU(       a  U R                  XVXtS9I Sh  vN nOU R                  XVU5      I Sh  vN nU R                  R!                  XUR#                  5       S9I Sh  vN nU R                  R%                  U R&                  U R(                  UUUUU
UU R*                  5	      I Sh  vN   U R,                  (       a  U R.                  USU0$ U R.                  U0$  N N N N N;7f)r<   r9   Nr=   r>   rB   )rC   rD   rE   r
   rF   r#   rG   r*   r,   rI   rJ   
_aget_docsrL   r7   acheck_prompt_validityr!   arunrN   asend_promptr-   r(   r5   r&   r%   )rP   r8   r9   rQ   rR   r@   r)   r+   rU   rS   rT   rV   rW   s                rX   _acall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(8 )  D AQRRD3388 |?U?U?W 9 
 
 nn))MMNN""

 
	
 
	
 ''OOV-?FFOOV,,7 S S

	
s[   CGG G=G>GG	/GG	AGG4GG	GGGforbid)populate_by_namearbitrary_types_allowedextrac                 H    U R                   U R                  U R                  /$ )zInput keys.

:meta private:
)r#   r*   r,   rP   s    rX   
input_keysPebbloRetrievalQA.input_keys   s!      5 5t7P7PQQr[   c                 N    U R                   /nU R                  (       a  US/-  nU$ )zOutput keys.

:meta private:
rB   )r%   r&   )rP   _output_keyss     rX   output_keysPebbloRetrievalQA.output_keys   s-     (''/00Lr[   c                     g)zReturn the chain type.pebblo_retrieval_qa rh   s    rX   _chain_typePebbloRetrievalQA._chain_type   s     %r[   llm
chain_typechain_type_kwargskwargsc
                     SSK Jn  U=(       d    0 nU" U4SU0UD6n[        R                  " SUUUUS.U
D6n[	        UU	US9nUR                  U5        U " SUUUUUUU	US.U
D6$ )zLoad chain from chain type.r   )load_qa_chainru   )r-   r/   r.   rt   )r0   r3   r1   )r!   r-   r.   r/   r0   r1   r3   r7   rq   )#langchain.chains.question_answeringry   r   _get_app_detailsr   send_app_discover)clsrt   r-   r/   r.   ru   rv   r0   r1   r3   rw   ry   _chain_type_kwargsr!   appr7   s                   rX   from_chain_type!PebbloRetrievalQA.from_chain_type   s     	F.4""/#
&#
*<#

 %55 
#	

 
 . 3)
	 	##C( 

$;#) 3

 

 
	
r[   )prealwaysc                     UR                   R                  R                  [        ;  a4  [	        S[         SUR                   R                  R                   S35      eU$ )zK
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)r}   r(   s     rX   validate_vectorstore&PebbloRetrievalQA.validate_vectorstore  sd       **33;QQ!!7 8 9!--77@@AM 
 r[   r@   c                |    [        U R                  X#5        U R                  R                  XR                  5       S9$ )	Get docs.rA   )r   r(   get_relevant_documentsrN   rP   r@   r)   r+   r9   s        rX   rK   PebbloRetrievalQA._get_docs  s:     	 O~~44 5 5 7 5 
 	
r[   c                   #    [        U R                  X#5        U R                  R                  XR                  5       S9I Sh  vN $  N7f)r   r   N)r   r(   aget_relevant_documentsrN   r   s        rX   r]   PebbloRetrievalQA._aget_docs-  sG      	 O^^;; 5 5 7 < 
 
 	
 
s   AA
AA
c                     [        5       u  pV[        R                  " U40 UD6n[        U UUUUU[        [        S[        S5      S9S9nU$ )zCFetch 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/   rt   rw   r   r   r   r   s	            rX   r{   "PebbloRetrievalQA._get_app_details;  s]     )]	"44SCFC#)$* 56
 
r[   c                     SU l         g )NT)r4   )r}   s    rX   set_discover_sent#PebbloRetrievalQA.set_discover_sentX  s
    !r[   c                 <   UR                   n[        U R                  [        UR	                  SUR	                  S5      5      UR
                  R                  S9[        US   R                  R
                  R                  [        US   R                  S5      (       a,  [        US   R                  R                  R                  5      OK[        US   R                  S5      (       a,  [        US   R                  R                  R                  5      OSS9/S	9/nU$ )
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   rG   r   r   r   hasattrstrr   r   r   )r}   rt   rw   llm_dictr   s        rX   r   #PebbloRetrievalQA.get_chain_details\  s     <<\\!lHLL4IJ==11
 #K0<<FFOO #6+#6#B#BMRR ),";/;;GGMM)  'vk':'F'FUU  { 3 ? ? J J P PQ!%
. r[   rq   )N)stuffNNNr2   )r:   N)8r   
__module____qualname____firstlineno____doc__r	   __annotations__r#   r   r%   r&   boolr   r(   r   r*   r,   r0   r   r1   r3   r4   r5   r   r7   r   r   r   rY   r
   ra   r   model_configpropertyr   ri   rm   rr   classmethodr   dictr   r   r   r   r   r   rK   r]   staticmethodr   r{   r   r   r   __static_attributes__rq   r[   rX   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% %r[   r   )/r   rC   rI   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   rq   r[   rX   <module>r      sx   
    & , , ' M . < < 1 1    
		8	$U Ur[   