Ë
    T^(hÊ�  ã                   ón  — d Z ddlZddlmZ ddlmZ ddlmZmZm	Z	m
Z
 ddlZddlZddlmZ ddlmZ dd	lmZ dd
lmZmZmZmZmZmZmZmZ ddlmZ  ej:                  e«      ZdZ dZ!da"d„ Z# G d„ dejH                  jJ                  «      Z&d)d„Z'd)d„Z( G d„ dejR                  «      Z* G d„ dejR                  «      Z+ G d„ dejR                  «      Z, G d„ de«      Z-e G d„ de«      «       Z.e G d„ de«      «       Z/d Z0d!Z1 ed"e0«       G d#„ d$e-«      «       Z2 ed%e0«       G d&„ d'e-e«      «       Z3g d(¢Z4y)*zPyTorch RWKV model.é    N)Ú	dataclass)ÚPath)ÚListÚOptionalÚTupleÚUnion)Únné   )ÚGenerationMixin)ÚPreTrainedModel)ÚModelOutputÚadd_code_sample_docstringsÚadd_start_docstringsÚ%add_start_docstrings_to_model_forwardÚis_bitsandbytes_availableÚis_ninja_availableÚis_torch_cuda_availableÚloggingé   )Ú
RwkvConfigzRWKV/rwkv-4-169m-piler   c                 ó¸  — ddl m} t        t        «      j	                  «       j
                  j
                  j
                  dz  dz  }dD �cg c]  }||z  ‘Œ	 }}t        �t        j                  | k(  ry t        j                  d| › d�«       dd	d
dddd| › �g} |d| › �|t        j                  «       t        j                  k(  |¬«      a| t        _        y c c}w )Nr   )ÚloadÚkernelsÚrwkv)z
wkv_op.cppzwkv_cuda.cuzwkv_cuda_bf16.cuz2Loading CUDA kernel for RWKV at context length of ú.z
-res-usagez--maxrregcount 60z--use_fast_mathz-O3z-Xptxas -O3z--extra-device-vectorizationz-DTmax=Úwkv_)ÚnameÚsourcesÚverboseÚextra_cuda_cflags)Útorch.utils.cpp_extensionr   r   Ú__file__ÚresolveÚparentÚrwkv_cuda_kernelÚmax_seq_lengthÚloggerÚinfor   Úget_verbosityÚDEBUG)Úcontext_lengthÚload_kernelÚkernel_folderÚfÚcuda_kernel_filesÚflagss         úd/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/transformers/models/rwkv/modeling_rwkv.pyÚload_wkv_cuda_kernelr2   3   sê   € Ý=ô œ“N×*Ñ*Ó,×3Ñ3×:Ñ:×AÑAÀIÑMÐPVÑV€MØ4eÖf¨q˜¨Ó*ÐfÐÐfô Ð#Ô(8×(GÑ(GÈ>Ò(YØä
‡K�KÐDÀ^ÐDTÐTUÐVÔWð 	ØØØØØ&Ø
�.Ð!Ð"ð€Eñ #Ø�NÐ#Ð$Ø!Ü×&Ñ&Ó(¬G¯M©MÑ9Øô	Ðð '5ÔÕ#ùò/ gs   ÁCc                   ó0   — e Zd Zedd„«       Zedd„«       Zy)ÚRwkvLinearAttentionNc                 óê  — |j                  «       \  }}}	|t        j                  kD  r t        d|› dt        j                  › d�«      ‚||	z  t	        |	d«      z  dk7  rt        d|› d|	› dt	        |	d«      › d	�«      ‚|j
                  | _        |j                  j                  d
k7  sK|j                  j                  d
k7  s2|j                  j                  d
k7  s|j                  j                  d
k7  rt        d«      ‚t        j                  |j                  «       j                  «       «       }|j
                  t        j                  k(  r0|j                  «       }|j                  «       }|j                  «       }|j                  «       }|j                  «       }|j                  «       }t        j                  |t        j                  ¬«      }
|s|�æ|€Vt        j                   ||	dt        j"                  |j                  t        j                  ¬«      }|d d …d d …dfxx   dz  cc<   nBt        j$                  |D �cg c]  }|j'                  d«      ‘Œ c}d¬«      j                  «       }|j
                  t        j(                  k(  rt        j*                  }nt        j,                  } ||||||
|«       nI|j
                  t        j(                  k(  rt        j.                  nt        j0                  } ||||||
«       | j3                  |||||
«       |�4t        j4                  |dd¬«      D �cg c]  }|j7                  d«      ‘Œ }}|
j9                  | j                  «      |fS c c}w c c}w )NzCannot process a batch with z+ tokens at the same time, use a maximum of z with this model.é    r   zThe product of batch size (z) and hidden size (z") needs to be a round multiple of r   ÚcudazUCalling the CUDA kernel for wkv attention requires all tensors to be on CUDA devices.©Úmemory_formatr
   )ÚdtypeÚdevicer9   é   ç±¡*ÓÎÒG)Údim)Úsizer%   r&   Ú
ValueErrorÚminr:   Úinput_dtyper;   ÚtypeÚtorchÚexpÚfloatÚ
contiguousÚfloat16Ú
empty_likeÚcontiguous_formatÚzerosÚfloat32ÚcatÚ	unsqueezeÚbfloat16Úforward_with_state_bf16Úforward_with_stateÚforward_bf16ÚforwardÚsave_for_backwardÚchunkÚsqueezeÚto)ÚctxÚ
time_decayÚ
time_firstÚkeyÚvalueÚstateÚreturn_stateÚ
batch_sizeÚseq_lenÚhidden_sizeÚoutputÚsÚforward_funcs                r1   rS   zRwkvLinearAttention.forwardT   sì  € à+.¯8©8«:Ñ(ˆ
�G˜[ØÔ%×4Ñ4Ò4ÜØ.¨w¨iÐ7bÜ#×2Ñ2Ð3Ð3DðFóð ð ˜Ñ#¤c¨+°rÓ&:Ñ:¸aÒ?ÜØ-¨j¨\Ð9LÈ[ÈMð ZÜ" ;°Ó3Ð4°Að7óð ð
 Ÿ)™)ˆŒð ×Ñ×"Ñ" fÒ,Ø× Ñ ×%Ñ%¨Ò/Ø�z‰z�‰ &Ò(Ø�|‰|× Ñ  FÒ*äÐtÓuÐuä—i‘i 
× 0Ñ 0Ó 2× =Ñ =Ó ?Ó@Ð@ˆ
Ø�9‰9œŸ™Ò%Ø#×)Ñ)Ó+ˆJØ—)‘)“+ˆCØ—K‘K“MˆEØ×*Ñ*Ó,ˆ
Ø�n‰nÓˆØ× Ñ Ó"ˆä×!Ñ! #´U×5LÑ5LÔMˆÙ˜5Ð,Øˆ}ÜŸ™ØØØÜŸ-™-ØŸ:™:Ü"'×"9Ñ"9ô�ð ’aš˜A�g“ $Ñ&”äŸ	™	¸5Ö"A°a 1§;¡;¨q¥>Ò"AÀqÔI×TÑTÓV�Ø�y‰yœEŸN™NÒ*Ü/×GÑG‘ä/×BÑB�Ù˜ Z°°e¸VÀUÕKà<?¿I¹IÌÏÉÒ<WÔ+×8Ò8Ô]m×]uÑ]uˆLÙ˜ Z°°e¸VÔDà×Ñ˜j¨*°c¸5À&ÔIàÐÜ+0¯;©;°u¸aÀQÔ+GÖH a�Q—Y‘Y˜q•\ÐHˆEÐHà�y‰y˜Ÿ™Ó)¨5Ð0Ð0ùò #Bùò Is   È?M+Ì4M0c                 ó<  — | j                   }| j                  \  }}}}}t        j                  |t        j                  |t        j
                  k(  rt        j
                  nt        j                  ¬«      }	t        j                  |t        j                  ¬«      }
