Ë
    µŒjé  ã                  óø   — d Z ddlmZ ddlZddlZddlmZmZmZm	Z	m
Z
 ddlmZ ddlmZmZmZ ddlmZmZmZmZ ddlmZmZmZmZmZ  ej8                  e«      Z G d	„ d
ee«      Zdd„Z dd„Z!	 	 	 	 	 	 	 	 dd„Z"y)z*Wrapper around YandexGPT embedding models.é    )ÚannotationsN)ÚAnyÚCallableÚDictÚListÚSequence)Ú
Embeddings)Úconvert_to_secret_strÚget_from_dict_or_envÚpre_init)Ú	BaseModelÚ
ConfigDictÚFieldÚ	SecretStr)Úbefore_sleep_logÚretryÚretry_if_exception_typeÚstop_after_attemptÚwait_exponentialc                  ó2  — e Zd ZU dZdZded<   	 dZded<   	  edd¬«      Zded	<   	 dZ	ded
<   	 dZ
ded<   	 dZded<   	  edd¬«      Zded<   	 dZded<   	 dZded<   	 dZded<   	 dZded<   	 dZded<   	 ded<    ed d!¬"«      Zed'd#„«       Zd(d$„Zd)d%„Zy&)*ÚYandexGPTEmbeddingsa4  YandexGPT Embeddings models.

    To use, you should have the ``yandexcloud`` python package installed.

    There are two authentication options for the service account
    with the ``ai.languageModels.user`` role:
        - You can specify the token in a constructor parameter `iam_token`
        or in an environment variable `YC_IAM_TOKEN`.
        - You can specify the key in a constructor parameter `api_key`
        or in an environment variable `YC_API_KEY`.

    To use the default model specify the folder ID in a parameter `folder_id`
    or in an environment variable `YC_FOLDER_ID`.

    Example:
        .. code-block:: python

            from langchain_community.embeddings.yandex import YandexGPTEmbeddings
            embeddings = YandexGPTEmbeddings(iam_token="t1.9eu...", folder_id=<folder-id>)
    Ú r   Ú	iam_tokenÚapi_keyÚquery_model_uri)ÚdefaultÚaliasÚstrÚ	model_uriÚdoc_model_uriÚ	folder_idztext-search-docÚdoc_model_nameztext-search-queryÚquery_model_nameÚ
