§
    šŠtjŸc  ã                  ó4  — d dl mZ d dlZd dlZd dlZd dlZd dlZd dlmZ d dl	m
Z
 d dl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 d d	lmZ d d
lmZmZ d dlmZ d dlmZ  ej         e!¦  «        Z"dZ#dZ$dZ%dZ&g d¢Z'g d¢Z(dgZ)g d¢Z*e'e(e)e*dœZ+ G d„ de,e¦  «        Z- G d„ de¦  «        Z. G d„ de¦  «        Z/ G d„ de¦  «        Z0 G d„ de¦  «        Z1 G d „ d!e¦  «        Z2d;d%„Z3d<d'„Z4d=d)„Z5d>d+„Z6d?d,„Z7	 d@dAd2„Z8dBd4„Z9dCd6„Z:dDd8„Z; G d9„ d:e¦  «        Z<dS )Eé    )ÚannotationsN)ÚEnum)Ú
HTTPStatus)ÚAnyÚDictÚListÚOptionalÚTuple)ÚDocument)Úget_runtime_environment)Úget_from_dict_or_env)Ú	BaseModel)ÚResponseÚrequest)ÚRequestException)Ú
BaseLoaderz0.1.1zhttp://localhost:8000zhttps://api.daxa.aié � )Ú
JSONLoaderÚS3FileLoaderÚUnstructuredMarkdownLoaderÚUnstructuredPDFLoaderÚUnstructuredFileLoaderÚUnstructuredJsonLoaderÚPyPDFLoaderÚGCSFileLoaderÚAmazonTextractPDFLoaderÚ	CSVLoaderÚUnstructuredExcelLoaderÚUnstructuredEmailLoader)ÚDirectoryLoaderÚS3DirLoaderÚSlackDirectoryLoaderÚPyPDFDirectoryLoaderÚNotionDirectoryLoaderÚDataFrameLoader)ÚNotionDBLoaderÚGoogleDriveLoaderÚSharePointLoader)ÚfileÚdirú	in-memoryzcloud-folderc                  ó   — e Zd ZdZdZdZdS )ÚRoutesz2Routes available for the Pebblo API as enumerator.z/v1/loader/docz/v1/app/discoverN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú
loader_docÚloader_app_discover© ó    úb/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/utilities/pebblo.pyr-   r-   C   s!   € € € € € Ø<Ð<à!€JØ,ÐÐÐr5   r-   c                  ó   — e Zd ZU dZded<   dS )ÚIndexedDocumentzPebblo Indexed Document.ÚstrÚpb_idN©r.   r/   r0   r1   Ú__annotations__r4   r5   r6   r8   r8   J   s!   € € € € € € Ø"Ð"à€J€J�JØ$Ð$r5   r8   c                  ó–   — e Zd ZU dZdZded<   	 ded<   	 ded<   	 dZded	<   	 ded
<   	 ded<   	 ded<   	 ded<   	 ded<   	 dZded<   dS )ÚRuntimezPebblo Runtime.Úlocalr9   ÚtypeÚhostÚpathÚ úOptional[str]ÚipÚplatformÚosÚ
os_versionÚlanguageÚlanguage_versionÚruntimeN)r.   r/   r0   r1   r@   r<   rE   rK   r4   r5   r6   r>   r>   Q   s¨   € € € € € € ØÐà€DÐÐÐÑØ,Ø€I€I�IØ#Ø€I€I�IØ)Ø€BÐÐÐÑØ4Ø€M€M�MØ*Ø€G€G�GØØ€O€O�OØØ€M€M�MØØÐÐÑØ(Ø€GÐÐÐÑØ4Ð4r5   r>   c                  ó*   — e Zd ZU dZded<   	 ded<   dS )Ú	FrameworkzPebblo Framework instance.r9   ÚnameÚversionNr;   r4   r5   r6   rM   rM   j   s-   € € € € € € Ø$Ð$à€I€I�IØ Ø€L€L�LØ#Ð#r5   rM   c                  ór   — e Zd ZU dZded<   	 ded<   	 ded<   	 ded<   	 ded	<   	 d
ed<   	 ded<   	 d
ed<   dS )ÚAppzPebblo AI application.r9   rN   ÚownerrD   ÚdescriptionÚload_idr>   rK   rM   Ú	frameworkÚplugin_versionÚclient_versionNr;   r4   r5   r6   rQ   rQ   s   s„   € € € € € € Ø Ð à€I€I�IØØ€J€J�JØØÐÐÑØ!Ø€L€L�LØ-ØÐÐÑØ%ØÐÐÑØ'ØÐÐÑØ*ØÐÐÑØ*Ð*r5   rQ   c                  óŠ   — e Zd ZU dZded<   	 ded<   	 ded<   	 ded<   	 ded<   	 d	ed
<   	 ded<   	 ded<   	 ded<   	 ded<   dS )ÚDoczPebblo document.r9   rN   rR   ÚlistÚdocsrV   rT   ÚdictÚloader_detailsÚboolÚloading_endÚsource_ownerÚclassifier_locationÚanonymize_snippetsNr;   r4   r5   r6   rY   rY   ˆ   sŸ   € € € € € € ØÐà€I€I�IØ0Ø€J€J�JØØ€J€J�JØ.ØÐÐÑØØ€L€L�LØ-ØÐÐÑØ+ØÐÐÑØ7ØÐÐÑØ,ØÐÐÑØ%ØÐÐÑØUÐUr5   rY   rB   r9   Úreturnc                óÈ   — | rd| v sd| d         k    s| dv r| S t          j        | ¦  «        }|                     ¦   «         r|                     ¦   «         }t	          |¦  «        S )zÜReturn an absolute local path for a local file/directory,
    for a network related path, return as is.

    Args:
        path (str): Relative path to be resolved.

    Returns:
        str: Resolved absolute path.
    z://ú/r   )Úunknownú-r+   )ÚpathlibÚPathÚexistsÚresolver9   )rB   Ú	full_paths     r6   Úget_full_pathrm   ¡   ss   € ð ðà�TˆMˆMØ�4˜”7ŠNˆNØÐ1Ð1Ð1àˆÝ”˜TÑ"Ô"€IØ×ÒÑÔð (Ø×%Ò%Ñ'Ô'ˆ	Ýˆy‰>Œ>Ðr5   Úloaderc                óT   — t                                ¦   «         D ]\  }}| |v r|c S ŒdS )zÖReturn loader type among, file, dir or in-memory.

    Args:
        loader (str): Name of the loader, whose type is to be resolved.

    Returns:
        str: One of the loader type among, file/dir/in-memory.
    Úunsupported)ÚLOADER_TYPE_MAPPINGÚitems)rn   Úloader_typeÚloaderss      r6   Úget_loader_typeru   ¸   sE   € õ !4× 9Ò 9Ñ ;Ô ;ð ð Ñˆ�WØ�WÐÐØÐÐÐð àˆ=r5   r   c                óŠ  — ddl m}m}m}m} d}t          | t          ¦  «        st                               d¦  «         |S | j	        }	 d|v rHt          | |¦  «        rd| j
        › d| j        › �}�n¨t          | |¦  «        rd| j
        › d| j        › �}�n„d	|v r!|d	         }|rd
