Ë
    µŒjÆ  ã                   ó€   — d Z ddlmZmZmZmZmZmZ ddlm	Z	 ddl
mZ ddlmZ ddlmZmZ ddlmZ  G d„ d	ee«      Zy
)z¢RWKV models.

Based on https://github.com/saharNooby/rwkv.cpp/blob/master/rwkv/chat_with_bot.py
         https://github.com/BlinkDL/ChatRWKV/blob/main/v2/chat.py
é    )ÚAnyÚDictÚListÚMappingÚOptionalÚSet)ÚCallbackManagerForLLMRun)ÚLLM)Úpre_init)Ú	BaseModelÚ
ConfigDict)Úenforce_stop_tokensc                   óî  — e Zd ZU dZeed<   	 eed<   	 dZeed<   	 dZeed<   	 dZ	e
ed	<   	 d
Ze
ed<   	 dZe
ed<   	 dZe
ed<   	 dZeed<   	 dZeed<   	 dZeed<   dZeed<   dZeed<   dZeed<   dZeed<    ed¬«      Zedeeef   fd„«       Zedee   fd„«       Zededefd„«       Z ede!eef   fd„«       Z"edefd „«       Z#d*d!e$e   d"edefd#„Z%d$edefd%„Z&	 	 d+d$ed&e'e$e      d'e'e(   d(edef
d)„Z)y),ÚRWKVa´  RWKV language models.

    To use, you should have the ``rwkv`` python package installed, the
    pre-trained model file, and the model's config information.

    Example:
        .. code-block:: python

            from langchain_community.llms import RWKV
            model = RWKV(model="./models/rwkv-3b-fp16.bin", strategy="cpu fp32")

            # Simplest invocation
            response = model.invoke("Once upon a time, ")
    ÚmodelÚtokens_pathzcpu fp32ÚstrategyTÚrwkv_verboseg      ð?Útemperatureg      à?Útop_pgš™™™™™Ù?Úpenalty_alpha_frequencyÚpenalty_alpha_presenceé   Ú	CHUNK_LENÚmax_tokens_per_generationNÚclientÚ	tokenizerÚpipelineÚmodel_tokensÚmodel_stateÚforbid)ÚextraÚreturnc                 ó¢   — | j                   | j                  | j                  | j                  | j                  | j
                  | j                  dœS )úGet the identifying parameters.©Úverboser   r   r   r   r   r   r&   ©Úselfs    úg/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/llms/rwkv.pyÚ_default_paramszRWKV._default_paramsQ   sG   € ð —|‘|Ø—Z‘ZØ×+Ñ+Ø'+×'CÑ'CØ&*×&AÑ&AØŸ™Ø)-×)GÑ)Gñ
ð 	
ó    c                  ó   — dhS )r%   r'   © r.   r,   r*   Ú_rwkv_param_nameszRWKV._rwkv_param_names^   s   € ð ð
ð 	
r,   Úvaluesc                 ó¤  — 	 ddl }	 ddlm} ddlm} |j                  j                  |d   «      |d<   | j                  «       }|j                  «       D ��ci c]  \  }}||v sŒ||“Œ }}}|d   |d	<    ||d
   fd|d   i|¤Ž|d<    ||d   |d   «      |d<   |S # t        $ r t        d«      ‚w xY wc c}}w # t        $ r t        d«      ‚w xY w)z;Validate that the python package exists in the environment.r   Nz\Could not import tokenizers python package. Please install it with `pip install tokenizers`.)r   )ÚPIPELINEr   r   r   r'   r   r   r   r   zPCould not import rwkv python package. Please install it with `pip install rwkv`.)
