Ë
    µŒjw#  ã                  ó¸   — d dl m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 d dlmZ d dlmZ er
d dlZd dlmZ dd„Z G d	„ d
e«      Zdd„Z G d„ de«      ZeZy)é    )ÚannotationsN)ÚPath)ÚTYPE_CHECKINGÚDictÚListÚOptionalÚUnion)ÚDocument)Ú
BaseLoader)Ú
EntityLikec                ó6   — | d   }| d   }| d   }|› d|› d|› d�S )zBCombine message information in a readable format ready to be used.ÚdateÚfromÚtextz on z: ú

© )Úrowr   Úsenderr   s       úw/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/document_loaders/telegram.pyÚconcatenate_rowsr      s6   € àˆv‰;€DØ�‰[€FØˆv‰;€DØˆX�T˜$˜˜r $  tÐ,Ð,ó    c                  ó    — e Zd ZdZdd„Zdd„Zy)ÚTelegramChatFileLoaderzLoad from `Telegram chat` dump.c                ó   — || _         y)zInitialize with a path.N)Ú	file_path)ÚselfÚpaths     r   Ú__init__zTelegramChatFileLoader.__init__   s	   € àˆ�r   c                ó  — t        | j                  «      }t        |d¬«      5 }t        j                  |«      }ddd«       dj                  d„ d   D «       «      }dt        |«      i}t        ||¬«      gS # 1 sw Y   Œ?xY w)	úLoad documents.Úutf8©ÚencodingNÚ c              3  óh   K  — | ]*  }|d    dk(  r t        |d   t        «      rt        |«      –— Œ, y­w)ÚtypeÚmessager   N)Ú
isinstanceÚstrr   )Ú.0r'   s     r   Ú	<genexpr>z.TelegramChatFileLoader.load.<locals>.<genexpr>'   s6   è ø€ ð 
á(�Ø�v‰ )Ò+´
¸7À6¹?ÌCÔ0Pô ˜W×%Ù(ùs   ‚02ÚmessagesÚsource©Úpage_contentÚmetadata)r   r   ÚopenÚjsonÚloadÚjoinr)   r
   )r   ÚpÚfÚdr   r0   s         r   r3   zTelegramChatFileLoader.load    sx   € ä�—‘Ó ˆä�!˜fÕ%¨Ü—	‘	˜!“ˆA÷ &ð �w‰wñ 
à˜Zš=ó
ó 
ˆð
 œc !›fÐ%ˆä d°XÔ>Ð?Ð?÷ &Ð%ús   £A7Á7B N)r   zUnion[str, Path]©ÚreturnúList[Document])Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r3   r   r   r   r   r      s   „ Ù)óô@r   r   c                óþ  — ddl m}  |dg d¢d¬«      }t        | t        «      r| g} | D �cg c]  }t	        |¬«      ‘Œ }}t        |«      D ]  \  }}|dz   |j                  d	<   Œ g }|D ]Œ  }|j                  |j                  «      }t        |«      D ]a  \  }}	t	        |	|j                  d	   |d
œ¬«      }|j                  d	   › d|j                  d   › �|j                  d<   |j                  |«       Œc ŒŽ |S c c}w )zIConvert a string or list of strings to a list of Documents with metadata.r   )ÚRecursiveCharacterTextSplitteri   )r   Ú
Ú.Ú!Ú?Ú,Ú r$   é   )Ú
chunk_sizeÚ
separatorsÚchunk_overlap)r/   é   Úpage)rL   Úchunkr.   Ú-rM   r-   )
Úlangchain_text_splittersr@   r(   r)   r
   Ú	enumerater0   Ú
split_textr/   Úappend)
r   r@   Útext_splitterrL   Ú	page_docsÚiÚdocÚ
doc_chunksÚchunksrM   s
             r   Útext_to_docsrY   1   s  € åGá2ØÚ>Øô€Mô �$œÔàˆvˆÙ9=Ó>¹°” tÖ,¸€IÐ>ô ˜IÖ&‰ˆˆ3Ø  1™uˆ�‰�VÒð 'ð €JãˆØ×)Ñ)¨#×*:Ñ*:Ó;ˆÜ! &Ö)‰HˆAˆuÜØ"°c·l±lÀ6Ñ6JÐUVÑ-WôˆCð ),¯©°VÑ(<Ð'=¸Q¸s¿|¹|ÈGÑ?TÐ>UÐ%VˆC�L‰L˜Ñ"Ø×Ñ˜cÕ"ñ *ð ð Ðùò% ?s   «C:c                  ób   — e Zd ZdZ	 	 	 	 	 d	 	 	 	 	 	 	 	 	 d	d„Zd
