Ë
    µŒjP9  ã                   ó   — d dl Z d dlZd dlZd dlZd dlmZmZ d dlmZm	Z	m
Z
mZmZmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ  e j4                  e«      Zd
ZdZdZ eddd¬«       G d„ dee«      «       Z y)é    N)ÚThreadPoolExecutorÚwait)ÚAnyÚDictÚListÚLiteralÚOptionalÚTuple)Ú
deprecated)Ú
Embeddings)Úcreate_base_retry_decorator)Úpre_init)Ú_VertexAICommon)Úraise_vertex_import_errori N  éú   é   z0.0.12z1.0z,langchain_google_vertexai.VertexAIEmbeddings)ÚsinceÚremovalÚalternative_importc                   óà  ‡ — e Zd ZU dZi Zeeef   ed<   dZ	e
ed<   	 ededefd„«       Z	 	 	 	 	 	 dded	ee   d
edededee   defˆ fd„Zededee   fd„«       Zedee   dedeee      fd„«       Z	 ddee   dee   deee      fd„Z	 ddee   dee   deeee      eee      f   fd„Z	 	 ddee   dedeed      deee      fd„Z	 d dee   dedeee      fd„Zdedee   fd„Zˆ xZS )!ÚVertexAIEmbeddingsz'Google Cloud VertexAI embedding models.ÚinstanceFÚshow_progress_barÚvaluesÚreturnc                 óÚ   — | j                  |«       |d   dk(  rt        j                  d«       d|d<   	 ddlm} j                  |d   «      |d<   |S # t
        $ r t        «        Y Œ.w xY w)z8Validates that the python package exists in environment.Ú
model_nameútextembedding-gecko-defaultz�Model_name will become a required arg for VertexAIEmbeddings starting from Feb-01-2024. Currently the default is set to textembedding-gecko@001ztextembedding-gecko@001r   )ÚTextEmbeddingModelÚclient)Ú_try_init_vertexaiÚloggerÚwarningÚvertexai.language_modelsr   ÚImportErrorr   Úfrom_pretrained)Úclsr   r   s      úq/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/embeddings/vertexai.pyÚvalidate_environmentz'VertexAIEmbeddings.validate_environment$   s}   € ð 	×Ñ˜vÔ&Ø�,ÑÐ#@Ò@Ü�N‰Nð*ôð
 $=ˆF�<Ñ ð	(ÝCð .×=Ñ=¸fÀ\Ñ>RÓSˆˆxÑØˆøô ò 	(Ü%Ö'ð	(ús   µA ÁA*Á)A*r   ÚprojectÚlocationÚrequest_parallelismÚmax_retriesÚcredentialsÚkwargsc           
      ó&  •— t        ‰| �  d||||||dœ|¤Ž |j                  dt        «      | j                  d<   | j                  d   | j                  d<   |j                  dt
        «      | j                  d<   | j                  d   | j                  d<   t        j                  «       | j                  d<   d| j                  d<   t        |¬	«      | j                  d
<   | j                  j                  j                  d«       | j                  d<   y)z$Initialize the sentence_transformer.)r*   r+   r.   r,   r-   r   Úmax_batch_sizeÚ
batch_sizeÚmin_batch_sizeÚmin_good_batch_sizeÚlockFÚbatch_size_validated)Úmax_workersÚtask_executorz/textembedding-gecko@001Úembeddings_task_type_supportedN© )ÚsuperÚ__init__ÚgetÚ_MAX_BATCH_SIZEr   Ú_MIN_BATCH_SIZEÚ	threadingÚLockr   r    Ú_endpoint_nameÚendswith)	Úselfr   r*   r+   r,   r-   r.   r/   Ú	__class__s	           €r(   r<   zVertexAIEmbeddings.__init__6   s  ø€ ô 	‰Ñð 	
ØØØ#Ø 3Ø#Ø!ñ	
ð ò	
ð +1¯*©*Ð5EÄÓ*Wˆ�‰Ð&Ñ'Ø&*§m¡mÐ4DÑ&Eˆ�‰�lÑ#Ø*0¯*©*Ð5EÄÓ*Wˆ�‰Ð&Ñ'Ø/3¯}©}Ð=MÑ/Nˆ�‰Ð+Ñ,Ü )§¡Ó 0ˆ�‰�fÑØ05ˆ�‰Ð,Ñ-Ü);Ø+ô*
ˆ�‰�oÑ&ð
 —‘×*Ñ*×3Ñ3Ð4NÓOÐOð 	�‰Ø,ò	
