§
    šŠtja2  ã                  ó,  — 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(dS )é    )Ú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                  ó6  — 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dS )*Ú_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_metadataÚreturnc                ó   — dS )NÚ
yandex_gpt© ©Úselfs    ú]/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/llms/yandex.pyÚ	_llm_typez_BaseYandexGPT._llm_type>   s   € àˆ|ó    úDict[str, Any]c                óD   — | j         | j        | j        | j        | j        dœS )zGet the identifying parameters.©r   r$   r&   r(   r+   r;   r4   s    r6   Ú_identifying_paramsz"_BaseYandexGPT._identifying_paramsB   s.   € ð œØÔ+Øœ/Ø”IØÔ+ð
ð 
ð 	
r8   Úvaluesr   c                ó  — 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         dk    r|d         dk    rt          d¦  «        ‚|d         s 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   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)Úclsr=   r   r   r   s        r6   Úvalidate_environmentz#_BaseYandexGPT.validate_environmentM   sÿ  € õ *Ý  ¨°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�?Ñ#ð �+Ô "Ò$Ð$¨°Ô)<ÀÒ)BÐ)BÝÐRÑSÔSÐSØ�kÔ"ð 	à_˜ Ô,Ð_Ð_¨v°lÔ/CÐ_Ð_ÀfÈ_ÔF]Ð_Ð_ð �;Ñð Ð+Ô,ð 	Ø�?Ô#×*Ò*ðñô ð ð ˆr8   )r0   r   )r0   r9   )r=   r   r0   r   )Ú__name__Ú
__module__Ú__qualname__r   Ú__annotations__r   r   r   r    r"   r$   r&   r(   r)   r+   r,   r.   r/   Úpropertyr7   r<   r   rI   r3   r8   r6   r   r      s˜  € € € € € € Ø€IÐÐÐÑð.à€GÐÐÐÑð.à€IÐÐÐÑØ Ø€IÐÐÐÑØØ&€JÐ&Ð&Ð&Ñ&ØØ!€MÐ!Ð!Ð!Ñ!ØØ€KÐÐÐÑðJà€JÐÐÐÑð=ð !%€DÐ$Ð$Ð$Ñ$Ø9Ø-€CÐ-Ð-Ð-Ñ-ØØ€KÐÐÐÑØ<Ø€NÐÐÐÑØ$Ø$)ÐÐ)Ð)Ð)Ñ)ðPà(,€MÐ,Ð,Ð,Ñ,àðð ð ñ „Xðð ð
ð 
ð 
ñ „Xð
ð ð'ð 'ð 'ñ „Xð'ð 'ð 'r8   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   r0   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.")
        ©rQ   )Úcompletion_with_retryr   ©r5   rQ   r(   rR   rT   Útexts         r6   Ú_callzYandexGPT._call�   s0   € õ* % T°&Ð9Ñ9Ô9ˆØÐÝ& t¨TÑ2Ô2ˆDØˆr8   ú'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.
        rV   N)Úacompletion_with_retryr   rX   s         r6   Ú_acallzYandexGPT._acallª   sF   è è € õ  ,¨D¸Ð@Ñ@Ô@Ð@Ð@Ð@Ð@Ð@Ð@ˆØÐÝ& t¨TÑ2Ô2ˆDØˆr8   )NN)
rQ   r   r(   r'   rR   rS   rT   r   r0   r   )
rQ   r   r(   r'   rR   r[   rT   r   r0   r   )rJ   rK   rL   Ú__doc__rZ   r^   r3   r8   r6   rP   rP   x   s`   € € € € € ðð ð4 %)Ø:>ð	ð ð ð ð ð: %)Ø?Cð	ð ð ð ð ð ð r8   rP   r5   rQ   r   r0   c           	     óf  — 	 dd l }ddlm}m} 	 ddlm}m} ddlm} ddl	m
} n$# t          $ r ddlm}m} 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|                     ¦   «         }
|                     | j        |
¦  «        } || j         | || j        ¬¦  «         || j        ¬¦  «        ¬¦  «         |d	|¬
¦  «        g¬¦  «        } ||¦  «        }|                     || j        ¬¦  «        }t1          |¦  «        d         j        d         j        j        S )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©ÚrolerY   ©r   Úcompletion_optionsÚmessages©Úmetadata)ÚgrpcÚgoogle.protobuf.wrappers_pb2rb   rc   Ú4yandex.cloud.ai.foundation_models.v1.text_common_pb2re   rf   ÚPyandex.cloud.ai.foundation_models.v1.text_generation.text_generation_service_pb2rg   ÚUyandex.cloud.ai.foundation_models.v1.text_generation.text_generation_service_pb2_grpcrh   Ú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ÚmessagerY   )r5   rQ   ru   rb   rc   re   rf   rg   rh   ÚeÚchannel_credentialsÚchannelÚrequestÚstubÚress                  r6   Ú_make_requestr‹   À   s@  € ðØˆˆˆØHÐHÐHÐHÐHÐHÐHÐHð	ðð ð ð ð ð ð ð ðð ð ð ð ð ðð ð ð ð ð ð øõ #ð 
	ð 
	ð 
	ðð ð ð ð ð ð ð ðð ð ð ð ð ðð ð ð ð ð ð ð ð
	øøøøøõ ð ð ð Ýð.ñ
ô 
ð ð	øøøøðøøøð
 ×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Ð4s7   ‚A	 �$ £A	 ¤AÁA	 ÁAÁA	 Á	