t        j                  |t        j                  ¬«      }t        j                  |t        j                  ¬«      }|t        j                  k(  r|j                  «       }|t        j
                  k(  rt        j                  nt        j                  } |||||||j                  «       |	|
||«
       |	j                  |«      |
j                  |«      |j                  |«      |j                  |«      d d fS )N)r9   r:   r8   )rB   Úsaved_tensorsrD   rI   rJ   rO   rL   rH   rF   r%   Úbackward_bf16ÚbackwardrG   rW   )rX   Úg_outputÚg_staterB   rY   rZ   r[   r\   rb   Úg_time_decayÚg_time_firstÚg_keyÚg_valueÚbackward_funcs                 r1   rh   zRwkvLinearAttention.backward“   sJ  € ð —o‘oˆà58×5FÑ5FÑ2ˆ
�J  U¨Fä×'Ñ'ØÜ×1Ñ1Ø$/´5·>±>Ò$A”%—.’.ÄuÇ}Á}ô
ˆô
 ×'Ñ'¨
Ä%×BYÑBYÔZˆÜ× Ñ  ´E×4KÑ4KÔLˆÜ×"Ñ" 5¼×8OÑ8OÔPˆàœ%Ÿ-™-Ò'Ø—~‘~Ó'ˆHØ:EÌÏÉÒ:WÔ(×6Ò6Ô]m×]vÑ]vˆÙØØØØØØ×ÑÓ!ØØØØô	
ð �O‰O˜KÓ(Ø�O‰O˜KÓ(Ø�H‰H�[Ó!Ø�J‰J�{Ó#ØØð
ð 	
ó    ©NF©N)Ú__name__Ú
__module__Ú__qualname__ÚstaticmethodrS   rh   © rp   r1   r4   r4   S   s)   „ Øò<1ó ð<1ð| ò%
ó ñ%
rp   r4   c                 óè  — |j                  «       \  }}}t        j                  |«      }|€ˆt        j                  |d d …df   t        j                  ¬«      }	t        j                  |d d …df   t        j                  ¬«      }
t        j                  |d d …df   t        j                  ¬«      dz
  }n|\  }	}
}t        j                  | «       } t        |«      D �]  }|d d …|f   j                  «       }|d d …|f   }t        j                  |||z   «      }t        j                  ||z
  «      }t        j                  ||z   |z
  «      }||	z  ||z  z   }||
z  |z   }||z  j                  |j                  «      |d d …|f<   t        j                  || z   |«      }t        j                  || z   |z
  «      }t        j                  ||z
  «      }||	z  ||z  z   }	||
z  |z   }
|}�Œ |s|�|	|
|g}||fS )Nr   )r:   r=   )
r?   rD   Ú
zeros_likerL   rE   ÚrangerF   ÚmaximumrW   r:   )rY   rZ   r[   r\   r]   r^   Ú_Ú
seq_lengthrb   Ú	num_stateÚ	den_stateÚ	max_stateÚcurrent_indexÚcurrent_keyÚcurrent_valueÚmax_for_outputÚe1Úe2Ú	numeratorÚdenominatorÚmax_for_states                        r1   Úrwkv_linear_attention_cpurŠ   ½   sò  € ð —x‘x“zÑ€A€z�1Ü×Ñ˜cÓ"€Fà€}Ü×$Ñ$ Sª¨A¨¡Y´e·m±mÔDˆ	Ü×$Ñ$ Sª¨A¨¡Y´e·m±mÔDˆ	Ü×$Ñ$ Sª¨A¨¡Y´e·m±mÔDÀtÑK‰	à*/Ñ'ˆ	�9˜iô
 —)‘)˜JÓ'Ð'€Jä˜zÓ*ó "ˆØš!˜]Ð*Ñ+×1Ñ1Ó3ˆØša Ð.Ñ/ˆô Ÿ™ y°+À
Ñ2JÓKˆÜ�Y‰Y�y >Ñ1Ó2ˆÜ�Y‰Y�{ ZÑ/°.Ñ@ÓAˆØ˜‘N R¨-Ñ%7Ñ7ˆ	Ø˜9‘n rÑ)ˆØ$-°Ñ$;×#?Ñ#?ÀÇÁÓ#MˆŠq�-ÐÑ ô Ÿ™ i°*Ñ&<¸kÓJˆÜ�Y‰Y�y :Ñ-°Ñ=Ó>ˆÜ�Y‰Y�{ ]Ñ2Ó3ˆØ˜‘N R¨-Ñ%7Ñ7ˆ	Ø˜‘N RÑ'ˆ	Ø!Š	ð%"ñ( �uÐ(Ø˜I yÐ1ˆà�5ˆ=Ðrp   c                 óÀ   — t        d„ | |||fD «       «      }|j                  d«      dk(  }t        �|s|rt        | |||||¬«      S t        j                  | |||||«      S )Nc              3   óN   K  — | ]  }|j                   j                  d k7  –— Œ y­w)r7   N)r;   rC   )Ú.0Úts     r1   ú	<genexpr>z(rwkv_linear_attention.<locals>.<genexpr>ê   s   è ø€ ÒX¨a�!—(‘(—-‘- 6Õ)ÑXùs   ‚#%r   ©r]   r^   )Úanyr?   r%   rŠ   r4   Úapply)rY   rZ   r[   r\   r]   r^   Úno_cudaÚ	one_tokens           r1   Úrwkv_linear_attentionr•   é   sm   € ÜÑX°JÀ
ÈCÐQVÐ3WÔXÓX€Gð —‘˜“˜qÑ €IÜÐ¡7©iÜ(¨°ZÀÀeÐSXÐgsÔtÐtä"×(Ñ(¨°ZÀÀeÈUÐT`ÓaÐarp   c                   ó0   ‡ — e Zd Zdˆ fd„	Zdd„Zdd„Zˆ xZS )ÚRwkvSelfAttentionc                 ór  •— t         ‰| �  «        || _        t        d uxr t        j                  |j
                  k(  }t        «       r"t        «       r|s	 t        |j
                  «       || _        |j                  }|j                  �|j                  n|}|| _        t        j                   t#        j$                  |«      «      | _        t        j                   t#        j$                  |«      «      | _        t        j                   t#        j$                  dd|«      «      | _        t        j                   t#        j$                  dd|«      «      | _        t        j                   t#        j$                  dd|«      «      | _        t        j0                  d«      | _        t        j4                  ||d¬«      | _        t        j4                  ||d¬«      | _        t        j4                  ||d¬«      | _        t        j4                  ||d¬«      | _        y # t        $ r t        j                  d«       Y �ŒËw xY w)Nz9Could not load the custom CUDA kernel for RWKV attention.r   ©r   r   r   éÿÿÿÿF©Úbias)ÚsuperÚ__init__Úconfigr%   r&   r+   r   r   r2   Ú	Exceptionr'   r(   Úlayer_idra   Úattention_hidden_sizer	   Ú	ParameterrD   ÚemptyrY   rZ   Útime_mix_keyÚtime_mix_valueÚtime_mix_receptanceÚ	ZeroPad2dÚ