Ú
tokenizersÚImportErrorÚ
rwkv.modelr   Ú
rwkv.utilsr2   Ú	TokenizerÚ	from_filer/   Úitems)	Úclsr0   r3   Ú	RWKVMODELr2   Ú	rwkv_keysÚkÚvÚmodel_kwargss	            r*   Úvalidate_environmentzRWKV.validate_environmente   s  € ð	Ûð	Ý4Ý+à",×"6Ñ"6×"@Ñ"@ÀÈÑAVÓ"WˆF�;Ñà×-Ñ-Ó/ˆIØ-3¯\©\¬^ÔN©^¡T Q¨¸qÀIº~˜A˜q™D¨^ˆLÑNØ&,¨^Ñ&<ˆL˜Ñ#Ù(Ø�w‘ñ Ø*0°Ñ*<ð Ø@Lñ ˆF�8Ññ "*¨&°Ñ*:¸FÀ=Ñ<QÓ!RˆF�:Ñð ˆøô1 ò 	ÜðCóð ð	üó Oøô ò 	Üð=óð ð	ús/   ‚B ‡AB: ÁB4Á$B4Á)1B: ÂB1Â4B: Â:Cc                 óÌ   — d| j                   i| j                  ¥| j                  j                  «       D ��ci c]  \  }}|t        j                  «       v sŒ||“Œ! c}}¥S c c}}w )r%   r   )r   r+   Ú__dict__r9   r   r/   )r)   r=   r>   s      r*   Ú_identifying_paramszRWKV._identifying_params„   sk   € ð �T—Z‘Zð
à×"Ñ"ð
ð !%§¡× 3Ñ 3Ô 5ÔWÑ 5™˜˜1¸¼d×>TÑ>TÓ>VÒ9Vˆq�!‰tÐ 5ÒWð
ð 	
ùó Xs   ·A ÁA c                  ó   — y)zReturn the type of llm.Úrwkvr.   r(   s    r*   Ú	_llm_typezRWKV._llm_type�   s   € ð r,   Ú_tokensÚnewline_adjc                 ó  — g }d}|D ]2  }| j                   j                  |«      }t        |«      dk(  sJ ‚||z  }Œ4 |D �cg c]  }t        |«      ‘Œ }}| xj                  |z  c_        d }	t        |«      dkD  rY| j
                  j                  |d | j                   | j                  «      \  }	| _        || j                  d  }t        |«      dkD  rŒYd}
|	|
xx   |z  cc<   | j                  d   |v rd|	| j                  d   <   |	S c c}w )Nu   ï¼Œï¼šï¼Ÿï¼�é   r   é»   éÿÿÿÿi6eÄ)	r   ÚencodeÚlenÚintr   r   Úforwardr   r    )r)   rG   rH   ÚAVOID_REPEAT_TOKENSÚAVOID_REPEATÚiÚddÚxÚtokensÚoutÚEND_OF_LINEs              r*   Úrun_rnnzRWKV.run_rnn’   s  € Ø ÐØ%ˆÛˆAØ—‘×%Ñ% aÓ(ˆBÜ�r“7˜a’<Ð�<Ø 2Ñ%Ñð ñ
 #*Ó*¡'˜Q”#�a•& 'ˆÐ*Ø×Ò˜VÑ#Õàˆä�&‹k˜AŠoØ$(§K¡K×$7Ñ$7ØÐ'˜Ÿ™Ð(¨$×*:Ñ*:ó%Ñ!ˆC�Ô!ð ˜DŸN™NÐ,Ð-ˆFô	 �&‹k˜A‹oð
 ˆØˆKÓ˜KÑ'Óà×Ñ˜RÑ Ð$7Ñ7Ø)3ˆC�×!Ñ! "Ñ%Ñ&Øˆ
ùò +s   Á DÚpromptc                 ó¾  — d | _         g | _        | j                  | j                  j	                  |«      j
                  «      }t        | j                  «      }|}i }d}t        | j                  «      D ]ç  }|D ],  }||xx   | j                  ||   | j                  z  z   z  cc<   Œ. | j                  j                  || j                  | j                  ¬«      }	d}
