Ë
    ´Œj2  ã                  ó^  — d dl mZ d dlZd dlZd dl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 d dlmZmZ d dlmZ erd d	lmZmZmZ d d
lmZ  ej<                  e«      Z  edd¬«      Z! G d„ dee«      Z" G d„ de"«      Z# G d„ de$e
«      Z% ed¬«       G d„ d«      «       Z&dd„Z'y)é    )ÚannotationsN)ÚABCÚabstractmethod)Ú	dataclass)ÚEnum)ÚTYPE_CHECKINGÚAnyÚCallableÚLiteralÚOptionalÚTypeVarÚUnion)ÚBaseDocumentTransformerÚDocument)ÚSelf)Ú
CollectionÚIterableÚSequence)ÚSetÚTSÚTextSplitter)Úboundc                  óâ   — e Zd ZdZddedddf	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Zedd„«       Z	 d	 	 	 	 	 dd	„Zdd
„Z	dd„Z
dd„Zedd„«       Zedd e«       df	 	 	 	 	 	 	 	 	 	 	 dd„«       Z	 	 	 	 	 	 dd„Zy)r   z)Interface for splitting text into chunks.i   éÈ   FTc                óÞ   — |dk  rd|› �}t        |«      ‚|dk  rd|› �}t        |«      ‚||kD  rd|› d|› d�}t        |«      ‚|| _        || _        || _        || _        || _        || _        y)ad  Create a new TextSplitter.

        Args:
            chunk_size: Maximum size of chunks to return
            chunk_overlap: Overlap in characters between chunks
            length_function: Function that measures the length of given chunks
            keep_separator: Whether to keep the separator and where to place it
                            in each corresponding chunk (True='start')
            add_start_index: If `True`, includes chunk's start index in metadata
            strip_whitespace: If `True`, strips whitespace from the start and end of
                              every document
        r   zchunk_size must be > 0, got z chunk_overlap must be >= 0, got zGot a larger chunk overlap (z) than chunk size (z), should be smaller.N)Ú
ValueErrorÚ_chunk_sizeÚ_chunk_overlapÚ_length_functionÚ_keep_separatorÚ_add_start_indexÚ_strip_whitespace)ÚselfÚ
chunk_sizeÚchunk_overlapÚlength_functionÚkeep_separatorÚadd_start_indexÚstrip_whitespaceÚmsgs           úg/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_text_splitters/base.pyÚ__init__zTextSplitter.__init__!   s¡   € ð* ˜Š?Ø0°°Ð=ˆCÜ˜S“/Ð!Ø˜1ÒØ4°]°OÐDˆCÜ˜S“/Ð!Ø˜:Ò%à.¨}¨oð >Ø�<Ð4ð6ð ô ˜S“/Ð!Ø%ˆÔØ+ˆÔØ /ˆÔØ-ˆÔØ /ˆÔØ!1ˆÕó    c                 ó   — y)z$Split text into multiple components.N© )r#   Útexts     r+   Ú
split_textzTextSplitter.split_textI   s   � r-   Nc           	     óŠ  — |xs i gt        |«      z  }g }t        |«      D ]Ÿ  \  }}d}d}| j                  |«      D ]‚  }	t        j                  ||   «      }
| j
                  r>||z   | j                  z
  }|j                  |	t        d|«      «      }||