time_shiftÚLinearr[   r\   Ú
receptancerb   )ÚselfrŸ   r¡   Úkernel_loadedra   r¢   Ú	__class__s         €r1   rž   zRwkvSelfAttention.__init__õ   s¥  ø€ Ü‰ÑÔØˆŒÜ(°Ð4ÒqÔ9I×9XÑ9XÐ\b×\qÑ\qÑ9qˆÜÔÔ$;Ô$=ÁmðYÜ$ V×%:Ñ%:Ô;ð !ˆŒØ×(Ñ(ˆà,2×,HÑ,HÐ,TˆF×(Ò(ÐZeð 	ð &;ˆÔ"äŸ,™,¤u§{¡{Ð3HÓ'IÓJˆŒÜŸ,™,¤u§{¡{Ð3HÓ'IÓJˆŒäŸL™L¬¯©°Q¸¸;Ó)GÓHˆÔÜ Ÿl™l¬5¯;©;°q¸!¸[Ó+IÓJˆÔÜ#%§<¡<´·±¸A¸qÀ+Ó0NÓ#OˆÔ äŸ,™, }Ó5ˆŒÜ—9‘9˜[Ð*?ÀeÔLˆŒÜ—Y‘Y˜{Ð,AÈÔNˆŒ
ÜŸ)™) KÐ1FÈUÔSˆŒÜ—i‘iÐ 5°{ÈÔOˆ�øô) ò YÜ—‘ÐW×XðYús   ÁH ÈH6È5H6c                 óp  — |j                  d«      dk(  r|�|d   d d …d d …| j                  f   }n3| j                  |«      }|� |d   d d …d d …| j                  f   |d d …df<   || j                  z  |d| j                  z
  z  z   }|| j                  z  |d| j                  z
  z  z   }|| j
                  z  |d| j
                  z
  z  z   }| j                  |«      }| j                  |«      }t        j                  | j                  |«      «      }|� |d d …df   |d   d d …d d …| j                  f<   ||||fS ©Nr   r   rš   )r?   r¡   r©   r¥   r¦   r§   r[   r\   rD   Úsigmoidr«   )r¬   Úhiddenr]   Úshiftedr[   r\   r«   s          r1   Úextract_key_valuez#RwkvSelfAttention.extract_key_value  s<  € à�;‰;�q‹>˜QÒ 5Ð#4Ø˜A‘hšq¢! T§]¡]Ð2Ñ3‰Gà—o‘o fÓ-ˆGØÐ Ø % a¡ªªA¨t¯}©}Ð)<Ñ =�š˜1˜‘Ø�t×(Ñ(Ñ(¨7°a¸$×:KÑ:KÑ6KÑ+LÑLˆØ˜×,Ñ,Ñ,¨w¸!¸d×>QÑ>QÑ:QÑ/RÑRˆØ˜d×6Ñ6Ñ6¸ÀAÈ×H`ÑH`ÑD`Ñ9aÑaˆ
à�h‰h�s‹mˆØ—
‘
˜5Ó!ˆÜ—]‘] 4§?¡?°:Ó#>Ó?ˆ
ØÐØ,2²1°b°5©MˆE�!‰H’Qš˜4Ÿ=™=Ð(Ñ)Ø˜3  uÐ,Ð,rp   c                 ó’  ‡ — ‰ j                  ||¬«      \  }}}}|�t        ˆ fd„|dd  D «       «      nd }t        ‰ j                  ‰ j                  ||||¬«      \  }}|�T|d   |d   d d …d d …‰ j
                  f<   |d   |d   d d …d d …‰ j
                  f<   |d   |d   d d …d d …‰ j
                  f<   ‰ j                  ||z  «      |fS )	N©r]   c              3   óJ   •K  — | ]  }|d d …d d …‰j                   f   –— Œ y ­wrr   ©r¡   )r�   rc   r¬   s     €r1   r�   z,RwkvSelfAttention.forward.<locals>.<genexpr>(  s!   øè ø€ ÒF°q˜Aša¢ D§M¡MÐ1Õ2ÑFùs   ƒ #r<   r�   r   r   r
   é   )r´   Útupler•   rY   rZ   r¡   rb   )	r¬   r²   r]   Ú	use_cacher«   r[   r\   Úlayer_stater   s	   `        r1   rS   zRwkvSelfAttention.forward&  sà   ø€ Ø(,×(>Ñ(>¸vÈUÐ(>Ó(SÑ%ˆ
�C˜ ØJOÐJ[”eÓF¸EÀ!À"¸IÔFÔFÐaeˆÜ1Ø�O‰OØ�O‰OØØØØ"ô
Ñˆˆkð Ð"Ø,7¸©NˆE�!‰H’Qš˜4Ÿ=™=Ð(Ñ)Ø,7¸©NˆE�!‰H’Qš˜4Ÿ=™=Ð(Ñ)Ø,7¸©NˆE�!‰H’Qš˜4Ÿ=™=Ð(Ñ)à�{‰{˜:¨Ñ,Ó-¨uÐ4Ð4rp   ©r   rr   rq   )rs   rt   ru   rž   r´   rS   Ú__classcell__©r®   s   @r1   r—   r—   ô   s   ø„ õPó<-÷&5rp   r—   c                   ó(   ‡ — e Zd Zdˆ fd„	Zdd„Zˆ xZS )ÚRwkvFeedForwardc                 óB  •— t         ‰| �  «        || _        || _        |j                  }|j
                  �|j
                  nd|j                  z  }t        j                  d«      | _        t        j                  t        j                  dd|«      «      | _        t        j                  t        j                  dd|«      «      | _        t        j                  ||d¬«      | _        t        j                  ||d¬«      | _        t        j                  ||d¬«      | _        y )Nr¹   r™   r   Fr›   )r�   rž   rŸ   r¡   ra   Úintermediate_sizer	   r¨   r©   r£   rD   r¤   r¥   r§   rª   r[   r«   r\   )r¬   rŸ   r¡   ra   rÃ   r®   s        €r1   rž   zRwkvFeedForward.__init__;  sÛ   ø€ Ü‰ÑÔØˆŒØ ˆŒØ×(Ñ(ˆà(.×(@Ñ(@Ð(LˆF×$Ò$ÐRSÐV\×VhÑVhÑRhð 	ô Ÿ,™, }Ó5ˆŒÜŸL™L¬¯©°Q¸¸;Ó)GÓHˆÔÜ#%§<¡<´·±¸A¸qÀ+Ó0NÓ#OˆÔ ä—9‘9˜[Ð*;À%ÔHˆŒÜŸ)™) K°À5ÔIˆŒÜ—Y‘YÐ0°+ÀEÔJˆ�
rp   c                 óz  — |j                  d«      dk(  r|�|d   d d …d d …| j                  f   }n3| j                  |«      }|� |d   d d …d d …| j                  f   |d d …df<   || j                  z  |d| j                  z
  z  z   }|| j                  z  |d| j                  z
  z  z   }t        j                  t        j                  | j                  |«      «      «      }| j                  |«      }t        j                  | j                  |«      «      }|� |d d …df   |d   d d …d d …| j                  f<   ||z  |fS r°   )r?   r¡   r©   r¥   r§   rD   ÚsquareÚrelur[   r\   r±   r«   )r¬   r²   r]   r³   r[   r«   r\   s          r1   rS   zRwkvFeedForward.forwardL  s)  € Ø�;‰;�q‹>˜QÒ 5Ð#4Ø˜A‘hšq¢! T§]¡]Ð2Ñ3‰Gà—o‘o fÓ-ˆGØÐ Ø % a¡ªªA¨t¯}©}Ð)<Ñ =�š˜1˜‘Ø�t×(Ñ(Ñ(¨7°a¸$×:KÑ:KÑ6KÑ+LÑLˆØ˜d×6Ñ6Ñ6¸ÀAÈ×H`ÑH`ÑD`Ñ9aÑaˆ
ä�l‰lœ5Ÿ:™: d§h¡h¨s£mÓ4Ó5ˆØ—
‘
˜3“ˆÜ—]‘] 4§?¡?°:Ó#>Ó?ˆ
àÐØ,2²1°b°5©MˆE�!‰H’Qš˜4Ÿ=™=Ð(Ñ)à˜EÑ! 5Ð(Ð(rp   r½   rr   ©rs   rt   ru   rž   rS   r¾   r¿   s   @r1   rÁ   rÁ   :  s   ø„ õK÷")rp   rÁ   c                   ó&   ‡ — e Zd Zˆ fd„Zdd„Zˆ xZS )Ú	RwkvBlockc                 ó¬  •— t         ‰| �  «        || _        || _        |dk(  r0t	        j
                  |j                  |j                  ¬«      | _        t	        j
                  |j                  |j                  ¬«      | _	        t	        j
                  |j                  |j                  ¬«      | _
        t        ||«      | _        t        ||«      | _        y )Nr   )Úeps)r�   rž   rŸ   r¡   r	   Ú	LayerNormra   Úlayer_norm_epsilonÚpre_lnÚln1Úln2r—   Ú	attentionrÁ   Úfeed_forward)r¬   rŸ   r¡   r®   s      €r1   rž   zRwkvBlock.__init__a  sš   ø€ Ü‰ÑÔØˆŒØ ˆŒà�qŠ=ÜŸ,™, v×'9Ñ'9¸v×?XÑ?XÔYˆDŒKä—<‘< × 2Ñ 2¸×8QÑ8QÔRˆŒÜ—<‘< × 2Ñ 2¸×8QÑ8QÔRˆŒä*¨6°8Ó<ˆŒÜ+¨F°HÓ=ˆÕrp   c                 ó  — | j                   dk(  r| j                  |«      }| j                  | j                  |«      ||¬«      \  }}||z   }| j	                  | j                  |«      |¬«      \  }}||z   }||f}|r||fz  }|S |dz  }|S )Nr   )r]   r»   r¶   rr   )r¡   rÎ   rÑ   rÏ   rÒ   rÐ   )r¬   r²   r]   r»   Úoutput_attentionsrÑ   rÒ   Úoutputss           r1   rS   zRwkvBlock.forwardo  s¦   € Ø�=‰=˜AÒØ—[‘[ Ó(ˆFàŸ>™>¨$¯(©(°6Ó*:À%ÐS\˜>Ó]Ñˆ	�5Ø˜)Ñ#ˆà"×/Ñ/°·±¸Ó0@ÈÐ/ÓNÑˆ�eØ˜,Ñ&ˆà˜5�/ˆÙØ˜	�|Ñ#ˆGð ˆð �wÑˆGàˆrp   )NFFrÇ   r¿   s   @r1   rÉ   rÉ   `  s   ø„ ô>÷rp   rÉ   c                   ó4   — e Zd ZdZeZdZdgZddgZdZ	dZ
d„ Zy)	ÚRwkvPreTrainedModelz†
    An abstract class to handle weights initialization and a simple interface for downloading and loading pretrained
    models.
    r   rÉ   rY   rZ   Tc           	      ó¤  — t        |t        «      �rv|j                  }|j                  j                  }|j                  j
                  }|j                  }||dz
  z  }d||z  z
  }t        j                  t        |«      D �cg c]  }||z  ‘Œ	 c}|j                  j                  |j                  j                  ¬«      }	|	dddd…f   }	t        |«      D �
cg c]  }
dd|
|dz
  z  dd|z  z   z  z  z   ‘Œ }}
t        j                  ||j                  j                  |j                  j                  ¬«      }t        j                  t        |«      D �cg c]  }|dz   d	z  dz
  ‘Œ c}|j                  j                  |j                  j                  ¬«      d
z  }t        j                  «       5  ||j                  _        t        j"                  |j                  t%        j&                  d«      z  |z   «      |j                  _        t        j(                  |	|«      |j                  _        t        j(                  |	|«      d|z  z   |j*                  _        t        j(                  |	d
|z  «      |j,                  _        ddd«       yt        |t.        «      �r|j                  }|j                  j                  }|j                  j
                  }d||z  z
  }t        j                  t        |«      D �cg c]  }||z  ‘Œ	 c}|j                  j                  |j                  j                  ¬«      }	|	dddd…f   }	t        j                  «       5  t        j(                  |	|«      |j                  _        t        j(                  |	|«      |j,                  _        ddd«       yyc c}w c c}
w c c}w # 1 sw Y   yxY wc c}w # 1 sw Y   yxY w)zInitialize the weights.r   g      ð?©r:   r;   Néûÿÿÿé   gffffffæ?gÍÌÌÌÌÌô?r
   g      à?g333333Ó?)Ú