ó    Útextc                 óŒ   — t         j                  dz   }d|› d�}t        j                  || «      D �cg c]  }|sŒ|‘Œ	 c}S c c}w )z9Splits a string by punctuation and whitespace characters.z	
 z([z]))ÚstringÚpunctuationÚreÚsplit)rG   Úsplit_byÚpatternÚsegments       r(   Ú_split_by_punctuationz(VertexAIEmbeddings._split_by_punctuationX   sI   € ô ×%Ñ%¨Ñ/ˆØ�x�j Ð#ˆä')§x¡x°¸Ô'>ÓJÑ'>˜GÂ'’Ð'>ÑJÐJùÒJs
   ²AºAÚtextsr2   c                 ó¸  — d}t        | «      }d}g }g }|dk(  rg S ||k  rº| |   }t        t        j                  |«      «      dz  }d}	|t        kD  r*t        |«      dkD  r|j	                  |«       |g}|dz  }d}	nB||z   t        kD  st        |«      |k(  rd}	n%||dz
  k(  rd}	||z  }|j	                  |«       |dz  }|	r|j	                  |«       g }d}||k  rŒº|S )zlSplits texts in batches based on current maximum batch size
        and maximum tokens per request.
        r   é   Fé   T)Úlenr   rP   Ú_MAX_TOKENS_PER_BATCHÚappend)
rQ   r2   Ú
text_indexÚ	texts_lenÚbatch_token_lenÚbatchesÚcurrent_batchÚcurrent_textÚcurrent_text_token_cntÚend_of_batchs
             r(   Ú_prepare_batchesz#VertexAIEmbeddings._prepare_batches`   s!  € ð
 ˆ
Ü˜“Jˆ	ØˆØ#%ˆØ#%ˆØ˜Š>ØˆIØ˜9Ò$Ø  Ñ,ˆLô Ô&×<Ñ<¸\ÓJÓKÈaÑOð #ð !ˆLØ%Ô(=Ò=ô �}Ó%¨Ò)à—N‘N =Ô1Ø!- �Ø˜a‘�
Ø#‘àÐ"8Ñ8Ô;PÒPÜ�}Ó%¨Ò3à#‘à ¨Q¡Ò.ð $(�LØÐ#9Ñ9�Ø×$Ñ$ \Ô2Ø˜a‘�
ÙØ—‘˜}Ô-Ø "�Ø"#�ðK ˜9Ó$ðL ˆrF   Úembeddings_typec                 ó¦   ‡ ‡— ddl m}m}m}m} ||||g}t        |‰ j                  ¬«      }|dt        t           dt        fˆˆ fd„«       }	 |	|«      S )z1Makes a Vertex AI model request with retry logic.r   )ÚAbortedÚDeadlineExceededÚResourceExhaustedÚServiceUnavailable)Úerror_typesr-   Útexts_to_processr   c                 óä   •— ‰r-‰j                   d   rddlm} | D �cg c]  } ||‰¬«      ‘Œ }}n| }‰j                  j	                  |«      }|D �cg c]  }|j
                  ‘Œ c}S c c}w c c}w )Nr9   r   )ÚTextEmbeddingInput)rG   Ú	task_type)r   r$   rj   r    Úget_embeddingsr   )rh   rj   ÚtÚrequestsÚ
