
    7|h                         d dl Z d dlmZmZmZmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZmZmZ d dlmZ dZd	Z ed
dd       G d dee	             Zy)    N)AnyDictListOptional)
deprecated)
Embeddings)get_from_dict_or_env)	BaseModel
ConfigDictmodel_validator)Selfz'sentence-transformers/all-mpnet-base-v2)feature-extractionz0.2.2z1.0z3langchain_huggingface.HuggingFaceEndpointEmbeddings)sinceremovalalternative_importc                   t   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	<   	 dZe	e
   ed
<    edd      Z ed      ededef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y)HuggingFaceHubEmbeddingsaw  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_community.embeddings import HuggingFaceHubEmbeddings
            model = "sentence-transformers/all-mpnet-base-v2"
            hf = HuggingFaceHubEmbeddings(
                model=model,
                task="feature-extraction",
                huggingfacehub_api_token="my-api-key",
            )
    Nclientasync_clientmodelrepo_idr   taskmodel_kwargshuggingfacehub_api_tokenforbid )extraprotected_namespacesbefore)modevaluesreturnc                 6   t        |dd      }	 ddlm}m} |j	                  d      r	|d   |d<   n,|j	                  d      r	|d   |d<   nt
        |d<   t
        |d<    ||d   |      } ||d   |      }||d<   ||d	<   |S # t        $ r t        d
      w xY w)z?Validate that api key and python package exists in environment.r   HUGGINGFACEHUB_API_TOKENr   )AsyncInferenceClientInferenceClientr   r   )r   tokenr   r   zfCould not import huggingface_hub python package. Please install it with `pip install huggingface_hub`.)r	   huggingface_hubr%   r&   getDEFAULT_MODELImportError)clsr!   r   r%   r&   r   r   s          m/var/www/html/test/engine/venv/lib/python3.12/site-packages/langchain_community/embeddings/huggingface_hub.pyvalidate_environmentz-HuggingFaceHubEmbeddings.validate_environment5   s     $8.0J$
 	Mzz'"$*7Oy!I&"("3w"/w$1y!$Wo.F
 0Wo.L
  &F8%1F>"   	H 	s   A2B Bafterc                 j    | j                   t        vr t        d| j                    dt         d      | S )z#Post init validation for the class.zGot invalid task z, currently only z are supported)r   VALID_TASKS
ValueError)selfs    r-   	post_initz"HuggingFaceHubEmbeddings.post_init\   s@     99K'#DII; /""-n>      textsc                    |D cg c]  }|j                  dd       }}| j                  xs i }| j                  j                  d|i|| j                        }t        j                  |j                               S c c}w )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.
        
 inputsjsonr   )replacer   r   postr   r<   loadsdecoder3   r6   text_model_kwargs	responsess        r-   embed_documentsz(HuggingFaceHubEmbeddings.embed_documentsf   s}     6;;TdC(;;))/RKK$$E3]3$)) % 
	 zz)**,-- <s   A>c                    K   |D cg c]  }|j                  dd       }}| j                  xs i }| j                  j                  ||d| j                         d{   }t        j                  |j                               S c c}w 7 ,w)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.
        r8   r9   )r:   
parametersr;   N)r=   r   r   r>   r   r<   r?   r@   rA   s        r-   aembed_documentsz)HuggingFaceHubEmbeddings.aembed_documentsx   s      6;;TdC(;;))/R++00!?dii 1 
 
	 zz)**,-- <
s   BB?BB -BrB   c                 0    | j                  |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   )rE   r3   rB   responses      r-   embed_queryz$HuggingFaceHubEmbeddings.embed_query   s      ''/2r5   c                 L   K   | j                  |g       d{   d   }|S 7 	w)zAsync Call to HuggingFaceHub's embedding endpoint for embedding query text.

        Args:
            text: The text to embed.

        Returns:
            Embeddings for the text.
        Nr   )rH   rJ   s      r-   aembed_queryz%HuggingFaceHubEmbeddings.aembed_query   s,      //77; 8s   $"
$)__name__
__module____qualname____doc__r   r   __annotations__r   r   r   strr   r   r   dictr   r   model_configr   classmethodr   r.   r   r4   r   floatrE   rH   rL   rN   r   r5   r-   r   r      s8   $ FCL#E8C=!GXc]!C.D(3-.&#'L(4.'1.2hsm2H2FL(##$ #3 #  $#J '"4  #.T#Y .4U3D .$.DI .$tE{:K ."
 
U 

s 
tE{ 
r5   r   )r<   typingr   r   r   r   langchain_core._apir   langchain_core.embeddingsr   langchain_core.utilsr	   pydanticr
   r   r   typing_extensionsr   r*   r1   r   r   r5   r-   <module>r_      sX     , , * 0 5 ; ; "9% 
L
Ly* L
Lr5   