Ë
    µŒjQ,  ã                   óì   — 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
mZmZ ddlmZ ddlmZ ddlmZmZmZmZmZmZmZmZmZmZmZmZ  ej<                  e«      Z  G d„ d	e«      Z! G d
„ de«      Z"y)z:Pebblo's safe dataloader is a wrapper for document loadersé    N)Úversion)ÚAnyÚDictÚIterableÚIteratorÚListÚOptional)ÚDocument)Ú
BaseLoader)ÚBATCH_SIZE_BYTESÚPLUGIN_VERSIONÚAppÚ	FrameworkÚIndexedDocumentÚPebbloLoaderAPIWrapperÚgenerate_size_based_batchesÚget_full_pathÚget_loader_full_pathÚget_loader_typeÚget_runtimeÚget_source_sizec                   ó  — e Zd ZU dZdZeed<   	 	 	 	 	 ddddœdeded	ed
ede	e   dede	e   dedefd„Z
dee   fd„Zd d„Zdee   fd„Zed d„«       Zdefd„Zdee   fd„Zdedee   fd„Zdee   fd„Zdededefd„Zdeddfd„Zy)!ÚPebbloSafeLoaderzkPebblo Safe Loader class is a wrapper around document loaders enabling the data
    to be scrutinized.
    FÚ_discover_sentNÚlocal)Úclassifier_locationÚanonymize_snippetsÚlangchain_loaderÚnameÚownerÚdescriptionÚapi_keyÚload_semanticÚclassifier_urlr   r   c                ór  — |rt        |t        «      st        d«      ‚|| _        t        t	        j
                  «       «      | _        || _        t        j                  j                  d«      xs || _        || _        || _        t        | j                  «      | _        g | _        g | _        t        t%        | j                  «      «      j'                  d«      d   j'                  d«      d   }
t)        |
«      | _        t-        | j                  «      | _        t0        | _        |
| j                  | j*                  dœ| j.                  dkD  rdt        | j.                  «      ini ¥| _        | j7                  «       | _        t;        ||||	¬	«      | _        | j<                  j?                  | j8                  «       y )
NzMust specify a valid name.ÚPEBBLO_LOAD_SEMANTICÚ.éÿÿÿÿÚ'r   )ÚloaderÚsource_pathÚsource_typeÚsource_path_size)r"   r   r$   r   ) Ú
isinstanceÚstrÚ	NameErrorÚapp_nameÚuuidÚuuid4Úload_idr*   ÚosÚenvironÚgetr#   r    r!   r   r+   ÚdocsÚdocs_with_idÚtypeÚsplitr   r,   r   r-   r   Ú
batch_sizeÚloader_detailsÚ_get_app_detailsÚappr   Ú	pb_clientÚsend_loader_discover)Úselfr   r   r    r!   r"   r#   r$   r   r   Úloader_names              úu/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/document_loaders/pebblo.pyÚ__init__zPebbloSafeLoader.__init__%   sn  € ñ œ: d¬CÔ0ÜÐ8Ó9Ð9ØˆŒÜœ4Ÿ:™:›<Ó(ˆŒØ&ˆŒÜŸZ™ZŸ^™^Ð,BÓCÒTÀ}ˆÔØˆŒ
Ø&ˆÔÜ/°·±Ó<ˆÔØ$&ˆŒ	Ø35ˆÔÜœ$˜tŸ{™{Ó+Ó,×2Ñ2°3Ó7¸Ñ;×AÑAÀ#ÓFÀqÑIˆÜ*¨;Ó7ˆÔÜ /°×0@Ñ0@Ó AˆÔÜ*ˆŒà!Ø×+Ñ+Ø×+Ñ+ñ	
ð ×(Ñ(¨1Ò,ð $¤S¨×)>Ñ)>Ó%?Ñ@àð	
ˆÔð ×(Ñ(Ó*ˆŒä/ØØ 3Ø)Ø1ô	
ˆŒð 	�‰×+Ñ+¨D¯H©HÕ5ó    Úreturnc                 óx   — | j                   j                  «       | _        | j                  «        | j                  S )zxLoad Documents.

        Returns:
            list: Documents fetched from load method of the wrapped `loader`.
        )r*   Úloadr8   Úclassify_in_batches)rB   s    rD   rI   zPebbloSafeLoader.loadV   s.   € ð —K‘K×$Ñ$Ó&ˆŒ	à× Ñ Ô"Ø�y‰yÐrF   c                 óô  — t        | j                  | j                  «      }g }t        |«      }t	        |«      D ]¶  \  }}||dz
  k(  }|| _        | j                  «       | _        | j                  j                  | j                  | j                  | j                  |¬«      }| j                  |«       | j                  r| j                  |«      }n| j                  «       }|j                  |«       Œ¸ || _        y)z¼
        Classify documents in batches.
        This is to avoid API timeouts when sending large number of documents.
        Batches are generated based on the page_content size.
        é   )Úloading_endN)r   r8   r<   ÚlenÚ	enumerateÚ_index_docsr9   r@   Úclassify_documentsr?   r=   Ú_add_pebblo_specific_metadatar#   Ú_add_semantic_to_docsÚ_unindex_docsÚextend)	rB   ÚbatchesÚprocessed_docsÚtotal_batchesÚiÚbatchÚis_last_batchÚclassified_docsÚbatch_processed_docss	            rD   rJ   z$PebbloSafeLoader.classify_in_batchesa   sí   € ô )DØ�I‰I�t—‘ó)