embeddingsÚembsra   rD   s         €€r(   Ú_completion_with_retryzMVertexAIEmbeddings._get_embeddings_with_retry.<locals>._completion_with_retryª   s|   ø€ á 4§=¡=Ð1QÒ#RÝGñ .óá-˜ñ '¨A¸ÖIØ-ð ñ ð
 ,�ØŸ™×3Ñ3°HÓ=ˆJÙ,6Ó7©J D�D—K“K¨JÑ7Ð7ùòùò 8s   �A(ÁA-)
Úgoogle.api_core.exceptionsrc   rd   re   rf   r   r-   r   Ústrr   )
rD   rQ   ra   rc   rd   re   rf   ÚerrorsÚretry_decoratorrq   s
   ` `       r(   Ú_get_embeddings_with_retryz-VertexAIEmbeddings._get_embeddings_with_retry”   sm   ù€ ÷	
ó 	
ð ØØØð	
ˆô 6ØØ×(Ñ(ô
ˆð
 
ð	8´T¼#±Yð 	8Ä3õ 	8ó 
ð	8ñ & eÓ,Ð,rF   c           	      óê  — ddl m} t        j                  || j                  d   «      }t        |d   «      | j                  d   k  rg |fS | j                  d   5  | j                  d   rYt        |d   «      | j                  d   k  rg |fcddd«       S g t        j                  || j                  d   «      fcddd«       S |d   }g }d}	 	 | j                  ||«      }	 t        |«      }t        | j                  d   |«      | j                  d<   |s|| j                  d   k(  rW|| j                  d<   d	| j                  d<   || j                  d   k7  r,t        j                  ||d | j                  d   «      }n|dd }ddd«       ||fS # |$ rM d	}t        |«      }|| j                  d
   k(  r‚ t        | j                  d
   t        |dz  «      «      }|d| }Y nw xY w�Œ# 1 sw Y   |fS xY w)a  Prepares text batches with one-time validation of batch size.
        Batch size varies between GCP regions and individual project quotas.
        # Returns embeddings of the first text batch that went through,
        # and text batches for the rest of the texts.
        r   )ÚInvalidArgumentr2   r4   r5   r6   NFTr3   rS   r1   rT   )	rr   rx   r   r`   r   rU   rv   ÚmaxÚint)	rD   rQ   ra   rx   r[   Úfirst_batchÚfirst_resultÚhad_failureÚfirst_batch_lens	            r(   Ú_prepare_and_validate_batchesz0VertexAIEmbeddings._prepare_and_validate_batchesº   s3  € õ 	?ä$×5Ñ5Ø�4—=‘= Ñ.ó
ˆô
 ˆw�q‰z‹?˜dŸm™mÐ,AÑBÒBØ�w�;ÐØ�]‰]˜6Ó"ð �}‰}Ð3Ò4Ü�w˜q‘z“? d§m¡m°LÑ&AÒAØ˜w˜;÷ #Ñ"ð Ô1×BÑBØ˜tŸ}™}¨\Ñ:ó ð ÷ #Ñ"ð " !™*ˆKØˆLØˆKØð@Ø#'×#BÑ#BØ# _ó$�Lð ô " +Ó.ˆOÜ36Ø—‘Ð3Ñ4°oó4ˆD�M‰MÐ/Ñ0ñ
 ˜o°·±Ð?OÑ1PÒPØ.=�—‘˜lÑ+Ø8<�—‘Ð4Ñ5ð # d§m¡mÐ4DÑ&EÒEÜ0×AÑAØ˜oÐ.Ð/°·±¸|Ñ1Ló‘Gð
 " ! "˜+�÷c #ðh ˜WÐ$Ð$øð= 'ò @Ø"&�KÜ&)¨+Ó&6�OØ&¨$¯-©-Ð8HÑ*IÒIØÜ&)ØŸ™Ð&6Ñ7¼¸_ÈqÑ=PÓ9Qó'�Oð #.Ð.>¨Ð"?’Kð@úñ ÷! #ðh ˜WÐ$Ð$ús>   Á1G&Â$G&Ã
G&ÃFÃ!B"G&ÆAG!ÇG&Ç G!Ç!G&Ç&G2Úembeddings_task_type)ÚRETRIEVAL_QUERYÚRETRIEVAL_DOCUMENTÚSEMANTIC_SIMILARITYÚCLASSIFICATIONÚ
CLUSTERINGc                 óB  — t        |«      dk(  rg S g }g }|dkD  rt        j                  ||«      }n| j                  ||«      \  }}|j	                  |«       g }| j
                  r	 ddlm}  ||d¬«      }	n|}	|	D ]<  }
|j                  | j                  d   j                  | j                  |
|¬«      «       Œ> t        |«      dkD  rt        |«       |D ]!  }|j	                  |j                  «       «       Œ# |S # t        $ r t        j                  d«       |}	Y Œ¤w xY w)a/  Embed a list of strings.

        Args:
            texts: List[str] The list of strings to embed.
            batch_size: [int] The batch size of embeddings to send to the model.
                If zero, then the largest batch size will be detected dynamically
                at the first request, starting from 250, down to 5.
            embeddings_task_type: [str] optional embeddings task type,
                one of the following
                    RETRIEVAL_QUERY	- Text is a query
                                      in a search/retrieval setting.
                    RETRIEVAL_DOCUMENT - Text is a document
                                         in a search/retrieval setting.
                    SEMANTIC_SIMILARITY - Embeddings will be used
                                          for Semantic Textual Similarity (STS).
                    CLASSIFICATION - Embeddings will be used for classification.
                    CLUSTERING - Embeddings will be used for clustering.

        Returns:
            List of embeddings, one for each text.
        r   )Útqdmr   )ÚdesczgUnable to show progress bar because tqdm could not be imported. Please install with `pip install tqdm`.r8   )rQ   ra   )rU   r   r`   r   Úextendr   r‡   r%   r"   r#   rW   r   Úsubmitrv   r   Úresult)rD   rQ   r2   r€   ro   Úfirst_batch_resultr[   Útasksr‡   Úiter_Úbatchrm   s               r(   ÚembedzVertexAIEmbeddings.embed  s4  € ôF ˆu‹:˜Š?ØˆIØ(*ˆ
