§
    æ˜ºh.  ã                  óÐ   — d Z ddlmZ ddlZddlmZmZmZmZ ddl	m
Z
 ddlmZmZ ddlmZ ddlmZmZmZmZmZ  ej        e¦  «        Z G d	„ d
ee
¦  «        Zdd„Zdd„Zdd„ZdS )z*Wrapper around YandexGPT embedding models.é    )ÚannotationsN)ÚAnyÚCallableÚDictÚList)Ú
Embeddings)Ú	BaseModelÚroot_validator)Úget_from_dict_or_env)Úbefore_sleep_logÚretryÚretry_if_exception_typeÚstop_after_attemptÚwait_exponentialc                  óÜ   — e Zd ZU dZ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
Z
ded<   	 dZded<   	 dZded<   	  e¦   «         dd„¦   «         Zdd„Zdd„ZdS ) ÚYandexGPTEmbeddingsa™  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`.
    Or specify the model URI in a constructor parameter `model_uri`

    Example:
        .. code-block:: python

            from langchain_community.embeddings.yandex import YandexGPTEmbeddings
            embeddings = YandexGPTEmbeddings(iam_token="t1.9eu...", model_uri="emb://<folder-id>/text-search-query/latest")
    Ú ÚstrÚ	iam_tokenÚapi_keyÚ	model_uriÚ	folder_idztext-search-queryÚ
model_nameÚlatestÚmodel_versionzllm.api.cloud.yandex.net:443Úurlé   ÚintÚmax_retriesÚvaluesr   Úreturnc                ó  — t          |ddd¦  «        }||d<   t          |ddd¦  «        }||d<   t          |ddd¦  «        }||d<   |dk    r|dk    rt          d¦  «        ‚|d         r=d	d
|d         › �fg|d<   |d         r#|d                              d|d         f¦  «         nd	d|d         › �ff|d<   |d         dk    r|d         dk    rt          d¦  «        ‚|d         s d|d         › d|d         › d|d         › �|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 Ú_grpc_metadatazx-folder-idzApi-Key r   z3Either 'model_uri' or 'folder_id' must be provided.zemb://ú/r   r   )r   Ú
ValueErrorÚappend)Úclsr    r   r   r   s        úm/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/langchain_community/embeddings/yandex.pyÚvalidate_environmentz(YandexGPTEmbeddings.validate_environmentA   s„  € õ )¨°¸nÈbÑQÔQˆ	Ø'ˆˆ{ÑÝ& v¨y¸,ÈÑKÔKˆØ#ˆˆyÑÝ(¨°¸nÈbÑQÔQˆ	Ø'ˆˆ{ÑØ�bŠ=ˆ=˜Y¨"š_˜_ÝÐVÑWÔWÐWØ�+Ôð 		à Ð"A¨F°;Ô,?Ð"AÐ"AÐBð(ˆFÐ#Ñ$ð �kÔ"ð VØÐ'Ô(×/Ò/°ÀÀ{Ô@SÐ0TÑUÔUÐUøð !Ð"@¨V°IÔ->Ð"@Ð"@ÐAð(ˆFÐ#Ñ$ð �+Ô "Ò$Ð$¨°Ô)<ÀÒ)BÐ)BÝÐRÑSÔSÐSØ�kÔ"ð 	`ð `˜ Ô,Ð_Ð_¨v°lÔ/CÐ_Ð_ÀfÈ_ÔF]Ð_Ð_ð Øñð ˆó    Útextsú	List[str]úList[List[float]]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.
        ©r/   ©Ú_embed_with_retry)Úselfr/   s     r,   Úembed_documentsz#YandexGPTEmbeddings.embed_documents_   s   € õ ! ¨UÐ3Ñ3Ô3Ð3r.   ÚtextúList[float]c                ó2   — t          | |g¬¦  «        d         S )z¦Embed a query using a YandexGPT embeddings models.

        Args:
            text: The text to embed.

        Returns:
            Embeddings for the text.
        r3   r   r4   )r6   r8   s     r,   Úembed_queryzYandexGPTEmbeddings.embed_queryk   s   € õ ! ¨d¨VÐ4Ñ4Ô4°QÔ7Ð7r.   N)r    r   r!   r   )r/   r0   r!   r1   )r8   r   r!   r9   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ú__annotations__r   r   r   r   r   r   r   r
   r-   r7   r;   © r.   r,   r   r      s)  € € € € € € ðð ð, €IÐÐÐÑð.à€GÐÐÐÑð.à€IÐÐÐÑØØ€IÐÐÐÑØ Ø€IÐÐÐÑØØ)€JÐ)Ð)Ð)Ñ)ØØ!€MÐ!Ð!Ð!Ñ!ØØ-€CÐ-Ð-Ð-Ñ-ØØ€KÐÐÐÑØ<à€^ÑÔðð ð ñ Ôðð:
4ð 
4ð 
4ð 
4ð	8ð 	8ð 	8ð 	8ð 	8ð 	8r.   r   Úllmr!   úCallable[[Any], Any]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)ÚgrpcrE   r   r   r   r   r   r   ÚloggerÚloggingÚWARNING)rB   rE   Úmin_secondsÚmax_secondss       r,   Ú_create_retry_decoratorrU   w   sq   € ØÐÐÐÐÐà€KØ€KÝØÝ ¤Ñ0Ô0Ý¨°ÀÐMÑMÔMÝ&¨Ñ2Ô2Ý%¥f­g¬oÑ>Ô>ðñ ô ð r.   Úkwargsr   c                óN   ‡ — t          ‰ ¦  «        }|dˆ fd„¦   «         } |di |¤ŽS )z)Use tenacity to retry the embedding call.Ú_kwargsr   r!   c                 ó   •— t          ‰fi | ¤ŽS )N)Ú_make_request)rX   rB   s    €r,   Ú_completion_with_retryz1_embed_with_retry.<locals>._completion_with_retry‰   s   ø€ å˜SÐ,Ð, GÐ,Ð,Ð,r.   )rX   r   r!   r   rA   )rU   )rB   rV   Úretry_decoratorr[   s   `   r,   r5   r5   …   sQ   ø€ å-¨cÑ2Ô2€Oàð-ð -ð -ð -ð -ñ „_ð-ð "Ð!Ð+Ð+ FÐ+Ð+Ð+r.   r6   r/   r0   c                ó€  — 	 dd l }ddlm} ddlm} n"# t
          $ r}t          d¦  «        |‚d }~ww xY wg }|                     ¦   «         }|                     | j        |¦  «        }|D ]U}	 || j	        |	¬¦  «        }
 ||¦  «        }| 
                    |