ˆð *,ˆä˜G›ˆÜ! 'Ö*‰HˆAˆuØ"# }°qÑ'8Ñ"8ˆMØˆDŒIØ $× 0Ñ 0Ó 2ˆDÔØ"Ÿn™n×?Ñ?Ø×!Ñ!Ø—‘Ø×#Ñ#Ø)ð	 @ó ˆOð ×.Ñ.¨Ô?Ø×!Ò!Ø'+×'AÑ'AÀ/Ó'RÑ$à'+×'9Ñ'9Ó';Ð$Ø×!Ñ!Ð"6Õ7ð +ð" #ˆ�	rF   c              #   ó¨  K  — 	 | j                   j                  «       }	 	 t        |«      }t        |f«      | _	        | j                  «       | _        | j                  j                  | j                  | j                  | j                   «      }| j#                  |«       | j$                  r| j'                  |«      | _	        n| j)                  «       | _	        | j                  d   –— ŒÈ# t        $ rI}| j                   j                  j                  › d�}t
        j                  |«       t        |«      |‚d}~ww xY w# t        $ r
 g | _	        Y yw xY w­w)zïLoad documents in lazy fashion.

        Raises:
            NotImplementedError: raised when lazy_load id not implemented
            within wrapped loader.

        Yields:
            list: Documents from loader's lazy loading.
        z does not implement lazy_load()Nr   )r*   Ú	lazy_loadÚNotImplementedErrorÚ	__class__Ú__name__ÚloggerÚerrorÚnextÚStopIterationr8   ÚlistrP   r9   r@   rQ   r?   r=   rR   r#   rS   rT   )rB   Údoc_iteratorÚexcÚerr_strÚdocÚclassified_docs         rD   r_   zPebbloSafeLoader.lazy_load�   s,  è ø€ ð	8ØŸ;™;×0Ñ0Ó2ˆLð
 ðÜ˜<Ó(�ô ˜c˜V›ˆDŒIØ $× 0Ñ 0Ó 2ˆDÔØ!Ÿ^™^×>Ñ>Ø×!Ñ! 4§8¡8¨T×-@Ñ-@óˆNð ×.Ñ.¨~Ô>Ø×!Ò!Ø ×6Ñ6°~ÓF�•	à ×.Ñ.Ó0�”	Ø—)‘)˜A‘,Òð! øô	 #ò 	8ØŸ™×.Ñ.×7Ñ7Ð8Ð8WÐXˆGÜ�L‰L˜Ô!Ü% gÓ.°CÐ7ûð	8ûô !ò Ø�”	ÙðüsK   ‚E„C' žE D< «B<EÃ'	D9Ã0AD4Ä4D9Ä9EÄ<EÅEÅEÅEc                 ó   — d| _         y )NT)r   )Úclss    rD   Úset_discover_sentz"PebbloSafeLoader.set_discover_sent£   s
   € à!ˆÕrF   c                 óÆ   — t        «       \  }}t        | j                  | j                  | j                  | j
                  ||t        t        dt        d«      ¬«      ¬«      }|S )z\Fetch app details. Internal method.

        Returns:
            App: App details.
        Úlangchain_community)r   r   )r   r    r!   r4   ÚruntimeÚ	frameworkÚplugin_versionÚclient_version)	r   r   r1   r    r!   r4   r   r   r   )rB   rs   rr   r?   s       rD   r>   z!PebbloSafeLoader._get_app_details§   s\   € ô )›]Ñˆ	�7ÜØ—‘Ø—*‘*Ø×(Ñ(Ø—L‘LØØÜ)Ü$Ø*ÜÐ 5Ó6ôô
ˆð ˆ
rF   c                 ó¤   — t        | j                  «      D ��cg c])  \  }}t        ddt        |«      i|j	                  «       ¤Ž‘Œ+ }}}|S c c}}w )z¾
        Indexes the documents and returns a list of IndexedDocument objects.

        Returns:
            List[IndexedDocument]: A list of IndexedDocument objects with unique IDs.
        Úpb_id© )rO   r8   r   r/   Údict)rB   rY   rk   r9   s       rD   rP   zPebbloSafeLoader._index_docs½   sU   € ô $ D§I¡IÔ.ô