model_nameÚlatestÚmodel_versionzllm.api.cloud.yandex.net:443Úurlé   ÚintÚmax_retriesg        ÚfloatÚsleep_intervalFÚboolÚdisable_request_loggingr   Úgrpc_metadataT© )Úpopulate_by_nameÚprotected_namespacesc                óÔ  — t        t        |ddd«      «      }||d<   t        t        |ddd«      «      }||d<   t        |ddd«      }||d<   |j                  «       dk(  r|j                  «       dk(  rt        d«      ‚|d   r;d	d
|d   j                  «       › �fg|d<   |d   r6|d   j	                  d|d   f«       nd	d|d   j                  «       › �fg|d<   |j                  d«      s*|d   dk(  rt        d«      ‚d|d   › d|d   › d|d   › �|d<   |j                  d«      s*|d   dk(  rt        d«      ‚d|d   › d|d   › d|d   › �|d<   |d   r|d   j	                  d«       |S )z.Validate that iam token exists in environment.r   ÚYC_IAM_TOKENr   r   Ú
YC_API_KEYr!   ÚYC_FOLDER_IDz7Either 'YC_API_KEY' or 'YC_IAM_TOKEN' must be provided.ÚauthorizationzBearer r/   zx-folder-idzApi-Key r    z0'doc_model_uri' or 'folder_id' must be provided.zemb://Ú/r"   r&   r   z,'model_uri' or 'folder_id' must be provided.r$   r.   )zx-data-logging-enabledÚfalse)r
   r   Úget_secret_valueÚ
ValueErrorÚappendÚget)ÚclsÚvaluesr   r   r!   s        úo/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/embeddings/yandex.pyÚvalidate_environmentz(YandexGPTEmbeddings.validate_environmentL   s÷  € ô *Ü  ¨°nÀbÓIó
ˆ	ð (ˆˆ{ÑÜ'Ü  ¨°LÀ"ÓEó
ˆð $ˆˆyÑÜ(¨°¸nÈbÓQˆ	Ø'ˆˆ{ÑØ×#Ñ#Ó%¨Ò+°	×0JÑ0JÓ0LÐPRÒ0RÜÐVÓWÐWØ�+Òà  G¨F°;Ñ,?×,PÑ,PÓ,RÐ+SÐ"TÐUð'ˆF�?Ñ#ð �kÒ"Ø�Ñ'×.Ñ.°¸vÀkÑ?RÐ/SÕTð ! H¨V°IÑ->×-OÑ-OÓ-QÐ,RÐ"SÐTð'ˆF�?Ñ#ð �z‰z˜/Ô*Ø�kÑ" bÒ(Ü Ð!SÓTÐTà˜ Ñ,Ð-¨Q¨vÐ6FÑ/GÐ.HÈÈ&ÐQ`ÑJaÐIbÐcð �?Ñ#ð �z‰z˜+Ô&Ø�kÑ" bÒ(Ü Ð!OÓPÐPà˜ Ñ,Ð-¨Q¨v°lÑ/CÐ.DÀAÀfÈ_ÑF]ÐE^Ð_ð �;Ñð Ð+Ò,Ø�?Ñ#×*Ñ*ðôð ˆó    c                ó   — t        | |¬«      S )zÀEmbed documents using a YandexGPT embeddings models.

        Args:
            texts: The list of texts to embed.

        Returns:
            List of embeddings, one for each text.
        )Útexts©Ú_embed_with_retry)ÚselfrD   s     r@   Úembed_documentsz#YandexGPTEmbeddings.embed_documents|   s   € ô ! ¨UÔ3Ð3rB   c                ó&   — t        | |gd¬«      d   S )z¦Embed a query using a YandexGPT embeddings models.

        Args:
            text: The text to embed.

        Returns:
            Embeddings for the text.
        T)rD   Úembed_queryr   rE   )rG   Útexts     r@   rJ   zYandexGPTEmbeddings.embed_queryˆ   s   € ô ! ¨d¨VÀÔFÀqÑIÐIrB   N)r?   r   Úreturnr   )rD   ú	List[str]rL   zList[List[float]])rK   r   rL   zList[float])Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ú__annotations__r   r   r   r    r!   r"   r$   r&   r'   r*   r,   r.   r   Úmodel_configr   rA   rH   rJ   r0   rB   r@   r   r      sî   … ñð* €IˆyÓð.à€GˆYÓð.á 2Ð->Ô?€IˆsÓ?Ø!Ø€M�3ÓØØ€IˆsÓØ Ø+€N�CÓ+Ø ÙÐ$7Ð?QÔR€J�ÓRØ"Ø!€M�3Ó!ØØ-€CˆÓ-ØØ€K�ÓØ<Ø€N�EÓØ$Ø$)Ð˜TÓ)ðPàÓá¨tÈ"ÔM€Làò-ó ð-ó^
4ô	JrB   r   c           
     ó¾   — ddl m} d}d}t        dt        | j                  «      t        d||¬«      t        |«      t        t        t        j                  «      ¬«      S )Nr   )ÚRpcErroré   é<   T)Ú