d<   t        |	«      }t        |	|
¬«      }|j                  |«       Œ„ Œ¡ |S )z&Create documents from a list of texts.r   Ústart_index)Úpage_contentÚmetadata)ÚlenÚ	enumerater1   ÚcopyÚdeepcopyr!   r   ÚfindÚmaxr   Úappend)r#   ÚtextsÚ	metadatasÚ
_metadatasÚ	documentsÚir0   ÚindexÚprevious_chunk_lenÚchunkr5   ÚoffsetÚnew_docs                r+   Úcreate_documentszTextSplitter.create_documentsM   sÌ   € ð Ò3 2 $¬¨U«Ñ"3ˆ
Øˆ	Ü  Ö'‰GˆAˆtØˆEØ!"ÐØŸ™¨Ö.�ÜŸ=™=¨°A©Ó7�Ø×(Ò(Ø"Ð%7Ñ7¸$×:MÑ:MÑM�FØ ŸI™I e¬S°°F«^Ó<�EØ.3�H˜]Ñ+Ü),¨U«Ð&Ü"°ÀÔI�Ø× Ñ  Õ)ñ /ð (ð Ðr-   c                óª   — g g }}|D ]8  }|j                  |j                  «       |j                  |j                  «       Œ: | j                  ||¬«      S )zSplit documents.)r>   )r<   r4   r5   rG   )r#   r@   r=   r>   Údocs        r+   Úsplit_documentszTextSplitter.split_documentsa   sQ   € à˜rˆyˆÛˆCØ�L‰L˜×)Ñ)Ô*Ø×Ñ˜SŸ\™\Õ*ð ð ×$Ñ$ U°iÐ$Ó@Ð@r-   c                ól   — |j                  |«      }| j                  r|j                  «       }|dk(  ry |S )NÚ )Újoinr"   Ústrip)r#   ÚdocsÚ	separatorr0   s       r+   Ú
_join_docszTextSplitter._join_docsi   s3   € Ø�~‰~˜dÓ#ˆØ×!Ò!Ø—:‘:“<ˆDØ�2Š:ØØˆr-   c                ód  — | j                  |«      }g }g }d}|D �]m  }| j                  |«      }||z   t        |«      dkD  r|ndz   | j                  kD  �r
|| j                  kD  r%t        j	                  d|› d| j                  › �«       t        |«      dkD  rÈ| j                  ||«      }	|	�|j                  |	«       || j                  kD  s*||z   t        |«      dkD  r|ndz   | j                  kD  ro|dkD  rj|| j                  |d   «      t        |«      dkD  r|ndz   z  }|dd  }|| j                  kD  rŒ?||z   t        |«      dkD  r|ndz   | j                  kD  r|dkD  rŒj|j                  |«       ||t        |«      dkD  r|ndz   z  }�Œp | j                  ||«      }	|	�|j                  |	«       |S )Nr   zCreated a chunk of size z%, which is longer than the specified é   )r   r6   r   ÚloggerÚwarningrQ   r<   r   )
r#   ÚsplitsrP   Úseparator_lenrO   Úcurrent_docÚtotalÚdÚ_lenrI   s
             r+   Ú_merge_splitszTextSplitter._merge_splitsq   sâ  € ð ×-Ñ-¨iÓ8ˆàˆØ!#ˆØˆÜˆAØ×(Ñ(¨Ó+ˆDà˜‘´°[Ó1AÀAÒ1E¡È1ÑMØ×"Ñ"ó#ð ˜4×+Ñ+Ò+Ü—N‘NØ2°5°'ð :>Ø>B×>NÑ>NÐ=OðQôô �{Ó# aÒ'ØŸ/™/¨+°yÓA�CØ�ØŸ™ CÔ(ð   $×"5Ñ"5Ò5Ø ™¼¸[Ó9IÈAÒ9M©ÐSTÑUØ×*Ñ*ò+à! AšIà ×!6Ñ!6°{À1±~Ó!FÜ-0°Ó-=ÀÒ-A™MÀqñ"ñ ˜ð '2°!°" o˜ð   $×"5Ñ"5Ó5Ø ™¼¸[Ó9IÈAÒ9M©ÐSTÑUØ×*Ñ*ò+à! A›Ið ×Ñ˜qÔ!Ø�T¬c°+Ó.>ÀÒ.B™]ÈÑJÑJŠEð9 ð: �o‰o˜k¨9Ó5ˆØˆ?Ø�K‰K˜ÔØˆr-   c                ó¢   ‡— 	 ddl m} t        ‰|«      sd}t        |«      ‚dˆfd„} | d	d|i|¤ŽS # t        $ r}d}t        |«      |‚d}~ww xY w)