isinstancer—   r¡   rŸ   Únum_hidden_layersra   r¢   rD   Útensorrz   r¥   r:   r;   rY   rZ   Úno_gradÚdataÚ	ones_likeÚmathÚlogÚpowr¦   r§   rÁ   )r¬   Úmoduler¡   rÝ   ra   r¢   Úratio_0_to_1Úratio_1_to_almost0ÚiÚtime_weightÚhÚdecay_speedÚzigzags                r1   Ú_init_weightsz!RwkvPreTrainedModel._init_weights�  s]  € ä�fÔ/Õ0Ø—‘ˆHØ &§¡× ?Ñ ?ÐØ Ÿ-™-×3Ñ3ˆKØ$*×$@Ñ$@Ð!à#Ð'8¸1Ñ'<Ñ=ˆLØ!$¨Ð3DÑ(DÑ!EÐäŸ,™,Ü*/°Ó*<Ö= Q��[“Ò=Ø×)Ñ)×/Ñ/Ø×*Ñ*×1Ñ1ôˆKð
 & d¨D²! mÑ4ˆKô Ð4Ó5öàð �Q˜!Ð4°qÑ8Ñ9¸sÀSÈ<ÑEWÑ?WÑXÑXÓXðˆKð ô  Ÿ,™, {¸&×:KÑ:K×:QÑ:QÐZ`×ZkÑZk×ZrÑZrÔsˆKä—‘Ü.3Ð4IÓ.JÖK¨�a˜!‘e˜q‘[ 1“_ÒKØ ×+Ñ+×1Ñ1Ø!×,Ñ,×3Ñ3ôð
 ñð ô —‘“ñ cØ)4�×!Ñ!Ô&Ü).¯©¸×9JÑ9JÌTÏXÉXÐVYË]Ñ9ZÐ]cÑ9cÓ)d�×!Ñ!Ô&ä+0¯9©9°[ÐBTÓ+U�×#Ñ#Ô(Ü-2¯Y©Y°{ÐDVÓ-WÐZ]Ð`lÑZlÑ-l�×%Ñ%Ô*Ü27·)±)¸KÈÐOaÑIaÓ2b�×*Ñ*Ô/÷cð cô ˜¤Õ0Ø—‘ˆHØ &§¡× ?Ñ ?ÐØ Ÿ-™-×3Ñ3ˆKà!$¨Ð3DÑ(DÑ!EÐäŸ,™,Ü*/°Ó*<Ö= Q��[“Ò=Ø×)Ñ)×/Ñ/Ø×*Ñ*×1Ñ1ôˆKð
 & d¨D²! mÑ4ˆKä—‘“ñ ]Ü+0¯9©9°[ÐBTÓ+U�×#Ñ#Ô(Ü27·)±)¸KÐI[Ó2\�×*Ñ*Ô/÷]ð ]ð 1ùò7 >ùòùò L÷cð cüò >÷]ð ]ús2   ÂN&ÃN+ÅN0Æ.CN5Ë5OÍAOÎ5N>ÏON)rs   rt   ru   Ú__doc__r   Úconfig_classÚbase_model_prefixÚ_no_split_modulesÚ_keep_in_fp32_modulesÚsupports_gradient_checkpointingÚ_is_statefulrí   rw   rp   r1   r×   r×   ‚  s8   „ ñð
 €LØÐØ$˜ÐØ)¨<Ð8ÐØ&*Ð#Ø€Ló7]rp   r×   c                   óÌ   — e Zd ZU dZdZeej                     ed<   dZ	ee
ej                        ed<   dZeeej                  df      ed<   dZeeej                  df      ed<   y)Ú
RwkvOutputa¢  
    Class for the RWKV model outputs.

    Args:
        last_hidden_state (`torch.FloatTensor` of shape `(batch_size, sequence_length, hidden_size)`):
            Sequence of hidden-states at the output of the last layer of the model.
        state (list of five `torch.FloatTensor` of shape `(batch_size, hidden_size, num_hidden_layers)`):
            The state of the model at the last time step. Can be used in a forward method with the next `input_ids` to
            avoid providing the old `input_ids`.
        hidden_states (`tuple(torch.FloatTensor)`, *optional*, returned when `output_hidden_states=True` is passed or when `config.output_hidden_states=True`):
            Tuple of `torch.FloatTensor` (one for the output of the embeddings, if the model has an embedding layer, +
            one for the output of each layer) of shape `(batch_size, sequence_length, hidden_size)`.

            Hidden-states of the model at the output of each layer plus the optional initial embedding outputs.
        attentions (`tuple(torch.FloatTensor)`, *optional*, returned when `output_attentions=True` is passed or when `config.output_attentions=True`):
            Tuple of `torch.FloatTensor` (one for each layer) of shape `(batch_size, num_heads, sequence_length,
            sequence_length)`.

            Attentions weights after the attention softmax, used to compute the weighted average in the self-attention
            heads.
    NÚlast_hidden_stater]   .Úhidden_statesÚ
