Ë
    µŒj¶/  ã                  ó  — d dl mZ d dlZd dlZd dlmZmZmZmZm	Z	m
Z
mZ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mZmZmZ d dlmZmZmZmZmZm Z   ejB                  e"«      Z#dd	„Z$dd
„Z%dd„Z&dd„Z'dd„Z( G d„ dee«      Z)y)é    )ÚannotationsN)
ÚAnyÚCallableÚDictÚListÚLiteralÚOptionalÚSequenceÚSetÚTupleÚUnion)Ú
Embeddings)Úget_from_dict_or_envÚget_pydantic_field_namesÚpre_init)Ú	BaseModelÚ
ConfigDictÚFieldÚmodel_validator)ÚAsyncRetryingÚbefore_sleep_logÚretryÚretry_if_exception_typeÚstop_after_attemptÚwait_exponentialÚLocalAIEmbeddingsc           
     óâ  — dd l }d}d}t        dt        | j                  «      t	        d||¬«      t        |j                  j                  «      t        |j                  j                  «      z  t        |j                  j                  «      z  t        |j                  j                  «      z  t        |j                  j                  «      z  t        t        t        j                  «      ¬«      S )Nr   é   é
   Té   ©Ú
multiplierÚminÚmax©ÚreraiseÚstopÚwaitr   Úbefore_sleep)Úopenair   r   Úmax_retriesr   r   ÚerrorÚTimeoutÚAPIErrorÚAPIConnectionErrorÚRateLimitErrorÚServiceUnavailableErrorr   ÚloggerÚloggingÚWARNING)Ú
embeddingsr*   Úmin_secondsÚmax_secondss       úp/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/embeddings/localai.pyÚ_create_retry_decoratorr9   %   sÀ   € Ûà€KØ€Kô ØÜ 
× 6Ñ 6Ó7Ü¨°ÀÔMä# F§L¡L×$8Ñ$8Ó9Ü% f§l¡l×&;Ñ&;Ó<ñ=ä% f§l¡l×&EÑ&EÓFñGô & f§l¡l×&AÑ&AÓBñCô & f§l¡l×&JÑ&JÓKñ	Lô &¤f¬g¯o©oÓ>ôð ó    c           
     óô  ‡— dd l }d}d}t        dt        | j                  «      t	        d||¬«      t        |j                  j                  «      t        |j                  j                  «      z  t        |j                  j                  «      z  t        |j                  j                  «      z  t        |j                  j                  «      z  t        t        t        j                  «      ¬«      Šd	ˆfd„}|S )
Nr   r   r   Tr    r!   r%   c                ó   •‡ — dˆˆ fd„}|S )Nc               Ÿ  óf   •K  — ‰2 3 d {  –—† } ‰| i |¤Žƒ d {  –—† c S 7 Œ7 Œ6 t        d«      ‚­w)Nzthis is unreachable)ÚAssertionError)ÚargsÚkwargsÚ_Úasync_retryingÚfuncs      €€r8   Ú	wrapped_fz7_async_retry_decorator.<locals>.wrap.<locals>.wrapped_fQ   s?   øè ø€ Ù)÷ 3�aÙ! 4Ð2¨6Ñ2×2Ò2ð3øØ2øð *ä Ð!6Ó7Ð7ùs(   ƒ1†%Š!‹%Ž1š#›1¡%£1¥1)r?   r   r@   r   Úreturnr   © )rC   rD   rB   s   ` €r8   Úwrapz$_async_retry_decorator.<locals>.wrapP   s   ù€ ö	8ð
 Ðr:   )rC   r   rE   r   )r*   r   r   r+   r   r   r,   r-   r.   r/   r0   r1   r   r2   r3   r4   )r5   r*   r6   r7   rG   rB   s        @r8   Ú_async_retry_decoratorrH   ;   sÊ   ø€ Ûà€KØ€Kô #ØÜ 
