
    Ng                         d dl Z d dlZd dlmZ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 d dlmZ dZdZ G d	 d
ee          ZdS )    N)AnyListOptional)
Embeddings)from_env)	BaseModel
ConfigDictFieldmodel_validator)Selfz'sentence-transformers/all-mpnet-base-v2)feature-extractionc                      e Zd ZU dZdZeed<   dZeed<   dZe	e
         ed<   	 dZe	e
         ed<   	 dZe	e
         ed<   	 dZe	e         ed	<   	  e ed
d                    Ze	e
         ed<    edd          Z ed          defd            Zdee
         deee                  fdZdee
         deee                  fdZde
dee         fdZde
dee         fdZdS )HuggingFaceEndpointEmbeddingsax  HuggingFaceHub embedding models.

    To use, you should have the ``huggingface_hub`` python package installed, and the
    environment variable ``HUGGINGFACEHUB_API_TOKEN`` set with your API token, or pass
    it as a named parameter to the constructor.

    Example:
        .. code-block:: python

            from langchain_huggingface import HuggingFaceEndpointEmbeddings
            model = "sentence-transformers/all-mpnet-base-v2"
            hf = HuggingFaceEndpointEmbeddings(
                model=model,
                task="feature-extraction",
                huggingfacehub_api_token="my-api-key",
            )
    Nclientasync_clientmodelrepo_idr   taskmodel_kwargsHUGGINGFACEHUB_API_TOKEN)default)default_factoryhuggingfacehub_api_tokenforbid )extraprotected_namespacesafter)modereturnc                    | j         pt          j        d          }	 ddlm}m} | j        r| j        | _        n,| j        r| j        | _        nt          | _        t          | _         || j        |          } || j        |          }| j	        t          vr t          d| j	         dt           d          || _        || _        n# t          $ r t          d          w xY w| S )	z?Validate that api key and python package exists in environment.HF_TOKENr   )AsyncInferenceClientInferenceClient)r   tokenzGot invalid task z, currently only z are supportedzfCould not import huggingface_hub python package. Please install it with `pip install huggingface_hub`.)r   osgetenvhuggingface_hubr#   r$   r   r   DEFAULT_MODELr   VALID_TASKS
ValueErrorr   r   ImportError)selfr   r#   r$   r   r   s         q/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_huggingface/embeddings/huggingface_endpoint.pyvalidate_environmentz2HuggingFaceEndpointEmbeddings.validate_environment5   se    $(#@ $
BIE
 E
 $	       
 z -#z -!\

*
,$_j.  F
 0/j.  L
 y++ B	 B B&1B B B   !DK ,D 	 	 	H  	
 s   B(C C textsc                     d |D             }| j         pi }| j                            d|i|| j                  }t	          j        |                                          S )zCall out to HuggingFaceHub's embedding endpoint for embedding search docs.

        Args:
            texts: The list of texts to embed.

        Returns:
            List of embeddings, one for each text.
        c                 :    g | ]}|                     d d          S 
 replace.0texts     r.   
<listcomp>zAHuggingFaceEndpointEmbeddings.embed_documents.<locals>.<listcomp>m   &    ;;;TdC((;;;    inputsjsonr   )r   r   postr   r@   loadsdecoder-   r0   _model_kwargs	responsess       r.   embed_documentsz-HuggingFaceEndpointEmbeddings.embed_documentsc   so     <;U;;;)/RK$$E3]3$) % 
 
	 z)**,,---r=   c                    K   d |D             }| j         pi }| j                            ||d| j                   d{V }t	          j        |                                          S )zAsync Call to HuggingFaceHub's embedding endpoint for embedding search docs.

        Args:
            texts: The list of texts to embed.

        Returns:
            List of embeddings, one for each text.
        c                 :    g | ]}|                     d d          S r3   r6   r8   s     r.   r;   zBHuggingFaceEndpointEmbeddings.aembed_documents.<locals>.<listcomp>   r<   r=   )r>   
parametersr?   N)r   r   rA   r   r@   rB   rC   rD   s       r.   aembed_documentsz.HuggingFaceEndpointEmbeddings.aembed_documentsu   s       <;U;;;)/R+00!??di 1 
 
 
 
 
 
 
 
	 z)**,,---r=   r:   c                 >    |                      |g          d         }|S )zCall out to HuggingFaceHub's embedding endpoint for embedding query text.

        Args:
            text: The text to embed.

        Returns:
            Embeddings for the text.
        r   )rG   r-   r:   responses      r.   embed_queryz)HuggingFaceEndpointEmbeddings.embed_query   s#     ''//2r=   c                 N   K   |                      |g           d{V d         }|S )zAsync Call to HuggingFaceHub's embedding endpoint for embedding query text.

        Args:
            text: The text to embed.

        Returns:
            Embeddings for the text.
        Nr   )rK   rM   s      r.   aembed_queryz*HuggingFaceEndpointEmbeddings.aembed_query   s9       //77777777;r=   )__name__
__module____qualname____doc__r   r   __annotations__r   r   r   strr   r   r   dictr
   r   r   r	   model_configr   r   r/   r   floatrG   rK   rO   rQ   r   r=   r.   r   r      s         $ FCL#E8C=!GXc]!!!C.D(3-...&#'L(4.'''1.3e !;TJJJ/ / /hsm    :  L
 _'"""+d + + + #"+Z.T#Y .4U3D . . . .$.DI .$tE{:K . . . ."
 
U 
 
 
 

s 
tE{ 
 
 
 
 
 
r=   r   )r@   r&   typingr   r   r   langchain_core.embeddingsr   langchain_core.utilsr   pydanticr   r	   r
   r   typing_extensionsr   r)   r*   r   r   r=   r.   <module>r`      s     				 & & & & & & & & & & 0 0 0 0 0 0 ) ) ) ) ) ) B B B B B B B B B B B B " " " " " "9%N N N N NIz N N N N Nr=   