Ë
    µŒjŸc  ã                  ó  — 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$„Z5d0d%„Z6d1d&„Z7	 d2	 	 	 	 	 d3d'„Z8d4d(„Z9d5d)„Z:d6d*„Z; G d+„ d,e«      Z<y)7é    )Ú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y)ÚRoutesz2Routes available for the Pebblo API as enumerator.z/v1/loader/docz/v1/app/discoverN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú
loader_docÚloader_app_discover© ó    ún/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/utilities/pebblo.pyr-   r-   C   s   „ Ù<à!€JØ,Ñr5   r-   c                  ó   — e Zd ZU dZded<   y)ÚIndexedDocumentzPebblo Indexed Document.ÚstrÚpb_idN©r.   r/   r0   r1   Ú__annotations__r4   r5   r6   r8   r8   J   s   … Ù"àƒ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<   y)Ú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   se   … Ùà€Dˆ#ÓØ,Ø
ƒIØ#Ø
ƒIØ)Ø€BˆÓØ4ØƒMØ*ØƒGØØƒOØØƒMØØÓØ(Ø€GˆSÓØ4r5   r>   c                  ó(   — e Zd ZU dZded<   	 ded<   y)Ú	FrameworkzPebblo Framework instance.r9   ÚnameÚversionNr;   r4   r5   r6   rM   rM   j   s   … Ù$à
ƒIØ ØƒLØ#r5   rM   c                  óp   — 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<   y)ÚAppzPebblo AI application.r9   rN   ÚownerrD   ÚdescriptionÚload_idr>   rK   rM   Ú	frameworkÚplugin_versionÚclient_versionNr;   r4   r5   r6   rQ   rQ   s   sJ   … Ù à
ƒIØØƒJØØÓØ!Øƒ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<   y)Ú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Ø0ØƒJØØ
ƒJØ.ØÓØØƒLØ-ØÓØ+ØÓØ7ØÓØ,ØÓØ%ØÓØUr5   rY   c                óª   — | rd| v sd| d   k(  s| dv r| S t        j                  | «      }|j                  «       r|j                  «       }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_pathrl   ¡   sY   € ñ Ø�T‰MØ�4˜‘7ŠNØÐ1Ñ1àˆÜ—‘˜TÓ"€IØ×ÑÔØ×%Ñ%Ó'ˆ	Üˆy‹>Ðr5   c                óL   — t         j                  «       D ]  \  }}| |v sŒ|c S  y)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)ÚloaderÚloader_typeÚloaderss      r6   Úget_loader_typert   ¸   s/   € ô !4× 9Ñ 9Ö ;Ñˆ�WØ�WÒØÒð !<ð r5   c                óV  — ddl m}m}m}m} d}t        | t        «      st        j                  d«       |S | j                  }	 d|v rUt        | |«      rd| j                  › d| j                  › �}�n�t        | |«      �r€d| j                  › d| j                  › �}�nbd	|v r|d	   }|�rVd
|v �rQ|d
   }|�rI|› d|› �}�n@d|v r|d   }�n5d|v r|d   }�n*d|v r-|d   }|�rt        |t        «      �rt        |«      dkD  rÿ|d   }nùt        | |«      rd}nêt        | |«      rd| j                  › �}nÎ| j                   j"                  dk(  rµ|j%                  d«      r|j%                  d«      }	d|	› �}n�|j%                  d«      r6|j%                  dg «      }
dj'                  |
D �cg c]  }d|› d�‘Œ
 c}«      }nF|j%                  d«      r5|j%                  dg «      }dj'                  |D �cg c]  }d|› d�‘Œ
 c}«      }t+        t-        |«      «      S c c}w c c}w # t(        $ r Y Œ)w xY w)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   rf   zGloader is not derived from BaseLoader, source location will be unknown!Úbucketzgc://rd   zs3://ÚsourceÚchannelrB   Ú	file_pathÚ	web_pathsr+   znotiondb://r'   Ú	folder_idz+https://drive.google.com/drive/u/2/folders/Úfile_idsz, z https://drive.google.com/file/d/z/viewÚdocument_idsz#https://docs.google.com/document/d/z/edit)Ú$langchain_community.document_loadersr%   r   r&   r   Ú
