
    :QgH	                         d dl mZmZ d dlmZ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field)TYPE_CHECKINGListOptionalN)Field	SecretStr)Element)BaseEmbeddingEncoderEmbeddingConfig)requires_dependenciesOpenAIc                   v    e Zd ZU eed<    ed      Zeed<    ed      Zeed<    e	ddgd	
      dd       Z
y)OctoAiEmbeddingConfigapi_keyzthenlper/gte-large)default
model_namezhttps://text.octoai.run/v1base_urlopenaitiktokenzembed-octoai)extrasc                 f    ddl m}  || j                  j                         | j                        S )zGCreates an OpenAI python client to embed elements. Uses the OpenAI SDK.r   r   )r   r   )r   r   r   get_secret_valuer   )selfr   s     V/var/www/html/answerous/venv/lib/python3.12/site-packages/unstructured/embed/octoai.py
get_clientz OctoAiEmbeddingConfig.get_client   s%     	"dll;;=VV    N)returnr   )__name__
__module____qualname__r	   __annotations__r   r   strr   r   r    r   r   r   r      sL    $89J9">?Hc?	:W	Wr   r   c                       e Zd ZU eed<    edd      Zee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)OctoAIEmbeddingEncoderconfigFN)initr   _exemplary_embeddingr   c                 $    | j                  d      S )NQ)embed_queryr   s    r   get_exemplary_embeddingz.OctoAIEmbeddingEncoder.get_exemplary_embedding'   s    $$r   c                      y Nr%   r.   s    r   
initializez!OctoAIEmbeddingEncoder.initialize*   s    r   c                 L    | j                         }t        j                  |      S r1   )r/   npshaper   exemplary_embeddings     r   num_of_dimensionsz(OctoAIEmbeddingEncoder.num_of_dimensions-   s!    "::<xx+,,r   c                     | j                         }t        j                  t        j                  j	                  |      d      S )Ng      ?)r/   r4   iscloselinalgnormr6   s     r   is_unit_vectorz%OctoAIEmbeddingEncoder.is_unit_vector1   s0    "::<zz"))..)<=sCCr   c                     | j                   j                         }|j                  j                  t	        |      | j                   j
                        }|j                  d   j                  S )N)inputmodelr   )r(   r   
embeddingscreater$   r   data	embedding)r   queryclientresponses       r   r-   z"OctoAIEmbeddingEncoder.embed_query5   sR    '')$$++#e*DKKDZDZ+[}}Q)))r   elementsc                 p    |D cg c]  }| j                  |       }}| j                  ||      }|S c c}w r1   )r-   _add_embeddings_to_elements)r   rH   erA   elements_with_embeddingss        r   embed_documentsz&OctoAIEmbeddingEncoder.embed_documents:   s>    3;<ad&&q)<
<#'#C#CHj#Y '' =s   3c                     t        |      t        |      k(  sJ g }t        |      D ]   \  }}||   |_        |j                  |       " |S r1   )len	enumeraterA   append)r   rH   rA   elements_w_embeddingielements         r   rJ   z2OctoAIEmbeddingEncoder._add_embeddings_to_elements?   sW    8}J///!#H- 	1JAw!+AG ''0	1 r   )r    r!   r"   r   r#   r   r*   r   r   floatr/   r2   r8   r=   r-   r
   rM   rJ   r%   r   r   r'   r'   !   ss    !!27UD2Q(4;/Q%e %-D*
(W ($w- (
4= r   r'   )dataclassesr   r   typingr   r   r   numpyr4   pydanticr   r	   unstructured.documents.elementsr
   unstructured.embed.interfacesr   r   unstructured.utilsr   r   r   r   r'   r%   r   r   <module>r]      sR    ( 0 0  % P 4WO W  #1 # #r   