|v r|d
         }|r|› d|› �}�n_d|v r
|d         }�nQd|v r
|d         }�nCd|v r<|d         }|r0t          |t          ¦  «        rt          |¦  «        dk    r|d         }�nt          | |¦  «        rd}nðt          | |¦  «        rd| j        › �}nÕ| j        j        dk    rÅ|                     d¦  «        r|                     d¦  «        }	d|	› �}n•|                     d¦  «        r6|                     dg ¦  «        }
d                     d„ |
D ¦   «         ¦  «        }nJ|                     d¦  «        r5|                     dg ¦  «        }d                     d„ |D ¦   «         ¦  «        }n# t(          $ r Y nw xY wt+          t-          |¦  «        ¦  «        S )z¾Return an absolute source path of source of loader based on the
    keys present in Document.

    Args:
        loader (BaseLoader): Langchain document loader, derived from Baseloader.
    r   )r%   r   r&   r   rg   zGloader is not derived from BaseLoader, source location will be unknown!Úbucketzgc://re   zs3://ÚsourceÚchannelrB   Ú	file_pathÚ	web_pathsr+   znotiondb://r'   Ú	folder_idz+https://drive.google.com/drive/u/2/folders/Úfile_idsz, c                ó   — g | ]}d |› d�‘Œ	S )z https://drive.google.com/file/d/z/viewr4   )Ú.0Úfile_ids     r6   ú