isinstancer   ÚloggerÚerrorÚ__dict__rv   ÚblobÚkeyrZ   ÚlenÚdatabase_idÚ	__class__r.   ÚgetÚjoinÚ	Exceptionrl   r9   )rq   r%   r   r&   r   ÚlocationÚloader_dictrx   rz   r{   r|   Úfile_idr}   Údoc_ids                 r6   Úget_loader_full_pathr�   Ç   sX  € ÷ó ð €HÜ�fœjÔ)Ü�‰ØUô	
ð ˆØ—/‘/€Kð/Ø�{Ñ"Ü˜& -Ô0Ø" 6§=¡= /°°6·;±;°-Ð@’Ü˜F LÕ1Ø" 6§=¡= /°°6·:±:°,Ð?’Ø˜Ñ$Ø" 8Ñ,ˆHÚ˜I¨Ò4Ø% iÑ0�ÚØ"* ¨1¨W¨IÐ6’HØ�{Ñ"Ø" 6Ñ*ŠHØ˜KÑ'Ø" ;Ñ/ŠHØ˜KÑ'Ø# KÑ0ˆIÚœZ¨	´4Õ8¼SÀ»^ÈaÒ=OØ$ Q™<‘ä˜ Ô0Ø"‰HÜ˜ Ô/Ø$ V×%7Ñ%7Ð$8Ð9‰HØ×Ñ×&Ñ&Ð*=Ò=Ø�‰˜{Ô+Ø'ŸO™O¨KÓ8�	ØHÈÈÐT‘Ø—‘ Ô,Ø&Ÿ?™?¨:°rÓ:�ØŸ9™9ñ (0óá'/˜Gð ;¸7¸)À5ÒIØ'/ñó‘ð —‘ Ô0Ø*Ÿ™¨~¸rÓB�ØŸ9™9ñ '3óá&2˜Fð >¸f¸XÀUÒKØ&2ñó�ô œ˜X›Ó'Ð'ùò!ùòøô ò Ùðús1   ÁE H Æ#HÆ0:H Ç*HÇ7H È
H È	H(È'H(c                 ó  — t        «       } t        d| j                  dd«      ¬«      }t        j                  «       }t        |j                  t        j                  d   | j                  dd«      |j                  |j                  t        «       | j                  dd«      | j                  dd«      ¬	«      }d
|j                  v rd|_        d|_        t        j                  d|› �«       t        j                  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_versionre   )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ô€Iô �N‰NÓ€EÜØ�Z‰ZÜ�Z‰Z˜ÑØ—‘ ¨YÓ7Ø�<‰<Ø—=‘=Ü‹8Ø—‘ ¨IÓ6Ø$Ÿ™Ð):¸IÓFô	€Gð �7—:‘:ÑØ ˆŒØ#ˆŒä
‡L�L�:˜i˜[Ð)Ô*Ü
‡L�L�8˜G˜9Ð%Ô&Ø�gÐÐr5   c                 ó”   — ddl } | j                  «       }	 | j                  |«      }|S # t        $ r | j                  d«      }Y |S w xY w)zJFetch local runtime ip address.

    Returns:
        str: IP address
    r   NÚ	localhost)ÚsocketÚgethostnameÚgethostbynamerŠ   )r¡   rA   Ú	public_ips      r6   r›   r›   .  sY   € ó à×ÑÓ€Dð6Ø×(Ñ(¨Ó.ˆ	ð Ðøô ò 6Ø×(Ñ(¨Ó5‰	ØÐð6ús   –) ©AÁAc                ó$  — g }g }d}| D ]q  }t        |j                  j                  d«      «      }||kD  r|j                  |g«       Œ?||z   |kD  r|j                  |«       g }d}|j                  |«       ||z  }Œs |r|j                  |«       |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[   Úmax_batch_sizeÚ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   c                ó¨   — 	 ddl }t        j                  | «      j                  }|j	                  |«      j
                  }|S # t        $ r d}Y |S w xY w)zƒFetch owner of local file path.

    Args:
        file_path (str): Local file path.

    Returns:
        str: Name of owner.
    r   Nre   )ÚpwdrG   ÚstatÚst_uidÚgetpwuidÚpw_namerŠ   )ry   r²   Úfile_owner_uidÚfile_owner_names       r6   Úget_file_owner_from_pathr¹   f  sV   € ð$ÛäŸ™ Ó+×2Ñ2ˆØŸ,™, ~Ó6×>Ñ>ˆð Ðøô ò $Ø#‰ØÐð$ús   ‚>A ÁAÁAc                óä  — | syd}t         j                  j                  | «      r!t         j                  j                  | «      }|S t         j                  j	                  | «      r‹d}t        j
                  | «      D ]o  \  }}}|D ]d  }t         j                  j                  ||«      }t         j                  j                  |«      rŒC|t         j                  j                  |«      z  }Œf Œq |}|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)Úsource_pathÚsizeÚ