attentions)rs   rt   ru   rî   r÷   r   rD   ÚFloatTensorÚ__annotations__r]   r   rø   r   rù   rw   rp   r1   rö   rö   É  sw   … ñð, 6:Ð�x × 1Ñ 1Ñ2Ó9Ø/3€Eˆ8�D˜×*Ñ*Ñ+Ñ,Ó3Ø=A€M�8˜E %×"3Ñ"3°SÐ"8Ñ9Ñ:ÓAØ:>€J�˜˜u×0Ñ0°#Ð5Ñ6Ñ7Ô>rp   rö   c                   óô   — e Zd ZU dZdZeej                     ed<   dZ	eej                     ed<   dZ
eeej                        ed<   dZeeej                  df      ed<   dZeeej                  df      ed<   y)	ÚRwkvCausalLMOutputa|  
    Base class for causal language model (or autoregressive) outputs.

    Args:
        loss (`torch.FloatTensor` of shape `(1,)`, *optional*, returned when `labels` is provided):
            Language modeling loss (for next-token prediction).
        logits (`torch.FloatTensor` of shape `(batch_size, sequence_length, config.vocab_size)`):
            Prediction scores of the language modeling head (scores for each vocabulary token before SoftMax).
        state (list of five `torch.FloatTensor` of shape `(batch_size, hidden_size, num_hidden_layers)`):
            The state of the model at the last time step. Can be used in a forward method with the next `input_ids` to
            avoid providing the old `input_ids`.
        hidden_states (`tuple(torch.FloatTensor)`, *optional*, returned when `output_hidden_states=True` is passed or when `config.output_hidden_states=True`):
            Tuple of `torch.FloatTensor` (one for the output of the embeddings, if the model has an embedding layer, +
            one for the output of each layer) of shape `(batch_size, sequence_length, hidden_size)`.

            Hidden-states of the model at the output of each layer plus the optional initial embedding outputs.
        attentions (`tuple(torch.FloatTensor)`, *optional*, returned when `output_attentions=True` is passed or when `config.output_attentions=True`):
            Tuple of `torch.FloatTensor` (one for each layer) of shape `(batch_size, num_heads, sequence_length,
            sequence_length)`.

            Attentions weights after the attention softmax, used to compute the weighted average in the self-attention
            heads.
    NÚlossÚlogitsr]   .rø   rù   )rs   rt   ru   rî   rþ   r   rD   rú   rû   rÿ   r]   r   rø   r   rù   rw   rp   r1   rý   rý   ç  s‹   … ñð0 )-€Dˆ(�5×$Ñ$Ñ
%Ó,Ø*.€FˆH�U×&Ñ&Ñ'Ó.Ø/3€Eˆ8�D˜×*Ñ*Ñ+Ñ,Ó3Ø=A€M�8˜E %×"3Ñ"3°SÐ"8Ñ9Ñ:ÓAØ:>€J�˜˜u×0Ñ0°#Ð5Ñ6Ñ7Ô>rp   rý   a>  

    This model inherits from [`PreTrainedModel`]. Check the superclass documentation for the generic methods the
    library implements for all its model (such as downloading or saving, resizing the input embeddings, pruning heads
    etc.)

    This model is also a PyTorch [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) subclass.
    Use it as a regular PyTorch Module and refer to the PyTorch documentation for all matter related to general usage
    and behavior.

    Parameters:
        config ([`RwkvConfig`]): Model configuration class with all the parameters of the model.
            Initializing with a config file does not load the weights associated with the model, only the
            configuration. Check out the [`~PreTrainedModel.from_pretrained`] method to load the model weights.
a
  
    Args:
        input_ids (`torch.LongTensor` of shape `(batch_size, input_ids_length)`):
            `input_ids_length` = `sequence_length` if `past_key_values` is `None` else
            `past_key_values[0][0].shape[-2]` (`sequence_length` of input past key value states). Indices of input
            sequence tokens in the vocabulary.

            If `past_key_values` is used, only `input_ids` that do not have their past calculated should be passed as
            `input_ids`.

            Indices can be obtained using [`AutoTokenizer`]. See [`PreTrainedTokenizer.encode`] and
            [`PreTrainedTokenizer.__call__`] for details.

            [What are input IDs?](../glossary#input-ids)
        attention_mask (`torch.LongTensor` of shape `(batch_size, input_ids_length)`, *optional*):
            Mask to avoid performing attention on padding token indices. Mask values selected in `[0, 1]`:

            - 1 for tokens that are **not masked**,
            - 0 for tokens that are **masked**.

            This is currently not used by `RwkvModel`, but will be supported in the future.

            [What are attention masks?](../glossary#attention-mask)
        inputs_embeds (`torch.FloatTensor` of shape `(batch_size, sequence_length, hidden_size)`, *optional*):
            Optionally, instead of passing `input_ids` you can choose to directly pass an embedded representation. This
            is useful if you want more control over how to convert `input_ids` indices into associated vectors than the
            model's internal embedding lookup matrix.
        state (tuple of five `torch.FloatTensor` of shape `(batch_size, hidden_size, num_hidden_layers)`, *optional*):
            If passed along, the model uses the previous state in all the blocks (which will give the output for the
            `input_ids` provided as if the model add `state_input_ids + input_ids` as context).
        use_cache (`bool`, *optional*):
            If set to `True`, the last state is returned and can be used to quickly generate the next logits.
        output_attentions (`bool`, *optional*):
            Whether or not to return the attentions tensors of all attention layers. See `attentions` under returned
            tensors for more detail.
        output_hidden_states (`bool`, *optional*):
            Whether or not to return the hidden states of all layers. See `hidden_states` under returned tensors for
            more detail.
        return_dict (`bool`, *optional*):
            Whether or not to return a [`~utils.ModelOutput`] instead of a plain tuple.
z^The bare RWKV Model transformer outputting raw hidden-states without any specific head on top.c                   ó6  ‡ — e Zd Zˆ fd„Zd„ Zd„ Z ee«       ee	e
e¬«      	 	 	 	 	 	 	 	 ddeej                     deej                     deej                     deeej                        d	ee   d
ee   dee   dee   deee
f   fd„«       «       Zd„ Zd„ Zˆ xZS )Ú	RwkvModelc           	      óœ  •— t         ‰| �  |«       t        j                  |j                  |j
                  «      | _        t        j                  t        |j                  «      D �cg c]  }t        ||¬«      ‘Œ c}«      | _        t        j                  |j
                  «      | _        d| _        d| _        | j!                  «        y c c}w )Nr¸   F)r�   rž   r	   Ú	EmbeddingÚ
vocab_sizera   Ú
embeddingsÚ
ModuleListrz   rÝ   rÉ   ÚblocksrÌ   Úln_outÚlayers_are_rescaledÚgradient_checkpointingÚ	post_init)r¬   rŸ   Úidxr®   s      €r1   rž   zRwkvModel.__init__H  s•   ø€ Ü‰Ñ˜Ô äŸ,™, v×'8Ñ'8¸&×:LÑ:LÓMˆŒÜ—m‘mÔPUÐV\×VnÑVnÓPoÖ$pÈ¤Y¨vÀÖ%DÒ$pÓqˆŒÜ—l‘l 6×#5Ñ#5Ó6ˆŒà#(ˆÔ à&+ˆÔ#ð 	�‰Õùò %qs   Á&C	c                 ó   — | j                   S rr   ©r  ©r¬   s    r1   Úget_input_embeddingszRwkvModel.get_input_embeddingsV  s   € Ø�‰Ðrp   c                 ó   — || _         y rr   r  ©r¬   Únew_embeddingss     r1   Úset_input_embeddingszRwkvModel.set_input_embeddingsY  s	   € Ø(ˆ�rp   ©Ú
checkpointÚoutput_typerï   Ú	input_idsÚattention_maskÚinputs_embedsr]   r»   rÔ   Úoutput_hidden_statesÚreturn_dictÚreturnc	           	      ó¢  — |�|n| j                   j                  }|�|n| j                   j                  }|�|n#| j                  s| j                   j                  nd}|�|n| j                   j
                  }|�t        j                  d«       | j                  | j                  k(  r| j                  «        |�|�t        d«      ‚|€|€t        d«      ‚|€| j                  |«      }|r |€ž|j                  d«      | j                   j                  | j                   j                  f}	t        d«      D �
cg c]A  }
t!        j"                  |	|
dk  r|j$                  nt         j&                  |j(                  dœŽ‘ŒC }}
|d	xx   d
z  cc<   | j*                  r%| j                  r|rt        j                  d«       d}|}|rdnd }|rdnd }t-        | j.                  «      D ]«  \  }}| j*                  r0| j                  r$| j1                  |j2                  ||||«      \  }}}n |||||¬«      \  }}}| j                  r=| j                   j4                  dkD  r$|dz   | j                   j4                  z  dk(  r|dz  }|r||fz   }|sŒ¦||fz   }Œ­ | j7                  |«      }|r||fz   }|st9        d„ ||||fD «       «      S t;        ||||¬«      S c c}
w )NFz<`attention_mask` was passed, but it is unused in this model.zDYou cannot specify both input_ids and inputs_embeds at the same timez5You have to specify either input_ids or inputs_embedsr   é   r   rÙ   r¹   gêŒ 9Y>)FzZ`use_cache=True` is incompatible with gradient checkpointing. Setting `use_cache=False`...rw   )r]   r»   rÔ   r<   c              3   ó&   K  — | ]	  }|€Œ|–— Œ y ­wrr   rw   )r�   Úxs     r1   r�   z$RwkvModel.forward.<locals>.<genexpr>´  s   è ø€ Òt˜qÐfgÑfsœÑtùs   ‚Š)r÷   r]   rø   rù   )rŸ   rÔ   r  Útrainingr»   Úuse_return_dictr'   Úwarning_oncer	  Ú_rescale_layersr@   r  r?   ra   rÝ   rz   rD   rK   r:   rL   r;   r
  Ú	enumerater  Ú_gradient_checkpointing_funcÚ__call__Úrescale_everyr  rº   rö   )r¬   r  r  r  r]   r»   rÔ   r  r  Úshaperè   rø   Úall_self_attentionsÚall_hidden_statesr  Úblockrù   s                    r1   rS   zRwkvModel.forward\  sï  € ð" 2CÐ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð "+Ð!6‘IÐZ^×ZgÒZg¸T¿[¹[×=RÒ=RÐmrˆ	Ø%0Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆàÐ%Ü×ÑÐ ^Ô_à�=‰=˜D×4Ñ4Ò4Ø× Ñ Ô"àÐ  ]Ð%>ÜÐcÓdÐdØÐ =Ð#8ÜÐTÓUÐUàÐ Ø ŸO™O¨IÓ6ˆMá˜˜Ø"×'Ñ'¨Ó*¨D¯K©K×,CÑ,CÀTÇ[Á[×EbÑEbÐcˆEô
 ˜q›ö	ð ô —‘Ø¸¸aº -×"5Ò"5ÄUÇ]Á]Ð[h×[oÑ[oôðˆEð ð �!‹H˜Ñ‹Hà×&Ò&¨4¯=ª=ÙÜ×#Ñ#Øpôð "�	à%ˆá$5™b¸4ÐÙ"6™B¸DÐÜ# D§K¡KÓ0ò 	J‰JˆC�Ø×*Ò*¨t¯}ª}Ø37×3TÑ3TØ—N‘N M°5¸)ÐEVó4Ñ0�˜u¡jñ 49Ø!¨¸)ÐWhô4Ñ0�˜u jð
 ×(Ò(Ø—K‘K×-Ñ-°Ò1Ø˜1‘W §¡× 9Ñ 9Ñ9¸QÒ>à -°Ñ 1�á#Ø$5¸Ð8HÑ$HÐ!â Ø&9¸Z¸MÑ&IÑ#ð+	Jð. Ÿ™ MÓ2ˆáØ 1°]Ð4DÑ DÐáÜÑt ]°EÐ;LÐNaÐ$bÔtÓtÐtäØ+ØØ+Ø*ô	
ð 	
ùòes   Ä5AKc           	      ó†  — | j                   | j                   k(  ry | j                  j                  dkD  �rît	        j
                  «       5  t        | j                  «      D �]·  \  }}| j                  r¥|j                  j                  j                  j                  dt        || j                  j                  z  «      z  «       |j                  j                  j                  j                  dt        || j                  j                  z  «      z  «       Œ¸t        |j                  j                  j                  d«      rº|j                  j                  j                  j                   j#                  dt        || j                  j                  z  «      z  «       |j                  j                  j                  j                   j#                  dt        || j                  j                  z  «      z  «       �Œœt        |j                  j                  j                  d«      rN| j%                  |j                  j                  |«       | j%                  |j                  j                  |«       �Œ|j                  j                  j                  j#                  dt        || j                  j                  z  «      z  «       |j                  j                  j                  j#                  dt        || j                  j                  z  «      z  «       �Œº 	 d d d «       | j                   | _         y # 1 sw Y   ŒxY w)Nr   r<   ÚSCBÚquant_state)r	  r"  rŸ   r)  rD   rß   r&  r  rÑ   rb   ÚweightÚmul_ÚintrÒ   r\   Úhasattrr/  Údiv_Ú _bnb_4bit_dequantize_and_rescale)r¬   Úblock_idr-  s      r1   r%  zRwkvModel._rescale_layers½  s`  € à×#Ñ#¨D¯M©MÐ(9Ò:ØØ�;‰;×$Ñ$ qÓ(Ü—‘“ñ rÜ'0°·±Ó'=ó r‘O�H˜eØ—}’}ØŸ™×.Ñ.×5Ñ5×:Ñ:¸1ÄÀHÐPT×P[ÑP[×PiÑPiÑDiÓ@jÑ;jÔkØ×*Ñ*×0Ñ0×7Ñ7×<Ñ<¸QÄ#ÀhÐRV×R]ÑR]×RkÑRkÑFkÓBlÑ=lÕmô # 5§?¡?×#9Ñ#9×#@Ñ#@À%ÔHØ!ŸO™O×2Ñ2×9Ñ9×=Ñ=×BÑBÀ1ÌÈHÐX\×XcÑXc×XqÑXqÑLqÓHrÑCrÔsØ!×.Ñ.×4Ñ4×;Ñ;×?Ñ?×DÑDÀQÌ#ÈhÐZ^×ZeÑZe×ZsÑZsÑNsÓJtÑEtÖuÜ$ U§_¡_×%;Ñ%;×%BÑ%BÀMÔRØ ×AÑAÀ%Ç/Á/×BXÑBXÐZbÔcØ ×AÑAÀ%×BTÑBT×BZÑBZÐ\dÖeà!ŸO™O×2Ñ2×9Ñ9×>Ñ>¸qÄCÈÐTX×T_ÑT_×TmÑTmÑHmÓDnÑ?nÔoØ!×.Ñ.×4Ñ4×;Ñ;×@Ñ@ÀÄcÈ(ÐVZ×VaÑVa×VoÑVoÑJoÓFpÑApÖqñr÷rð" (,§}¡}Ð#4ˆÕ ÷#rð rús   Á
KL7Ì7M c                 óÊ  — t        «       st        d«      ‚ddl}|j                  j	                  |j
                  j                  |j
                  j                  «      }|j                  dt        || j                  j                  z  «      z  «       |j                  j                  |j                  d«      d¬«      j                  |j                  «      }t!        |d|«       y)	z›
        Perform the dequantization and rescaling of the weights of a given layer. After that operation the layer will
        be quantized again.
        z/Please install bitsandbytes to use this method.r   Nr<   ÚcpuF)Úrequires_gradr1  )r   ÚImportErrorÚbitsandbytesÚ
