
    Ng	                         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dS )    )	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d	S )HuggingFaceEmbeddingConfigz&sentence-transformers/all-MiniLM-L6-v2)default
model_namec                  
    ddiS )Ndevicecpu r       Z/var/www/html/ai-engine/env/lib/python3.11/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)extrasreturnr   c                 F    ddl m}  |di |                                 }|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JJJJJ&&5555r   )r!   r   )__name__
__module____qualname__r   r   r   str__annotations__r   r$   r   r   r   r'   r   r   r   r   r      s          %.V W W WJWWW#(59R9R#S#S#SL(4.SSS$)E:a:a$b$b$bM8D>bbb#(5#6#6#6L(4.666	 !"    	   r   r   c                       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d
S )HuggingFaceEmbeddingEncoderconfigr!   c                 .    |                      d          S )NQ)query)embed_query)r%   s    r   get_exemplary_embeddingz3HuggingFaceEmbeddingEncoder.get_exemplary_embedding'   s    c***r   c                 R    |                                  }t          j        |          S N)r4   npshaper%   exemplary_embeddings     r   num_of_dimensionsz-HuggingFaceEmbeddingEncoder.num_of_dimensions*   s%    "::<<x+,,,r   c                     |                                  }t          j        t          j                            |          d          S )Ng      ?)r4   r7   iscloselinalgnormr9   s     r   is_unit_vectorz*HuggingFaceEmbeddingEncoder.is_unit_vector.   s5    "::<<z")..)<==sCCCr   c                 x    | j                                         }|                    t          |                    S r6   )r/   r'   r3   r+   )r%   r2   r&   s      r   r3   z'HuggingFaceEmbeddingEncoder.embed_query2   s/    ''))!!#e**---r   elementsc                     | j                                         }|                    d |D                       }|                     ||          }|S )Nc                 ,    g | ]}t          |          S r   )r+   ).0es     r   
<listcomp>z?HuggingFaceEmbeddingEncoder.embed_documents.<locals>.<listcomp>8   s    ,F,F,FSVV,F,F,Fr   )r/   r'   embed_documents_add_embeddings_to_elements)r%   rB   r&   
embeddingselements_with_embeddingss        r   rH   z+HuggingFaceEmbeddingEncoder.embed_documents6   sS    ''))++,F,FX,F,F,FGG
#'#C#CHj#Y#Y ''r   c                     t          |          t          |          k    sJ g }t          |          D ]'\  }}||         |_        |                    |           (|S r6   )len	enumeraterJ   append)r%   rB   rJ   elements_w_embeddingielements         r   rI   z7HuggingFaceEmbeddingEncoder._add_embeddings_to_elements<   sh    8}}J////!#H-- 	1 	1JAw!+AG ''0000r   N)r(   r)   r*   r   r,   r   floatr4   r;   r@   r3   r   rH   rI   r   r   r   r.   r.   #   s         &&&&+e + + + +- - -D D 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>r[      s$   ! ! ! ! ! ! 0 0 0 0 0 0 0 0 0 0                P O O O O O O O 4 4 4 4 4 4 GFFFFFF       $     "6     r   