|	|
k(  r |S |	|vrd||	<   n||	xx   dz  cc<   | j                  |	g«      }| j                  j                  | j                  |d  «      }d|vsŒÆ||z  }||z   dz   }|| j                  dz
  k\  sŒæ |S  |S )NÚ )r   r   r   rJ   u   ï¿½éd   )r    r   rY   r   rM   ÚidsrN   Úranger   r   r   r   Úsample_logitsr   r   Údecode)r)   rZ   ÚlogitsÚbeginÚout_lastÚ
occurrenceÚdecodedrS   ÚnÚtokenÚEND_OF_TEXTÚxxxs               r*   Úrwkv_generatezRWKV.rwkv_generate«   s|  € ØˆÔØˆÔØ—‘˜dŸn™n×3Ñ3°FÓ;×?Ñ?Ó@ˆÜ�D×%Ñ%Ó&ˆØˆàˆ
àˆÜ�t×5Ñ5Ö6ˆAÛ�Ø�q“	Ø×/Ñ/Ø  ‘m d×&BÑ&BÑBñCñ”	ð  ð
 —M‘M×/Ñ/Ø D×$4Ñ$4¸D¿J¹Jð 0ó ˆEð ˆKØ˜Ò#Øð ˆð ˜JÑ&Ø$%�
˜5Ò!à˜5Ó! QÑ&Ó!à—\‘\ 5 'Ó*ˆFØ—.‘.×'Ñ'¨×(9Ñ(9¸(¸)Ð(DÓEˆCØ˜sÒ"Ø˜3‘�Ø  1™9 q™=�Ø˜×6Ñ6¸Ñ<Ó<Øàˆð5 7ð4 ˆr,   ÚstopÚrun_managerÚkwargsc                 óD   — | j                  |«      }|�t        ||«      }|S )aŠ  RWKV generation

        Args:
            prompt: The prompt to pass into the model.
            stop: A list of strings to stop generation when encountered.

        Returns:
            The string generated by the model.

        Example:
            .. code-block:: python

                prompt = "Once upon a time, "
                response = model.invoke(prompt, n_predict=55)
        )rk   r   )r)   rZ   rl   rm   rn   Útexts         r*   Ú_callz
RWKV._callÑ   s+   € ð, ×!Ñ! &Ó)ˆàÐÜ& t¨TÓ2ˆDØˆr,   )r   )NN)*Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚstrÚ__annotations__r   r   Úboolr   Úfloatr   r   r   r   rO   r   r   r   r   r   r   r    r   Úmodel_configÚpropertyr   r+   Ústaticmethodr   r/   r   r@   r   rC   rF   r   rY   rk   r   r	   rq   r.   r,   r*   r   r      sí  … ñð ƒJØ2àÓØ'à€HˆcÓØà€L�$ÓØ"à€K�ÓØ.à€Eˆ5ÓØ.à%(Ð˜UÓ(ðð %(Ð˜EÓ'ðð €IˆsÓØ+à%(Ð˜sÓ(Ø/à€FˆCÓà€IˆsÓà€HˆcÓà€L�#Óà€K�ÓáØô€Lð ð

  c¨3 h¡ò 

ó ð

ð ð
˜s 3™xò 
ó ð
ð ð¨$ð °4ò ó ðð< ð
 W¨S°#¨XÑ%6ò 
ó ð
ð ð˜3ò ó ðñ˜t C™yð °sð À3ó ð2$ Cð $¨Có $ðR %)Ø:>ñ	àðð �t˜C‘yÑ!ðð Ð6Ñ7ð	ð
 ðð 
ôr,   r   N)ru   Útypingr   r   r   r   r   r   Úlangchain_core.callbacksr	   Ú#langchain_core.language_models.llmsr
   Úlangchain_core.utilsr   Úpydanticr   r   Úlangchain_community.llms.utilsr   r   r.   r,   r*   Ú<module>rƒ      s1   ðñ÷ ;× :å =Ý 3Ý )ß *å >ôZˆ3�	õ Zr,   