functionalÚdequantize_4bitr1  rà   r0  r5  r3  rŸ   r)  r	   Ú
Params4bitrW   r;   Úsetattr)r¬   Útarget_layerr7  ÚbnbÚdequant_weightsÚquant_weights         r1   r6  z*RwkvModel._bnb_4bit_dequantize_and_rescaleÕ  s´   € ô
 )Ô*ÜÐOÓPÐPÛ"àŸ.™.×8Ñ8¸×9LÑ9L×9QÑ9QÐS_×SfÑSf×SrÑSrÓsˆà×Ñ˜Q¤# h°$·+±+×2KÑ2KÑ&KÓ"LÑLÔMð —v‘v×(Ñ(¨×);Ñ);¸EÓ)BÐRWÐ(ÓX×[Ñ[Ð\k×\rÑ\rÓsˆÜ�˜h¨Õ5rp   )NNNNNNNN)rs   rt   ru   rž   r  r  r   ÚRWKV_INPUTS_DOCSTRINGr   Ú_CHECKPOINT_FOR_DOCrö   Ú_CONFIG_FOR_DOCr   rD   Ú
LongTensorrú   r   Úboolr   r   rS   r%  r6  r¾   r¿   s   @r1   r  r  C  s  ø„ ô
òò)ñ +Ð+@ÓAÙØ&ØØ$ôð 15Ø59Ø59Ø37Ø$(Ø,0Ø/3Ø&*ñY
à˜E×,Ñ,Ñ-ðY
ð ! ×!1Ñ!1Ñ2ðY
ð   × 1Ñ 1Ñ2ð	Y
ð
 ˜˜U×.Ñ.Ñ/Ñ0ðY
ð ˜D‘>ðY
ð $ D™>ðY
ð ' t™nðY
ð ˜d‘^ðY
ð 
ˆu�jÐ Ñ	!òY
óó BðY
òv5ö06rp   r  z‡
    The RWKV Model transformer with a language modeling head on top (linear layer with weights tied to the input
    embeddings).
    c                   óX  ‡ — e Zd ZdgZˆ fd„Zd„ Zd„ Zdd„Z ee	«       e
eee¬«      	 	 	 	 	 	 	 	 	 ddeej                      deej                      d	eej"                     d
eeej"                        deej                      dee   dee   dee   dee   deeef   fd„«       «       Zˆ xZS )ÚRwkvForCausalLMzhead.weightc                 óÆ   •— t         ‰| �  |«       t        |«      | _        t	        j
                  |j                  |j                  d¬«      | _        | j                  «        y )NFr›   )
r�   rž   r  r   r	   rª   ra   r  Úheadr  )r¬   rŸ   r®   s     €r1   rž   zRwkvForCausalLM.__init__õ  sH   ø€ Ü‰Ñ˜Ô Ü˜fÓ%ˆŒ	Ü—I‘I˜f×0Ñ0°&×2CÑ2CÈ%ÔPˆŒ	ð 	�‰Õrp   c                 ó   — | j                   S rr   ©rM  r  s    r1   Úget_output_embeddingsz%RwkvForCausalLM.get_output_embeddingsý  s   € Ø�y‰yÐrp   c                 ó   — || _         y rr   rO  r  s     r1   Úset_output_embeddingsz%RwkvForCausalLM.set_output_embeddings   s	   € Ø"ˆ�	rp   c                 óh   — |�|d d …df   j                  d«      }|�|€d|i}nd|i}||d<   ||d<   |S )Nrš   r  r  r]   r»   )rN   )r¬   r  r]   r  r»   ÚkwargsÚmodel_inputss          r1   Úprepare_inputs_for_generationz-RwkvForCausalLM.prepare_inputs_for_generation  s]   € ð ÐØ!¢! R %Ñ(×2Ñ2°2Ó6ˆIð Ð$¨¨Ø+¨]Ð;‰Là'¨Ð3ˆLà %ˆ�WÑØ$-ˆ�[Ñ!ØÐrp   r  r  r  r  r]   Úlabelsr»   rÔ   r  r  r  c
           	      ót  — |	�|	n| j                   j                  }	| j                  |||||||	¬«      }|d   }| j                  |«      }d}|�* | j                  ||fd| j                   j
                  i|
¤Ž}|	s|f|dd z   }|�|f|z   S |S t        |||j                  |j                  |j                  ¬«      S )a³  
        labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Labels for language modeling. Note that the labels **are shifted** inside the model, i.e. you can set
            `labels = input_ids` Indices are selected in `[-100, 0, ..., config.vocab_size]` All labels set to `-100`
            are ignored (masked), the loss is only computed for labels in `[0, ..., config.vocab_size]`
        N)r  r]   r»   rÔ   r  r  r   r  r   )rþ   rÿ   r]   rø   rù   )
rŸ   r#  r   rM  Úloss_functionr  rý   r]   rø   rù   )r¬   r  r  r  r]   rW  r»   rÔ   r  r  rT  Úrwkv_outputsrø   rÿ   rþ   rb   s                   r1   rS   zRwkvForCausalLM.forward  sù   € ð2 &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆà—y‘yØØ'ØØØ/Ø!5Ø#ð !ó 
ˆð % Q™ˆà—‘˜=Ó)ˆàˆØÐØ%�4×%Ñ%ØØñð  Ÿ;™;×1Ñ1ðð ñ	ˆDñ Ø�Y ¨a¨bÐ!1Ñ1ˆFØ)-Ð)9�T�G˜fÑ$ÐE¸vÐEä!ØØØ×$Ñ$Ø&×4Ñ4Ø#×.Ñ.ô
ð 	
rp   )NNN)	NNNNNNNNN)rs   rt   ru   Ú_tied_weights_keysrž   rP  rR  rV  r   rE  r   rF  rý   rG  r   rD   rH  rú   r   rI  r   r   rS   r¾   r¿   s   @r1   rK  rK  ë  s(  ø„ ð (˜Ðôòò#óñ" +Ð+@ÓAÙØ&Ø&Ø$ôð 15Ø59Ø59Ø37Ø-1Ø$(Ø,0Ø/3Ø&*ñ5
à˜E×,Ñ,Ñ-ð5
ð ! ×!1Ñ!1Ñ2ð5
ð   × 1Ñ 1Ñ2ð	5
ð
 ˜˜U×.Ñ.Ñ/Ñ0ð5
ð ˜×)Ñ)Ñ*ð5
ð ˜D‘>ð5
ð $ D™>ð5
ð ' t™nð5
ð ˜d‘^ð5
ð 
ˆuÐ(Ð(Ñ	)ò5
óó Bô5
rp   rK  )rK  r  r×   rq   )5rî   râ   Údataclassesr   Úpathlibr   Útypingr   r   r   r   rD   Útorch.utils.checkpointr	   Ú
generationr   Úmodeling_utilsr   Úutilsr   r   r   r   r   r   r   r   Úconfiguration_rwkvr   Ú
get_loggerrs   r'   rF  rG  r%   r2   ÚautogradÚFunctionr4   rŠ   r•   ÚModuler—   rÁ   rÉ   r×   rö   rý   ÚRWKV_START_DOCSTRINGrE  r  rK  Ú__all__rw   rp   r1   ú<module>rj     s€  ðñ  ã Ý !Ý ß /Ó /ã Û Ý å )Ý -÷	÷ 	ó 	õ +ð 
ˆ×	Ñ	˜HÓ	%€à-Ð Ø€ð Ð ò5ô@g
˜%Ÿ.™.×1Ñ1ô g
óT)óXbôC5˜Ÿ	™	ô C5ôL#)�b—i‘iô #)ôL�—	‘	ô ôDD]˜/ô D]ðN ô?�ó ?ó ð?ð: ô?˜ó ?ó ð?ð@Ð ð (Ð ñV ØdØóôa6Ð#ó a6ó	ða6ñH ðð óô]
Ð)¨?ó ]
óð]
ò@ B�rp   