
    Ng                         d dl mZ d dlmZmZ d dlZd dlmZ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ListN)Field	SecretStr)Element)BaseEmbeddingEncoderEmbeddingConfig)requires_dependenciesOpenAIEmbeddingsc                   l    e Zd ZU eed<    ed          Zeed<    edgd          dd
            Z	dS )OpenAIEmbeddingConfigapi_keyztext-embedding-ada-002)default
model_namelangchain_openaiopenai)extrasreturnr   c                 d    ddl m}  || j                                        | j                  }|S )z;Creates a langchain OpenAI python client to embed elements.r   r   )openai_api_keymodel)r   r   r   get_secret_valuer   )selfr   openai_clients      U/var/www/html/ai-engine/env/lib/python3.11/site-packages/unstructured/embed/openai.py
get_clientz OpenAIEmbeddingConfig.get_client   sK     	655555((<88::/
 
 
     N)r   r   )
__name__
__module____qualname__r   __annotations__r   r   strr   r    r   r   r   r      st         e$<===J===./AAA   BA  r   r   c                       e Zd ZU eed<   dee         fdZ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 )OpenAIEmbeddingEncoderconfigr   c                 .    |                      d          S )NQ)query)embed_queryr   s    r   get_exemplary_embeddingz.OpenAIEmbeddingEncoder.get_exemplary_embedding%   s    c***r   c                     d S Nr%   r-   s    r   
initializez!OpenAIEmbeddingEncoder.initialize(   s    r   c                 R    |                                  }t          j        |          S r0   )r.   npshaper   exemplary_embeddings     r   num_of_dimensionsz(OpenAIEmbeddingEncoder.num_of_dimensions+   s%    "::<<x+,,,r   c                     |                                  }t          j        t          j                            |          d          S )Ng      ?)r.   r3   iscloselinalgnormr5   s     r   is_unit_vectorz%OpenAIEmbeddingEncoder.is_unit_vector/   s5    "::<<z")..)<==sCCCr   c                 x    | j                                         }|                    t          |                    S r0   )r(   r   r,   r$   )r   r+   clients      r   r,   z"OpenAIEmbeddingEncoder.embed_query3   s/    ''))!!#e**---r   elementsc                     | j                                         }|                    d |D                       }|                     ||          }|S )Nc                 ,    g | ]}t          |          S r%   )r$   ).0es     r   
<listcomp>z:OpenAIEmbeddingEncoder.embed_documents.<locals>.<listcomp>9   s    ,F,F,FSVV,F,F,Fr   )r(   r   embed_documents_add_embeddings_to_elements)r   r?   r>   
embeddingselements_with_embeddingss        r   rE   z&OpenAIEmbeddingEncoder.embed_documents7   sS    ''))++,F,FX,F,F,FGG
#'#C#CHj#Y#Y ''r   c                     t          |          t          |          k    sJ g }t          |          D ]'\  }}||         |_        |                    |           (|S r0   )len	enumeraterG   append)r   r?   rG   elements_w_embeddingielements         r   rF   z2OpenAIEmbeddingEncoder._add_embeddings_to_elements=   sh    8}}J////!#H-- 	1 	1JAw!+AG ''0000r   N)r    r!   r"   r   r#   r   floatr.   r1   r7   r<   r,   r   rE   rF   r%   r   r   r'   r'   !   s         !!!!+e + + + +  - - -D D D. . .(W ($w- ( ( ( (4=      r   r'   )dataclassesr   typingr   r   numpyr3   pydanticr   r   unstructured.documents.elementsr   unstructured.embed.interfacesr	   r
   unstructured.utilsr   langchain_openai.embeddingsr   r   r'   r%   r   r   <module>rY      s#   ! ! ! ! ! ! & & & & & & & &     % % % % % % % %      P O O O O O O O 4 4 4 4 4 4 =<<<<<<    O     ! ! ! ! !1 ! ! ! ! !r   