× 6Ñ 6Ó7Ü¨°ÀÔMä# F§L¡L×$8Ñ$8Ó9Ü% f§l¡l×&;Ñ&;Ó<ñ=ä% f§l¡l×&EÑ&EÓFñGô & f§l¡l×&AÑ&AÓBñCô & f§l¡l×&JÑ&JÓKñ	Lô &¤f¬g¯o©oÓ>ô€Nõð €Kr:   c                ón   — t        d„ | d   D «       «      rdd l}|j                  j                  d«      ‚| S )Nc              3  ó>   K  — | ]  }t        |d    «      dk(  –— Œ y­w)Ú	embeddingr    N)Úlen)Ú.0Úds     r8   Ú	<genexpr>z"_check_response.<locals>.<genexpr>]   s!   è ø€ Ð
>Ñ-=¨Œ3ˆq�‰~Ó !Õ#Ñ-=ùs   ‚Údatar   z'LocalAI API returned an empty embedding)Úanyr*   r,   r.   )Úresponser*   s     r8   Ú_check_responserS   \   s3   € Ü
Ñ
>¨X°fÒ-=Ó
>Ô>Ûà�l‰l×#Ñ#Ð$MÓNÐNØ€Or:   c                ó@   ‡ — t        ‰ «      }|dˆ fd„«       } |di |¤ŽS )ú)Use tenacity to retry the embedding call.c                 óR   •—  ‰j                   j                  di | ¤Ž}t        |«      S ©NrF   )ÚclientÚcreaterS   ©r@   rR   r5   s     €r8   Ú_embed_with_retryz+embed_with_retry.<locals>._embed_with_retryh   s)   ø€ à+�:×$Ñ$×+Ñ+Ñ5¨fÑ5ˆÜ˜xÓ(Ð(r:   ©r@   r   rE   r   rF   )r9   )r5   r@   Úretry_decoratorr[   s   `   r8   Úembed_with_retryr^   d   s/   ø€ ä-¨jÓ9€Oàô)ó ð)ñ Ñ&˜vÑ&Ð&r:   c              ‹  óX   ‡ K  — t        ‰ «      dˆ fd„«       } |di |¤Žƒ d{  –—† S 7 Œ­w)rU   c               ›  ón   •K  —  ‰j                   j                  di | ¤Žƒ d {  –—† }t        |«      S 7 Œ­wrW   )rX   ÚacreaterS   rZ   s     €r8   Ú_async_embed_with_retryz7async_embed_with_retry.<locals>._async_embed_with_retrys   s5   øè ø€ à2˜×*Ñ*×2Ñ2Ñ<°VÑ<×<ˆÜ˜xÓ(Ð(ð =ús   ƒ 5£3¤5Nr\   rF   )rH   )r5   r@   rb   s   `  r8   Úasync_embed_with_retryrc   p   s6   øè ø€ ô ˜JÓ'ô)ó (ð)ñ )Ñ2¨6Ñ2×2Ð2Ð2ús   ƒ *£(¤*c                  óÒ  — e Zd ZU dZdZded<   dZded<   eZded<   dZd	ed
<   dZ	d	ed<   dZ
d	ed<   dZded<   	 dZd	ed<   dZd	ed<    e«       Zded<   dZded<   dZded<   	 dZded<   	 dZded<   	 dZded<   dZded <   	  ee¬!«      Zd"ed#<   	  ed$d%¬&«      Z ed'¬(«      ed2d)„«       «       Zed3d*„«       Ze d4d+„«       Z!d5d,„Z"d5d-„Z#	 d6	 	 	 	 	 d7d.„Z$	 d6	 	 	 	 	 d7d/„Z%d8d0„Z&d8d1„Z'y)9r   aÌ  LocalAI embedding models.

    Since LocalAI and OpenAI have 1:1 compatibility between APIs, this class
    uses the ``openai`` Python package's ``openai.Embedding`` as its client.
    Thus, you should have the ``openai`` python package installed, and defeat
    the environment variable ``OPENAI_API_KEY`` by setting to a random string.
    You also need to specify ``OPENAI_API_BASE`` to point to your LocalAI
    service endpoint.

    Example:
        .. code-block:: python

            from langchain_community.embeddings import LocalAIEmbeddings
            openai = LocalAIEmbeddings(
                openai_api_key="random-string",
                openai_api_base="http://localhost:8080"
            )

    Nr   rX   ztext-embedding-ada-002ÚstrÚmodelÚ