<listcomp>z(get_loader_full_path.<locals>.<listcomp>ü   s4   € ð ð ð à#ð J¸7ÐIÐIÐIðð ð r5   Údocument_idsc                ó   — g | ]}d |› d�‘Œ	S )z#https://docs.google.com/document/d/z/editr4   )r   Údoc_ids     r6   r�   z(get_loader_full_path.<locals>.<listcomp>  s4   € ð ð ð à"ð L¸fÐKÐKÐKðð ð r5   )Ú$langchain_community.document_loadersr%   r   r&   r   Ú
isinstancer   ÚloggerÚerrorÚ__dict__rw   ÚblobÚkeyrZ   ÚlenÚdatabase_idÚ	__class__r.   ÚgetÚjoinÚ	Exceptionrm   r9   )rn   r%   r   r&   r   ÚlocationÚloader_dictry   r{   r|   r}   r‚   s               r6   Úget_loader_full_pathr”   Ç   s  € ðð ð ð ð ð ð ð ð ð ð ð ð €HÝ�f�jÑ)Ô)ð Ý�ŠØUñ	
ô 	
ð 	
ð ˆØ”/€Kð/Ø�{Ð"Ð"Ý˜& -Ñ0Ô0ð @Ø@ 6¤=Ð@Ð@°6´;Ð@Ð@�‘Ý˜F LÑ1Ô1ð @Ø? 6¤=Ð?Ð?°6´:Ð?Ð?�ùØ˜Ð$Ð$Ø" 8Ô,ˆHØð 7˜I¨Ð4Ð4Ø% iÔ0�Øð 7Ø"*Ð6Ð6¨WÐ6Ð6�HùØ�{Ð"Ð"Ø" 6Ô*ˆH‰HØ˜KÐ'Ð'Ø" ;Ô/ˆH‰HØ˜KÐ'Ð'Ø# KÔ0ˆIØð (�Z¨	µ4Ñ8Ô8ð (½SÀ¹^¼^ÈaÒ=OÐ=OØ$ Qœ<�ùå˜ Ñ0Ô0ð 	Ø"ˆHˆHÝ˜ Ñ/Ô/ð 	Ø9 VÔ%7Ð9Ð9ˆHˆHØÔÔ&Ð*=Ò=Ð=Ø�Š˜{Ñ+Ô+ð Ø'ŸOšO¨KÑ8Ô8�	ØTÈÐTÐT��Ø—’ Ñ,Ô,ð Ø&Ÿ?š?¨:°rÑ:Ô:�ØŸ9š9ðð à'/ðñ ô ñô ��ð —’ Ñ0Ô0ð Ø*Ÿš¨~¸rÑBÔB�ØŸ9š9ðð à&2ðñ ô ñô �øøõ ð ð ð Øˆðøøøå�˜X™œÑ'Ô'Ð's   ÁGH È
H&È%H&úTuple[Framework, Runtime]c                 ó4  — t          ¦   «         } t          d|                      dd¦  «        ¬¦  «        }t          j        ¦   «         }t          |j        t          j        d         |                      dd¦  «        |j	        |j
        t          ¦   «         |                      dd¦  «        |                      dd¦  «        ¬	¦  «        }d
|j        v rd|_        d|_        t                               d|› �¦  «         t                               d|› �¦  «         ||fS )zšFetch the current Framework and Runtime details.

    Returns:
        Tuple[Framework, Runtime]: Framework and Runtime for the current app instance.
    Ú	langchainÚlibrary_versionrf   )rN   rO   ÚPWDrF   rK   Úruntime_version)rA   rB   rF   rG   rH   rE   rI   rJ   ÚDarwinÚdesktopzMac OSXz
framework zruntime )r   rM   r�   rF   Úunamer>   ÚnoderG   ÚenvironÚsystemrO   Úget_ipr@   rK   r‡   Údebug)Úruntime_envrU   r�   rK   s       r6   Úget_runtimer¤     s  € õ *Ñ+Ô+€KÝØ +§/¢/Ð2CÀYÑ"OÔ"Oðñ ô €Iõ ŒNÑÔ€EÝØŒZÝŒZ˜ÔØ—’ ¨YÑ7Ô7ØŒ<Ø”=Ý‰8Œ8Ø—’ ¨IÑ6Ô6Ø$ŸšÐ):¸IÑFÔFð	ñ 	ô 	€Gð �7”:ÐÐØ ˆŒØ#ˆŒå
‡L‚LÐ)˜iÐ)Ð)Ñ*Ô*Ð*Ý
‡L‚LÐ%˜GÐ%Ð%Ñ&Ô&Ð&Ø�gÐÐr5   c                 ó®   — ddl } |                      ¦   «         }	 |                      |¦  «        }n%# t          $ r |                      d¦  «        }Y nw xY w|S )zJFetch local runtime ip address.

    Returns:
        str: IP address
    r   NÚ	localhost)ÚsocketÚgethostnameÚgethostbynamer‘   )r§   rA   Ú	public_ips      r6   r¡   r¡   .  sp   € ð €M€M€Mà×ÒÑÔ€Dð6Ø×(Ò(¨Ñ.Ô.ˆ	ˆ	øÝð 6ð 6ð 6Ø×(Ò(¨Ñ5Ô5ˆ	ˆ	ˆ	ð6øøøàÐs   š0 °AÁAr[   úList[Document]Úmax_batch_sizeÚintúList[List[Document]]c                óJ  — g }g }d}| D ]‚}t          |j                             d¦  «        ¦  «        }||k    r|                     |g¦  «         ŒF||z   |k    r|                     |¦  «         g }d}|                     |¦  «         ||z  }Œƒ|r|                     |¦  «         |S )a  
    Generate batches of documents based on page_content size.
    Args:
        docs: List of documents to be batched.
        max_batch_size: Maximum size of each batch in bytes. Defaults to 100*1024(100KB)
    Returns:
        List[List[Document]]: List of batches of documents
    r   úutf-8)rŒ   Úpage_contentÚencodeÚappend)r[   r¬   ÚbatchesÚcurrent_batchÚcurrent_batch_sizeÚdocÚdoc_sizes          r6   Úgenerate_size_based_batchesr¹   >  sÕ   € ð %'€GØ$&€MØÐàð +ð +ˆå˜CÔ,×3Ò3°GÑ<Ô<Ñ=Ô=ˆà�nÒ$Ð$à�NŠN˜C˜5Ñ!Ô!Ð!Ð!à! HÑ,¨~Ò=Ð=à—’˜}Ñ-Ô-Ð-Ø "�Ø%&Ð"ð × Ò  Ñ%Ô%Ð%Ø (Ñ*ÐÐð ð &Ø�Š�}Ñ%Ô%Ð%à€Nr5   rz   c                óœ   — 	 ddl }t          j        | ¦  «        j        }|                     |¦  «        j        }n# t          $ r d}Y nw xY w|S )zƒFetch owner of local file path.

    Args:
        file_path (str): Local file path.

    Returns:
        str: Name of owner.
    r   Nrf   )ÚpwdrG   ÚstatÚst_uidÚgetpwuidÚpw_namer‘   )rz   r»   Úfile_owner_uidÚfile_owner_names       r6   Úget_file_owner_from_pathrÂ   f  sb   € ð$Øˆ