á.‘��3ô Ñ7¤# a£&Ð7¨C¯H©H«JÓ7Ø.ð 	ñ 
ð Ðùó	
s   ™.Ar\   c                 óZ  — | j                   D �ci c].  }|j                  t        |j                  |j                  ¬«      “Œ0 }}|j                  «       D ]-  }|j                  d«      }||v sŒ| j                  ||   |«       Œ/ |j                  «       D �cg c]  }|‘Œ }}|S c c}w c c}w )aF  
        Adds semantic metadata to the given list of documents.

        Args:
            classified_docs (Dict): A dictionary of dictionaries containing the
                classified documents with pb_id as key.

        Returns:
            List[Document]: A list of Document objects with added semantic metadata.
        ©Úpage_contentÚmetadatarw   )r9   rw   r
   r|   r}   Úvaluesr7   Ú_add_semantic_to_doc)rB   r\   rk   Úindexed_docsrl   Údoc_idÚsemantic_metadata_docss          rD   rS   z&PebbloSafeLoader._add_semantic_to_docsÊ   s¹   € ð ×(Ò(ó
á(�ð �I‰I”x¨S×-=Ñ-=ÈÏÉÔUÑUØ(ð 	ð 
ð
 .×4Ñ4Ö6ˆNØ#×'Ñ'¨Ó0ˆFØ˜Ò%Ø×)Ñ)¨,°vÑ*>ÀÕOð 7ð
 2>×1DÑ1DÔ1FÓ!GÑ1F¨#¢#Ð1FÐÐ!Gà%Ð%ùò
ùò "Hs   �3B#Â	B(c                 óž   — t        | j                  «      D ��cg c]&  \  }}t        |j                  |j                  ¬«      ‘Œ( }}}|S c c}}w )z¥
        Converts a list of IndexedDocument objects to a list of Document objects.

        Returns:
            List[Document]: A list of Document objects.
        r{   )rO   r9   r
   r|   r}   )rB   rY   rk   r8   s       rD   rT   zPebbloSafeLoader._unindex_docsã   sP   € ô $ D×$5Ñ$5Ô6ô
á6‘��3ô  #×"2Ñ"2¸S¿\¹\ÖJØ6ð 	ñ 
ð ˆùó	
s   ™+A	rk   rl   c                 óÞ   — t        |j                  di «      j                  «       «      |j                  d<   t        |j                  di «      j                  «       «      |j                  d<   |S )a4  
        Adds semantic metadata to the given document in-place.

        Args:
            doc (Document): A Document object.
            classified_doc (dict): A dictionary containing the classified document.

        Returns:
            Document: The Document object with added semantic metadata.
        ÚentitiesÚpebblo_semantic_entitiesÚtopicsÚpebblo_semantic_topics)rg   r7   Úkeysr}   )rB   rk   rl   s      rD   r   z%PebbloSafeLoader._add_semantic_to_docð   sg   € ô 48Ø×Ñ˜z¨2Ó.×3Ñ3Ó5ó4
