§
    æ˜ºh-*  ã                  ó$  — d dl mZ d dlZd dlmZmZmZmZmZm	Z	 d dl
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mZmZmZmZ d d
lmZ  ej        e¦  «        Z G d„ de¦  «        Z  G d„ de e¦  «        Z!dd„Z"dd„Z#dd„Z$dd„Z%dd„Z&dS )é    )ÚannotationsN)ÚAnyÚCallableÚDictÚListÚMappingÚOptional)ÚAsyncCallbackManagerForLLMRunÚCallbackManagerForLLMRun)ÚLLM)ÚSerializable)Úroot_validator)Úget_from_dict_or_env)Úbefore_sleep_logÚretryÚretry_if_exception_typeÚstop_after_attemptÚwait_exponential)Úenforce_stop_tokensc                  ó  — e Zd ZU 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<   	 dZded<   	 dZded<   	 edd„¦   «         Zed d„¦   «         Z e¦   «         d!d„¦   «         ZdS )"Ú_BaseYandexGPTÚ ÚstrÚ	iam_tokenÚapi_keyÚ	folder_idÚ	model_urizyandexgpt-liteÚ
model_nameÚlatestÚmodel_versiong333333ã?ÚfloatÚtemperatureiè  ÚintÚ
max_tokensNúOptional[List[str]]Ústopzllm.api.cloud.yandex.net:443Úurlé   Úmax_retriesÚreturnc                ó   — dS )NÚ
yandex_gpt© ©Úselfs    úg/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/langchain_community/llms/yandex.pyÚ	_llm_typez_BaseYandexGPT._llm_type8   s   € àˆ|ó    úMapping[str, Any]c                óD   — | j         | j        | j        | j        | j        dœS )zGet the identifying parameters.©r   r"   r$   r&   r)   r5   r.   s    r0   Ú_identifying_paramsz"_BaseYandexGPT._identifying_params<   s.   € ð œØÔ+Øœ/Ø”IØÔ+ð
ð 
ð 	
r2   Úvaluesr   c                ó  — 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gpt://ú/r   r    )r   Ú
ValueErrorÚappend)Úclsr7   r   r   r   s        r0   Úvalidate_environmentz#_BaseYandexGPT.validate_environmentG   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]Ð_Ð_ð Øñð ˆr2   )r*   r   )r*   r3   )r7   r   r*   r   )Ú__name__Ú
__module__Ú__qualname__r   Ú__annotations__r   r   r   r   r    r"   r$   r&   r'   r)   Úpropertyr1   r6   r   rB   r-   r2   r0   r   r      sd  € € € € € € Ø€IÐÐÐÑð.à€GÐÐÐÑð.à€IÐÐÐÑØ Ø€IÐÐÐÑØØ&€JÐ&Ð&Ð&Ñ&ØØ!€MÐ!Ð!Ð!Ñ!ØØ€KÐÐÐÑðJà€JÐÐÐÑð=ð !%€DÐ$Ð$Ð$Ñ$Ø9Ø-€CÐ-Ð-Ð-Ñ-ØØ€KÐÐÐÑØ<àðð ð ñ „Xðð ð
ð 
ð 
ñ „Xð
ð €^ÑÔðð ð ñ Ôðð ð r2   r   c                  ó.   — e Zd ZdZ	 	 ddd„Z	 	 ddd„ZdS )Ú	YandexGPTaV  Yandex large language 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.llms import YandexGPT
            yandex_gpt = YandexGPT(iam_token="t1.9eu...", folder_id="b1g...")
    NÚpromptr   r&   r%   Úrun_managerú"Optional[CallbackManagerForLLMRun]Úkwargsr   r*   c                óL   — t          | |¬¦  «        }|�t          ||¦  «        }|S )at  Call the Yandex GPT model and return the output.

        Args:
            prompt: The prompt to pass into the model.
            stop: Optional list of stop words to use when generating.

        Returns:
            The string generated by the model.

        Example:
            .. code-block:: python

                response = YandexGPT("Tell me a joke.")
        ©rJ   )Úcompletion_with_retryr   ©r/   rJ   r&   rK   rM   Útexts         r0   Ú_callzYandexGPT._call   s0   € õ* % T°&Ð9Ñ9Ô9ˆØÐÝ& t¨TÑ2Ô2ˆDØˆr2   ú'Optional[AsyncCallbackManagerForLLMRun]c              ‹  ó\   K  — t          | |¬¦  «        ƒ d{V —†}|�t          ||¦  «        }|S )a  Async call the Yandex GPT model and return the output.

        Args:
            prompt: The prompt to pass into the model.
            stop: Optional list of stop words to use when generating.

        Returns:
            The string generated by the model.
        rO   N)Úacompletion_with_retryr   rQ   s         r0   Ú_acallzYandexGPT._acall™   sF   è è € õ  ,¨D¸Ð@Ñ@Ô@Ð@Ð@Ð@Ð@Ð@Ð@ˆØÐÝ& t¨TÑ2Ô2ˆDØˆr2   )NN)
