
    dhc8                         S SK r S SKrS SKJr  S SKJrJrJrJrJ	r	J
r
Jr  S SKrS SKrS SKJrJr  S SKJr  S SKJr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   " S S\5      r  " S S\5      r!g)    N)ThreadPoolExecutor)AnyDictListMappingOptionalSequence	TypedDict)AsyncCallbackManagerForLLMRunCallbackManagerForLLMRun)BaseLLM)
Generation	LLMResultget_from_dict_or_env)
ConfigDictFieldmodel_validator)Self)enforce_stop_tokensc                   $    \ rS rSr% Sr\\S'   Srg)TrainResult   zTrain result.loss N)__name__
__module____qualname____firstlineno____doc__float__annotations____static_attributes__r       \/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/llms/gradient_ai.pyr   r      s
    
Kr$   r   c                      \ rS rSr% Sr\" SSS9r\\S'    Sr	\
\   \S'    Sr\
\   \S	'    Sr\
\   \S
'    Sr\\S'    Sr\
\R"                     \S'    \" SSS9r\" SS9\S\S\4S j5       5       r\" SS9S\4S j5       r\S\\\4   4S j5       r\S\4S j5       rS\\   S\\\4   S\\\4   4S jr S\S\\\4   S\\\4   4S jr!  S)S\S\
\"\      S \
\#   S\S\4
S! jjr$  S)S\S\
\"\      S \
\%   S\S\4
S" jjr&  S)S#\"\   S\
\"\      S \
\#   S\S\'4
S$ jjr(  S)S#\"\   S\
\"\      S \
\%   S\S\'4
S% jjr)S\\   S\S\*4S& jr+S\\   S\S\*4S' jr,S(r-g)*GradientLLM   aK  Gradient.ai LLM Endpoints.

GradientLLM is a class to interact with LLMs on gradient.ai

To use, set the environment variable ``GRADIENT_ACCESS_TOKEN`` with your
API token and ``GRADIENT_WORKSPACE_ID`` for your gradient workspace,
or alternatively provide them as keywords to the constructor of this class.

Example:
    .. code-block:: python

        from langchain_community.llms import GradientLLM
        GradientLLM(
            model="99148c6d-c2a0-4fbe-a4a7-e7c05bdb8a09_base_ml_model",
            model_kwargs={
                "max_generated_token_count": 128,
                "temperature": 0.75,
                "top_p": 0.95,
                "top_k": 20,
                "stop": [],
            },
            gradient_workspace_id="12345614fc0_workspace",
            gradient_access_token="gradientai-access_token",
        )