z>Text splitter that uses HuggingFace tokenizer to count length.r   )ÚPreTrainedTokenizerBasezATokenizer received was not an instance of PreTrainedTokenizerBasec                ó8   •— t        ‰j                  | «      «      S ©N)r6   Útokenize©r0   Ú	tokenizers    €r+   Ú_huggingface_tokenizer_lengthzNTextSplitter.from_huggingface_tokenizer.<locals>._huggingface_tokenizer_length§   s   ø€ Ü˜9×-Ñ-¨dÓ3Ó4Ð4r-   z`Could not import transformers python package. Please install it with `pip install transformers`.Nr&   ©r0   ÚstrÚreturnÚintr/   )Ú$transformers.tokenization_utils_baser^   Ú
isinstancer   ÚImportError)Úclsrc   Úkwargsr^   r*   rd   Úerrs    `     r+   Úfrom_huggingface_tokenizerz'TextSplitter.from_huggingface_tokenizer›   sp   ø€ ð	+ÝTä˜iÐ)@ÔAàWð ô ! “oÐ%õ5ñ ÑKÐ#@ÐKÀFÑKÐKøô ò 	+ðEð ô ˜S“/ sÐ*ûð	+ús   ƒ%2 ²	A»A	Á	AÚgpt2Úallc                óø   ‡‡‡— 	 ddl }|�|j                  |«      Šn|j                  |«      Šdˆˆˆfd„}	t	        | t
        «      r||‰‰dœ}