Ø02ÐØ˜Š>ä(×9Ñ9¸%ÀÓL‰Gð +/×*LÑ*LØÐ+ó+Ñ'Ð ð
 	×ÑÐ,Ô-ØˆØ×!Ò!ð	 Ý%á˜WÐ+?Ô@‘ð ˆEÛˆEØ�L‰LØ—‘˜oÑ.×5Ñ5Ø×3Ñ3ØØ$8ð 6ó õð ô ˆu‹:˜Š>Ü�ŒKÛˆAØ×Ñ˜aŸh™h›jÕ)ð àÐøô) ò  Ü—‘ð>ôð  ’ð ús   Á&C; Ã; DÄDc                 ó(   — | j                  ||d«      S )a—  Embed a list of documents.

        Args:
            texts: List[str] The list of texts to embed.
            batch_size: [int] The batch size of embeddings to send to the model.
                If zero, then the largest batch size will be detected dynamically
                at the first request, starting from 250, down to 5.

        Returns:
            List of embeddings, one for each text.
        r‚   ©r�   )rD   rQ   r2   s      r(   Úembed_documentsz"VertexAIEmbeddings.embed_documentsO  s   € ð �z‰z˜% Ð-AÓBÐBrF   c                 ó4   — | j                  |gdd«      }|d   S )z€Embed a text.

        Args:
            text: The text to embed.

        Returns:
            Embedding for the text.
        rT   r�   r   r’   )rD   rG   ro   s      r(   Úembed_queryzVertexAIEmbeddings.embed_query_  s#   € ð —Z‘Z  ¨Ð+<Ó=ˆ
Ø˜!‰}ÐrF   )r   Nzus-central1r   é   N)N)r   N)r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   rs   r   Ú__annotations__r   Úboolr   r)   r	   rz   r<   Ústaticmethodr   rP   r`   Úfloatrv   r
   r   r   r�   r“   r•   Ú__classcell__)rE   s   @r(   r   r      s@  ø… ñ 2ð  "€Hˆd�3˜�8‰nÓ!Ø#Ð�tÓ#ØJàð¨$ð °4ò ó ðð( 8Ø!%Ø%Ø#$ØØ%)ñ Pð ð Pð ˜#‘ð	 Pð
 ð Pð !ð Pð ð Pð ˜c‘]ð Pð õ PðD ðK Cð K¨D°©Iò Kó ðKð ð1  S¡	ð 1°sð 1¸tÀDÈÁI¹ò 1ó ð1ðh BFñ$-Ø˜#‘Yð$-Ø19¸#±ð$-à	ˆd�5‰kÑ	ó$-ðN BFñE%Ø˜#‘YðE%Ø19¸#±ðE%à	ˆt�D˜‘KÑ  $ t¨C¡y¡/Ð1Ñ	2óE%ðT ð ñLà�C‰yðLð ðLð 'Øðññ
ð	Lð 
ˆd�5‰kÑ	óLð^ 34ñCØ˜#‘YðCØ,/ðCà	ˆd�5‰kÑ	óCð 
 ð 
¨¨U©÷ 
rF   r   )!ÚloggingrK   rI   r@   Úconcurrent.futuresr   r   Útypingr   r   r   r   r	   r
   Úlangchain_core._api.deprecationr   Úlangchain_core.embeddingsr   Ú#langchain_core.language_models.llmsr   Úlangchain_core.utilsr   Ú!langchain_community.llms.vertexair   Ú&langchain_community.utilities.vertexair   Ú	getLoggerr—   r"   rV   r>   r?   r   r:   rF   r(   Ú<module>rª      s|   ðÛ Û 	Û Û ß 7ß <× <å 6Ý 0Ý KÝ )å =Ý Là	ˆ×	Ñ	˜8Ó	$€àÐ Ø€Ø€ñ Ø
ØØEôô
M˜¨*ó Móñ
MrF   