§
    šŠtjé  ã                  óì   — 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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Ú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                  óL  — 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d0d*„Zd1d-„Zd.S )2Ú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_namespacesÚvaluesr   Úreturnc                ó¼  — t          t          |ddd¦  «        ¦  «        }||d<   t          t          |ddd¦  «        ¦  «        }||d<   t          |ddd¦  «        }||d<   |                     ¦   «         dk    r'|                     ¦   «         dk    rt          d¦  «        ‚|d         rOd	d
|d                              ¦   «         › �fg|d<   |d         r#|d                              d|d         f¦  «         n#d	d|d                              ¦   «         › �fg|d<   |                     d¦  «        s;|d         dk    rt          d¦  «        ‚d|d         › d|d         › d|d         › �|d<   |                     d¦  «        s;|d         dk    rt          d¦  «        ‚d|d         › d|d         › d|d         › �|d<   |d         r|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 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)Úclsr3   r   r   r!   s        úc/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/embeddings/yandex.pyÚvalidate_environmentz(YandexGPTEmbeddings.validate_environmentL   sb  € õ *Ý  ¨°nÀbÑIÔIñ
ô 
ˆ	ð (ˆˆ{ÑÝ'Ý  ¨°LÀ"ÑEÔEñ
ô 
ˆð $ˆˆyÑÝ(¨°¸nÈbÑQÔQˆ	Ø'ˆˆ{ÑØ×#Ò#Ñ%Ô%¨Ò+Ð+°	×0JÒ0JÑ0LÔ0LÐPRÒ0RÐ0RÝÐVÑWÔWÐWØ�+Ôð 		à Ð"T¨F°;Ô,?×,PÒ,PÑ,RÔ,RÐ"TÐ"TÐUð'ˆF�?Ñ#ð �kÔ"ð UØ�Ô'×.Ò.°¸vÀkÔ?RÐ/SÑTÔTÐTøð !Ð"S¨V°IÔ->×-OÒ-OÑ-QÔ-QÐ"SÐ"SÐTð'ˆF�?Ñ#ð �zŠz˜/Ñ*Ô*ð 	Ø�kÔ" bÒ(Ð(Ý Ð!SÑTÔTÐTàc˜ Ô,ÐcÐc¨vÐ6FÔ/GÐcÐcÈ&ÐQ`ÔJaÐcÐcð �?Ñ#ð �zŠz˜+Ñ&Ô&ð 	Ø�kÔ" bÒ(Ð(Ý Ð!OÑPÔPÐPà_˜ Ô,Ð_Ð_¨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.
        )rD   ©Ú_embed_with_retry)ÚselfrD   s     rA   Úembed_documentsz#YandexGPTEmbeddings.embed_documents|   s   € õ ! ¨UÐ3Ñ3Ô3Ð3rC   ÚtextúList[float]c                ó4   — 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   rH   )rJ   rL   s     rA   rO   zYandexGPTEmbeddings.embed_queryˆ   s    € õ ! ¨d¨VÀÐFÑFÔFÀqÔIÐIrC   N)r3   r   r4   r   )rD   rE   r4   rF   )rL   r   r4   rM   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ú__annotations__r   r   r   r    r!   r"   r$   r&   r'   r*   r,   r.   r   Úmodel_configr   rB   rK   rO   r0   rC   rA   r   r      s¨  € € € € € € ðð ð* €IÐÐÐÑð.à€GÐÐÐÑð.à�U 2Ð->Ð?Ñ?Ô?€IÐ?Ð?Ð?Ñ?Ø!Ø€MÐÐÐÑØØ€IÐÐÐÑØ Ø+€NÐ+Ð+Ð+Ñ+Ø Ø�eÐ$7Ð?QÐRÑRÔR€JÐRÐRÐRÑRØ"Ø!€MÐ!Ð!Ð!Ñ!ØØ-€CÐ-Ð-Ð-Ñ-ØØ€KÐÐÐÑØ<Ø€NÐÐÐÑØ$Ø$)ÐÐ)Ð)Ð)Ñ)ðPàÐÐÑà�:¨tÈ"ÐMÑMÔM€Làð-ð -ð -ñ „Xð-ð^
4ð 
4ð 
4ð 
4ð	Jð 	Jð 	Jð 	Jð 	Jð 	JrC   r   Úllmr4   ú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)ÚgrpcrY   r   r   r*   r   r   r   ÚloggerÚloggingÚWARNING)rV   rY   Úmin_secondsÚmax_secondss       rA   Ú_create_retry_decoratorri   ”   sq   € ØÐÐÐÐÐà€KØ€KÝØÝ ¤Ñ0Ô0Ý¨°ÀÐMÑMÔMÝ&¨Ñ2Ô2Ý%¥f­g¬oÑ>Ô>ðñ ô ð rC   Úkwargsr   úlist[list[float]]c                óN   ‡ — t          ‰ ¦  «        }|dˆ fd„¦   «         } |di |¤ŽS )z)Use tenacity to retry the embedding call.Ú_kwargsr   r4   rk   c                 ó   •— t          ‰fi | ¤ŽS )N)Ú_make_request)rm   rV   s    €rA   Ú_completion_with_retryz1_embed_with_retry.<locals>._completion_with_retry¦   s   ø€ å˜SÐ,Ð, GÐ,Ð,Ð,rC   )rm   r   r4   rk   r0   )ri   )rV   rj   Úretry_decoratorrp   s   `   rA   rI   rI   ¢   sQ   ø€ å-¨cÑ2Ô2€Oàð-ð -ð -ð -ð -ñ „_ð-ð "Ð!Ð+Ð+ FÐ+Ð+Ð+rC   rJ   rD   rE   c                óF  — 	 dd l }	 ddlm} ddlm} n# t
          $ r ddlm} ddlm} Y nw xY wn"# t          $ r}t          d¦  «        |‚d }~ww xY wg }| 	                    ¦   «         }| 
                    | j        |¦  «        }	|                     d¦  «        r| j        }
n| j        }
|D ]v} ||
|¬¦  «        } ||	¦  «        }|                     || j        ¬¦  «        }|                     t%          |j        ¦  «        ¦  «         t)          j        | j        ¦  «         Œw|S )Nr   )ÚTextEmbeddingRequest)ÚEmbeddingsServiceStubzkPlease install YandexCloud SDK  with `pip install yandexcloud`             or upgrade it to recent version.rO   )r   rL   )Úmetadata)rc   ÚDyandex.cloud.ai.foundation_models.v1.embedding.embedding_service_pb2rs   ÚIyandex.cloud.ai.foundation_models.v1.embedding.embedding_service_pb2_grpcrt   Ú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,   )rJ   rD   rj   rc   rs   rt   ÚeÚresultÚchannel_credentialsÚchannelr   rL   ÚrequestÚstubÚress                  rA   ro   ro   ­   sÓ  € ðØˆˆˆð	ðð ð ð ð ð ðð ð ð ð ð ð øõ #ð 	ð 	ð 	ðð ð ð ð ð ðð ð ð ð ð ð ð ð		øøøøøõ ð ð ð Ýð.ñ
ô 
ð ð	øøøøðøøøð
 €FØ×6Ò6Ñ8Ô8ÐØ×!Ò! $¤(Ð,?Ñ@Ô@€Gà‡z‚z�-Ñ Ô ð 'Ø”Nˆ	ˆ	àÔ&ˆ	àð (ð (ˆØ&Ð&°ÀÐFÑFÔFˆØ$Ð$ WÑ-Ô-ˆØ× Ò  °4Ô3EÐ ÑFÔFˆØ�Š•d˜3œ=Ñ)Ô)Ñ*Ô*Ð*ÝŒ
�4Ô&Ñ'Ô'Ð'Ð'à€Ms,   ‚1 ‡ “1 ”-ª1 ¬-­1 ±
A»AÁA)rV   r   r4   rW   )rV   r   rj   r   r4   rk   )rJ   r   rD   rE   rj   r   r4   rk   )#rS   Ú
__future__r   re   r�   Útypingr   r   r   r   r   Úlangchain_core.embeddingsr	   Úlangchain_core.utilsr
   r   r   Úpydanticr   r   r   r   Útenacityr   r   r   r   r   Ú	getLoggerrP   rd   r   ri   rI   ro   r0   rC   rA   ú<module>r‘      sŠ  ðØ 0Ð 0à "Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6à 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø VÐ VÐ VÐ VÐ VÐ VÐ VÐ VÐ VÐ VØ <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <ðð ð ð ð ð ð ð ð ð ð ð ð ð ð 
ˆÔ	˜8Ñ	$Ô	$€ðzJð zJð zJð zJð zJ˜) Zñ zJô zJð zJðzð ð ð ð,ð ,ð ,ð ,ð)ð )ð )ð )ð )ð )rC   