
    :Qg                         d dl Z d dlZd dl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mZ erd dlmZ  G d	 d
e      Ze G d de             Zy)    N)	dataclass)TYPE_CHECKINGListOptional)Field	SecretStr)Element)BaseEmbeddingEncoderEmbeddingConfig)FileHandlerrequires_dependenciesVertexAIEmbeddingsc                   f    e Zd ZU eed<    ed      Zee   ed<   d Z	 e
ddgd	      dd
       Zy)VertexAIEmbeddingConfigapi_keyztextembedding-gecko@001)default
model_namec                    t         j                  j                  dd      }t        |      }|j	                  t        j                  t        j                  | j                  j                                            |t         j                  d<   y )Nz/tmpz"google-vertex-app-credentials.jsonGOOGLE_APPLICATION_CREDENTIALS)ospathjoinr   
write_filejsondumpsloadsr   get_secret_valueenviron)selfapplication_credentials_pathcredentials_files      X/var/www/html/answerous/venv/lib/python3.12/site-packages/unstructured/embed/vertexai.py register_application_credentialsz8VertexAIEmbeddingConfig.register_application_credentials   s`    ')ww||F<`'a$&'CD##DJJtzz$,,:W:W:Y/Z$[\7S

34    	langchainlangchain_google_vertexaizembed-vertexai)extrasc                 X    ddl m} | j                           || j                        }|S )z=Creates a Langchain VertexAI python client to embed elements.r   r   )r   )r'   r   r$   r   )r    r   vertexai_clients      r#   
get_clientz"VertexAIEmbeddingConfig.get_client   s(     	A--/,Hr%   N)returnr   )__name__
__module____qualname__r   __annotations__r   r   r   strr$   r   r+    r%   r#   r   r      sG     %.G HJHT 	12	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)VertexAIEmbeddingEncoderconfigr,   c                 &    | j                  d      S )NzA sample query.)query)embed_queryr    s    r#   get_exemplary_embeddingz0VertexAIEmbeddingEncoder.get_exemplary_embedding/   s    &788r%   c                      y Nr2   r9   s    r#   
initializez#VertexAIEmbeddingEncoder.initialize2   s    r%   c                 L    | j                         }t        j                  |      S r<   )r:   npshaper    exemplary_embeddings     r#   num_of_dimensionsz*VertexAIEmbeddingEncoder.num_of_dimensions5   s!    "::<xx+,,r%   c                     | j                         }t        j                  t        j                  j	                  |      d      S )Ng      ?)r:   r?   iscloselinalgnormrA   s     r#   is_unit_vectorz'VertexAIEmbeddingEncoder.is_unit_vector9   s0    "::<zz"))..)<=sCCr%   c                 n    | j                   j                         }|j                  t        |            }|S r<   )r5   r+   r8   r1   )r    r7   clientresults       r#   r8   z$VertexAIEmbeddingEncoder.embed_query=   s-    '')##CJ/r%   elementsc                     | j                   j                         }|j                  |D cg c]  }t        |       c}      }| j	                  ||      }|S c c}w r<   )r5   r+   embed_documentsr1   _add_embeddings_to_elements)r    rL   rJ   e
embeddingselements_with_embeddingss         r#   rN   z(VertexAIEmbeddingEncoder.embed_documentsB   sR    '')++X,FSV,FG
#'#C#CHj#Y '' -Gs   Ac                     t        |      t        |      k(  sJ g }t        |      D ]   \  }}||   |_        |j                  |       " |S r<   )len	enumeraterQ   append)r    rL   rQ   elements_w_embeddingielements         r#   rO   z4VertexAIEmbeddingEncoder._add_embeddings_to_elementsH   sW    8}J///!#H- 	1JAw!+AG ''0	1 r%   N)r-   r.   r/   r   r0   r   floatr:   r=   rC   rH   r8   r	   rN   rO   r2   r%   r#   r4   r4   +   sX    ##9e 9-D
(W ($w- (4= r%   r4   )r   r   dataclassesr   typingr   r   r   numpyr?   pydanticr   r   unstructured.documents.elementsr	   unstructured.embed.interfacesr
   r   unstructured.utilsr   r   r'   r   r   r4   r2   r%   r#   <module>rb      sV     	 ! 0 0  % P A<o . "3 " "r%   