ˆ
ˆ
åœ Ñ+Ô+Ô2ˆØŸ,š, ~Ñ6Ô6Ô>ˆˆøÝð $ð $ð $Ø#ˆˆˆð$øøøàÐs   ‚7: ºA	ÁA	Úsource_pathc                óØ  — | sdS d}t           j                             | ¦  «        r t           j                             | ¦  «        }n¤t           j                             | ¦  «        r…d}t          j        | ¦  «        D ]l\  }}}|D ]c}t           j                             ||¦  «        }t           j                             |¦  «        s"|t           j                             |¦  «        z  }ŒdŒm|}|S )z¶Fetch size of source path. Source can be a directory or a file.

    Args:
        source_path (str): Local path of data source.

    Returns:
        int: Source size in bytes.
    r   )rG   rB   ÚisfileÚgetsizeÚisdirÚwalkr�   Úislink)rÃ   ÚsizeÚ
total_sizeÚdirpathÚ_Ú	filenamesÚfÚfps           r6   Úget_source_sizerÑ   y  sà   € ð ð ØˆqØ€DÝ	„w‡~‚~�kÑ"Ô"ð 	ÝŒw�Š˜{Ñ+Ô+ˆˆÝ	Œ�Š�{Ñ	#Ô	#ð Øˆ
Ý%'¤W¨[Ñ%9Ô%9ð 	6ð 	6Ñ!ˆG�Q˜	Øð 6ð 6�Ý”W—\’\ '¨1Ñ-Ô-�Ý”w—~’~ bÑ)Ô)ð 6Ø¥"¤'§/¢/°"Ñ"5Ô"5Ñ5�Jøð6ð ˆØ€Kr5   Údatac                óN   — |                       d¦  «        }t          |¦  «        }|S )zýCalculate the content size in bytes:
    - Encode the string to bytes using a specific encoding (e.g., UTF-8)
    - Get the length of the encoded bytes.

    Args:
        data (str): Data string.

    Returns:
        int: Size of string in bytes.
    r°   )r²   rŒ   )rÒ   Úencoded_contentrÊ   s      r6   Úcalculate_content_sizerÕ   ’  s'   € ð —k’k 'Ñ*Ô*€OÝˆÑÔ€DØ€Kr5   c                  óæ   ‡ — e Zd ZU dZded<   	 dZded<   	 ded<   	 ded<   	 d	Zd
