
    NgH	                         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dS )    )	dataclassfield)TYPE_CHECKINGListOptionalN)Field	SecretStr)Element)BaseEmbeddingEncoderEmbeddingConfig)requires_dependenciesOpenAIc                       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
dS )OctoAiEmbeddingConfigapi_keyzthenlper/gte-large)default
model_namezhttps://text.octoai.run/v1base_urlopenaitiktokenzembed-octoai)extrasreturnr   c                 `    ddl m}  || 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     U/var/www/html/ai-engine/env/lib/python3.11/site-packages/unstructured/embed/octoai.py
get_clientz OctoAiEmbeddingConfig.get_client   s;     	"!!!!!vdl;;==VVVV    N)r   r   )__name__
__module____qualname__r	   __annotations__r   r   strr   r   r    r   r   r   r      s         e$8999J999E">???Hc???	:  W W W	 W 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dS )OctoAIEmbeddingEncoderconfigFN)initr   _exemplary_embeddingr   c                 ,    |                      d          S )NQembed_queryr   s    r   get_exemplary_embeddingz.OctoAIEmbeddingEncoder.get_exemplary_embedding'   s    $$$r   c                     d S Nr%   r/   s    r   
initializez!OctoAIEmbeddingEncoder.initialize*   s    r   c                 R    |                                  }t          j        |          S r2   )r0   npshaper   exemplary_embeddings     r   num_of_dimensionsz(OctoAIEmbeddingEncoder.num_of_dimensions-   s%    "::<<x+,,,r   c                     |                                  }t          j        t          j                            |          d          S )Ng      ?)r0   r5   iscloselinalgnormr7   s     r   is_unit_vectorz%OctoAIEmbeddingEncoder.is_unit_vector1   s5    "::<<z")..)<==sCCCr   c                     | 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   sK    ''))$++#e**DKDZ+[[}Q))r   elementsc                 P      fd|D             }                      ||          }|S )Nc                 :    g | ]}                     |          S r%   r-   ).0er   s     r   
<listcomp>z:OctoAIEmbeddingEncoder.embed_documents.<locals>.<listcomp>;   s'    <<<ad&&q))<<<r   )_add_embeddings_to_elements)r   rI   rB   elements_with_embeddingss   `   r   embed_documentsz&OctoAIEmbeddingEncoder.embed_documents:   s8    <<<<8<<<
#'#C#CHj#Y#Y ''r   c                     t          |          t          |          k    sJ g }t          |          D ]'\  }}||         |_        |                    |           (|S r2   )len	enumeraterB   append)r   rI   rB   elements_w_embeddingielements         r   rO   z2OctoAIEmbeddingEncoder._add_embeddings_to_elements?   sh    8}}J////!#H-- 	1 	1JAw!+AG ''0000r   )r    r!   r"   r   r#   r   r*   r   r   floatr0   r3   r9   r>   r.   r
   rQ   rO   r%   r   r   r'   r'   !   s         !!!!27%UD2Q2Q2Q(4;/QQQ%e % % % %  - - -D D D* * *
(W ($w- ( ( ( (
4=      r   r'   )dataclassesr   r   typingr   r   r   numpyr5   pydanticr   r	   unstructured.documents.elementsr
   unstructured.embed.interfacesr   r   unstructured.utilsr   r   r   r   r'   r%   r   r   <module>ra      s7   ( ( ( ( ( ( ( ( 0 0 0 0 0 0 0 0 0 0     % % % % % % % %      P O O O O O O O 4 4 4 4 4 4 W W W W WO W W W  # # # # #1 # # # # #r   