model   )alias
min_lengthmodel_idNgradient_workspace_idgradient_access_tokenmodel_kwargszhttps://api.gradient.ai/apigradient_api_url
aiosessionTforbid)populate_by_nameextrabefore)modevaluesreturnc                 f    [        USS5      US'   [        USS5      US'   [        USS5      US'   U$ )z?Validate that api key and python package exists in environment.r/   GRADIENT_ACCESS_TOKENr.   GRADIENT_WORKSPACE_IDr1   GRADIENT_API_URLr   )clsr8   s     r%   validate_environment GradientLLM.validate_environmentR   sZ    
 +?+-D+
&' +?+-D+
&' &:&(:&
!" r$   afterc                     SSK nU R
                  b  [        U R
                  5      S:  a  [        S5      eU R                  b  [        U R
                  5      S:  a  [        S5      eU R                  (       a  U R                  nSUR                  SS	5      s=::  a  S
::  d  O  [        S5      eSUR                  SS	5      s=::  a  S
::  d  O  [        S5      eSUR                  SS	5      :  a  [        S5      eSUR                  SS
5      :  a  [        S5      eU $ ! [         a    [        R                  " S5         GN:[         a     GNFf = f)zPost init validation.r   NzdDeprecationWarning: `GradientLLM` will use `pip install gradientai` in future releases of langchain.
   z0env variable `GRADIENT_ACCESS_TOKEN` must be set   z0env variable `GRADIENT_WORKSPACE_ID` must be settemperatureg      ?   z-`temperature` must be in the range [0.0, 1.0]top_pz'`top_p` must be in the range [0.0, 1.0]top_kz`top_k` must be positivemax_generated_token_countz,`max_generated_token_count` must be positive)
gradientaiImportErrorloggingwarning	Exceptionr/   len
ValueErrorr.   r0   get)selfrJ   kws      r%   	post_initGradientLLM.post_initc   s2   	 %%-T5O5O1PSU1UOPP%%-T5O5O1PST1TOPP""B}c27a7 !PQQw,11 !JKKBFF7C(( !;<<BFF6:: !OPP;  	OOL  		s   D  E 	EEc                 T    U R                   =(       d    0 n0 SU R                  0ESU0E$ )zGet the identifying parameters.r1   r0   )r0   r1   )rR   _model_kwargss     r%   _identifying_paramsGradientLLM._identifying_params   s>     ))/R
!4#8#89
}-
 	
r$   c                     g)zReturn type of llm.gradientr   )rR   s    r%   	_llm_typeGradientLLM._llm_type   s     r$   inputskwargsc                 J   U R                   =(       d    0 n0 UEUEnUR                  SS5      n[        U R                   SU R                   S3SU R
                   3U R                   SSS.[        Uc  [        S U 5       5      O[        S	 [        X5       5       5      S
9S9$ )Build the kwargs for the Post request, used by sync

Args:
    prompt (str): prompt used in query
    kwargs (dict): model kwargs in payload

Returns:
    Dict[str, Union[str,dict]]: _description_
multipliersN/models/z
/fine-tuneBearer application/jsonauthorizationzx-gradient-workspace-idacceptzcontent-typec              3   (   #    U H	  nS U0v   M     g7f)r^   Nr   ).0inputs     r%   	<genexpr>=GradientLLM._kwargs_post_fine_tune_request.<locals>.<genexpr>   s"       &,E %e &,s   c              3   2   #    U H  u  pUS U0S.v   M     g7f)
multiplier)r^   fineTuningParametersNr   )rj   rk   ro   s      r%   rl   rm      s/       2J-E ', ,j5 2Js   )samplesurlheadersjson)	r0   rQ   dictr1   r-   r/   r.   tuplezip)rR   r^   r_   rW   _paramsrb   s         r%   _kwargs_post_fine_tune_request*GradientLLM._kwargs_post_fine_tune_request   s     ))/R-]-f-kk-6(()$--
K#*4+E+E*F!G.2.H.H-I, 2	  #*   &,	    25V1I 
 	
r$   promptc                 R   U R                   =(       d    0 n0 UEUEn[        U R                   SU R                   S3SU R                   3U R
                   SSS.[        UUR                  SS5      UR                  SS5      UR                  S	S5      UR                  S
S5      S9S9$ )ra   rc   z	/completerd   re   rf   rI   NrE   rH   rG   )querymaxGeneratedTokenCountrE   topKtopPrr   )r0   rv   r1   r-   r/   r.   rQ   )rR   r|   r_   rW   ry   s        r%   _kwargs_post_request GradientLLM._kwargs_post_request   s     ))/R-]-f-(()$--	J#*4+E+E*F!G.2.H.H-I, 2	 '.{{3NPT'U#KKt<[[$/[[$/
 	
r$   stoprun_managerc                 h    [         R                  " S0 U R                  X5      D6nUR                  S:w  a%  [	        SUR                   SUR
                   35      e UR                  5       S   nUb  [        Xr5      nU$ ! [         R                  R                   a  n[	        SU 35      eSnAff = f)zCall to Gradients API `model/{id}/complete`.

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.
   5Gradient returned an unexpected response with status : 2RequestException while calling Gradient Endpoint: NgeneratedOutputr   )
requestspostr   status_coderN   text
exceptionsRequestExceptionru   r   )rR   r|   r   r   r_   responseer   s           r%   _callGradientLLM._call   s     	V}}Qt'@'@'PQH##s*K++,Bx}}o?  + }}01&t2D ""33 	VPQRPSTUU	Vs   AB   B1B,,B1c           
        #    U R                   (       d  [        R                  " 5        ISh  vN nUR                  " S0 U R	                  XS9D6 ISh  vN nUR
                  S:w  a%  [        SUR
                   SUR                   35      eUR                  5       I Sh  vN S   nSSS5      ISh  vN   SSS5      ISh  vN   OU R                   R                  " S0 U R	                  XS9D6 ISh  vN nUR
                  S:w  a%  [        SUR
                   SUR                   35      eUR                  5       I Sh  vN S   nSSS5      ISh  vN   Ub  [        WU5      nW$  GNA GN N N! , ISh  vN  (       d  f       N= f N! , ISh  vN  (       d  f       NN= f N Nj NY! , ISh  vN  (       d  f       Nn= f7f)zAsync Call to Gradients API `model/{id}/complete`.

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.
N)r|   r_   r   r   r   r   r   )
r2   aiohttpClientSessionr   r   statusrN   r   ru   r   )rR   r|   r   r   r_   sessionr   r   s           r%   _acallGradientLLM._acall  s      ,,..'"<< //v/M #-'S'/r(--B  #+--/13DED  /.. ++ ++6+I ??c)#O#??+2hmm_>  'mmo-/@A  &tT2D3 / 2    /... .   s   +GE.G$FE1FA	E8"E4#E8*F5E66F:GF2G8F.9G<A	F4F0F4GF2G1F4E86F8F	>F?F	FGF+FF+'G0F42G4G:F=;GGpromptsc                 D  ^ ^^^ S[         S[        [           4UUU U4S jjn[        U5      S::  a  [	        [        XQ5      5      nOA[        [        S[        U5      5      5       n[	        UR                  XQ5      5      nSSS5        [        WS9$ ! , (       d  f       N= f)*Run the LLM on the given prompt and input.r|   r9   c           	      @   > [        TR                  " SU TTS.TD6S9/$ )N)r|   r   r   r   r   )r   r   )r|   r_   r   rR   r   s    r%   _inner_generate.GradientLLM._generate.<locals>._inner_generate=  s5     %DkMS r$   rF      Ngenerations)	strr   r   rO   listmapr   minr   )rR   r   r   r   r_   r   r   ps   ` ```   r%   	_generateGradientLLM._generate3  s    	C 	D,< 	 	 w<1s?<=K#C3w<$89Q"155#BC : [11 :9s   %B
Bc                    #    / n[         R                  " U Vs/ sH  nU R                  " U4X#S.UD6PM     sn6 I Sh  vN  H  nUR                  [	        US9/5        M     [        US9$ s  snf  N27f)r   )r   r   Nr   r   )asynciogatherr   appendr   r   )rR   r   r   r   r_   r   r|   
generations           r%   
_agenerateGradientLLM._agenerateN  s       ' &%F FQQ&Q%!
 
 
J 

 ;<=
 [11
s   A3A,A3A13A3c                 j    [         R                  " S0 U R                  X5      D6nUR                  S:w  a%  [	        SUR                   SUR
                   35      e UR                  5       nUS   US   -  n[        US9$ ! [         R                  R                   a  n[	        SU 35      eS nAff = f)	Nr   r   r   r   sumLossnumberOfTrainableTokensr   r   )
r   r   rz   r   rN   r   r   r   ru   r   )rR   r^   r_   r   r   response_jsonr   s          r%   train_unsupervisedGradientLLM.train_unsupervised`  s    

	V}} 55fEH ##s*K++,Bx}}o?  + !Y'-8Q*RR%% ""33 	VPQRPSTUU	Vs   AB B2B--B2c           	        #    U R                   (       d  [        R                  " 5        IS h  vN nUR                  " S0 U R	                  X5      D6 IS h  vN nUR
                  S:w  a%  [        SUR
                   SUR                   35      eUR                  5       I S h  vN nUS   US   -  nS S S 5      IS h  vN   S S S 5      IS h  vN   OU R                   R                  " S0 U R	                  X5      D6 IS h  vN nUR
                  S:w  a%  [        SUR
                   SUR                   35      eUR                  5       I S h  vN nUS   US   -  nS S S 5      IS h  vN   [        WS9$  GNM GN& N N! , IS h  vN  (       d  f       N= f N! , IS h  vN  (       d  f       NF= f N Nj NQ! , IS h  vN  (       d  f       Nf= f7f)Nr   r   r   r   r   r   r   )
r2   r   r   r   rz   r   rN   r   ru   r   )rR   r^   r_   r   r   r   r   s          r%   atrain_unsupervisedGradientLLM.atrain_unsupervisedu  s    
 ,,..'"<< 99&I #-'S'/r(--B  +3--/$9M%i0'(ABC   /.. ++ 55fE ??c)#O#??+2hmm_>  '/mmo 5!),}=V/WW   %%9 / %:    /... !6   s   +GE:G&F E=F A	F$F %F4F ?F F GF4GF:GA	G F<G !G,F>-G=F  FF F	
FF	F G F7&F)'F73G<G >G GG	GGr   )NN).r   r   r   r   r    r   r-   r   r"   r.   r   r/   r0   rv   r1   r2   r   r   r   model_configr   classmethodr   r   r?   r   rT   propertyr   rX   r\   r	   rz   r   r   r   r   r   r   r   r   r   r   r   r   r#   r   r$   r%   r'   r'      s   6 A6Hc6;+/8C=/*+/8C=/
 $(L(4.'19c926J../6I L
 (#$ 3   $ '""4 " #"H 
WS#X%6 
 
 3  -
sm-
-4S#X->-
	c	-
^

#*38#4
	c	
F %):>	   tCy!  67	 
   
 J %)?C	** tCy!* ;<	*
 * 
*^ %):>	2c2 tCy!2 67	2
 2 
2< %)?C	2c2 tCy!2 ;<	2
 2 
2$&& & 
	&*"&"& "& 
	"&r$   r'   )"r   rL   concurrent.futuresr   typingr   r   r   r   r   r	   r
   r   r   langchain_core.callbacksr   r   #langchain_core.language_models.llmsr   langchain_core.outputsr   r   langchain_core.utilsr   pydanticr   r   r   typing_extensionsr   langchain_community.llms.utilsr   r   r'   r   r$   r%   <module>r      sS      1 J J J   8 8 5 7 7 " >) |&' |&r$   