i |¥|
¥} | dd|	i|¤ŽS # t        $ r}d}t        |«      |‚d}~ww xY w)	z9Text splitter that uses tiktoken encoder to count length.r   Nz”Could not import tiktoken python package. This is needed in order to calculate max_tokens_for_prompt. Please install it with `pip install tiktoken`.c                ó>   •— t        ‰j                  | ‰‰¬«      «      S ©N)Úallowed_specialÚdisallowed_special)r6   Úencode)r0   ru   rv   Úencs    €€€r+   Ú_tiktoken_encoderz=TextSplitter.from_tiktoken_encoder.<locals>._tiktoken_encoderË   s*   ø€ ÜØ—
‘
ØØ$3Ø'9ð ó óð r-   )Úencoding_nameÚ
model_nameru   rv   r&   re   r/   )Útiktokenrk   Úencoding_for_modelÚget_encodingÚ
issubclassÚTokenTextSplitter)rl   rz   r{   ru   rv   rm   r|   rn   r*   ry   Úextra_kwargsrx   s      ``      @r+   Úfrom_tiktoken_encoderz"TextSplitter.from_tiktoken_encoder²   s©   ú€ ð	,Ûð Ð!Ø×-Ñ-¨jÓ9‰Cà×'Ñ'¨Ó6ˆC÷	ô �cÔ,Ô-à!.Ø(Ø#2Ø&8ñ	ˆLð 0˜Ð/ ,Ð/ˆFáÑ?Ð#4Ð?¸Ñ?Ð?øô? ò 	,ðAð ô
 ˜cÓ"¨Ð+ûð	,ús   …A Á	A9Á&A4Á4A9c                ó6   — | j                  t        |«      «      S )z2Transform sequence of documents by splitting them.)rJ   Úlist)r#   r@   rm   s      r+   Útransform_documentsz TextSplitter.transform_documentsß   s   € ð ×#Ñ#¤D¨£OÓ4Ð4r-   )r$   rh   r%   rh   r&   zCallable[[str], int]r'   z$Union[bool, Literal['start', 'end']]r(   Úboolr)   r†   rg   ÚNone©r0   rf   rg   ú	list[str]r`   )r=   r‰   r>   zOptional[list[dict[Any, Any]]]rg   úlist[Document])r@   zIterable[Document]rg   rŠ   )rO   r‰   rP   rf   rg   úOptional[str])rV   zIterable[str]rP   rf   rg   r‰   )rc   r	   rm   r	   rg   r   )rz   rf   r{   r‹   ru   ú'Union[Literal['all'], AbstractSet[str]]rv   ú&Union[Literal['all'], Collection[str]]rm   r	   rg   r   )r@   úSequence[Document]rm   r	   rg   rŽ   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r6   r,   r   r1   rG   rJ   rQ   r\   Úclassmethodro   Úsetr‚   r…   r/   r-   r+   r   r      sH  „ Ù3ð Ø Ø03Ø?DØ %Ø!%ð&2àð&2ð ð&2ð .ð	&2ð
 =ð&2ð ð&2ð ð&2ð 
ó&2ðP ò3ó ð3ð MQðØðØ+Iðà	óó(Aóó(ðT òLó ðLð, ð $Ø$(ÙCFÃ5ØEJð*@àð*@ð "ð*@ð Að	*@ð
 Cð*@ð ð*@ð 
ò*@ó ð*@ðX5Ø+ð5Ø7:ð5à	ô5r-   c                  óV   ‡ — e Zd ZdZdd e«       df	 	 	 	 	 	 	 	 	 	 	 dˆ fd„Zdd„Zˆ xZS )	r€   z/Splitting text to tokens using model tokenizer.rp   Nrq   c                óà   •— t        ‰
| �  di |¤Ž 	 ddl}|�|j	                  |«      }	n|j                  |«      }	|	| _        || _        || _        y# t        $ r}d}t        |«      |‚d}~ww xY w)zCreate a new TextSplitter.r   NzŠCould not import tiktoken python package. This is needed in order to for TokenTextSplitter. Please install it with `pip install tiktoken`.r/   )	Úsuperr,   r|   rk   r}   r~   Ú
_tokenizerÚ_allowed_specialÚ_disallowed_special)r#   rz   r{   ru   rv   rm   r|   rn   r*   rx   Ú	__class__s             €r+   r,   zTokenTextSplitter.__init__é   sˆ   ø€ ô 	‰ÑÑ"˜6Ò"ð	,Ûð Ð!Ø×-Ñ-¨jÓ9‰Cà×'Ñ'¨Ó6ˆCØˆŒØ /ˆÔØ#5ˆÕ øô ò 	,ðAð ô
 ˜cÓ"¨Ð+ûð	,ús   ’A Á	A-ÁA(Á(A-c                ó˜   ‡ — dˆ fd„}t        ‰ j                  ‰ j                  ‰ j                  j                  |¬«      }t        ||¬«      S )a  Splits the input text into smaller chunks based on tokenization.

        This method uses a custom tokenizer configuration to encode the input text
        into tokens, processes the tokens in chunks of a specified size with overlap,
        and decodes them back into text chunks. The splitting is performed using the
        `split_text_on_tokens` function.

        Args:
            text (str): The input text to be split into smaller chunks.

        Returns:
            List[str]: A list of text chunks, where each chunk is derived from a portion
            of the input text based on the tokenization and chunking rules.
        c                óh   •— ‰j                   j                  | ‰j                  ‰j                  ¬«      S rt   )r˜   rw   r™   rš   )Ú_textr#   s    €r+   Ú_encodez-TokenTextSplitter.split_text.<locals>._encode  s4   ø€ Ø—?‘?×)Ñ)ØØ $× 5Ñ 5Ø#'×#;Ñ#;ð *ó ð r-   )r%   Útokens_per_chunkÚdecoderw   rb   )rž   rf   rg   z	list[int])Ú	Tokenizerr   r   r˜   r¡   Úsplit_text_on_tokens)r#   r0   rŸ   rc   s   `   r+   r1   zTokenTextSplitter.split_text  sE   ø€ õ 	ô Ø×-Ñ-Ø!×-Ñ-Ø—?‘?×)Ñ)Øô	
