
    dha2                    8   S SK Jr  S SKrS SKJrJrJrJrJrJ	r	  S SK
JrJr  S SKJr  S SKJr  S SKJrJrJr  S SKJr  S S	KJrJrJrJrJr  S S
KJr  \R>                  " \ 5      r! " S S\5      r" " S S\"\5      r#      SS jr$SS jr%SS jr&SS jr'SS jr(g)    )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                  0   \ rS rSr% SrS\S'    SrS\S'    SrS\S'    SrS\S'    S	r	S\S
'    Sr
S\S'    SrS\S'    SrS\S'    SrS\S'    SrS\S'    SrS\S'    SrS\S'    SrS\S'    SrS\S '   \S%S! j5       r\S&S" j5       r\S'S# j5       rS$rg)(_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                    g)N
yandex_gpt selfs    W/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/llms/yandex.py	_llm_type_BaseYandexGPT._llm_type>   s        c                v    U R                   U R                  U R                  U R                  U R                  S.$ )zGet the identifying parameters.r    r%   r'   r)   r,   r;   r4   s    r6   _identifying_params"_BaseYandexGPT._identifying_paramsB   s5     ++//II++
 	
r9   c                   [        [        USSS5      5      nX!S'   [        [        USSS5      5      nX1S'   [        USSS5      nXAS'   UR                  5       S:X  a  UR                  5       S:X  a  [        S5      eUS   (       a@  S	S
US   R                  5        34/US'   US   (       a  US   R	                  SUS   45        OS	SUS   R                  5        34/US'   US   S:X  a  US   S:X  a  [        S5      eUS   (       d  SUS    SUS    SUS    3US'   US   (       a  US   R	                  S5        U$ )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 r0   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        r6   validate_environment#_BaseYandexGPT.validate_environmentM   s    * nbI
	 ({' L"E
 $y(nbQ	'{##%+	0J0J0LPR0RVWW+ GF;,?,P,P,R+S"TU'F?# k"'..vk?R/ST !HVI->-O-O-Q,R"ST'F?# +"$)<)BRSSk",-Qvl/C.DAf_F]E^_ ; +,?#** r9   r3   )returnr   )rL   zDict[str, Any])rI   r   rL   r   )__name__
__module____qualname____firstlineno__r   __annotations__r   r   r    r!   r#   r%   r'   r)   r*   r,   r-   r/   r0   propertyr7   r<   r   rJ   __static_attributes__r3   r9   r6   r   r      s    Iy.GY.Is Is&J&!M3!KJJ= !%D
$9-C-K<NE$$)T)P(,M%,  
 
 ' 'r9   r   c                  `    \ rS rSrSr  S         SS jjr  S         S	S jjrSrg)
	YandexGPTx   a  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                4    [        XS9nUb  [        XR5      nU$ )a,  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   r5   rY   r)   run_managerkwargstexts         r6   _callYandexGPT._call   s#    * %T9&t2Dr9   c                P   #    [        XS9I Sh  vN nUb  [        XR5      nU$  N7f)zAsync 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.
rX   N)acompletion_with_retryr   r[   s         r6   _acallYandexGPT._acall   s/       ,D@@&t2D As   &$&r3   )NN)
rY   r   r)   r(   r\   z"Optional[CallbackManagerForLLMRun]r]   r   rL   r   )
rY   r   r)   r(   r\   z'Optional[AsyncCallbackManagerForLLMRun]r]   r   rL   r   )rM   rN   rO   rP   __doc__r_   rc   rS   r3   r9   r6   rU   rU   x   s    4 %):>	 " 8	
  
: %)?C	 " =	
  
 r9   rU   c           
     4    SS K nSSKJnJn   SSKJnJn  SSKJn  SSK	J
n  UR!                  5       n
UR#                  U R$                  U
5      nU" U R&                  U" U" U R(                  S9U" U R*                  S9S9U" S	US
9/S9nU" U5      nUR-                  XR.                  S9n[1        U5      S   R2                  S   R4                  R6                  $ ! [         a    SSKJnJn  SSKJn  SSKJ
n   Nf = f! [         a  n	[        S5      U	eS n	A	ff = f)Nr   DoubleValue
Int64ValueCompletionOptionsMessage)CompletionRequest)TextGenerationServiceStubkPlease install YandexCloud SDK  with `pip install yandexcloud`             or upgrade it to recent version.valuer%   r'   userroler^   r    completion_optionsmessagesmetadata)grpcgoogle.protobuf.wrappers_pb2rh   ri   4yandex.cloud.ai.foundation_models.v1.text_common_pb2rk   rl   Pyandex.cloud.ai.foundation_models.v1.text_generation.text_generation_service_pb2rm   Uyandex.cloud.ai.foundation_models.v1.text_generation.text_generation_service_pb2_grpcrn   ModuleNotFoundError:yandex.cloud.ai.foundation_models.v1.foundation_models_pb2Byandex.cloud.ai.foundation_models.v1.foundation_models_service_pb2Gyandex.cloud.ai.foundation_models.v1.foundation_models_service_pb2_grpcImportErrorssl_channel_credentialssecure_channelr*   r    r%   r'   
Completionr0   listalternativesmessager^   )r5   rY   r{   rh   ri   rk   rl   rm   rn   echannel_credentialschannelrequeststubress                  r6   _make_requestr      s   H	& 668!!$((,?@G..,#$*:*:;!8
 vF34G %W-D
//',>,>/
?C9Q<$$Q'//4449 # 
	
	  .
 	s4   C< C C96C< 8C99C< <
DDDc                  #     SS K nSS KnSSKJnJn   SSKJnJn  SSKJ	nJ
n	  SSKJn
  SSKJn  SSKJn  S	nUR-                  5       nUR.                  R1                  U R2                  U5       IS h  vN nU" U R4                  U" U" U R6                  S
9U" U R8                  S
9S9U" SUS9/S9nU
" U5      nUR;                  UU R<                  S9I S h  vN nUR.                  R1                  X5       IS h  vN nU" U5      nUR>                  (       d^  URA                  S5      I S h  vN   U" URB                  S9nURE                  UU R<                  S9I S h  vN nUR>                  (       d  M^  S S S 5      IS h  vN   U	" 5       nURF                  RI                  U5        URJ                  S   RL                  RN                  sS S S 5      IS h  vN   $ ! [         a    SSKJnJn  SSKJ	nJ
n	  SSKJn
   GNf = f! [*         a  n[+        S5      UeS nAff = f GN GNN GN- N N N! , IS h  vN  (       d  f       N= f Ns! , IS h  vN  (       d  f       g = f7f)Nr   rg   rj   )rm   CompletionResponse)TextGenerationAsyncServiceStub)GetOperationRequest)OperationServiceStubro   z"operation.api.cloud.yandex.net:443rp   rr   rs   rt   rv   ry      )operation_id)(asyncior{   r|   rh   ri   r}   rk   rl   r~   rm   r   r   r   r   r   r   r   ,yandex.cloud.operation.operation_service_pb2r   1yandex.cloud.operation.operation_service_pb2_grpcr   r   r   aior   r*   r    r%   r'   r   r0   donesleepidGetresponseUnpackr   r   r^   )r5   rY   r   r{   rh   ri   rk   rl   rm   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	 	U	
 =668xx&&txx1DEE#nn0'd.>.>?%DOO<  678
 .g6//'D<N<N/OO	88**
 
12CDNnnmmA&&&$7Y\\$R!"0"4"4%!// #5 # 	  nnn	
 
 12!!"56"//2::??3 FEE/ # 	 	   .
 	 F P

 '
 
 
 
 FEEEs  I&H G H <I&3H!4I&7AIH$#I:H';I>.H0,H*-1H0H,H06IH.AI
I&I
I& H <H ?H  H 
HHHI&$I'I*H0,H0.I0I	6H97I	I
I&I#II#I&c           
         SSK Jn  U R                  nSn[        S[	        U R
                  5      [        SX#S9[        U5      [        [        [        R                  5      S9$ )Nr   )RpcError<   Tr   )
multiplierminmax)reraiser)   waitr   before_sleep)r{   r   r-   r   r   r,   r   r   r   loggerloggingWARNING)llmr   min_secondsmax_secondss       r6   _create_retry_decoratorr   8  sQ    $$KK0M&2%fgoo> r9   c                D   ^  [        T 5      nUSU 4S jj5       nU" S0 UD6$ )z*Use tenacity to retry the completion call.c                    > [        T40 U D6$ N)r   _kwargsr   s    r6   _completion_with_retry5completion_with_retry.<locals>._completion_with_retryJ  s    S,G,,r9   r   r   rL   r   r3   r   r   r]   retry_decoratorr   s   `   r6   rZ   rZ   F  s/    -c2O- - "+F++r9   c                `   ^ #    [        T 5      nUSU 4S jj5       nU" S0 UD6I Sh  vN $  N7f)z0Use tenacity to retry the async completion call.c                 8   >#    [        T40 U D6I S h  vN $  N7fr   )r   r   s    r6   r   6acompletion_with_retry.<locals>._completion_with_retryU  s     #C373333s   Nr   r3   r   r   s   `   r6   rb   rb   Q  s8     -c2O4 4 (1&1111s   $.,.)r5   rU   rY   r   rL   r   )r   rU   rL   zCallable[[Any], Any])r   rU   r]   r   rL   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   	getLoggerrM   r   r   rU   r   r   r   rZ   rb   r3   r9   r6   <module>r      s    "  @ @ 4 9 V V   ?			8	$Z\ ZzE EP/5
/5/5 	/5dC@L,2r9   