d„Zdd„Z	 	 	 	 	 	 dd„Zdd„Zy)ÚTelegramChatApiLoaderz)Load `Telegram` chat json directory dump.Nc                óJ   — || _         || _        || _        || _        || _        y)aI  Initialize with API parameters.

        Args:
            chat_entity: The chat entity to fetch data from.
            api_id: The API ID.
            api_hash: The API hash.
            username: The username.
            file_path: The file path to save the data to. Defaults to
                 "telegram_data.json".
        N)Úchat_entityÚapi_idÚapi_hashÚusernamer   )r   r]   r^   r_   r`   r   s         r   r   zTelegramChatApiLoader.__init__V   s(   € ð$ 'ˆÔØˆŒØ ˆŒØ ˆŒØ"ˆ�r   c              ƒ  ó˜  K  — ddl m} g } || j                  | j                  | j                  «      4 ƒd{  –—† }|j                  | j                  «      2 3 d{  –—† }|j                  du}|r|j                  j                  nd}|j                  |j                  |j                  |j                  j                  «       |j                  ||dœ«       Œ€7 ŒŸ7 Œ}6 ddd«      ƒd{  –—†7   n# 1 ƒd{  –—†7  sw Y   nxY wt        | j                   dd¬«      5 }t#        j$                  ||dd	¬
«       ddd«       y# 1 sw Y   yxY w­w)z8Fetch data from Telegram API and save it as a JSON file.r   )ÚTelegramClientN)Ú	sender_idr   r   ú
message.idÚis_replyÚreply_to_idÚwzutf-8r"   Fé   )Úensure_asciiÚindent)Útelethon.syncrb   r`   r^   r_   Úiter_messagesr]   Úreply_toÚreply_to_msg_idrR   rc   r   r   Ú	isoformatÚidr1   r   r2   Údump)r   rb   ÚdataÚclientr'   re   rf   r6   s           r   Úfetch_data_from_telegramz.TelegramChatApiLoader.fetch_data_from_telegramn   sÿ   è ø€ å0àˆÙ! $§-¡-°·±¸d¿m¹m×LÔLÐPVØ!'×!5Ñ!5°d×6FÑ6FÔ!G÷ �gØ"×+Ñ+°4Ð7�ÙBJ˜g×.Ñ.×>Ò>ÐPT�Ø—‘à%,×%6Ñ%6Ø '§¡Ø '§¡× 6Ñ 6Ó 8Ø&-§j¡jØ$,Ø'2ñõ	ð	 MøðøÐ!G÷ M×L×L×LÓLúô �$—.‘. #°Õ8¸AÜ�I‰I�d˜A¨E¸!Õ<÷ 9×8Ñ8üs�   ‚5E
·C¸E
»C.ÁCÁCÁCÁA8C.ÃE
ÃCÃC.ÃE
Ã'C*Ã(E
Ã.D Ã4C7Ã5D Ã<E
ÄD>Ä5	E
Ä>EÅE
c           	     óÔ   ‡— dˆfd„Š||d       }||d      j                  dg¬«      }|d   j                  t        «      |d<   |d   D �ci c]  }||g ‰||«      z   “Œ }}|S c c}w )a
  Create a dictionary of message threads from the given data.

        Args:
            data (pd.DataFrame): A DataFrame containing the conversation                 data with columns:
                - message.sender_id
                - text
                - date
                - message.id
                - is_reply
                - reply_to_id

        Returns:
            dict: A dictionary where the key is the parent message ID and                 the value is a list of message IDs in ascending order.
        c                ór   •— ||d   | k(     d   j                  «       }g }|D ]  }||g ‰||«      z   z  }Œ |S )a^  
            Recursively find all replies to a given parent message ID.

            Args:
                parent_id (int): The parent message ID.
                reply_data (pd.DataFrame): A DataFrame containing reply messages.

            Returns:
                list: A list of message IDs that are replies to the parent message ID.
            rf   rd   )Útolist)Ú	parent_idÚ