| j        ¬¦  «        }|                     |j        ¦  «         ŒV|S )Nr   )ÚTextEmbeddingRequest)ÚEmbeddingsServiceStubz>Please install YandexCloud SDK with `pip install yandexcloud`.)r   r8   )Úmetadata)rO   ÚByandex.cloud.ai.foundation_models.v1.foundation_models_service_pb2r^   ÚGyandex.cloud.ai.foundation_models.v1.foundation_models_service_pb2_grpcr_   ÚImportErrorÚssl_channel_credentialsÚsecure_channelr   r   ÚTextEmbeddingr'   r*   Ú	embedding)r6   r/   rO   r^   r_   ÚeÚresultÚchannel_credentialsÚchannelr8   ÚrequestÚstubÚress                r,   rZ   rZ   �   s(  € ðØˆˆˆð	
ð 	
ð 	
ð 	
ð 	
ð 	
ð	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
øõ ð ð ð ÝØOñ
ô 
àð	øøøøðøøøð €FØ×6Ò6Ñ8Ô8ÐØ×!Ò! $¤(Ð,?Ñ@Ô@€Gàð %ð %ˆØ&Ð&°´ÀdÐKÑKÔKˆØ$Ð$ WÑ-Ô-ˆØ× Ò  °4Ô3FÐ ÑGÔGˆØ�Š�c”mÑ$Ô$Ð$Ð$à€Ms   ‚ “
2�-­2)rB   r   r!   rC   )rB   r   rV   r   r!   r   )r6   r   r/   r0   )r?   Ú
__future__r   rQ   Útypingr   r   r   r   Úlangchain_core.embeddingsr   Úlangchain_core.pydantic_v1r	   r
   Úlangchain_core.utilsr   Útenacityr   r   r   r   r   Ú	getLoggerr<   rP   r   rU   r5   rZ   rA   r.   r,   ú<module>rv      s[  ðØ 0Ð 0Ø "Ð "Ð "Ð "Ð "Ð "à €€€Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,à 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5ðð ð ð ð ð ð ð ð ð ð ð ð ð ð 
ˆÔ	˜8Ñ	$Ô	$€ð_8ð _8ð _8ð _8ð _8˜) Zñ _8ô _8ð _8ðDð ð ð ð,ð ,ð ,ð ,ðð ð ð ð ð r.   