
    :Qg                         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y)    )	dataclass)TYPE_CHECKINGListN)Field	SecretStr)Element)BaseEmbeddingEncoderEmbeddingConfig)requires_dependenciesOpenAIEmbeddingsc                   X    e Zd ZU eed<    ed      Zeed<    edgd      d
d       Z	y	)OpenAIEmbeddingConfigapi_keyztext-embedding-ada-002)default
model_namelangchain_openaiopenai)extrasc                 j    ddl m}  || j                  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      V/var/www/html/answerous/venv/lib/python3.12/site-packages/unstructured/embed/openai.py
get_clientz OpenAIEmbeddingConfig.get_client   s0     	6(<<88://
     N)returnr   )
__name__
__module____qualname__r   __annotations__r   r   strr   r    r   r   r   r      s6    $<=J=./A Br   r   c                   p    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y)OpenAIEmbeddingEncoderconfigr   c                 &    | j                  d      S )NQ)query)embed_queryr   s    r   get_exemplary_embeddingz.OpenAIEmbeddingEncoder.get_exemplary_embedding%   s    c**r   c                      y Nr%   r-   s    r   
initializez!OpenAIEmbeddingEncoder.initialize(   s    r   c                 L    | j                         }t        j                  |      S r0   )r.   npshaper   exemplary_embeddings     r   num_of_dimensionsz(OpenAIEmbeddingEncoder.num_of_dimensions+   s!    "::<xx+,,r   c                     | j                         }t        j                  t        j                  j	                  |      d      S )Ng      ?)r.   r3   iscloselinalgnormr5   s     r   is_unit_vectorz%OpenAIEmbeddingEncoder.is_unit_vector/   s0    "::<zz"))..)<=sCCr   c                 j    | j                   j                         }|j                  t        |            S r0   )r(   r   r,   r$   )r   r+   clients      r   r,   z"OpenAIEmbeddingEncoder.embed_query3   s)    '')!!#e*--r   elementsc                     | j                   j                         }|j                  |D cg c]  }t        |       c}      }| j	                  ||      }|S c c}w r0   )r(   r   embed_documentsr$   _add_embeddings_to_elements)r   r?   r>   e
embeddingselements_with_embeddingss         r   rA   z&OpenAIEmbeddingEncoder.embed_documents7   sR    '')++X,FSV,FG
#'#C#CHj#Y '' -Gs   Ac                     t        |      t        |      k(  sJ g }t        |      D ]   \  }}||   |_        |j                  |       " |S r0   )len	enumeraterD   append)r   r?   rD   elements_w_embeddingielements         r   rB   z2OpenAIEmbeddingEncoder._add_embeddings_to_elements=   sW    8}J///!#H- 	1JAw!+AG ''0	1 r   N)r    r!   r"   r   r#   r   floatr.   r1   r7   r<   r,   r   rA   rB   r%   r   r   r'   r'   !   sX    !!+e +-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>rV      sM    ! &  % P 4<O   !1 ! !r   