Ë
    µŒj‡Q  ã                   ó¤   — d dl Z d dlZd dlZd dlmZ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  G d„ dee«      Z G d„ d	e«      Z G d
„ de«      Zy)é    N)ÚABCÚabstractmethod)ÚDictÚIteratorÚOptionalÚTupleÚUnion)ÚDocument)Ú
BaseLoaderc            !       ó@  — e Zd ZdZdddddddd	d	dddd
d
dœdedededeeef   dededededededeeef   deeef   deeef   dee   dee   dd
f d„Z	de
e   fd„Zedefd„«       Zdedefd „Zd!ed"ede
e   fd#„Z	 d(d!eded$ee   de
e   fd%„Zd&edeeef   fd'„Zy
))ÚDedocBaseLoadera  
    Base Loader that uses `dedoc` (https://dedoc.readthedocs.io).

    Loader enables extracting text, tables and attached files from the given file:
        * `Text` can be split by pages, `dedoc` tree nodes, textual lines
            (according to the `split` parameter).
        * `Attached files` (when with_attachments=True)
            are split according to the `split` parameter.
            For attachments, langchain Document object has an additional metadata field
            `type`="attachment".
        * `Tables` (when with_tables=True) are not split - each table corresponds to one
            langchain Document object.
            For tables, Document object has additional metadata fields `type`="table"
            and `text_as_html` with table HTML representation.
    ÚdocumentTFé
   Ú
auto_tabbyúrus+engÚ:ÚautoN)ÚsplitÚwith_tablesÚwith_attachmentsÚrecursion_deep_attachmentsÚpdf_with_text_layerÚlanguageÚpagesÚis_one_column_documentÚdocument_orientationÚneed_header_footer_analysisÚneed_binarizationÚneed_pdf_table_analysisÚ	delimiterÚencodingÚ	file_pathr   r   r   r   r   r   r   r   r   r   r   r   r    r!   Úreturnc                ól  — t        «       j                  «       D ��ci c]  \  }}|dvr||“Œ c}}| _        h d£| _        || j                  vrt	        d|› d| j                  › d�«      ‚|| _        || _        || _        | j
                  dk(  rdnd}|| j                  d	<   || j                  d
<   yc c}}w )a«
  
        Initialize with file path and parsing parameters.

        Args:
            file_path: path to the file for processing
            split: type of document splitting into parts (each part is returned
                separately), default value "document"
                "document": document text is returned as a single langchain Document
                    object (don't split)
                "page": split document text into pages (works for PDF, DJVU, PPTX, PPT,
                    ODP)
                "node": split document text into tree nodes (title nodes, list item
                    nodes, raw text nodes)
                "line": split document text into lines
            with_tables: add tables to the result - each table is returned as a single
                langchain Document object

            Parameters used for document parsing via `dedoc`
                (https://dedoc.readthedocs.io/en/latest/parameters/parameters.html):

                with_attachments: enable attached files extraction
                recursion_deep_attachments: recursion level for attached files
                    extraction, works only when with_attachments==True
                pdf_with_text_layer: type of handler for parsing PDF documents,
                    available options
                    ["true", "false", "tabby", "auto", "auto_tabby" (default)]
                language: language of the document for PDF without a textual layer and
                    images, available options ["eng", "rus", "rus+eng" (default)],
                    the list of languages can be extended, please see
                    https://dedoc.readthedocs.io/en/latest/tutorials/add_new_language.html
                pages: page slice to define the reading range for parsing PDF documents
                is_one_column_document: detect number of columns for PDF without
                    a textual layer and images, available options
                    ["true", "false", "auto" (default)]
                document_orientation: fix document orientation (90, 180, 270 degrees)
                    for PDF without a textual layer and images, available options
                    ["auto" (default), "no_change"]
                need_header_footer_analysis: remove headers and footers from the output
                    result for parsing PDF and images
                need_binarization: clean pages background (binarize) for PDF without a
                    textual layer and images
                need_pdf_table_analysis: parse tables for PDF without a textual layer
                    and images
                delimiter: column separator for CSV, TSV files
                encoding: encoding of TXT, CSV, TSV
        >   Úselfr   r"   r   >   ÚlineÚnodeÚpager   úGot ú$ for `split`, but should be one of `Ú`r'   ÚtreeÚlinearÚstructure_typeÚneed_content_analysisN)ÚlocalsÚitemsÚparsing_parametersÚvalid_split_valuesÚ
ValueErrorr   r   r"   )r%   r"   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   ÚkeyÚvaluer.   s                      út/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/document_loaders/dedoc.pyÚ__init__zDedocBaseLoader.__init__#   sÕ   € ôF %›hŸn™nÔ.ô#
á.‘
��UØÐGÑGð �‰JØ.ò#
ˆÔò
 #GˆÔØ˜×/Ñ/Ñ/ÜØ�u�gð Ø×+Ñ+Ð,¨Að/óð ð ˆŒ
Ø&ˆÔØ"ˆŒà#'§:¡:°Ò#7™¸XˆØ4Bˆ×ÑÐ 0Ñ1Ø;Kˆ×ÑÐ 7Ò8ùó##
s   œB0c              #   óÒ  K  — ddl }	 ddlm}  || j	                  «       ¬«      }d|j
                  d   _        |j                  «       5 }|j                  | j                  i | j                  ¥d|i¥¬	«      }ddd«       | j                  j                  «       j                  «       | j                  ¬
