
    :Qg	                         d dl mZ d dlmZmZmZ d dlZd dlm	Z	 d dl
mZ d dlmZmZ d dlmZ erd dlmZ  G d	 d
e      Ze G d de             Zy)    )	dataclass)TYPE_CHECKINGListOptionalN)Field)Element)BaseEmbeddingEncoderEmbeddingConfig)requires_dependenciesHuggingFaceEmbeddingsc                       e Zd ZU  ed      Zee   ed<    ed       Zee	   ed<    ed       Z
ee	   ed<    ed	      Zee	   ed
<    edgd      dd       Zy	)HuggingFaceEmbeddingConfigz&sentence-transformers/all-MiniLM-L6-v2)default
model_namec                  
    ddiS )Ndevicecpu r       [/var/www/html/answerous/venv/lib/python3.12/site-packages/unstructured/embed/huggingface.py<lambda>z#HuggingFaceEmbeddingConfig.<lambda>   s    (EAR r   )default_factorymodel_kwargsc                  
    ddiS )Nnormalize_embeddingsFr   r   r   r   r   z#HuggingFaceEmbeddingConfig.<lambda>   s    CY[`Ba r   encode_kwargsNcache_folderlangchain_huggingfacezembed-huggingface)extrasc                 >    ddl m}  |di | j                         }|S )z@Creates a langchain Huggingface python client to embed elements.r   r   r   ) langchain_huggingface.embeddingsr   dict)selfr   clients      r   
get_clientz%HuggingFaceEmbeddingConfig.get_client   s      	K&55r   )returnr   )__name__
__module____qualname__r   r   r   str__annotations__r   r#   r   r   r   r&   r   r   r   r   r      sq     %.V WJW#(9R#SL(4.S$):a$bM8D>b#(#6L(4.6	 !"	r   r   c                   j    e Zd ZU eed<   dee   fdZd Zd Z	d Z
dee   dee   fdZdee   fd	Zy
)HuggingFaceEmbeddingEncoderconfigr'   c                 &    | j                  d      S )NQ)query)embed_query)r$   s    r   get_exemplary_embeddingz3HuggingFaceEmbeddingEncoder.get_exemplary_embedding'   s    c**r   c                 L    | j                         }t        j                  |      S N)r4   npshaper$   exemplary_embeddings     r   num_of_dimensionsz-HuggingFaceEmbeddingEncoder.num_of_dimensions*   s!    "::<xx+,,r   c                     | j                         }t        j                  t        j                  j	                  |      d      S )Ng      ?)r4   r7   iscloselinalgnormr9   s     r   is_unit_vectorz*HuggingFaceEmbeddingEncoder.is_unit_vector.   s0    "::<zz"))..)<=sCCr   c                 j    | j                   j                         }|j                  t        |            S r6   )r/   r&   r3   r+   )r$   r2   r%   s      r   r3   z'HuggingFaceEmbeddingEncoder.embed_query2   s)    '')!!#e*--r   elementsc                     | j                   j                         }|j                  |D cg c]  }t        |       c}      }| j	                  ||      }|S c c}w r6   )r/   r&   embed_documentsr+   _add_embeddings_to_elements)r$   rB   r%   e
embeddingselements_with_embeddingss         r   rD   z+HuggingFaceEmbeddingEncoder.embed_documents6   sR    '')++X,FSV,FG
#'#C#CHj#Y '' -Gs   Ac                     t        |      t        |      k(  sJ g }t        |      D ]   \  }}||   |_        |j                  |       " |S r6   )len	enumeraterG   append)r$   rB   rG   elements_w_embeddingielements         r   rE   z7HuggingFaceEmbeddingEncoder._add_embeddings_to_elements<   sW    8}J///!#H- 	1JAw!+AG ''0	1 r   N)r(   r)   r*   r   r,   r   floatr4   r;   r@   r3   r   rD   rE   r   r   r   r.   r.   #   sS    &&+e +-D.(W ($w- (4= r   r.   )dataclassesr   typingr   r   r   numpyr7   pydanticr   unstructured.documents.elementsr   unstructured.embed.interfacesr	   r
   unstructured.utilsr   r"   r   r   r.   r   r   r   <module>rX      sP    ! 0 0   P 4F $ "6  r   