reply_dataÚdirect_repliesÚall_repliesÚreply_idÚfind_repliess        €r   r}   z@TelegramChatApiLoader._get_message_threads.<locals>.find_replies—   s\   ø€ ð (¨
°=Ñ(AÀYÑ(NÑOØñç‰f‹hð ð
 ˆKÛ*�Ø ˜z©L¸À:Ó,NÑNÑN‘ð +ð Ðr   re   rf   )Úsubsetrd   )rx   Úintry   úpd.DataFramer9   z	List[int])ÚdropnaÚastyper   )r   rr   Úparent_messagesÚreply_messagesrx   Úmessage_threadsr}   s         @r   Ú_get_message_threadsz*TelegramChatApiLoader._get_message_threads…   s    ø€ õ$	ð0   ZÑ 0Ð0Ñ1ˆð ˜d :Ñ.Ñ/×6Ñ6¸}¸oÐ6ÓNˆð )7°}Ñ(E×(LÑ(LÌSÓ(Qˆ�}Ñ%ð -¨\Ò:ó
á:�	ð ˜	�{¡\°)¸^Ó%LÑLÑLØ:ð 	ð 
ð
 Ðùò
s   ÁA%c                ó.  — d}|j                  «       D ]l  \  }}||d   j                  |«         j                  d¬«      d   j                  «       }|D �cg c]  }t	        |«      ‘Œ }}|dj                  |«      dz   z  }Œn |j                  «       S c c}w )aw  
        Combine the message texts for each parent message ID based             on the list of message threads.

        Args:
            message_threads (dict): A dictionary where the key is the parent message                 ID and the value is a list of message IDs in ascending order.
            data (pd.DataFrame): A DataFrame containing the conversation data:
                - message.sender_id
                - text
                - date
                - message.id
                - is_reply
                - reply_to_id

        Returns:
            str: A combined string of message texts sorted by date.
        r$   rd   r   )Úbyr   rF   z.
)ÚitemsÚisinÚsort_valuesrw   r)   r4   Ústrip)r   r…   rr   Úcombined_textrx   Úmessage_idsÚmessage_textsÚelems           r   Ú_combine_message_textsz,TelegramChatApiLoader._combine_message_textsÀ   s¨   € ð* ˆð '6×&;Ñ&;Ö&=Ñ"ˆI�{ð �T˜,Ñ'×,Ñ,¨[Ó9Ñ:ß‘ �Ó'¨ñ0ç‘“ð ñ
 4AÓA±=¨4œS �Y°=ˆMÐAð ˜SŸX™X mÓ4°uÑ<Ñ<‰Mð '>ð ×"Ñ"Ó$Ð$ùò Bs   ÁBc                ó0  — | j                   �8	 ddl}|j                  «        t        j                  | j                  «       «       t        | j                  «      }t        |d¬«      5 }t        j                  |«      }ddd«       	 ddl} |j                  «      } |j                  |«      }| j                  |«      }| j!                  ||«      }	t#        |	«      S # t        $ r t        d«      ‚w xY w# 1 sw Y   ŒxxY w# t        $ r t        d«      ‚w xY w)r    Nr   zy`nest_asyncio` package not found.
                    please install with `pip install nest_asyncio`
                    r!   r"   zf`pandas` package not found. 
                please install with `pip install pandas`
                )r]   Únest_asyncioÚapplyÚasyncioÚrunrt   ÚImportErrorr   r   r1   r2   r3   ÚpandasÚjson_normalizeÚ	DataFramer†   r‘   rY   )
r   r“   r5   r6   r7   ÚpdÚnormalized_messagesÚdfr…   Úcombined_textss
             r   r3   zTelegramChatApiLoader.loadæ   s  € ð ×ÑÐ'ð
Û#à×"Ñ"Ô$Ü—‘˜D×9Ñ9Ó;Ô<ô �—‘Ó ˆä�!˜fÕ%¨Ü—	‘	˜!“ˆA÷ &ð	Ûð 0˜b×/Ñ/°Ó2ÐØˆR�\‰\Ð-Ó.ˆà×3Ñ3°BÓ7ˆØ×4Ñ4°_ÀbÓIˆä˜NÓ+Ð+øô3 ò Ü!ðóð ðú÷ &Ð%ûô ò 	Üðóð ð	ús#   Ž7C Á'C4ÂD  ÃC1Ã4C=Ä D)NNNNztelegram_data.json)
r]   zOptional[EntityLike]r^   zOptional[int]r_   úOptional[str]r`   rŸ   r   r)   )r9   ÚNone)rr   r€   r9   Údict)r…   zDict[int, List[int]]rr   r€   r9   r)   r8   )	r;   r<   r=   r>   r   rt   r†   r‘   r3   r   r   r   r[   r[   S   sy   „ Ù3ð -1Ø $Ø"&Ø"&Ø-ð#à)ð#ð ð#ð  ð	#ð
  ð#ð ó#ó0=ó.9ðv$%Ø3ð$%Ø;Gð$%à	ó$%ôL",r   r[   )r   r¡   r9   r)   )r   zUnion[str, List[str]]r9   r:   )Ú
__future__r   r•   r2   Úpathlibr   Útypingr   r   r   r   r	   Úlangchain_core.documentsr
   Ú)langchain_community.document_loaders.baser   r˜   r›   Útelethon.hintsr   r   r   rY   r[   ÚTelegramChatLoaderr   r   r   Ú<module>r©      sV   ðÝ "ã Û Ý ß =Õ =å -å @áÛÝ)ó-ô@˜Zô @ó0ôDu,˜Jô u,ðr ,Ñ r   