«      E d{  –—†  y# t        $ r t        d«      ‚w xY w# 1 sw Y   ŒcxY w7 Œ)­w)úLazily load documents.r   N)ÚDedocManagerzE`dedoc` package not found, please install it with `pip install dedoc`)Úmanager_configTÚloggerÚattachments_dir)r"   Ú
parameters©Údocument_treer   )ÚtempfileÚdedocr;   ÚImportErrorÚ_make_configÚconfigÚdisabledÚTemporaryDirectoryÚparser"   r2   Ú_split_documentÚto_api_schemaÚdictr   )r%   rB   r;   Údedoc_managerÚtmpdirrA   s         r7   Ú	lazy_loadzDedocBaseLoader.lazy_loadw   sç   è ø€ ãð	Ý*ñ
 %°D×4EÑ4EÓ4GÔHˆØ26ˆ×Ñ˜XÑ&Ô/à×(Ñ(Ô*¨fØ)×/Ñ/ØŸ.™.ØQ˜d×5Ñ5ÐQÐ7HÈ&ÑQð 0ó ˆM÷ +ð
 ×'Ñ'Ø'×5Ñ5Ó7×<Ñ<Ó>ÀdÇjÁjð (ó 
÷ 	
ñ 	
øô ò 	ÜØWóð ð	ú÷ +Ð*úð
	
ús@   ‚C'ˆC Ž;C'Á	.CÁ7AC'Â;C%Â<C'ÃCÃC'ÃC"ÃC'c                  ó   — y)zu
        Make configuration for DedocManager according to the file extension and
        parsing parameters.
        N© ©r%   s    r7   rE   zDedocBaseLoader._make_config�   s   € ð 	ó    Ú	paragraphc                 ó˜   — dj                  |d   D �cg c]  }| j                  |«      ‘Œ c}«      }|r|d   › d|› �}|S |d   }|S c c}w )z1Get text (recursively) of the document tree node.Ú
ÚsubparagraphsÚtext)ÚjoinÚ	_json2txt)r%   rT   ÚsubparagraphÚsubparagraphs_textrX   s        r7   rZ   zDedocBaseLoader._json2txt•   s€   € à!ŸY™Yð %.¨oÒ$>óá$>�Lð —‘˜|Õ,Ø$>ñó
Ðñ "ð ˜Ñ Ð! Ð$6Ð#7Ð8ð 	ð
 ˆð ˜6Ñ"ð 	ð
 ˆùòs   “ArA   Údocument_metadatac              #   ó°   K  — t        |d   «      dkD  r&|d   D ]  }| j                  ||¬«      E d{  –—†  Œ yt        |d   i |¥|d   ¥¬«      –— y7 Œ!­w)z4Parse recursively document tree obtained by `dedoc`.rW   r   ©rA   r]   NrX   Úmetadata©Úpage_contentr`   )ÚlenÚ_parse_subparagraphsr
   )r%   rA   r]   r[   s       r7   rd   z$DedocBaseLoader._parse_subparagraphs¤   s{   è ø€ ô ˆ}˜_Ñ-Ó.°Ò2Ø -¨oÔ >�Ø×4Ñ4Ø".ÐBSð 5ó ÷ ñ ñ !?ô
 Ø*¨6Ñ2ØKÐ-ÐK°¸zÑ1JÐKôó ð	ús   ‚0A²A³"AÚadditional_metadatac              #   óŠ  K  — |d   }|ri |¥|¥}|dk(  r)| j                  |d   d   ¬«      }t        ||¬«      –— �n|dk(  rƒ|d   d   d   }|d	   d   d
   }d}|D ]P  }	|	d   d
   |k(  r|| j                  |	«      z  }Œ#t        |i |¥d