multiplierÚminÚmax)ÚreraiseÚstopÚwaitr   Úbefore_sleep)ÚgrpcrU   r   r   r*   r   r   r   ÚloggerÚloggingÚWARNING)ÚllmrU   Úmin_secondsÚmax_secondss       r@   Ú_create_retry_decoratorrf   ”   sM   € Ýà€KØ€KÜØÜ §¡Ó0Ü¨°ÀÔMÜ&¨Ó2Ü%¤f¬g¯o©oÓ>ôð rB   c                ó@   ‡ — t        ‰ «      }|dˆ fd„«       } |di |¤ŽS )z)Use tenacity to retry the embedding call.c                 ó   •— t        ‰fi | ¤ŽS )N)Ú_make_request)Ú_kwargsrc   s    €r@   Ú_completion_with_retryz1_embed_with_retry.<locals>._completion_with_retry¦   s   ø€ ä˜SÑ, GÑ,Ð,rB   )rj   r   rL   úlist[list[float]]r0   )rf   )rc   ÚkwargsÚretry_decoratorrk   s   `   r@   rF   rF   ¢   s/   ø€ ä-¨cÓ2€Oàô-ó ð-ñ "Ñ+ FÑ+Ð+rB   c                ó<  — 	 dd l }	 ddlm} ddlm} g }|j                  «       }|j                  | j                  |«      }	|j                  d«      r| j                  }
n| j                  }
|D ]t  } ||
|¬«      } ||	«      }|j                  || j                   ¬«      }|j#                  t%        |j&                  «      «       t)        j*                  | j,                  «       Œv |S # t
        $ r ddlm} ddlm} Y Œêw xY w# t        $ r}t        d«      |‚d }~ww xY w)Nr   )ÚTextEmbeddingRequest)ÚEmbeddingsServiceStubzkPlease install YandexCloud SDK  with `pip install yandexcloud`             or upgrade it to recent version.rJ   )r   rK   )Úmetadata)r_   ÚDyandex.cloud.ai.foundation_models.v1.embedding.embedding_service_pb2rp   ÚIyandex.cloud.ai.foundation_models.v1.embedding.embedding_service_pb2_grpcrq   ÚModuleNotFoundErrorÚByandex.cloud.ai.foundation_models.v1.foundation_models_service_pb2ÚGyandex.cloud.ai.foundation_models.v1.foundation_models_service_pb2_grpcÚImportErrorÚssl_channel_credentialsÚsecure_channelr'   r=   r   r    ÚTextEmbeddingr/   r<   ÚlistÚ	embeddingÚtimeÚsleepr,   )rG   rD   rm   r_   rp   rq   ÚeÚresultÚchannel_credentialsÚchannelr   rK   ÚrequestÚstubÚress                  r@   ri   ri   ­   s  € ðÛð	õõð €FØ×6Ñ6Ó8ÐØ×!Ñ! $§(¡(Ð,?Ó@€Gà‡z�z�-Ô Ø—N‘N‰	à×&Ñ&ˆ	ãˆÙ&°ÀÔFˆÙ$ WÓ-ˆØ× Ñ  °4×3EÑ3EÐ ÓFˆØ�‰”d˜3Ÿ=™=Ó)Ô*Ü�
‰
�4×&Ñ&Õ'ð ð €Møô9 #ò 	õ÷ð		ûô ò Üð.ó
ð ð	ûðús4   ‚D ‡C& Ã&C>Ã;D Ã=C>Ã>D Ä	DÄ
DÄD)rc   r   rL   zCallable[[Any], Any])rc   r   rm   r   rL   rl   )rG   r   rD   rM   rm   r   rL   rl   )#rQ   Ú
__future__r   ra   r~   Útypingr   r   r   r   r   Úlangchain_core.embeddingsr	   Úlangchain_core.utilsr
   r   r   Úpydanticr   r   r   r   Útenacityr   r   r   r   r   Ú	getLoggerrN   r`   r   rf   rF   ri   r0   rB   r@   Ú<module>rŽ      s†   ðÙ 0å "ã Û ß 6Õ 6å 0ß VÑ Vß <Ó <÷õ ð 
ˆ×	Ñ	˜8Ó	$€ôzJ˜) Zô zJózó,ð)Ø
ð)Ø&/ð)Ø;>ð)àô)rB   