Ë
    µŒja2  ã                  ó.  — 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mZ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(y)é    )ÚannotationsN)ÚAnyÚCallableÚDictÚListÚOptionalÚSequence)ÚAsyncCallbackManagerForLLMRunÚCallbackManagerForLLMRun)ÚLLM)ÚSerializable)Úconvert_to_secret_strÚget_from_dict_or_envÚpre_init)Ú	SecretStr)Ú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<   	 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y)&Ú_BaseYandexGPTÚ r   Ú	iam_tokenÚapi_keyÚstrÚ	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_retriesg      ð?Úsleep_intervalFÚboolÚdisable_request_loggingzOptional[Sequence]Úgrpc_metadatac                 ó   — y)NÚ
yandex_gpt© ©Úselfs    úi/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/llms/yandex.pyÚ	_llm_typez_BaseYandexGPT._llm_type>   s   € àó    c                óv   — | j                   | j                  | j                  | j                  | j                  dœS )zGet the identifying parameters.©r   r$   r&   r(   r+   r9   r3   s    r5   Ú_identifying_paramsz"_BaseYandexGPT._identifying_paramsB   s5   € ð Ÿ™Ø×+Ñ+ØŸ/™/Ø—I‘IØ×+Ñ+ñ
ð 	
r7   c                óV  — 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<   |d   dk(  r|d   dk(  rt        d«      ‚|d   s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   z3Either 'model_uri' or 'folder_id' must be provided.zgpt://Ú/r    r"   r.   )zx-data-logging-enabledÚfalse)r   r   Úget_secret_valueÚ
ValueErrorÚappend)ÚclsÚvaluesr   r   r   s        r5   Úvalidate_environmentz#_BaseYandexGPT.validate_environmentM   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�?Ñ#ð �+Ñ "Ò$¨°Ñ)<ÀÒ)BÜÐRÓSÐSØ�kÒ"à˜ Ñ,Ð-¨Q¨v°lÑ/CÐ.DÀAÀfÈ_ÑF]ÐE^Ð_ð �;Ñð Ð+Ò,Ø�?Ñ#×*Ñ*ðôð ˆr7   )Úreturnr   )rH   zDict[str, Any])rF   r   rH   r   )Ú__name__Ú
__module__Ú__qualname__r   Ú__annotations__r   r   r   r    r"   r$   r&   r(   r)   r+   r,   r.   r/   Úpropertyr6   r:   r   rG   r2   r7   r5   r   r      s   … Ø€IˆyÓð.à€GˆYÓð.à€IˆsÓØ Ø€IˆsÓØØ&€J�Ó&ØØ!€M�3Ó!ØØ€K�ÓðJà€J�Óð=ð !%€DÐ
Ó$Ø9Ø-€CˆÓ-ØØ€K�ÓØ<Ø€N�EÓØ$Ø$)Ð˜TÓ)ðPà(,€MÐ%Ó,àòó ðð ò
ó ð
ð ò'ó ñ'r7   r   c                  óP   — e Zd ZdZ	 	 d	 	 	 	 	 	 	 	 	 dd„Z	 	 d	 	 	 	 	 	 	 	 	 dd„Zy)Ú	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...")
    Nc                ó<   — 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.")
        ©Úprompt)Úcompletion_with_retryr   ©r4   rR   r(   Úrun_managerÚkwargsÚtexts         r5   Ú_callzYandexGPT._call�   s'   € ô* % T°&Ô9ˆØÐÜ& t¨TÓ2ˆDØˆr7   c              ‹  óX   K  — t        | |¬«      ƒ d{  –—† }|�t        ||«      }|S 7 Œ­w)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.
        rQ   N)Úacompletion_with_retryr   rT   s         r5   Ú_acallzYandexGPT._acallª   s4   è ø€ ô  ,¨D¸Ô@×@ˆØÐÜ& t¨TÓ2ˆDØˆð Aús   ‚*“(”*)NN)
rR   r   r(   r'   rU   z"Optional[CallbackManagerForLLMRun]rV   r   rH   r   )
rR   r   r(   r'   rU   z'Optional[AsyncCallbackManagerForLLMRun]rV   r   rH   r   )rI   rJ   rK   Ú__doc__rX   r[   r2   r7   r5   rO   rO   x   s�   „ ñð4 %)Ø:>ð	àðð "ðð 8ð	ð
 ðð 
óð: %)Ø?Cð	àðð "ðð =ð	ð
 ðð 