|i¥¬«      –— |	d   d
   }| j                  |	«      }ŒR t        |i |¥d
|i¥¬«      –— n€|dk(  r8|d   d   d   D ])  }	|	d   }
t        | j                  |	«      i |¥|
¥¬«      –— Œ+ nC|dk(  r"| j                  |d   d   |¬«      E d{  –—†  nt        d|› d| j                  › d�«      ‚| j
                  r:|d   d   D ]/  }| j                  |«      \  }}t        |i |d   ¥d|dœ¥¬«      –— Œ1 |d   D ]*  }| j                  || j                  ddi¬«      E d{  –—†  Œ, y7 Œš7 Œ	­w)z=Split document into parts according to the `split` parameter.r`   r   ÚcontentÚ	structure)rT   ra   r(   rW   r   Úpage_idÚ r&   r'   r_   Nr)   r*   r+   ÚtablesÚtable)ÚtypeÚtext_as_htmlÚattachmentsrm   Ú
attachment)rA   r   re   )	rZ   r
   rd   r4   r3   r   Ú
_get_tablerJ   r   )r%   rA   r   re   r]   rX   Únodesri   Ú	page_textr'   Úline_metadatarl   Ú
table_textÚ
table_htmlrp   s                  r7   rJ   zDedocBaseLoader._split_document³   s}  è ø€ ð *¨*Ñ5ÐÙØ LÐ#4Ð LÐ8KÐ LÐà�JÒØ—>‘>¨M¸)Ñ,DÀ[Ñ,Q�>ÓRˆDÜ¨Ð7HÔIÔIà�fŠ_Ø! )Ñ,¨[Ñ9¸/ÑJˆEØ˜A‘h˜zÑ*¨9Ñ5ˆGØˆIã�Ø˜
Ñ# IÑ.°'Ò9Ø §¡°Ó!5Ñ5‘Iä"Ø%.Ø!JÐ$5Ð!J°yÀ'Ñ!Jôò ð # :Ñ.¨yÑ9�GØ $§¡¨tÓ 4‘Ið ô Ø&ØBÐ-ÐB¨y¸'ÑBôó ð
 �fŠ_Ø% iÑ0°Ñ=¸oÔN�Ø $ ZÑ 0�ÜØ!%§¡°Ó!5ØCÐ 1ÐC°]ÐCôó ñ Oð �fŠ_Ø×0Ñ0Ø+¨IÑ6°{ÑCØ"3ð 1ó ÷ ñ ô Ø�u�gð Ø×+Ñ+Ð,¨Að/óð ð
 ×ÒØ& yÑ1°(Ô;�Ø)-¯©¸Ó)?Ñ&�
˜JÜØ!+ðØ 
Ñ+ðà 'Ø(2òôó ð <ð (¨Ô6ˆJØ×+Ñ+Ø(Ø—j‘jØ%+¨\Ð$:ð ,ó ÷ ñ ñ 7ð/øð0ús%   ‚D"GÄ$F?Ä%BGÆ7GÆ8GÇGrl   c           
      ól  — d}|d   D ]1  }|D ]%  }|dj                  d„ |d   D «       «      z  }|dz  }Œ' |dz  }Œ3 d}|d   D ]g  }|d	z  }|D ]V  }dj                  d
„ |d   D «       «      }t        j                  |«      }|dz  }|d   r|dz  }|d|d   › d|d   › d|› d�z  }ŒX |dz  }Œi |dz  }||fS )z.Get text and HTML representation of the table.rj   ÚcellsÚ c              3   ó&   K  — | ]	  }|d    –— Œ y­w©rX   NrQ   ©Ú.0r&   s     r7   Ú	<genexpr>z-DedocBaseLoader._get_table.<locals>.<genexpr>  s   è ø€ Ð&NÁ¸ t¨F¥|Áùó   ‚ÚlinesÚ	rV   zK<table border="1" style="border-collapse: collapse; width: 100%;">
<tbody>
z<tr>
c              3   ó&   K  — | ]	  }|d    –— Œ y­wr{   rQ   r|   s     r7   r~   z-DedocBaseLoader._get_table.<locals>.<genexpr>  s   è ø€ Ð%M¹}°t d¨6¥l¹}ùr   z<tdÚ	invisiblez style="display: none" z
 colspan="Úcolspanz" rowspan="Úrowspanz">z</td>
z</tr>
z</tbody>
</table>)rY   ÚhtmlÚescape)r%   rl   ru   ÚrowÚcellrv   Ú	cell_texts          r7   rq   zDedocBaseLoader._get_tableþ   s  € àˆ
Ø˜”>ˆCÛ�Ø˜cŸh™hÑ&NÀÀWÂÓ&NÓNÑN�
Ø˜dÑ"‘
ð ð ˜$Ñ‰Jð	 "ðð 	ð ˜”>ˆCØ˜(Ñ"ˆJÛ�Ø ŸI™IÑ%M¸tÀGº}Ó%MÓM�	Ü ŸK™K¨	Ó2�	Ø˜eÑ#�
Ø˜Ò$ØÐ";Ñ;�JØØ   i¡Ð 1ð 2Ø˜Y™Ð(¨¨9¨+°Wð>ñ‘
ð ð ˜)Ñ#‰Jð "ð 	Ð*Ñ*ˆ
à˜:Ð%Ð%rS   ©N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚstrÚboolr	   Úintr   r8   r   r
   rO   r   rL   rE   rZ   rd   rJ   r   rq   rQ   rS   r7   r   r      sà  „ ñð(  Ø Ø-2Ø*,Ø#/Ø!ØØ&,Ø$*Ø8=Ø.3Ø48Ø#'Ø"&ò#RLàðRLð ð	RLð
 ðRLð    T 	Ñ*ðRLð %(ðRLð !ðRLð ðRLð ðRLð !$ðRLð "ðRLð &+¨3°¨9Ñ%5ðRLð !  d Ñ+ðRLð "' s¨D yÑ!1ðRLð  ˜C‘=ð!RLð" ˜3‘-ð#RLð$ 
ó%RLðh
˜8 HÑ-ó 
ð, ð˜dò ó ðð 4ð ¨Có ðØ!ðØ6:ðà	�(Ñ	óð& /3ñ	IàðIð ðIð & d™^ð	Ið
 
�(Ñ	óIðV& ð &¨¨s°C¨x©ô &rS   r   c                   ó   — e Zd ZdZdefd„Zy)ÚDedocFileLoaderaw  
    DedocFileLoader document loader integration to load files using `dedoc`.

    The file loader automatically detects the file type (with the correct extension).
    The list of supported file types is gives at
    https://dedoc.readthedocs.io/en/latest/index.html#id1.
    Please see the documentation of DedocBaseLoader to get more details.

    Setup:
        Install ``dedoc`` package.

        .. code-block:: bash

            pip install -U dedoc

    Instantiate:
        .. code-block:: python

            from langchain_community.document_loaders import DedocFileLoader

            loader = DedocFileLoader(
                file_path="example.pdf",
                # split=...,
                # with_tables=...,
                # pdf_with_text_layer=...,
                # pages=...,
                # ...
            )

    Load:
        .. code-block:: python

            docs = loader.load()
            print(docs[0].page_content[:100])
            print(docs[0].metadata)

        .. code-block:: python

            Some text
            {
                'file_name': 'example.pdf',
                'file_type': 'application/pdf',
                # ...
            }

    Lazy load:
        .. code-block:: python

            docs = []
            docs_lazy = loader.lazy_load()

            for doc in docs_lazy:
                docs.append(doc)
            print(docs[0].page_content[:100])
            print(docs[0].metadata)

        .. code-block:: python

            Some text
            {
                'file_name': 'example.pdf',
                'file_type': 'application/pdf',
                # ...
            }
    r#   c                 ó`   — ddl m}  || j                  | j                  | j                  ¬«      S )Nr   )Úmake_manager_config)r"   Úparsing_paramsr   )Údedoc.utils.langchainr–   r"   r2   r   )r%   r–   s     r7   rE   zDedocFileLoader._make_config`  s)   € Ý=á"Ø—n‘nØ×2Ñ2Ø—*‘*ô
ð 	
rS   N)rŒ   r�   rŽ   r�   rL   rE   rQ   rS   r7   r”   r”     s   „ ñ@ðD
˜dô 
rS   r”   c            #       ó
  ‡ — e Zd ZdZdddddddd	d
d
ddddddœdededededeeef   dededededededeeef   deeef   deeef   dee   dee   ddf"ˆ fd„Z	de
e   fd„Zdefd „Zdeded!edeeeeeef   f   fd"„Zˆ xZS )#ÚDedocAPIFileLoaderaU  
    Load files using `dedoc` API.
    The file loader automatically detects the file type (even with the wrong extension).
    By default, the loader makes a call to the locally hosted `dedoc` API.
    More information about `dedoc` API can be found in `dedoc` documentation:
        https://dedoc.readthedocs.io/en/latest/dedoc_api_usage/api.html

    Please see the documentation of DedocBaseLoader to get more details.

    Setup:
        You don't need to install `dedoc` library for using this loader.
        Instead, the `dedoc` API needs to be run.
        You may use Docker container for this purpose.
        Please see `dedoc` documentation for more details:
            https://dedoc.readthedocs.io/en/latest/getting_started/installation.html#install-and-run-dedoc-using-docker

        .. code-block:: bash

            docker pull dedocproject/dedoc
            docker run -p 1231:1231

    Instantiate:
        .. code-block:: python

            from langchain_community.document_loaders import DedocAPIFileLoader

            loader = DedocAPIFileLoader(
                file_path="example.pdf",
                # url=...,
                # split=...,
                # with_tables=...,
                # pdf_with_text_layer=...,
                # pages=...,
                # ...
            )

    Load:
        .. code-block:: python

            docs = loader.load()
            print(docs[0].page_content[:100])
            print(docs[0].metadata)

        .. code-block:: python

            Some text
            {
                'file_name': 'example.pdf',
                'file_type': 'application/pdf',
                # ...
            }

    Lazy load:
        .. code-block:: python

            docs = []
            docs_lazy = loader.lazy_load()

            for doc in docs_lazy:
                docs.append(doc)
            print(docs[0].page_content[:100])
            print(docs[0].metadata)

        .. code-block:: python

            Some text
            {
                'file_name': 'example.pdf',
                'file_type': 'application/pdf',
                # ...
            }
    zhttp://0.0.0.0:1231r   TFr   r   r   r   r   N)Úurlr   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r›   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r#   c                ón   •— t         ‰| �  ||||||||	|
||||||¬«       || _        d| j                  d<   y)a¬
  Initialize with file path, API url and parsing parameters.

        Args:
            file_path: path to the file for processing
            url: URL to call `dedoc` API
            split: type of document splitting into parts (each part is returned
                separately), default value "document"
                "document": document is returned as a single langchain Document object
                    (don't split)
                "page": split document into pages (works for PDF, DJVU, PPTX, PPT, ODP)
                "node": split document into tree nodes (title nodes, list item nodes,
                    raw text nodes)
                "line": split document into lines
            with_tables: add tables to the result - each table is returned as a single
                langchain Document object

            Parameters used for document parsing via `dedoc`
                (https://dedoc.readthedocs.io/en/latest/parameters/parameters.html):

                with_attachments: enable attached files extraction
                recursion_deep_attachments: recursion level for attached files
                    extraction, works only when with_attachments==True
                pdf_with_text_layer: type of handler for parsing PDF documents,
                    available options
                    ["true", "false", "tabby", "auto", "auto_tabby" (default)]
                language: language of the document for PDF without a textual layer and
                    images, available options ["eng", "rus", "rus+eng" (default)],
                    the list of languages can be extended, please see
                    https://dedoc.readthedocs.io/en/latest/tutorials/add_new_language.html
                pages: page slice to define the reading range for parsing PDF documents
                is_one_column_document: detect number of columns for PDF without
                    a textual layer and images, available options
                    ["true", "false", "auto" (default)]
                document_orientation: fix document orientation (90, 180, 270 degrees)
                    for PDF without a textual layer and images, available options
                    ["auto" (default), "no_change"]
                need_header_footer_analysis: remove headers and footers from the output
                    result for parsing PDF and images
                need_binarization: clean pages background (binarize) for PDF without a
                    textual layer and images
                need_pdf_table_analysis: parse tables for PDF without a textual layer
                    and images
                delimiter: column separator for CSV, TSV files
                encoding: encoding of TXT, CSV, TSV
        )r"   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   ÚjsonÚreturn_formatN)Úsuperr8   r›   r2   )r%   r"   r›   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   Ú	__class__s                    €r7   r8   zDedocAPIFileLoader.__init__´  s^   ø€ ôB 	‰ÑØØØ#Ø-Ø'AØ 3ØØØ#9Ø!5Ø(CØ/Ø$;ØØð 	ô 	
ð" ˆŒØ39ˆ×Ñ Ò0rS   c              #   ó¾   K  — | j                  | j                  | j                  | j                  ¬«      }| j	                  || j
                  ¬«      E d{  –—†  y7 Œ­w)r:   )r›   r"   r?   r@   N)Ú
_send_filer›   r"   r2   rJ   r   )r%   Údoc_trees     r7   rO   zDedocAPIFileLoader.lazy_load	  sM   è ø€ à—?‘?Ø—‘ D§N¡N¸t×?VÑ?Vð #ó 
ˆð ×'Ñ'°hÀdÇjÁjÐ'ÓQ×QÒQús   ‚AAÁAÁAc                 ó   — i S r‹   rQ   rR   s    r7   rE   zDedocAPIFileLoader._make_config  s   € Øˆ	rS   r?   c                 óŒ  — ddl }t        j                  j                  |«      }t	        |d«      5 }d||fi}|j                  |› d�||¬«      }ddd«       j                  dk7  r&t        d|j                  j                  «       › �«      ‚t        j                  |j                  j                  «       «      }	|	S # 1 sw Y   ŒmxY w)	z7Send POST-request to `dedoc` API and return the resultsr   NÚrbÚfilez/upload)ÚfilesÚdataéÈ   zError during file handling: )ÚrequestsÚosÚpathÚbasenameÚopenÚpostÚstatus_coder4   rg   Údecoder�   Úloads)
r%   r›   r"   r?   r«   Ú	file_namer§   r¨   ÚrÚresults
             r7   r¢   zDedocAPIFileLoader._send_file  s­   € ó 	ä—G‘G×$Ñ$ YÓ/ˆ	Ü�)˜TÔ" dØ˜i¨Ð.Ð/ˆEØ—‘   W˜o°UÀ�ÓLˆA÷ #ð �=‰=˜CÒÜÐ;¸A¿I¹I×<LÑ<LÓ<NÐ;OÐPÓQÐQä—‘˜AŸI™I×,Ñ,Ó.Ó/ˆØˆ÷ #Ð"ús   °B:Â:C)rŒ   r�   rŽ   r�   r�   r‘   r	   r’   r   r8   r   r
   rO   rL   rE   r   Úlistr¢   Ú__classcell__)r    s   @r7   rš   rš   j  s~  ø„ ñGðZ )ØØ Ø-2Ø*,Ø#/Ø!ØØ&,Ø$*Ø8=Ø.3Ø48Ø#'Ø"&ò%S:àðS:ð ð	S:ð
 ðS:ð ðS:ð    T 	Ñ*ðS:ð %(ðS:ð !ðS:ð ðS:ð ðS:ð !$ðS:ð "ðS:ð &+¨3°¨9Ñ%5ðS:ð !  d Ñ+ðS:ð  "' s¨D yÑ!1ð!S:ð" ˜C‘=ð#S:ð$ ˜3‘-ð%S:ð& 
õ'S:ðjR˜8 HÑ-ó Rð˜dó ðØðØ#&ðØ48ðà	ˆc�5˜˜t S˜Ñ)Ð)Ñ	*÷rS   rš   )r†   r�   r¬   Úabcr   r   Útypingr   r   r   r   r	   Úlangchain_core.documentsr
   Ú)langchain_community.document_loaders.baser   r   r”   rš   rQ   rS   r7   Ú<module>r½      sQ   ðÛ Û Û 	ß #÷õ õ .å @ôH&�j #ô H&ôVJ
�oô J
ôZx˜õ xrS   