A(ÁA#Á#A(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}
 n&# t          $ r ddlm}m} ddlm	}m
}	 ddlm}
 Y nw xY w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   ra   rd   )rg   ÚCompletionResponse)ÚTextGenerationAsyncServiceStub)ÚGetOperationRequest)ÚOperationServiceStubri   z"operation.api.cloud.yandex.net:443rj   rl   rm   rn   rp   rs   é   )Úoperation_id)(Úasyncioru   rv   rb   rc   rw   re   rf   rx   rg   r�   ry   rŽ   rz   r{   r|   r}   Ú,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„   rY   )r5   rQ   r“   ru   rb   rc   re   rf   rg   r�   rŽ   r�   r�   r…   Úoperation_api_urlr†   r‡   rˆ   r‰   Ú	operationÚoperation_channelÚoperation_stubÚoperation_requestÚcompletion_responses                           r6   Ú_amake_requestr£   ò   s&  è è € ð&ØˆˆˆàˆˆˆØHÐHÐHÐHÐHÐHÐHÐHð	ðð ð ð ð ð ð ð ðð ð ð ð ð ð ð ðð ð ð ð ð ð øõ #ð 	ð 	ð 	ðð ð ð ð ð ð ð ðð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð	øøøð 	UÐTÐTÐTÐTÐTð	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
øõ ð ð ð Ýð.ñ
ô 
ð ð	øøøøðøøøð
 =ÐØ×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Ô<N˜/ÑOÔOÐOÐOÐOÐOÐOÐOˆ	Ø”8×*Ò*ØÐ2ñ
ô 
ð 
	ð 
	ð 
	ð 
	ð 
	ð 
	ð 
	ð 
	àØ1Ð1Ð2CÑDÔDˆNØ”nð Ø—m’m AÑ&Ô&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ø$7Ð$7ÀYÄ\Ð$RÑ$RÔ$RÐ!Ø"0×"4Ò"4Ø%Ø!Ô/ð #5ñ #ô #ð ð ð ð ð ð �	ð  ”nð ð ð	
	ð 
	ð 
	ñ 
	ô 
	ð 
	ð 
	ð 
	ð 
	ð 
	ð 
	ð 
	ð 
	ð 
	ð 
	ð 
	ð 
	ð 
	ð 
	ð 
	ð 
	ð 
	ð 
	øøøð 
	ð 
	ð 
	ð 
	ð 1Ð0Ñ2Ô2ÐØÔ×!Ò!Ð"5Ñ6Ô6Ð6Ø"Ô/°Ô2Ô:Ô?ð3@ð @ð @ð @ñ @ô @ð @ð @ð @ð @ð @ð @ð @ð @ð @ð @ð @ð @ð @ð @ð @ð @ð @ð @øøøð @ð @ð @ð @ð @ð @so   „A •, «A ¬ AÁA ÁAÁA Á
A>Á)A9Á9A>Â=BH.ÅA(GÆ>H.Ç
G	ÇH.ÇG	Ç=H.È.
H8È;H8ÚllmúCallable[[Any], Any]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)ru   r§   r,   r   r   r+   r   r   r   ÚloggerÚloggingÚWARNING)r¤   r§   Úmin_secondsÚmax_secondss       r6   Ú_create_retry_decoratorr´   8  st   € ØÐÐÐÐÐàÔ$€KØ€KÝØÝ ¤Ñ0Ô0Ý¨°ÀÐMÑMÔMÝ&¨Ñ2Ô2Ý%¥f­g¬oÑ>Ô>ðñ ô ð r8   rT   r   c                óN   ‡ — t          ‰ ¦  «        }|dˆ fd„¦   «         } |di |¤ŽS )z*Use tenacity to retry the completion call.Ú_kwargsr   r0   c                 ó   •— t          ‰fi | ¤ŽS ©N)r‹   ©r¶   r¤   s    €r6   Ú_completion_with_retryz5completion_with_retry.<locals>._completion_with_retryJ  s   ø€ å˜SÐ,Ð, GÐ,Ð,Ð,r8   ©r¶   r   r0   r   r3   ©r´   ©r¤   rT   Úretry_decoratorrº   s   `   r6   rW   rW   F  sQ   ø€ å-¨cÑ2Ô2€Oàð-ð -ð -ð -ð -ñ „_ð-ð "Ð!Ð+Ð+ FÐ+Ð+Ð+r8   c              ‹  ó^   ‡ K  — t          ‰ ¦  «        }|dˆ fd„¦   «         } |di |¤Žƒ d{V —†S )z0Use tenacity to retry the async completion call.r¶   r   r0   c               ›  ó.   •K  — t          ‰fi | ¤Žƒ d {V —†S r¸   )r£   r¹   s    €r6   rº   z6acompletion_with_retry.<locals>._completion_with_retryU  s/   øè è € å# CÐ3Ð3¨7Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ð3r8   Nr»   r3   r¼   r½   s   `   r6   r]   r]   Q  sg   øè è € å-¨cÑ2Ô2€Oàð4ð 4ð 4ð 4ð 4ñ „_ð4ð (Ð'Ð1Ð1¨&Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1r8   )r5   rP   rQ   r   r0   r   )r¤   rP   r0   r¥   )r¤   rP   rT   r   r0   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   Ú	getLoggerrJ   r¯   r   rP   r‹   r£   r´   rW   r]   r3   r8   r6   ú<module>rË      s  ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @ðð ð ð ð ð ð ð ð 4Ð 3Ð 3Ð 3Ð 3Ð 3Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø VÐ VÐ VÐ VÐ VÐ VÐ VÐ VÐ VÐ VØ Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ?Ð >Ð >Ð >Ð >Ð >à	ˆÔ	˜8Ñ	$Ô	$€ðZð Zð Zð Zð Z�\ñ Zô Zð ZðzEð Eð Eð Eð E� ñ Eô Eð EðP/5ð /5ð /5ð /5ðdC@ð C@ð C@ð C@ðLð ð ð ð,ð ,ð ,ð ,ð2ð 2ð 2ð 2ð 2ð 2r8   