rJ   r   r&   r%   rK   rL   rM   r   r*   r   )
rJ   r   r&   r%   rK   rT   rM   r   r*   r   )rC   rD   rE   Ú__doc__rS   rW   r-   r2   r0   rI   rI   g   s`   € € € € € ðð ð4 %)Ø:>ð	ð ð ð ð ð: %)Ø?Cð	ð ð ð ð ð ð r2   rI   r/   rJ   r   r*   c           	     ó  — 	 dd l }ddlm}m} ddlm}m} ddlm} ddl	m
} n"# t          $ r}	t          d¦  «        |	‚d }	~	ww xY w|                     ¦   «         }
|                     | j        |
¦  «        } || j         | || j        ¬¦  «         || j        ¬¦  «        ¬¦  «         |d	|¬
¦  «        g¬¦  «        } ||¦  «        }|                     || j        ¬¦  «        }t)          |¦  «        d         j        d         j        j        S )Nr   ©ÚDoubleValueÚ
Int64Value©ÚCompletionOptionsÚMessage)ÚCompletionRequest)ÚTextGenerationServiceStubú>Please install YandexCloud SDK with `pip install yandexcloud`.©Úvalue©r"   r$   Úuser©ÚrolerR   ©r   Úcompletion_optionsÚmessages©Úmetadata)ÚgrpcÚgoogle.protobuf.wrappers_pb2r[   r\   Ú:yandex.cloud.ai.foundation_models.v1.foundation_models_pb2r^   r_   ÚByandex.cloud.ai.foundation_models.v1.foundation_models_service_pb2r`   ÚGyandex.cloud.ai.foundation_models.v1.foundation_models_service_pb2_grpcra   ÚImportErrorÚssl_channel_credentialsÚsecure_channelr'   r   r"   r$   Ú
Completionr=   ÚlistÚalternativesÚmessagerR   )r/   rJ   rn   r[   r\   r^   r_   r`   ra   ÚeÚchannel_credentialsÚchannelÚrequestÚstubÚress                  r0   Ú_make_requestr€   ¯   s«  € ðØˆˆˆØHÐHÐHÐHÐHÐHÐHÐHð	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð	
ð 	
ð 	
ð 	
ð 	
ð 	
ð	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
øõ ð ð ð ÝØOñ
ô 
àð	øøøøðøøøð ×6Ò6Ñ8Ô8ÐØ×!Ò! $¤(Ð,?Ñ@Ô@€GØÐØ”.Ø,Ð,Ø#˜¨$Ô*:Ð;Ñ;Ô;Ø!�z¨¬Ð8Ñ8Ô8ð
ñ 
ô 
ð �'˜v¨FÐ3Ñ3Ô3Ð4ðñ ô €Gð %Ð$ WÑ-Ô-€DØ
�/Š/˜'¨DÔ,?ˆ/Ñ
@Ô
@€CÝ�‰9Œ9�QŒ<Ô$ QÔ'Ô/Ô4Ð4s   ‚ # £
A­=½Ac           
   ƒ  ó2  K  — 	 dd l }dd l}ddlm}m} ddlm}m} ddlm	}m
}	 ddlm}
 ddlm} ddlm} n"# t"          $ r}t#          d¦  «        |‚d }~ww xY wd	}|                     ¦   «         }|j                             | j        |¦  «        4 ƒd {V —†} || j         | || j        ¬
¦  «         || j        ¬
¦  «        ¬¦  «         |d|¬¦  «        g¬¦  «        } |
|¦  «        }|                     || j        ¬¦  «        ƒ d {V —†}|j                             ||¦  «        4 ƒd {V —†	 } ||¦  «        }|j        sU|                     d¦  «        ƒ d {V —†  ||j        ¬¦  «        }|                     || j        ¬¦  «        ƒ d {V —†}|j        ¯U	 d d d ¦  «        ƒd {V —† n# 1 ƒd {V —†swxY w Y    |	¦   «         }|j                              |¦  «         |j!        d         j"        j#        cd d d ¦  «        ƒd {V —† S # 1 ƒd {V —†swxY w Y   d S )Nr   rZ   r]   )r`   ÚCompletionResponse)ÚTextGenerationAsyncServiceStub)ÚGetOperationRequest)ÚOperationServiceStubrb   z"operation.api.cloud.yandex.net:443rc   re   rf   rg   ri   rl   é   )Úoperation_id)$Úasynciorn   ro   r[   r\   rp   r^   r_   rq   r`   r‚   rr   rƒ   Ú,yandex.cloud.operation.operation_service_pb2r„   Ú1yandex.cloud.operation.operation_service_pb2_grpcr…   rs   rt   Úaioru   r'   r   r"   r$   rv   r=   ÚdoneÚsleepÚidÚGetÚresponseÚUnpackrx   ry   rR   )r/   rJ   rˆ   rn   r[   r\   r^   r_   r`   r‚   rƒ   r„   r…   rz   Úoperation_api_urlr{   r|   r}   r~   Ú	operationÚoperation_channelÚoperation_stubÚoperation_requestÚcompletion_responses                           r0   Ú_amake_requestr˜   Ó   s‚  è è € ðØˆˆˆàˆˆˆØHÐHÐHÐHÐHÐHÐHÐHð	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	UÐTÐTÐTÐTÐTð	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
øõ ð ð ð ÝØOñ
ô 
àð	øøøøðøøøð =ÐØ×6Ò6Ñ8Ô8ÐØŒx×&Ò& t¤xÐ1DÑEÔEð @ð @ð @ð @ð @ð @ð @ÈØ#Ð#Ø”nØ0Ð0Ø'˜K¨dÔ.>Ð?Ñ?Ô?Ø%˜:¨D¬OÐ<Ñ<Ô<ð ñ  ô  ð �g 6°Ð7Ñ7Ô7Ð8ð
ñ 
ô 
ˆð .Ð-¨gÑ6Ô6ˆØŸ/š/¨'¸DÔ<O˜/ÑPÔPÐPÐPÐPÐPÐPÐPˆ	Ø”8×*Ò*ØÐ2ñ
ô 
ð 		ð 		ð 		ð 		ð 		ð 		ð 		ð 		àØ1Ð1Ð2CÑDÔDˆNØ”nð Ø—m’m AÑ&Ô&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ø$7Ð$7ÀYÄ\Ð$RÑ$RÔ$RÐ!Ø"0×"4Ò"4Ø%°Ô0Cð #5ñ #ô #ð ð ð ð ð ð �	ð  ”nð ð ð			ð 		ð 		ñ 		ô 		ð 		ð 		ð 		ð 		ð 		ð 		ð 		ð 		ð 		ð 		ð 		ð 		ð 		ð 		ð 		ð 		ð 		ð 		øøøð 		ð 		ð 		ð 		ð 1Ð0Ñ2Ô2ÐØÔ×!Ò!Ð"5Ñ6Ô6Ð6Ø"Ô/°Ô2Ô:Ô?ð1@ð @ð @ð @ñ @ô @ð @ð @ð @ð @ð @ð @ð @ð @ð @ð @ð @ð @ð @ð @ð @ð @ð @ð @øøøð @ð @ð @ð @ð @ð @sM   „27 ·
AÁAÁAÂBHÄ-A(F(ÆHÆ(
F2	Æ2HÆ5F2	Æ6=HÈ
HÈHÚllmúCallable[[Any], Any]c           
     óÖ   — ddl m} d}d}t          dt          | j        ¦  «        t          d||¬¦  «        t          |¦  «        t          t          t          j
        ¦  «        ¬¦  «        S )Nr   )ÚRpcErrorr†   é<   T)Ú
multiplierÚminÚmax)Úreraiser&   Úwaitr   Úbefore_sleep)rn   rœ   r   r   r)   r   r   r   ÚloggerÚloggingÚWARNING)r™   rœ   Úmin_secondsÚmax_secondss       r0   Ú_create_retry_decoratorr©   	  sq   € ØÐÐÐÐÐà€KØ€KÝØÝ ¤Ñ0Ô0Ý¨°ÀÐMÑMÔMÝ&¨Ñ2Ô2Ý%¥f­g¬oÑ>Ô>ðñ ô ð r2   rM   r   c                óN   ‡ — t          ‰ ¦  «        }|dˆ fd„¦   «         } |di |¤ŽS )z*Use tenacity to retry the completion call.Ú_kwargsr   r*   c                 ó   •— t          ‰fi | ¤ŽS ©N)r€   ©r«   r™   s    €r0   Ú_completion_with_retryz5completion_with_retry.<locals>._completion_with_retry  s   ø€ å˜SÐ,Ð, GÐ,Ð,Ð,r2   ©r«   r   r*   r   r-   ©r©   ©r™   rM   Úretry_decoratorr¯   s   `   r0   rP   rP     sQ   ø€ å-¨cÑ2Ô2€Oàð-ð -ð -ð -ð -ñ „_ð-ð "Ð!Ð+Ð+ FÐ+Ð+Ð+r2   c              ‹  ó^   ‡ K  — t          ‰ ¦  «        }|dˆ fd„¦   «         } |di |¤Žƒ d{V —†S )z0Use tenacity to retry the async completion call.r«   r   r*   c               ›  ó.   •K  — t          ‰fi | ¤Žƒ d {V —†S r­   )r˜   r®   s    €r0   r¯   z6acompletion_with_retry.<locals>._completion_with_retry&  s/   øè è € å# CÐ3Ð3¨7Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ð3r2   Nr°   r-   r±   r²   s   `   r0   rV   rV   "  sg   øè è € å-¨cÑ2Ô2€Oàð4ð 4ð 4ð 4ð 4ñ „_ð4ð (Ð'Ð1Ð1¨&Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1r2   )r/   rI   rJ   r   r*   r   )r™   rI   r*   rš   )r™   rI   rM   r   r*   r   )'Ú
__future__r   r¥   Útypingr   r   r   r   r   r	   Úlangchain_core.callbacksr
   r   Ú#langchain_core.language_models.llmsr   Ú langchain_core.load.serializabler   Úlangchain_core.pydantic_v1r   Úlangchain_core.utilsr   Útenacityr   r   r   r   r   Úlangchain_community.llms.utilsr   Ú	getLoggerrC   r¤   r   rI   r€   r˜   r©   rP   rV   r-   r2   r0   ú<module>rÀ      s
  ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?ðð ð ð ð ð ð ð ð 4Ð 3Ð 3Ð 3Ð 3Ð 3Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ?Ð >Ð >Ð >Ð >Ð >à	ˆÔ	˜8Ñ	$Ô	$€ðIð Ið Ið Ið I�\ñ Iô Ið IðXEð Eð Eð Eð E� ñ Eô Eð EðP!5ð !5ð !5ð !5ðH3@ð 3@ð 3@ð 3@ðlð ð ð ð,ð ,ð ,ð ,ð2ð 2ð 2ð 2ð 2ð 2r2   