ed<   	 d2ˆ fd„Zd3d„Z	 d4d5d„Z	d6d„Z
d4d7d„Zd8d#„Ze	 	 d9d:d,„¦   «         Zed;d/„¦   «         Zed<d1„¦   «         Zˆ xZS )=ÚPebbloLoaderAPIWrapperzWrapper for Pebblo Loader API.rD   Úapi_keyr?   r9   ra   Úclassifier_urlÚ	cloud_urlFr^   rb   Úkwargsr   c                óÌ   •— t          |ddd¦  «        |d<   t          |ddt          ¦  «        |d<   t          |ddt          ¦  «        |d<    t          ¦   «         j        d	i |¤Ž dS )
z%Validate that api key in environment.rØ   ÚPEBBLO_API_KEYrC   rÙ   ÚPEBBLO_CLASSIFIER_URLrÚ   ÚPEBBLO_CLOUD_URLNr4   )r   Ú_DEFAULT_CLASSIFIER_URLÚ_DEFAULT_PEBBLO_CLOUD_URLÚsuperÚ__init__)ÚselfrÛ   rŽ   s     €r6   rã   zPebbloLoaderAPIWrapper.__init__°  sŠ   ø€ å0Ø�IÐ/°ñ
ô 
ˆˆyÑõ $8ØÐ$Ð&=Õ?Vñ$
ô $
ˆÐÑ õ 3Ø�KÐ!3Õ5Nñ
ô 
ˆˆ{Ñð 	�‰ŒÔÐ"Ð"˜6Ð"Ð"Ð"Ð"Ð"r5   ÚapprQ   rc   ÚNonec                ó<  — d}|                      d¬¦  «        }| j        dk    rF|                      ¦   «         }| j        › t          j        j        › �}|                      d|||¦  «        }| j        r«|                      d¬¦  «        }|rCt          j
        |j        ¦  «                             d¦  «        }|                     d|i¦  «         |                     dt          i¦  «         | j        › t          j        j        › �}|                      d|||¦  «        }dS dS )	z‹
        Send app discovery request to Pebblo server & cloud.

        Args:
            app (App): App instance to be discovered.
        NT©Úexclude_unsetr?   ÚPOST©Úcloud_requestÚpebblo_server_versionÚpebblo_client_version)r\   ra   Ú_make_headersrÙ   r-   r3   ÚvalueÚmake_requestrØ   ÚjsonÚloadsÚtextr�   ÚupdateÚPLUGIN_VERSIONrÚ   )	rä   rå   Úpebblo_respÚpayloadÚheadersÚapp_discover_urlrí   Úpebblo_cloud_urlrÍ   s	            r6   Úsend_loader_discoverz+PebbloLoaderAPIWrapper.send_loader_discover½  s9  € ð ˆØ—(’(¨�(Ñ.Ô.ˆàÔ# wÒ.Ð.à×(Ò(Ñ*Ô*ˆGàÔ&ÐJ­Ô(BÔ(HÐJÐJð ð ×+Ò+¨FÐ4DÀgÈwÑWÔWˆKàŒ<ð 	Nà×(Ò(°tÐ(Ñ<Ô<ˆGØð QÝ(,¬
°;Ô3CÑ(DÔ(D×(HÒ(HØ+ñ)ô )Ð%ð —’Ð 7Ð9NÐOÑPÔPÐPà�NŠNÐ3µ^ÐDÑEÔEÐEØ"&¤.ÐTµ&Ô2LÔ2RÐTÐTÐØ×!Ò! &Ð*:¸GÀWÑMÔMˆAˆAˆAð	Nð 	Nr5   Údocs_with_idúList[IndexedDocument]r]   r\   r_   c                ó‚  — |                      dd¦  «        }t          |¦  «        }|                      |||¦  «        \  }}|                      ||||||¦  «        }	i }
| j        dk    rÊ|                      ¦   «         }| j        › t          j        j	        › �}	 |  
                    d|||	d¦  «        }|rMt          j        |j        ¦  «                              dg ¦  «        D ]}|
                     |d         |i¦  «         Œ n2# t          $ r%}t                                d|¦  «         Y d	}~nd	}~ww xY w| j        rS| j        dk    r|                      |	d         |
¦  «         |	                     d
d	¦  «         |                      |	¦  «         n4| j        dk    r)t                                d¦  «         t-          d¦  «        ‚|
S )a§  
        Send documents to Pebblo server for classification.
        Then send classified documents to Daxa cloud(If api_key is present).

        Args:
            docs_with_id (List[IndexedDocument]): List of documents to be classified.
            app (App): App instance.
            loader_details (dict): Loader details.
            loading_end (bool): Boolean, indicating the halt of data loading by loader.
        rÃ   rC   r?   rê   i,  r[   r:   z3An Exception caught in classify_documents: local %sNrb   zpebblo-cloudz4API key is missing for sending docs to Pebblo cloud.)r�   rÂ   Úprepare_docs_for_classificationÚbuild_classification_payloadra   rï   rÙ   r-   r2   rð   rñ   rò   ró   rô   rõ   r‘   r‡   ÚwarningrØ   Úupdate_doc_dataÚpopÚsend_docs_to_pebblo_cloudÚ	NameError)rä   rý   rå   r]   r_   rÃ   r`   r[   Úsource_aggregate_sizerø   Úclassified_docsrù   Úload_doc_urlr÷   Úclassified_docÚes                   r6   Úclassify_documentsz)PebbloLoaderAPIWrapper.classify_documentsÜ  s  € ð" %×(Ò(¨¸Ñ;Ô;ˆÝ/°Ñ<Ô<ˆà&*×&JÒ&JØ˜+ ~ñ'
ô '
Ñ#ˆÐ#ð ×3Ò3Ø��~ |Ð5JÈKñ
ô 
ˆð ˆØÔ# wÒ.Ð.à×(Ò(Ñ*Ô*ˆGØ"Ô1ÐLµ6Ô3DÔ3JÐLÐLˆLðYØ"×/Ò/Ø˜L¨'°7¸Cñô �ð ð å*.¬*°[Ô5EÑ*FÔ*F×*JÒ*JÈ6ÐSUÑ*VÔ*Vð ð ˜Ø'×.Ò.Ø+¨GÔ4°nÐEñô ð ð øøõ ð Yð Yð YÝ—’ÐTÐVWÑXÔXÐXÐXÐXÐXÐXÐXøøøøðYøøøð Œ<ð 	TàÔ'¨7Ò2Ð2ð ×$Ò$ W¨V¤_°oÑFÔFÐFà�KŠKÐ,¨dÑ3Ô3Ð3Ø×*Ò*¨7Ñ3Ô3Ð3Ð3ØÔ%¨Ò7Ð7Ý�NŠNÐQÑRÔRÐRÝÐRÑSÔSÐSàÐs   ÂA(C? Ã?
D.Ä	D)Ä)D.rø   c                óþ   — |                       d¬¦  «        }| j        › t          j        j        › �}	 |                      d|||¦  «        }dS # t          $ r&}t                               d|¦  «         Y d}~dS d}~ww xY w)z‰
        Send documents to Pebblo cloud.

        Args:
            payload (dict): The payload containing documents to be sent.
        Trë   rê   z3An Exception caught in classify_documents: cloud %sN)	rï   rÚ   r-   r2   rð   rñ   r‘   r‡   r  )rä   rø   rù   rû   rÍ   r  s         r6   r  z0PebbloLoaderAPIWrapper.send_docs_to_pebblo_cloud  s¢   € ð ×$Ò$°4Ð$Ñ8Ô8ˆØ"œnÐG­fÔ.?Ô.EÐGÐGÐð	UØ×!Ò! &Ð*:¸GÀWÑMÔMˆAˆAˆAøÝð 	Uð 	Uð 	UÝ�NŠNÐPÐRSÑTÔTÐTÐTÐTÐTÐTÐTÐTøøøøð	Uøøøs   ²A Á
A<ÁA7Á7A<rì   c                ó�   — dddœ}|r>| j         r|                     d| j         i¦  «         nt                               d¦  «         |S )zæ
        Generate headers for the request.

        args:
            cloud_request (bool): flag indicating whether the request is for Pebblo
            cloud.
        returns:
            dict: Headers for the request.

        zapplication/json)ÚAcceptzContent-Typez	x-api-keyz,API key is missing for Pebblo cloud request.)rØ   rõ   r‡   r  )rä   rì   rù   s      r6   rï   z$PebbloLoaderAPIWrapper._make_headers(  s`   € ð )Ø.ð