total_sizeÚdirpathÚ_Ú	filenamesÚfÚfps           r6   Úget_source_sizerÈ   y  sº   € ñ ØØ€DÜ	‡w�w‡~�~�kÔ"Ü�w‰w�‰˜{Ó+ˆð €Kô 
�‰�‰�{Ô	#Øˆ
Ü%'§W¡W¨[Ö%9Ñ!ˆG�Q˜	Û�Ü—W‘W—\‘\ '¨1Ó-�Ü—w‘w—~‘~ bÕ)Ø¤"§'¡'§/¡/°"Ó"5Ñ5‘Jñ ð &:ð
 ˆØ€Kr5   c                ó>   — | j                  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…   )ÚdataÚ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<   	 dˆ fd„Zdd„Z	 d	 	 	 	 	 	 	 	 	 dd„Z	dd„Z
ddd„Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Ze	 	 d	 	 	 	 	 	 	 	 	 	 	 dd„«       Ze	 	 	 	 	 	 	 	 dd„«       Zedd„«       Zˆ xZS ) ÚPebbloLoaderAPIWrapperzWrapper for Pebblo Loader API.rD   Úapi_keyr?   r9   ra   Úclassifier_urlÚ	cloud_urlFr^   rb   c                óš   •— t        |ddd«      |d<   t        |ddt        «      |d<   t        |ddt        «      |d<   t        ‰| �  d	i |¤Ž y)
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__)ÚselfÚkwargsr‡   s     €r6   rÙ   zPebbloLoaderAPIWrapper.__init__°  sh   ø€ ä0Ø�IÐ/°ó
ˆˆyÑô $8ØÐ$Ð&=Ô?Vó$
ˆÐÑ ô 3Ø�KÐ!3Ô5Nó
ˆˆ{Ñô 	‰ÑÑ"˜6Ó"r5   c                óL  — d}|j                  d¬«      }| j                  dk(  rL| j                  «       }| j                  › t        j
                  j                  › �}| j                  d|||«      }| j                  r©| j                  d¬«      }|rAt        j                  |j                  «      j                  d«      }|j                  d|i«       |j                  dt        i«       | j                  › t        j
                  j                  › �}| j                  d|||«      }yy)	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Ú   ÚappÚpebblo_respÚpayloadÚheadersÚapp_discover_urlrâ   Úpebblo_cloud_urlrÄ   s	            r6   Úsend_loader_discoverz+PebbloLoaderAPIWrapper.send_loader_discover½  s  € ð ˆØ—(‘(¨�(Ó.ˆà×#Ñ# wÒ.à×(Ñ(Ó*ˆGà×&Ñ&Ð'¬×(BÑ(B×(HÑ(HÐ'IÐJð ð ×+Ñ+¨FÐ4DÀgÈwÓWˆKà�<Š<à×(Ñ(°tÐ(Ó<ˆGÙÜ(,¯
©
°;×3CÑ3CÓ(D×(HÑ(HØ+ó)Ð%ð —‘Ð 7Ð9NÐOÔPà�N‰NÐ3´^ÐDÔEØ"&§.¡.Ð!1´&×2LÑ2L×2RÑ2RÐ1SÐTÐØ×!Ñ! &Ð*:¸GÀWÓM‰Að r5   c                óN  — |j                  dd«      }t        |«      }| j                  |||«      \  }}| j                  ||||||«      }	i }
| j                  dk(  rš| j                  «       }| j                  › t        j                  j                  › �}	 | j                  d|||	d«      }|rJt        j                  |j                  «      j                  dg «      D ]  }|
j                  |d   |i«       Œ | j$                  rI| j                  dk(  r| j'                  |	d   |
«       |	j)                  d
d	«       | j+                  |	«       |
S | j                  dk(  r t         j#                  d«       t-        d«      ‚|
S # t        $ r }t         j#                  d|«       Y d	}~Œªd	}~ww xY w)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Ú   Údocs_with_idrì   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Ñ1Ð2´6×3DÑ3D×3JÑ3JÐ2KÐLˆLðYØ"×/Ñ/Ø˜L¨'°7¸Có�ñ ä*.¯*©*°[×5EÑ5EÓ*F×*JÑ*JÈ6ÐSUÖ*V˜Ø'×.Ñ.Ø+¨GÑ4°nÐEõð +Wð �<Š<à×'Ñ'¨7Ò2ð ×$Ñ$ W¨V¡_°oÔFà�K‰KÐ,¨dÔ3Ø×*Ñ*¨7Ô3ð
 Ðð	 ×%Ñ%¨Ò7Ü�N‰NÐQÔRÜÐRÓSÐSàÐøô! ò YÜ—‘ÐTÐVW×XÑXûðYús   ÂA!E; Å;	F$ÆFÆF$c                óú   — | j                  d¬«      }| j                  › t        j                  j                  › �}	 | j                  d|||«      }y# t        $ r }t        j                  d|«       Y d}~y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  sz   € ð ×$Ñ$°4Ð$Ó8ˆØ"Ÿn™nÐ-¬f×.?Ñ.?×.EÑ.EÐ-FÐGÐð	UØ×!Ñ! &Ð*:¸GÀWÓM‰AøÜò 	UÜ�N‰NÐPÐRS×TÑTûð	Uús   ¼A Á	A:ÁA5Á5A:c                ó”   — dddœ}|r@| j                   r|j                  d| j                   i«       |S t        j                  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(  sM   € ð )Ø.ñ
