
    dh                         S r SSKrSSKJr  SSKJrJrJr  SSKJ	r	  SSK
JrJrJr  SSKJr  S/r\" \5      r " S	 S\\	5      rg)
z-written under MIT Licence, Michael Feil 2023.    N)	getLogger)AnyListOptional)
Embeddings)	BaseModel
ConfigDictmodel_validator)SelfInfinityEmbeddingsLocalc                   P   \ rS rSr% Sr\\S'    Sr\\   \S'    Sr	\
\S'    Sr\\S	'    S
r\\S'     Sr\\S'    Sr\\S'    \" SSS9r\" SS9S\4S j5       rS S jrS\SS4S jrS\\   S\\\      4S jrS\S\\   4S jrS\\   S\\\      4S jrS\S\\   4S jrSrg)!r      am  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           	           SSK Jn  U" U R                  U R                  U R
                  U R                  U R                  U R                  S9U l	        U $ ! [         a    [        S5      ef = f)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     e/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/embeddings/infinity_local.pyvalidate_environment,InfinityEmbeddingsLocal.validate_environmentB   sn    	9 +#zz;;]]**<<
   	> 	s   A A,c                 T   #    U R                   R                  5       I Sh  vN   g N7f)a  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*   "InfinityEmbeddingsLocal.__aenter__X   s      kk$$&&&s   (&(argsc                 R   #    U R                   R                  " U6 I Sh  vN   g N7f)zMstop the background worker,
required to free references to the pytorch model.N)r   	__aexit__)r%   r,   s     r&   r.   !InfinityEmbeddingsLocal.__aexit__e   s      kk##T***s   '%'textsc                   #    U R                   R                  (       dl  [        R                  S5        U  ISh  vN   U R                   R	                  U5      I Sh  vN u  p#SSS5      ISh  vN   [        R                  S5        W$ U R                   R	                  U5      I Sh  vN u  p#U$  Nw NV NF! , ISh  vN  (       d  f       N[= f N(7f)zAsync 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%   r0   
embeddings_s       r&   aembed_documents(InfinityEmbeddingsLocal.aembed_documentsj   s      {{""NN; t&*kk&7&7&> >
 t NNAB  #'++"3"3E"::MJ  > ttt ;sb   7CB1CB7B3B7#C.B5/9C(C)	C3B75C7C=C >C
Ctextc                 L   #    U R                  U/5      I Sh  vN nUS   $  N	7f)z|Async call out to Infinity's embedding endpoint.

Args:
    text: The text to embed.

Returns:
    Embeddings for the text.
Nr   )r8   )r%   r:   r6   s      r&   aembed_query$InfinityEmbeddingsLocal.aembed_query   s+       00$88
!} 9s   $"
$c                 v    [         R                  S5        [        R                  " U R	                  U5      5      $ )z
This method is async only.
zQThis method is async only. Please use the async version `await aembed_documents`.)r3   r4   asynciorunr8   )r%   r0   s     r&   embed_documents'InfinityEmbeddingsLocal.embed_documents   s2     	E	
 {{400788    c                 v    [         R                  S5        [        R                  " U R	                  U5      5      $ ) zMThis method is async only. Please use the async version `await aembed_query`.)r3   r4   r?   r@   r<   )r%   r:   s     r&   embed_query#InfinityEmbeddingsLocal.embed_query   s0    B	
 {{4,,T233rC   )r   )r   N)__name__
__module____qualname____firstlineno____doc__str__annotations__r   r   r   intr   r   r   boolr   r   r	   model_configr
   r   r'   r*   r.   r   floatr8   r<   rA   rF   __static_attributes__r   rC   r&   r   r      s   * JG"Hhsm"5J0FCAGSG%L$/FC* L
 '"d  #*'+S +T +
DI $tE{:K .
s 
tE{ 
9T#Y 94U3D 94 4U 4rC   )rL   r?   loggingr   typingr   r   r   langchain_core.embeddingsr   pydanticr   r	   r
   typing_extensionsr   __all__rH   r3   r   r   rC   r&   <module>rZ      sB    3   & & 0 ; ; "$
%	8	M4i M4rC   