ôr7   rO   c           	     óV  — 	 dd l }ddlm}m} 	 ddlm}m} ddlm} ddl	m
} |j!                  «       }
|j#                  | j$                  |
«      } || j&                   | || j(                  ¬«       || j*                  ¬«      ¬«       |d	|¬
«      g¬«      } ||«      }|j-                  || j.                  ¬«      }t1        |«      d   j2                  d   j4                  j6                  S # t        $ r ddlm}m} ddlm} ddlm
} Y Œçw xY w# t        $ r}	t        d«      |	‚d }	~	ww xY w)Nr   ©ÚDoubleValueÚ
Int64Value©ÚCompletionOptionsÚMessage)ÚCompletionRequest)ÚTextGenerationServiceStubúkPlease install YandexCloud SDK  with `pip install yandexcloud`             or upgrade it to recent version.©Úvalue©r$   r&   Úuser©ÚrolerW   ©r   Úcompletion_optionsÚmessages©Úmetadata)ÚgrpcÚgoogle.protobuf.wrappers_pb2r_   r`   Ú4yandex.cloud.ai.foundation_models.v1.text_common_pb2rb   rc   ÚPyandex.cloud.ai.foundation_models.v1.text_generation.text_generation_service_pb2rd   ÚUyandex.cloud.ai.foundation_models.v1.text_generation.text_generation_service_pb2_grpcre   ÚModuleNotFoundErrorÚ:yandex.cloud.ai.foundation_models.v1.foundation_models_pb2Ú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&   Ú
Completionr/   ÚlistÚalternativesÚmessagerW   )r4   rR   rr   r_   r`   rb   rc   rd   re   ÚeÚchannel_credentialsÚchannelÚrequestÚstubÚress                  r5   Ú_make_requestrˆ   À   s  € ðÛßHð	÷õõð& ×6Ñ6Ó8ÐØ×!Ñ! $§(¡(Ð,?Ó@€GÙØ—.‘.Ù,Ù#¨$×*:Ñ*:Ô;Ù!¨¯©Ô8ô
ñ ˜v¨FÔ3Ð4ô€Gñ % WÓ-€DØ
�/‰/˜'¨D×,>Ñ,>ˆ/Ó
?€CÜ�‹9�Q‰<×$Ñ$ QÑ'×/Ñ/×4Ñ4Ð4øô9 #ò 
	÷õ÷ð
	ûô ò Üð.ó
ð ð	ûðús4   ‚D �C+ Ã+DÄD Ä
DÄD Ä	D(ÄD#Ä#D(c           
   ƒ  óÔ  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} d	}|j-                  «       }|j.                  j1                  | j2                  |«      4 ƒd {  –—† } || j4                   | || j6                  ¬
«       || j8                  ¬
«      ¬«       |d|¬«      g¬«      } |
|«      }|j;                  || j<                  ¬«      ƒ d {  –—† }|j.                  j1                  ||«      4 ƒd {  –—† } ||«      }|j>                  s^|jA                  d«      ƒ d {  –—†   ||jB                  ¬«      }|jE                  || j<                  ¬«      ƒ d {  –—† }|j>                  sŒ^d d d «      ƒd {  –—†   |	«       }|jF                  jI                  |«       |jJ                  d   jL                  jN                  cd d d «      ƒd {  –—†  S # t        $ r ddlm}m} ddlm	}m
}	 ddlm}
 Y �Œáw xY w# t*        $ r}t+        d«      |‚d }~ww xY w7 �Œº7 �ŒH7 �Œ&7 Œû7 ŒÅ7 Œª# 1 ƒd {  –—†7  sw Y   ŒºxY w7 Œl# 1 ƒd {  –—†7  sw Y   y xY w­w)Nr   r^   ra   )rd   ÚCompletionResponse)ÚTextGenerationAsyncServiceStub)ÚGetOperationRequest)ÚOperationServiceStubrf   z"operation.api.cloud.yandex.net:443rg   ri   rj   rk   rm   rp   é   )Úoperation_id)(Úasynciorr   rs   r_   r`   rt   rb   rc   ru   rd   rŠ   rv   r‹   rw   rx   ry   rz   Ú,yandex.cloud.operation.operation_service_pb2rŒ   Ú1yandex.cloud.operation.operation_service_pb2_grpcr�   r{   r|   Úaior}   r)   r   r$   r&   r~   r/   ÚdoneÚsleepÚidÚGetÚresponseÚUnpackr€   r�   rW   )r4   rR   r�   rr   r_   r`   rb   rc   rd   rŠ   r‹   rŒ   r�   r‚   Úoperation_api_urlrƒ   r„   r…   r†   Ú	operationÚoperation_channelÚoperation_stubÚoperation_requestÚcompletion_responses                           r5   Ú_amake_requestr    ò   s6  è ø€ ð&ÛãßHð	÷÷õõ 	Uõ	