ˆñ à�|Š|Ø—‘ ¨T¯\©\Ð:Ô;ð ˆô —‘ÐMÔNØˆr5   c                óì   — |j                   |j                  |t        |j                  |d|| j                  | j
                  dœ
}|du rd|d<   d|v r||d   d<   t        d	i |¤Žj                  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‘HØ—Y‘YØÜ,Ø—{‘{Ø,Ø"Ø(Ø#'×#;Ñ#;Ø"&×"9Ñ"9ñ#
ˆð ˜$ÑØ%+ˆG�MÑ"Ø 7Ñ*à)ð Ð(Ñ)Ð*AÑBô ‘.˜‘.×%Ñ%°DÐ%Ó9ˆØˆr5   c           
     ó>  — 	 t        | ||||¬«      }t        j                  d| |j                   j                  t	        t        |j                   j                  r|j                   j                  ng «      «      t	        |j                  «      «       |j                  t        j                  k\  r$t        j                  d|j                  › �«       |S |j                  t        j                  k\  r$t        j                  d|j                  › �«       |S |j                  t        j                  k7  r"t        j                  d|j                  › �«       |S # t        $ r t        j                  d|«       Y yt        $ r }t        j                  d|«       Y d}~yd}~ww xY w)	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.
        )ÚmethodÚurlrï   rç   Útimeoutz5Request: 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  sd  € ð*	IÜØ 3°¸gÈwôˆHô �L‰LØGØØ× Ñ ×$Ñ$Ü”C°×1AÑ1A×1FÒ1F˜×(Ñ(×-Ò-ÈBÓOÓPÜ�H×(Ñ(Ó)ôð ×#Ñ#¤z×'GÑ'GÒGÜ—‘Ð!6°x×7KÑ7KÐ6LÐMÔNð ˆOð ×%Ñ%¬×)?Ñ)?Ò?Ü—‘Ð!EÀhÇmÁmÀ_ÐUÔVð ˆOð ×%Ñ%¬¯©Ò6Ü—‘ØCØ×+Ñ+Ð,ð.ôð
 ˆOøÜò 	=Ü�N‰NÐ6¸Õ<ð ô ò 	IÜ�N‰NÐDÀa×HÐHØûð	Iús,   ‚CE ÃA E ÄA E ÅFÅ4FÅ<FÆFc           
     ó  — g }d}| D �cg c]  }|j                  «       ‘Œ }}d}|D �]Y  }|j                  di «      }|j                  dg «      }	|d   dk(  rt        |j                  d|d   «      «      }