ˆ�‰Ð/Ñ0ô 26Ø×Ñ˜x¨Ó,×1Ñ1Ó3ó2
ˆ�‰Ð-Ñ.ð ˆ
rF   c           
      ó¤  — | j                   D ]Á  }|j                  }| j                  j                  j                  dk(  r)t        |j                  d| j                  «      «      |d<   n8t        |j                  d|j                  d| j                  «      «      «      |d<   |j                  |j                  i «      j                  dd«      |d<   ŒÃ y)z*Add Pebblo specific metadata to documents.ÚSharePointLoaderÚsourceÚ	full_pathÚpb_checksumN)	r9   r}   r*   ra   rb   r   r7   r+   rw   )rB   r\   rk   Údoc_metadatas       rD   rR   z.PebbloSafeLoader._add_pebblo_specific_metadata  s½   € à×$Ô$ˆCØŸ<™<ˆLØ�{‰{×$Ñ$×-Ñ-Ð1CÒCÜ,9Ø ×$Ñ$ X¨t×/?Ñ/?Ó@ó-�˜[Ò)ô -:Ø ×$Ñ$Ø# \×%5Ñ%5°hÀ×@PÑ@PÓ%Qóó-�˜[Ñ)ð
 +:×*=Ñ*=¸c¿i¹iÈÓ*L×*PÑ*PØ˜tó+ˆL˜Ò'ñ %rF   )Ú r�   NFN)rG   N)rb   Ú
__module__Ú__qualname__Ú__doc__r   ÚboolÚ__annotations__r   r/   r	   rE   r   r
   rI   rJ   r   r_   Úclassmethodro   r   r>   r   rP   r   rS   rT   ry   r   rR   rx   rF   rD   r   r      sD  … ñð !€N�DÓ ð ØØ!%Ø#Ø(,ð/6ð $+Ø#(ò/6à$ð/6ð ð/6ð ð	/6ð
 ð/6ð ˜#‘ð/6ð ð/6ð ! ™ð/6ð !ð/6ð !ó/6ðb	�d˜8‘nó 	ó#ð@ ˜8 HÑ-ó  ðD ò"ó ð"ð #ó ð,˜T /Ñ2ó ð&°Tð &¸dÀ8¹nó &ð2˜t H™~ó ð¨ð À$ð È8ó ð&¸Tð Àdô rF   r   c                   óž   — e Zd ZdZdddddœdee   dee   deee      deeee	f      deeeee	f         d	dfd
„Z
d	ee   fd„Zd	ee   fd„Zy)ÚPebbloTextLoaderz¤
    Loader for text data.

    Since PebbloSafeLoader is a wrapper around document loaders, this loader is
    used to load text data directly into Documents.
    N)rŒ   Úidsr}   Ú	metadatasÚtextsrŒ   r™   r}   rš   rG   c                óJ   — || _         || _        || _        || _        || _        y)a¾  
        Args:
            texts: Iterable of text data.
            source: Source of the text data.
                Optional. Defaults to None.
            ids: List of unique identifiers for each text.
                Optional. Defaults to None.
            metadata: Metadata for all texts.
                Optional. Defaults to None.
            metadatas: List of metadata for each text.
                Optional. Defaults to None.
        N)r›   rŒ   r™   r}   rš   )rB   r›   rŒ   r™   r}   rš   s         rD   rE   zPebbloTextLoader.__init__  s'   € ð* ˆŒ
ØˆŒØˆŒØ ˆŒØ"ˆ�rF   c              #   ó’  K  — t        | j                  «      D ]«  \  }}d}| j                  xs i }| j                  rE|t	        | j                  «      k  r-| j                  |   r|j                  | j                  |   «       | j                  r'|t	        | j                  «      k  r| j                  |   }t        |||¬«      –— Œ­ y­w)zi
        Lazy load text data into Documents.

        Returns:
            Iterator of Documents
        N)Úidr|   r}   )rO   r›   r}   rš   rN   Úupdater™   r
   )rB   rY   ÚtextÚ_idr}   s        rD   r_   zPebbloTextLoader.lazy_load9  s›   è ø€ ô ! §¡Ö,‰GˆAˆtØˆCØ—}‘}Ò*¨ˆHØ�~Š~ !¤c¨$¯.©.Ó&9Ò"9¸d¿n¹nÈQÒ>OØ—‘ §¡¨qÑ 1Ô2Ø�xŠx˜A¤ D§H¡H£Ò-Ø—h‘h˜q‘k�Ü˜c°¸xÔHÓHñ -ùs   ‚CCc                 óV   — g }| j                  «       D ]  }|j                  |«       Œ |S )z`
        Load text data into Documents.

        Returns:
            List of Documents
        )r_   Úappend)rB   Ú	documentsrk   s      rD   rI   zPebbloTextLoader.loadI  s.   € ð ˆ	Ø—>‘>Ö#ˆCØ×Ñ˜SÕ!ð $àÐrF   )rb   r‘   r’   r“   r   r/   r	   r   r   r   rE   r   r
   r_   rI   rx   rF   rD   r˜   r˜     s§   „ ñð !%Ø#'Ø-1Ø48ò#à˜‰}ð#ð ˜‘ð	#ð
 �d˜3‘iÑ ð#ð ˜4  S ™>Ñ*ð#ð ˜D  c¨3 h¡Ñ0Ñ1ð#ð 
ó#ð6I˜8 HÑ-ó Ið 
�d˜8‘nô 
rF   r˜   )#r“   Úloggingr5   r2   Úimportlib.metadatar   Útypingr   r   r   r   r   r	   Úlangchain_core.documentsr
   Ú)langchain_community.document_loaders.baser   Ú$langchain_community.utilities.pebblor   r   r   r   r   r   r   r   r   r   r   r   Ú	getLoggerrb   rc   r   r˜   rx   rF   rD   Ú<module>r¬      sc   ðÙ @ã Û 	Û Ý &ß @× @å -å @÷÷ ÷ ó ð 
ˆ×	Ñ	˜8Ó	$€ôu�zô uôp=�zõ =rF   