ð 
ˆð ð 	OàŒ|ð OØ—’ ¨T¬\Ð:Ñ;Ô;Ð;Ð;å—’ÐMÑNÔNÐNØˆr5   r[   ú
List[dict]r`   r  r­   c                óÌ   — |j         |j        |t          |j        |d|| j        | j        dœ
}|du rd|d<   d|v r||d         d<   t          d	i |¤Ž                     d¬¦  «        }|S )
a  
        Build the payload for document classification.

        Args:
            app (App): App instance.
            docs (List[dict]): List of documents to be classified.
            loader_details (dict): Loader details.
            source_owner (str): Owner of the source.
            source_aggregate_size (int): Aggregate size of the source.
            loading_end (bool): Boolean indicating the halt of data loading by loader.

        Returns:
            dict: Payload for document classification.
        Úfalse)
rN   rR   r[   rV   rT   r]   r_   r`   ra   rb   TÚtruer_   r]   r  rè   r4   )rN   rR   rö   rT   ra   rb   rY   r\   )rä   rå   r[   r]   r`   r  r_   rø   s           r6   r  z3PebbloLoaderAPIWrapper.build_classification_payload?  s—   € ð0 ”HØ”YØÝ,Ø”{Ø,Ø"Ø(Ø#'Ô#;Ø"&Ô"9ð#
ð #
ˆð ˜$ÐÐØ%+ˆG�MÑ"Ø 7Ð*Ð*à)ð Ð(Ô)Ð*AÑBõ �.�.˜�.�.×%Ò%°DÐ%Ñ9Ô9ˆØˆr5   Né   ÚmethodÚurlrù   úOptional[dict]ÚtimeoutúOptional[Response]c           
     ó
  — 	 t          | ||||¬¦  «        }t                               d| |j         j        t	          t          |j         j        r|j         j        ng ¦  «        ¦  «        t	          |j        ¦  «        ¦  «         |j        t          j	        k    r#t           
                    d|j        › �¦  «         no|j        t          j        k    r#t           
                    d|j        › �¦  «         n7|j        t          j        k    r"t           
                    d|j        › �¦  «         |S # t          $ r t           
                    d|¦  «         Y n1t          $ r%}t           
                    d|¦  «         Y d}~nd}~ww xY wdS )	aÜ  
        Make a request to the Pebblo API

        Args:
            method (str): HTTP method (GET, POST, PUT, DELETE, etc.).
            url (str): URL for the request.
            headers (dict): Headers for the request.
            payload (Optional[dict]): Payload for the request (for POST, PUT, etc.).
            timeout (int): Timeout for the request in seconds.

        Returns:
            Optional[Response]: Response object if the request is successful.
        )r  r  rù   rò   r  z5Request: method %s, url %s, len %s response status %szPebblo Server: Error z$Pebblo received an invalid payload: z-Pebblo returned an unexpected response code: zUnable to reach server %sz'An Exception caught in make_request: %sN)r   r‡   r¢   r  r9   rŒ   ÚbodyÚstatus_coder   ÚINTERNAL_SERVER_ERRORr  ÚBAD_REQUESTrô   ÚOKr   r‘   )r  r  rù   rø   r  Úresponser  s          r6   rñ   z#PebbloLoaderAPIWrapper.make_requestk  s¥  € ð*	IÝØ 3°¸gÈwðñ ô ˆHõ �LŠLØGØØÔ Ô$Ý•C°Ô1AÔ1FÐN˜Ô(Ô-Ð-ÈBÑOÔOÑPÔPÝ�HÔ(Ñ)Ô)ñô ð ð Ô#¥zÔ'GÒGÐGÝ—’ÐM°xÔ7KÐMÐMÑNÔNÐNÐNØÔ%­Ô)?Ò?Ð?Ý—’ÐUÀhÄmÐUÐUÑVÔVÐVÐVØÔ%­¬Ò6Ð6Ý—’ð.ØÔ+ð.ð .ñô ð ð
 ˆOøÝð 	=ð 	=ð 	=Ý�NŠNÐ6¸Ñ<Ô<Ð<Ð<Ð<Ýð 	Ið 	Ið 	IÝ�NŠNÐDÀaÑHÔHÐHÐHÐHÐHÐHÐHøøøøð	Iøøøàˆts   ‚D(D+ Ä+%F Å	F ÅE;Å;F rÃ   úTuple[List[dict], int]c           
     óŠ  — g }d}d„ | D ¦   «         }d}|D �]ª}|                      di ¦  «        }|                      dg ¦  «        }	|d         dk    r*t          |                      d|d	         ¦  «        ¦  «        }
n7t          |                      d
|                      d|¦  «        ¦  «        ¦  «        }
|                      dt          |
¦  «        ¦  «        }|                      dt          |
¦  «        ¦  «        }t	          |                      d¦  «        ¦  «        }t          |¦  «        }||z  }|                      dd¦  «        pd}|                     ||
||                      di ¦  «                              d¦  «        |dœ|	rd|	ini ¥|�d|ini ¥¦  «         |d         dk    r|s|                      d¦  «        |d	<   d}�Œ¬||fS )a„  
        Prepare documents for classification.

        Args:
            docs_with_id (List[IndexedDocument]): List of documents to be classified.
            source_path (str): Source path of the documents.
            loader_details (dict): Contains loader info.

        Returns:
            Tuple[List[dict], int]: Documents and the aggregate size
            of the source.
        r   c                ó6   — g | ]}|                      ¦   «         ‘ŒS r4   )r\   )r   r·   s     r6   r�   zJPebbloLoaderAPIWrapper.prepare_docs_for_classification.<locals>.<listcomp>±  s    € Ð:Ð:Ð: c�s—x’x‘z”zÐ:Ð:Ð:r5   FÚmetadataÚauthorized_identitiesrn   r(   rx   rÃ   rl   rR   rÊ   r±   r:   NÚlast_modified)r·   rÃ   r:   r&  Ú
file_ownerÚsource_path_sizeÚsource_full_urlT)r�   rm   rÂ   rÑ   r9   rÕ   r³   )rý   rÃ   r]   r[   r  Údoc_contentÚsource_path_updater·   Údoc_metadataÚdoc_authorized_identitiesÚdoc_source_pathÚdoc_source_ownerÚdoc_source_sizer±   Úpage_content_sizer„   s                   r6   r   z6PebbloLoaderAPIWrapper.prepare_docs_for_classification�  s5  € ð$ ˆØ !ÐØ:Ð:¨\Ð:Ñ:Ô:ˆØ"ÐØð .	*ñ .	*ˆCØŸ7š7 :¨rÑ2Ô2ˆLØ(4×(8Ò(8Ð9PÐRTÑ(UÔ(UÐ%Ø˜hÔ'Ð+=Ò=Ð=Ý"/Ø ×$Ò$ X¨~¸mÔ/LÑMÔMñ#ô #��õ #0Ø ×$Ò$Ø#Ø$×(Ò(¨°;Ñ?Ô?ñô ñ#ô #�ð  ,×/Ò/ØÕ1°/ÑBÔBñ ô  Ðð +×.Ò.¨vµÀÑ7WÔ7WÑXÔXˆOÝ˜sŸwšw ~Ñ6Ô6Ñ7Ô7ˆLÝ 6°|Ñ DÔ DÐØ!Ð%6Ñ6Ð!Ø—W’W˜W dÑ+Ô+Ð0¨qˆFØ�KŠKà'Ø#2Ø#Ø%(§W¢W¨Z¸Ñ%<Ô%<×%@Ò%@ÀÑ%QÔ%QØ"2ðð ð 5ð Ð0Ð2KÐLÐLàðð +Ð6ð ,¨_Ð=Ð=àðñô ð ð( ˜xÔ(Ð,>Ò>Ð>Ø*ð ?ð 1=×0@Ò0@ÐARÑ0SÔ0S�˜}Ñ-Ø%)Ð"ùØÐ*Ð*Ð*r5   r  c           
     óB  — | D ]›}|                      |d         i ¦  «        }|                     |                      d¦  «        |                      d¦  «        |                      di ¦  «        |                      di ¦  «        dœ¦  «         |                     d¦  «         ŒœdS )	zî
        Update the document data with classified information.

        Args:
            docs (List[dict]): List of document data to be updated.
            classified_docs (dict): The dictionary containing classified documents.
        r:   Úpb_checksumÚloader_source_pathÚentitiesÚtopics)r3  r4  r5  r6  r·   N)r�   rõ   r  )r[   r  Údoc_dataÚclassified_datas       r6   r  z&PebbloLoaderAPIWrapper.update_doc_dataä  s·   € ð ð 	 ð 	 ˆHØ-×1Ò1°(¸7Ô2CÀRÑHÔHˆOà�OŠOà#2×#6Ò#6°}Ñ#EÔ#EØ*9×*=Ò*=Ð>RÑ*SÔ*SØ /× 3Ò 3°JÀÑ CÔ CØ-×1Ò1°(¸BÑ?Ô?ð	ð ñô ð ð �LŠL˜ÑÔÐÐð	 ð 	 r5   )rÛ   r   )rå   rQ   rc   ræ   )F)
rý   rþ   rå   rQ   r]   r\   r_   r^   rc   r\   )rø   r\   rc   ræ   )rì   r^   rc   r\   )rå   rQ   r[   r  r]   r\   r`   r9   r  r­   r_   r^   rc   r\   )Nr  )r  r9   r  r9   rù   r\   rø   r  r  r­   rc   r  )rý   rþ   rÃ   r9   r]   r\   rc   r!  )r[   r  r  r\   rc   ræ   )r.   r/   r0   r1   r<   ra   rb   rã   rü   r  r  rï   r  Ústaticmethodrñ   r   r  Ú__classcell__)rŽ   s   @r6   r×   r×   ¢  s�  ø€ € € € € € Ø(Ð(àÐÐÑØ"Ø&ÐÐ&Ð&Ð&Ñ&ØIØ!Ð!Ð!Ñ!Ø&ØÐÐÑØ!Ø$ÐÐ$Ð$Ð$Ñ$ØUð#ð #ð #ð #ð #ð #ðNð Nð Nð NðH "ð<ð <ð <ð <ð <ð|Uð Uð Uð Uðð ð ð ð ð.*ð *ð *ð *ðX ð
 #'Øð/ð /ð /ð /ñ „\ð/ðb ðD+ð D+ð D+ñ „\ðD+ðL ð ð  ð  ñ „\ð ð  ð  ð  ð  r5   r×   )rB   r9   rc   r9   )rn   r9   rc   r9   )rn   r   rc   r9   )rc   r•   )rc   r9   )r   )r[   r«   r¬   r­   rc   r®   )rz   r9   rc   r9   )rÃ   r9   rc   r­   )rÒ   r9   rc   r­   )=Ú
__future__r   rò   ÚloggingrG   rh   rF   Úenumr   Úhttpr   Útypingr   r   r   r	   r
   Úlangchain_core.documentsr   Úlangchain_core.envr   Úlangchain_core.utilsr   Úpydanticr   Úrequestsr   r   Úrequests.exceptionsr   Ú)langchain_community.document_loaders.baser   Ú	getLoggerr.   r‡   rö   rà   rá   ÚBATCH_SIZE_BYTESÚfile_loaderÚ
dir_loaderÚ	in_memoryÚcloud_folderrq   r9   r-   r8   r>   rM   rQ   rY   rm   ru   r”   r¤   r¡   r¹   rÂ   rÑ   rÕ   r×   r4   r5   r6   ú<module>rM     sŸ  ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø 	€	€	€	Ø €€€Ø €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3à -Ð -Ð -Ð -Ð -Ð -Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø Ð Ð Ð Ð Ð Ø &Ð &Ð &Ð &Ð &Ð &Ð &Ð &Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0à @Ð @Ð @Ð @Ð @Ð @à	ˆÔ	˜8Ñ	$Ô	$€à€à1Ð Ø1Ð ØÐ ðð ð €ðð ð €
ð Ð€	ðð ð €ð ØØØ ð	ð Ð ð-ð -ð -ð -ð -ˆS�$ñ -ô -ð -ð%ð %ð %ð %ð %�hñ %ô %ð %ð5ð 5ð 5ð 5ð 5ˆiñ 5ô 5ð 5ð2$ð $ð $ð $ð $�	ñ $ô $ð $ð+ð +ð +ð +ð +ˆ)ñ +ô +ð +ð*Vð Vð Vð Vð Vˆ)ñ Vô Vð Vð2ð ð ð ð.ð ð ð ðE(ð E(ð E(ð E(ðPð ð ð ð>ð ð ð ð" 1;ð%ð %ð %ð %ð %ðPð ð ð ð&ð ð ð ð2ð ð ð ð W ð W ð W ð W ð W ˜Yñ W ô W ð W ð W ð W r5   