deploymentzOptional[str]Úopenai_api_versionÚopenai_api_baseÚopenai_proxyiÿ  ÚintÚembedding_ctx_lengthÚopenai_api_keyÚopenai_organizationzUnion[Literal['all'], Set[str]]Úallowed_specialÚallz.Union[Literal['all'], Set[str], Sequence[str]]Údisallowed_specialiè  Ú
chunk_sizeé   r+   z+Optional[Union[float, Tuple[float, float]]]Úrequest_timeoutÚheadersFÚboolÚshow_progress_bar)Údefault_factoryúDict[str, Any]Úmodel_kwargsÚforbidrF   )ÚextraÚprotected_namespacesÚbefore)Úmodec           
     ó`  — t        | «      }|j                  di «      }t        |«      D ]M  }||v rt        d|› d�«      ‚||vsŒt	        j
                  d|› d|› d|› d�«       |j                  |«      ||<   ŒO |j                  |j                  «       «      }|rt        d|› d	�«      ‚||d<   |S )
z>Build extra kwargs from additional params that were passed in.rz   zFound z supplied twice.z	WARNING! z/ is not default parameter.
                    zJ was transferred to model_kwargs.
                    Please confirm that z is what you intended.zParameters za should be specified explicitly. Instead they were passed in as part of `model_kwargs` parameter.)	r   ÚgetÚlistÚ
ValueErrorÚwarningsÚwarnÚpopÚintersectionÚkeys)ÚclsÚvaluesÚall_required_field_namesr|   Ú
field_nameÚinvalid_model_kwargss         r8   Úbuild_extrazLocalAIEmbeddings.build_extra«   sç   € ô $<¸CÓ#@Ð Ø—
‘
˜>¨2Ó.ˆÜ˜vž,ˆJØ˜UÑ"Ü  6¨*¨Ð5EÐ!FÓGÐGØÐ!9Ò9Ü—‘Ø! * ð .Ø�Lð !)Ø)3¨Ð4JðNôð
 %+§J¡J¨zÓ$:��jÒ!ð 'ð  8×DÑDÀUÇZÁZÃ\ÓRÐÙÜØÐ2Ð3ð 4Sð Tóð ð
 "'ˆˆ~ÑØˆr:   c                ó  — t        |dd«      |d<   t        |ddd¬«      |d<   t        |ddd¬«      |d<   d}t        |d	d
|¬«      |d	<   t        |ddd¬«      |d<   	 ddl}|j                  |d<   |S # t        $ r t        d«      ‚w xY w)z?Validate that api key and python package exists in environment.rm   ÚOPENAI_API_KEYri   ÚOPENAI_API_BASEÚ )Údefaultrj   ÚOPENAI_PROXYrh   ÚOPENAI_API_VERSIONrn   ÚOPENAI_ORGANIZATIONr   NrX   zTCould not import openai python package. Please install it with `pip install openai`.)r   r*   Ú	EmbeddingÚImportError)r‰   rŠ   Údefault_api_versionr*   s       r8   Úvalidate_environmentz&LocalAIEmbeddings.validate_environmentÆ   sÜ   € ô $8ØÐ$Ð&6ó$
ˆÐÑ ô %9ØØØØô	%
ˆÐ Ñ!ô "6ØØØØô	"
ˆˆ~Ñð !ÐÜ';ØØ Ø Ø'ô	(
ˆÐ#Ñ$ô )=ØØ!Ø!Øô	)
ˆÐ$Ñ%ð	Ûà%×/Ñ/ˆF�8Ñð ˆøô ò 	Üð?óð ð	ús   ÁA1 Á1Bc                ó  — | j                   | j                  | j                  | j                  | j                  | j
                  | j                  dœ| j                  ¥}| j                  r"dd l	}| j                  | j                  dœ|_
        |S )N)rf   rt   ru   Úapi_keyÚorganizationÚapi_baseÚapi_versionr   )ÚhttpÚhttps)rf   rt   ru   rm   rn   ri   rh   rz   rj   r*   Úproxy)ÚselfÚopenai_argsr*   s      r8   Ú_invocation_paramsz$LocalAIEmbeddings._invocation_paramsñ   s‰   € ð —Z‘ZØ#×3Ñ3Ø—|‘|Ø×*Ñ*Ø ×4Ñ4Ø×,Ñ,Ø×2Ñ2ñ	
ð ×Ñð	
ˆð ×ÒÛð ×)Ñ)Ø×*Ñ*ñˆFŒLð Ðr:   c               ó    — | j                   j                  d«      r|j                  dd«      }t        | fd|gi| j                  ¤Žd   d   d   S )ú)Call out to LocalAI's embedding endpoint.Ú001Ú
Ú ÚinputrP   r   rK   )rf   ÚendswithÚreplacer^   r¥   ©r£   ÚtextÚengines      r8   Ú_embedding_funcz!LocalAIEmbeddings._embedding_func  sp   € ð �:‰:×Ñ˜uÔ%ð —<‘<  cÓ*ˆDÜØñ
à�&ð
ð ×%Ñ%ñ
ð ñ	ð ñ	ð !ñ	"ð 	"r:   c             ƒ  ó¼   K  — | j                   j                  d«      r|j                  dd«      }t        | fd|gi| j                  ¤Žƒ d{  –—† d   d   d   S 7 Œ­w)	r§   r¨   r©   rª   r«   NrP   r   rK   )rf   r¬   r­   rc   r¥   r®   s      r8   Ú_aembedding_funcz"LocalAIEmbeddings._aembedding_func  s~   è ø€ ð �:‰:×Ñ˜uÔ%ð —<‘<  cÓ*ˆDä(Øñà�fðð ×)Ñ)ñ÷ ð
 ñð ñð !ñ"ð 	"ðús   ‚A
AÁAÁAc                ób   — |D �cg c]  }| j                  || j                  ¬«      ‘Œ! c}S c c}w )aN  Call out to LocalAI's embedding endpoint for embedding search docs.

        Args:
            texts: The list of texts to embed.
            chunk_size: The chunk size of embeddings. If None, will use the chunk size
                specified by the class.

        Returns:
            List of embeddings, one for each text.
        ©r°   ©r±   rg   )r£   Útextsrr   r¯   s       r8   Úembed_documentsz!LocalAIEmbeddings.embed_documents"  s2   € ñ PUÓUÉuÀt�×$Ñ$ T°$·/±/Ð$ÕBÈuÑUÐUùÒUs   …$,c              ƒ  ó�   K  — g }|D ]8  }| j                  || j                  ¬«      ƒ d{  –—† }|j                  |«       Œ: |S 7 Œ­w)aT  Call out to LocalAI's embedding endpoint async for embedding search docs.

        Args:
            texts: The list of texts to embed.
            chunk_size: The chunk size of embeddings. If None, will use the chunk size
                specified by the class.

        Returns:
            List of embeddings, one for each text.
        rµ   N)r³   rg   Úappend)r£   r·   rr   r5   r¯   rR   s         r8   Úaembed_documentsz"LocalAIEmbeddings.aembed_documents2  sO   è ø€ ð ˆ
ÛˆDØ!×2Ñ2°4ÀÇÁÐ2ÓP×PˆHØ×Ñ˜hÕ'ð ð Ðð Qús   ‚(AªA«Ac                ó@   — | j                  || j                  ¬«      }|S )zµCall out to LocalAI's embedding endpoint for embedding query text.

        Args:
            text: The text to embed.

        Returns:
            Embedding for the text.
        rµ   r¶   ©r£   r¯   rK   s      r8   Úembed_queryzLocalAIEmbeddings.embed_queryE  s#   € ð ×(Ñ(¨°d·o±oÐ(ÓFˆ	ØÐr:   c              ƒ  ó\   K  — | j                  || j                  ¬«      ƒ d{  –—† }|S 7 Œ­w)z»Call out to LocalAI's embedding endpoint async for embedding query text.

        Args:
            text: The text to embed.

        Returns:
            Embedding for the text.
        rµ   N)r³   rg   r½   s      r8   Úaembed_queryzLocalAIEmbeddings.aembed_queryQ  s0   è ø€ ð ×/Ñ/°¸T¿_¹_Ð/ÓM×Mˆ	ØÐð Nús   ‚!,£*¤,)rŠ   ry   rE   r   )rŠ   r   rE   r   )rE   r   )r¯   re   r°   re   rE   úList[float])r   )r·   z	List[str]rr   zOptional[int]rE   zList[List[float]])r¯   re   rE   rÁ   )(Ú__name__Ú
__module__Ú__qualname__Ú__doc__rX   Ú__annotations__rf   rg   rh   ri   rj   rl   rm   rn   Úsetro   rq   rr   r+   rt   ru   rw   r   Údictrz   r   Úmodel_configr   ÚclassmethodrŽ   r   rš   Úpropertyr¥   r±   r³   r¸   r»   r¾   rÀ   rF   r:   r8   r   r   {   s„  … ñð( €FˆCÓØ)€Eˆ3Ó)Ø€J�ÓØ(,Ð˜Ó,Ø%)€O�]Ó)à"&€L�-Ó&Ø $Ð˜#Ó$Ø8Ø$(€N�MÓ(Ø)-Ð˜Ó-Ù7:³u€OÐ4Ó<ØINÐÐFÓNØ€J�ÓØ8Ø€K�ÓØ<ØCG€OÐ@ÓGØ5Ø€GˆSÓØ#Ð�tÓ#Ø8Ù#(¸Ô#>€L�.Ó>ØVá HÀ2ÔF€Lá˜(Ô#Øòó ó $ðð2 ò(ó ð(ðT òó ðó("ó"ð  =>ðVØðVØ,9ðVà	óVð" =>ðØðØ,9ðà	óó&
ô
r:   )r5   r   rE   zCallable[[Any], Any])r5   r   rE   r   )rR   rÈ   rE   rÈ   )r5   r   r@   r   rE   r   )*Ú
__future__r   r3   r„   Útypingr   r   r   r   r   r	   r
   r   r   r   Úlangchain_core.embeddingsr   Úlangchain_core.utilsr   r   r   Úpydanticr   r   r   r   Útenacityr   r   r   r   r   r   Ú	getLoggerrÂ   r2   r9   rH   rS   r^   rc   r   rF   r:   r8   Ú<module>rÓ      s}   ðÝ "ã Û ÷÷ ÷ õ 1÷ñ ÷
 CÓ B÷÷ ð 
ˆ×	Ñ	˜8Ó	$€óó,óBó	'ó3ô`˜	 :õ `r:   