ð =ÐØ×6Ñ6Ó8ÐØ�x‰x×&Ñ& t§x¡xÐ1D×EÔEÈÙ#Ø—n‘nÙ0Ù'¨d×.>Ñ.>Ô?Ù%¨D¯O©OÔ<ô ñ  6°Ô7Ð8ô
ˆñ .¨gÓ6ˆØŸ/™/¨'¸D×<NÑ<N˜/ÓO×Oˆ	Ø—8‘8×*Ñ*ØÐ2÷
ô 
àÙ1Ð2CÓDˆNØ—n’nØ—m‘m AÓ&×&Ð&Ù$7ÀYÇ\Á\Ô$RÐ!Ø"0×"4Ñ"4Ø%Ø!×/Ñ/ð #5ó #÷ �	ð  —n“n÷	
÷ 
ñ 1Ó2ÐØ×Ñ×!Ñ!Ð"5Ô6Ø"×/Ñ/°Ñ2×:Ñ:×?Ñ?÷3 F×EÑEøô/ #ò 	÷÷÷ð ð	ûô  ò Üð.ó
ð ð	ûðúð Fùð Pùð
ùð
 'øðøð
ø÷ 
÷ 
ñ 
úð Fø×E×EÑEüs  ‚I(„H •G* «H ·<I(Á3H-Á4I(Á7A1IÃ(H0Ã)$IÄH3ÄIÄ)H<Ä:H6Ä;7H<Å2H8Å3H<ÆIÆH:ÆAIÇI(Ç$IÇ%I(Ç*HÈ	H ÈHÈH È	H*ÈH%È%H*È*I(È0IÈ3IÈ6H<È8H<È:IÈ<I	ÉIÉI	É
IÉI(ÉI%ÉIÉI%É!I(c           
     óÒ   — ddl m} | j                  }d}t        dt	        | j
                  «      t        d||¬«      t        |«      t        t        t        j                  «      ¬«      S )Nr   )ÚRpcErroré<   TrŽ   )Ú
multiplierÚminÚmax)Úreraiser(   Úwaitr   Úbefore_sleep)rr   r¢   r,   r   r   r+   r   r   r   ÚloggerÚloggingÚWARNING)Úllmr¢   Úmin_secondsÚmax_secondss       r5   Ú_create_retry_decoratorr°   8  sS   € Ýà×$Ñ$€KØ€KÜØÜ §¡Ó0Ü¨°ÀÔMÜ&¨Ó2Ü%¤f¬g¯o©oÓ>ôð r7   c                ó@   ‡ — t        ‰ «      }|dˆ fd„«       } |di |¤ŽS )z*Use tenacity to retry the completion call.c                 ó   •— t        ‰fi | ¤ŽS ©N)rˆ   ©Ú_kwargsr­   s    €r5   Ú_completion_with_retryz5completion_with_retry.<locals>._completion_with_retryJ  s   ø€ ä˜SÑ, GÑ,Ð,r7   ©rµ   r   rH   r   r2   ©r°   ©r­   rV   Úretry_decoratorr¶   s   `   r5   rS   rS   F  s/   ø€ ä-¨cÓ2€Oàô-ó ð-ñ "Ñ+ FÑ+Ð+r7   c              ‹  ó\   ‡ K  — t        ‰ «      }|dˆ fd„«       } |di |¤Žƒ d{  –—† S 7 Œ­w)z0Use tenacity to retry the async completion call.c               ›  ó8   •K  — t        ‰fi | ¤Žƒ d {  –—† S 7 Œ­wr³   )r    r´   s    €r5   r¶   z6acompletion_with_retry.<locals>._completion_with_retryU  s   øè ø€ ä# CÑ3¨7Ñ3×3Ð3Ð3ús   ƒ“”Nr·   r2   r¸   r¹   s   `   r5   rZ   rZ   Q  s9   øè ø€ ä-¨cÓ2€Oàô4ó ð4ñ (Ñ1¨&Ñ1×1Ð1Ð1ús   ƒ",¥*¦,)r4   rO   rR   r   rH   r   )r­   rO   rH   zCallable[[Any], Any])r­   rO   rV   r   rH   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.utilsr   r   r   Úpydanticr   Útenacityr   r   r   r   r   Úlangchain_community.llms.utilsr   Ú	getLoggerrI   rª   r   rO   rˆ   r    r°   rS   rZ   r2   r7   r5   Ú<module>rÇ      sŸ   ðÝ "ã ß @× @÷õ 4Ý 9ß VÑ VÝ ÷õ õ ?à	ˆ×	Ñ	˜8Ó	$€ôZ�\ô ZôzE� ô EðP/5Ø
ð/5àð/5ð 	ó/5ódC@óLó,ô2r7   