Ë
    µŒjÃ  ã                   óŠ   — d Z ddlZddlmZ ddlmZmZmZ ddlm	Z	 ddl
mZmZmZ ddlmZ dgZ ee«      Z G d	„ dee	«      Zy)
z-written under MIT Licence, Michael Feil 2023.é    N)Ú	getLogger)ÚAnyÚListÚOptional)Ú
Embeddings)Ú	BaseModelÚ
ConfigDictÚmodel_validator)ÚSelfÚInfinityEmbeddingsLocalc                   óF  — e Zd ZU dZeed<   	 dZee   ed<   	 dZe	ed<   	 dZ
eed<   	 d	Zeed
<   	 	 dZeed<   	 dZeed<   	  edd¬«      Z ed¬«      defd„«       Zdd„Zdeddfd„Zdee   deee      fd„Zdedee   fd„Zdee   deee      fd„Zdedee   fd„Zy)r   a¥  Optimized Infinity embedding models.

    https://github.com/michaelfeil/infinity
    This class deploys a local Infinity instance to embed text.
    The class requires async usage.

    Infinity is a class to interact with Embedding Models on https://github.com/michaelfeil/infinity


    Example:
        .. code-block:: python

            from langchain_community.embeddings import InfinityEmbeddingsLocal
            async with InfinityEmbeddingsLocal(
                model="BAAI/bge-small-en-v1.5",
                revision=None,
                device="cpu",
            ) as embedder:
                embeddings = await engine.aembed_documents(["text1", "text2"])
    ÚmodelNÚrevisioné    Ú
batch_sizeÚautoÚdeviceÚtorchÚbackendTÚmodel_warmupÚengineÚforbid© )ÚextraÚprotected_namespacesÚafter)ÚmodeÚreturnc                 óâ   — 	 ddl m}  || j                  | j                  | j
                  | j                  | j                  | j                  ¬«      | _	        | S # t        $ r t        d«      ‚w xY w)z?Validate that api key and python package exists in environment.r   )ÚAsyncEmbeddingEnginezrPlease install the `pip install 'infinity_emb[optimum,torch]>=0.0.24'` package to use the InfinityEmbeddingsLocal.)Úmodel_name_or_pathr   r   r   r   r   )
Úinfinity_embr    ÚImportErrorr   r   r   r   r   r   r   )Úselfr    s     úw/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/embeddings/infinity_local.pyÚvalidate_environmentz,InfinityEmbeddingsLocal.validate_environmentB   sn   € ð	Ý9ñ +Ø#Ÿz™zØ—;‘;Ø—]‘]Ø×*Ñ*Ø—‘Ø—<‘<ô
ˆŒð ˆøô ò 	Üð>óð ð	ús   ‚A ÁA.c              ƒ   óT   K  — | j                   j                  «       ƒ d{  –—†  y7 Œ­w)aQ  start the background worker.
        recommended usage is with the async with statement.

        async with InfinityEmbeddingsLocal(
            model="BAAI/bge-small-en-v1.5",
            revision=None,
            device="cpu",
        ) as embedder:
            embeddings = await engine.aembed_documents(["text1", "text2"])
        N)r   Ú
__aenter__)r$   s    r%   r(   z"InfinityEmbeddingsLocal.__aenter__X   s   è ø€ ð �k‰k×$Ñ$Ó&×&Ò&ús   ‚( &¡(Úargsc              ‡   óR   K  —  | j                   j                  |Ž ƒ d{  –—†  y7 Œ­w)zUstop the background worker,
        required to free references to the pytorch model.N)r   Ú	__aexit__)r$   r)   s     r%   r+   z!InfinityEmbeddingsLocal.__aexit__e   s"   è ø€ ð $ˆd�k‰k×#Ñ# TÐ*×*Ò*ús   ‚'Ÿ% 'Útextsc              ƒ   óš  K  — | j                   j                  smt        j                  d«       | 4 ƒd{  –—†  | j                   j	                  |«      ƒ d{  –—† \  }}ddd«      ƒd{  –—†  t        j                  d«       S | j                   j	                  |«      ƒ d{  –—† \  }}|S 7 Œy7 ŒX7 ŒG# 1 ƒd{  –—†7  sw Y   ŒWxY w7 Œ$­w)z¼Async call out to Infinity's embedding endpoint.

        Args:
            texts: The list of texts to embed.

        Returns:
            List of embeddings, one for each text.
        zeStarting Infinity engine on the fly. This is not recommended.Please start the engine before using it.Nz$Stopped infinity engine after usage.)r   ÚrunningÚloggerÚwarningÚembed)r$   r,   Ú