n+t        |j                  d	|j                  d|«      «      «      }
|j                  d
t        |
«      «      }|j                  dt	        |
«      «      }t        |j                  d«      «      }t        |«      }||z  }|j                  dd«      xs d}|j                  ||
||j                  di «      j                  d«      |dœ|	rd|	ini ¥|�d|ini ¥«       |d   dk(  s�Œ@|r�ŒD|j                  d«      |d<   d}�Œ\ ||fS c c}w )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   FÚmetadataÚauthorized_identitiesrq   r(   rw   rÀ   rk   rR   rÁ   r§   r:   NÚlast_modified)r®   rÀ   r:   r  Ú
file_ownerÚsource_path_sizeÚsource_full_urlT)r\   rˆ   rl   r¹   rÈ   r9   rÌ   r©   )rû   rÀ   r]   r[   rü   r®   Údoc_contentÚsource_path_updateÚ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�  sÛ  € ð$ ˆØ !ÐÙ-9Ó:©\ c�s—x‘x•z¨\ˆÐ:Ø"ÐÜˆCØŸ7™7 :¨rÓ2ˆLØ(4×(8Ñ(8Ð9PÐRTÓ(UÐ%Ø˜hÑ'Ð+=Ò=Ü"/Ø ×$Ñ$ X¨~¸mÑ/LÓMó#‘ô #0Ø ×$Ñ$Ø#Ø$×(Ñ(¨°;Ó?óó#�ð  ,×/Ñ/ØÔ1°/ÓBó Ðð +×.Ñ.¨v´ÀÓ7WÓXˆOÜ˜sŸw™w ~Ó6Ó7ˆLÜ 6°|Ó DÐØ!Ð%6Ñ6Ð!Ø—W‘W˜W dÓ+Ò0¨qˆFØ�K‰Kà'Ø#2Ø#Ø%(§W¡W¨Z¸Ó%<×%@Ñ%@ÀÓ%QØ"2ññ 5ð 1Ð2KÑLàðð +Ð6ð ,¨_Ñ=àðôð( ˜xÑ(Ð,>Ô>Û*à0<×0@Ñ0@ÐARÓ0S�˜}Ñ-Ø%)Ò"ð] ð^ Ð*Ð*Ð*ùòc ;s   ‰Fc           
     ó  — | D ]|  }|j                  |d   i «      }|j                  |j                  d«      |j                  d«      |j                  di «      |j                  di «      dœ«       |j                  d«       Œ~ y)	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)r"  r#  r$  r%  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ˆOà�O‰Oà#2×#6Ñ#6°}Ó#EØ*9×*=Ñ*=Ð>RÓ*SØ /× 3Ñ 3°JÀÓ CØ-×1Ñ1°(¸BÓ?ñ	ôð �L‰L˜Õñ r5   )rÛ   r   )rì   rQ   ÚreturnÚNone)F)
rû   úList[IndexedDocument]rì   rQ   r]   r\   r_   r^   r(  r\   )rî   r\   r(  r)  )rá   r^   r(  r\   )rì   rQ   r[   ú
List[dict]r]   r\   r`   r9   rü   Úintr_   r^   r(  r\   )Né   )r	  r9   r
  r9   rï   r\   rî   zOptional[dict]r  r,  r(  zOptional[Response])rû   r*  rÀ   r9   r]   r\   r(  zTuple[List[dict], int])r[   r+  rý   r\   r(  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ðH "ð<à+ð<ð ð<ð ð	<ð
 ð<ð 
ó<ó|Uôð.*àð*ð ð*ð ð	*ð
 ð*ð  #ð*ð ð*ð 
ó*ðX ð
 #'Øð/Øð/àð/ð ð/ð  ð	/ð
 ð/ð 
ò/ó ð/ðb ðD+Ø+ðD+àðD+ð ðD+ð 
 ò	D+ó ðD+ðL ò ó ô r5   rÎ   )rB   r9   r(  r9   )rq   r9   r(  r9   )rq   r   r(  r9   )r(  zTuple[Framework, Runtime])r(  r9   )r   )r[   zList[Document]rª   r,  r(  zList[List[Document]])ry   r9   r(  r9   )rÀ   r9   r(  r,  )rÊ   r9   r(  r,  )=Ú
__future__r   rç   ÚloggingrG   rg   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_folderro   r9   r-   r8   r>   rM   rQ   rY   rl   rt   r�   rž   r›   r°   r¹   rÈ   rÌ   rÎ   r4   r5   r6   Ú<module>rB     s=  ðÝ "ã Û Û 	Û Û Ý Ý ß 3Õ 3å -Ý 6Ý 5Ý ß &Ý 0å @à	ˆ×	Ñ	˜8Ó	$€à€à1Ð Ø1Ð ØÐ ò€ò€
ð Ð€	ò€ð ØØØ ñ	Ð ô-ˆS�$ô -ô%�hô %ô5ˆiô 5ô2$�	ô $ô+ˆ)ô +ô*Vˆ)ô Vó2ó.óE(óPó>ð" 1;ð%Ø
ð%Ø*-ð%àó%óPó&ó2ô W ˜Yõ W r5   