ˆ	ô $¨¸ÔCÐCr-   )rz   rf   r{   r‹   ru   rŒ   rv   r�   rm   r	   rg   r‡   rˆ   )r�   r�   r‘   r’   r”   r,   r1   Ú__classcell__)r›   s   @r+   r€   r€   æ   s]   ø„ Ù9ð $Ø$(ÙCFÃ5ØEJð6àð6ð "ð6ð Að	6ð
 Cð6ð ð6ð 
õ6÷8Dr-   r€   c                  ó|   — e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZy)ÚLanguagez"Enum of the programming languages.ÚcppÚgoÚjavaÚkotlinÚjsÚtsÚphpÚprotoÚpythonÚrstÚrubyÚrustÚscalaÚswiftÚmarkdownÚlatexÚhtmlÚsolÚcsharpÚcobolÚcÚluaÚperlÚhaskellÚelixirÚ
powershellÚvisualbasic6N)r�   r�   r‘   r’   ÚCPPÚGOÚJAVAÚKOTLINÚJSr   ÚPHPÚPROTOÚPYTHONÚRSTÚRUBYÚRUSTÚSCALAÚSWIFTÚMARKDOWNÚLATEXÚHTMLÚSOLÚCSHARPÚCOBOLÚCÚLUAÚPERLÚHASKELLÚELIXIRÚ
POWERSHELLÚVISUALBASIC6r/   r-   r+   r¦   r¦   &  sŒ   „ Ù,à
€CØ	€BØ€DØ€FØ	€BØ	€BØ
€CØ€EØ€FØ
€CØ€DØ€DØ€EØ€EØ€HØ€EØ€DØ
€CØ€FØ€EØ€AØ
€CØ€DØ€GØ€FØ€JØ!�Lr-   r¦   T)Úfrozenc                  ó@   — e Zd ZU dZded<   	 ded<   	 ded<   	 ded<   y	)
r¢   zTokenizer data class.rh   r%   r    zCallable[[list[int]], str]r¡   zCallable[[str], list[int]]rw   N)r�   r�   r‘   r’   Ú__annotations__r/   r-   r+   r¢   r¢   F  s)   … áàÓØ*ØÓØ,Ø&Ó&Ø=Ø&Ó&Ø=r-   r¢   c                ó   — g }|j                  | «      }d}t        ||j                  z   t        |«      «      }||| }|t        |«      k  rƒ|j	                  |j                  |«      «       |t        |«      k(  r	 |S ||j                  |j                  z
  z  }t        ||j                  z   t        |«      «      }||| }|t        |«      k  rŒƒ|S )z6Split incoming text and return chunks using tokenizer.r   )rw   Úminr    r6   r<   r¡   r%   )r0   rc   rV   Ú	input_idsÚ	start_idxÚcur_idxÚ	chunk_idss          r+   r£   r£   T  sÕ   € à€FØ× Ñ  Ó&€IØ€IÜ�)˜i×8Ñ8Ñ8¼#¸i».ÓI€GØ˜) GÐ,€IØ
”c˜)“nÒ
$Ø�‰�i×&Ñ& yÓ1Ô2Ø”c˜)“nÒ$Øð €Mð 	�Y×/Ñ/°)×2IÑ2IÑIÑIˆ	Ü�i )×"<Ñ"<Ñ<¼cÀ)»nÓMˆØ˜i¨Ð0ˆ	ð ”c˜)“nÓ
$ð €Mr-   )r0   rf   rc   r¢   rg   r‰   )(Ú
__future__r   r8   ÚloggingÚabcr   r   Údataclassesr   Úenumr   Útypingr   r	   r
   r   r   r   r   Úlangchain_core.documentsr   r   Útyping_extensionsr   Úcollections.abcr   r   r   r   ÚAbstractSetÚ	getLoggerr�   rT   r   r   r€   rf   r¦   r¢   r£   r/   r-   r+   Ú<module>rð      s¬   ðÝ "ã Û ß #Ý !Ý ÷÷ ñ ÷ GÝ "áß>Ñ>Ý2à	ˆ×	Ñ	˜8Ó	$€áˆT˜Ô(€ôE5Ð*¨Cô E5ôP=D˜ô =Dô@"ˆs�Dô "ñ@ �$Ô÷
>ð 
>ó ð
>ôr-   