embeddingsÚ_s       r%   Úaembed_documentsz(InfinityEmbeddingsLocal.aembed_documentsj   s¥   è ø€ ð �{‰{×"Ò"Ü�N‰Nð;ô÷ ’tà&*§k¡k×&7Ñ&7¸Ó&>× >‘�
˜A÷ —tô �N‰NÐAÔBð Ðð #'§+¡+×"3Ñ"3°EÓ":×:‰MˆJ˜ØÐð øà >øð ø—t—t‘túð ;úsb   ‚2C´B.µC¸B4ÁB0ÁB4ÁCÁ*B2Á+9CÂ$C	Â%
CÂ0B4Â2CÂ4CÂ:B=Â;CÃCÚtextc              ƒ   óL   K  — | j                  |g«      ƒ d{  –—† }|d   S 7 Œ	­w)z¤Async call out to Infinity's embedding endpoint.

        Args:
            text: The text to embed.

        Returns:
            Embeddings for the text.
        Nr   )r4   )r$   r5   r2   s      r%   Úaembed_queryz$InfinityEmbeddingsLocal.aembed_query�   s,   è ø€ ð  ×0Ñ0°$°Ó8×8ˆ
Ø˜!‰}Ðð 9ús   ‚$˜"™
$c                 ót   — t         j                  d«       t        j                  | j	                  |«      «      S )z,
        This method is async only.
        zQThis method is async only. Please use the async version `await aembed_documents`.)r/   r0   ÚasyncioÚrunr4   )r$   r,   s     r%   Úembed_documentsz'InfinityEmbeddingsLocal.embed_documents�   s2   € ô 	�‰ðEô	
ô �{‰{˜4×0Ñ0°Ó7Ó8Ð8ó    c                 ót   — t         j                  d«       t        j                  | j	                  |«      «      S )Ú zMThis method is async only. Please use the async version `await aembed_query`.)r/   r0   r9   r:   r7   )r$   r5   s     r%   Úembed_queryz#InfinityEmbeddingsLocal.embed_query—   s0   € ä�‰ðBô	
ô �{‰{˜4×,Ñ,¨TÓ2Ó3Ð3r<   )r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚstrÚ__annotations__r   r   r   Úintr   r   r   Úboolr   r   r	   Úmodel_configr
   r   r&   r(   r+   r   Úfloatr4   r7   r;   r?   r   r<   r%   r   r      s  … ñð* ƒJØGà"€Hˆh�s‰mÓ"Ø5à€J�ÓØ0à€FˆCÓØAà€GˆSÓØGØ%à€L�$ÓØ/à€FˆCÓØ*ñ ØØô€Lñ
 ˜'Ô"ð dò ó #ðó*'ð+ Sð +¨Tó +ð
¨D°©Ið ¸$¸tÀE¹{Ñ:Kó ð.
 sð 
¨t°E©{ó 
ð9 T¨#¡Yð 9°4¸¸U¹Ñ3Dó 9ð4 ð 4¨¨U©ô 4r<   )rC   r9   Úloggingr   Útypingr   r   r   Úlangchain_core.embeddingsr   Úpydanticr   r	   r
   Útyping_extensionsr   Ú__all__r@   r/   r   r   r<   r%   Ú<module>rP      sB   ðÙ 3ã Ý ß &Ñ &å 0ß ;Ñ ;Ý "à$Ð
%€á	�8Ó	€ôM4˜i¨õ M4r<   