§
    ‚Štj0}  ã                   ó¦  — d Z ddlZddlm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 dd	lmZ dd
lmZmZmZmZmZmZmZ ddlmZ  ej        e¦  «        Zdad„ Z G d„ dej        j        ¦  «        Z d(d„Z!d(d„Z" G d„ dej#        ¦  «        Z$ G d„ dej#        ¦  «        Z% G d„ de¦  «        Z&e G d„ de¦  «        ¦   «         Z' ed¬¦  «        e G d„ de¦  «        ¦   «         ¦   «         Z( ed¬¦  «        e G d „ d!e¦  «        ¦   «         ¦   «         Z)e G d"„ d#e'¦  «        ¦   «         Z* ed$¬¦  «         G d%„ d&e'e
¦  «        ¦   «         Z+g d'¢Z,dS ))zPyTorch RWKV model.é    N)Ú	dataclass)Únné   )Úinitialization)ÚGenerationMixin)ÚGradientCheckpointingLayer)ÚPreTrainedModel)ÚModelOutputÚauto_docstringÚis_bitsandbytes_availableÚis_kernels_availableÚis_ninja_availableÚis_torch_cuda_availableÚloggingé   )Ú
RwkvConfigc                 ó~   — t          ¦   «         st          d¦  «        ‚ddlm}  |dd¬¦  «        a| t          _        d S )NzFkernels is not installed, please install it with `pip install kernels`r   )Ú
get_kernelzkernels-community/rwkvr   )Úversion)r   ÚImportErrorÚintegrations.hub_kernelsr   Úrwkv_cuda_kernelÚmax_seq_length)Úcontext_lengthr   s     úd/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/rwkv/modeling_rwkv.pyÚload_wkv_cuda_kernelr   -   sW   € åÑ!Ô!ð dÝÐbÑcÔcÐcà6Ð6Ð6Ð6Ð6Ð6à!�zÐ":ÀAÐFÑFÔFÐØ&4ÕÔ#Ð#Ð#ó    c                   ó>   — e Zd Zedd„¦   «         Zedd„¦   «         ZdS )ÚRwkvLinearAttentionNFc                 óB  — |                      ¦   «         \  }}}	|t          j        k    r t          d|› dt          j        › d�¦  «        ‚||	z  t	          |	d¦  «        z  dk    r't          d|› d|	› dt	          |	d¦  «        › d	�¦  «        ‚|j        | _        |j        j        d
k    s0|j        j        d
k    s |j        j        d
k    s|j        j        d
k    rt          d¦  «        ‚t          j
        |                     ¦   «                              ¦   «         ¦  «         }|j        t          j        k    r<|                     ¦   «         }|                     ¦   «         }|                     ¦   «         }|                     ¦   «         }|                     ¦   «         }|                     ¦   «         }t          j        |t          j        ¬¦  «        }
|s|�¾|€Kt          j        ||	dt          j        |j        t          j        ¬¦  «        }|d d …d d …dfxx         dz  cc<   n2t          j        d„ |D ¦   «         d¬¦  «                             ¦   «         }|j        t          j        k    rt          j        }nt          j        } ||||||
|¦  «         n<|j        t          j        k    rt          j        nt          j        } ||||||
¦  «         |                      |||||
¦  «         |�!d„ t          j        |dd¬¦  «        D ¦   «         }|
                     | j        ¦  «        |fS )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 ú.ÚcudazUCalling the CUDA kernel for wkv attention requires all tensors to be on CUDA devices.©Úmemory_formatr   )ÚdtypeÚdevicer%   é   ç±¡*ÓÎÒGc                 ó8   — g | ]}|                      d ¦  «        ‘ŒS ©r(   )Ú	unsqueeze©Ú.0Úss     r   ú
<listcomp>z/RwkvLinearAttention.forward.<locals>.<listcomp>g   s"   € Ð"AÐ"AÐ"A°a 1§;¢;¨q¡>¤>Ð"AÐ"AÐ"Ar   )Údimc                 ó8   — g | ]}|                      d ¦  «        ‘ŒS r+   )Úsqueezer-   s     r   r0   z/RwkvLinearAttention.forward.<locals>.<listcomp>t   s"   € ÐHÐHÐH a�Q—Y’Y˜q‘\”\ÐHÐHÐHr   )Úsizer   r   Ú
ValueErrorÚminr&   Úinput_dtyper'   ÚtypeÚtorchÚexpÚfloatÚ
contiguousÚfloat16Ú
empty_likeÚcontiguous_formatÚzerosÚfloat32ÚcatÚbfloat16Úforward_with_state_bf16Úforward_with_stateÚforward_bf16ÚforwardÚsave_for_backwardÚchunkÚto)ÚctxÚ
time_decayÚ
time_firstÚkeyÚvalueÚstateÚreturn_stateÚ
batch_sizeÚseq_lenÚhidden_sizeÚoutputÚforward_funcs               r   rG   zRwkvLinearAttention.forward9   sG  € à+.¯8ª8©:¬:Ñ(ˆ
�G˜[ØÕ%Ô4Ò4Ð4ÝðF¨wð Fð FÝ#Ô2ðFð Fð Fñô ð ð ˜Ñ#¥c¨+°rÑ&:Ô&:Ñ:¸aÒ?Ð?Ýð7¨jð 7ð 7È[ð 7ð 7Ý" ;°Ñ3Ô3ð7ð 7ð 7ñô ð ð
 œ)ˆŒð ÔÔ" fÒ,Ð,ØÔ Ô%¨Ò/Ð/ØŒzŒ &Ò(Ð(ØŒ|Ô  FÒ*Ð*åÐtÑuÔuÐuå”i 
× 0Ò 0Ñ 2Ô 2× =Ò =Ñ ?Ô ?Ñ@Ô@Ð@ˆ
ØŒ9�œÒ%Ð%Ø#×)Ò)Ñ+Ô+ˆJØ—)’)‘+”+ˆCØ—K’K‘M”MˆEØ×*Ò*Ñ,Ô,ˆ
Ø�nŠnÑÔˆØ× Ò Ñ"Ô"ˆåÔ! #µUÔ5LÐMÑMÔMˆØð 	E˜5Ð,Øˆ}ÝœØØØÝœ-Øœ:Ý"'Ô"9ðñ ô �ð �a�a�a˜˜˜˜A�g��” $Ñ&��‘�åœ	Ð"AÐ"A¸5Ð"AÑ"AÔ"AÀqÐIÑIÔI×TÒTÑVÔV�ØŒy�EœNÒ*Ð*Ý/ÔG��å/ÔB�ØˆL˜ Z°°e¸VÀUÑKÔKÐKÐKà<?¼IÍÌÒ<WÐ<WÕ+Ô8Ð8Õ]mÔ]uˆLØˆL˜ Z°°e¸VÑDÔDÐDà×Ò˜j¨*°c¸5À&ÑIÔIÐIàÐØHÐH­5¬;°u¸aÀQÐ+GÑ+GÔ+GÐHÑHÔHˆEà�yŠy˜œÑ)Ô)¨5Ð0Ð0r   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|                     ¦   «         }|t          j        k    rt          j
        nt          j        } |||||||                     ¦   «         |	|
||¦
  «
         |	                     |¦  «        |
                     |¦  «        |                     |¦  «        |                     |¦  «        d d fS )N)r%   r&   r$   )r7   Úsaved_tensorsr9   r>   r?   rC   rA   r=   r;   r   Úbackward_bf16Úbackwardr<   rJ   )rK   Úg_outputÚg_stater7   rL   rM   rN   rO   rU   Úg_time_decayÚg_time_firstÚg_keyÚg_valueÚbackward_funcs                 r   rZ   zRwkvLinearAttention.backwardx   se  € ð ”oˆà58Ô5FÑ2ˆ
�J  U¨FåÔ'ØÝÔ1Ø$/µ5´>Ò$AÐ$A•%”.�.ÅuÄ}ð
ñ 
ô 
ˆõ
 Ô'¨
Å%ÔBYÐZÑZÔZˆÝÔ  µEÔ4KÐLÑLÔLˆÝÔ" 5½Ô8OÐPÑPÔPˆà�%œ-Ò'Ð'Ø—~’~Ñ'Ô'ˆHØ:EÍÌÒ:WÐ:WÕ(Ô6Ð6Õ]mÔ]vˆØˆØØØØØØ×ÒÑ!Ô!ØØØØñ	
ô 	
ð 	
ð �OŠO˜KÑ(Ô(Ø�OŠO˜KÑ(Ô(Ø�HŠH�[Ñ!Ô!Ø�JŠJ�{Ñ#Ô#ØØð
ð 	
r   ©NF©N)Ú__name__Ú
__module__Ú__qualname__ÚstaticmethodrG   rZ   © r   r   r   r   8   sS   € € € € € Øð<1ð <1ð <1ñ „\ð<1ð| ð%
ð %
ð %
ñ „\ð%
ð %
ð %
r   r   Fc                 óê  — |                      ¦   «         \  }}}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                              ¦   «         }|d d …|f         }t          j        |||z   ¦  «        }t          j        ||z
  ¦  «        }t          j        ||z   |z
  ¦  «        }||	z  ||z  z   }||
z  |z   }||z                       |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)   )
r4   r9   Ú
zeros_likerA   r:   Úranger;   ÚmaximumrJ   r&   )rL   rM   rN   rO   rP   rQ   Ú_Ú
seq_lengthrU   Ú	num_stateÚ	den_stateÚ	max_stateÚcurrent_indexÚcurrent_keyÚcurrent_valueÚmax_for_outputÚe1Úe2Ú	numeratorÚdenominatorÚmax_for_states                        r   Úrwkv_linear_attention_cpur{   ¢   s$  € ð —x’x‘z”zÑ€A€z�1ÝÔ˜cÑ"Ô"€Fà€}ÝÔ$ S¨¨¨¨A¨¤Yµe´mÐDÑDÔDˆ	ÝÔ$ S¨¨¨¨A¨¤Yµe´mÐDÑDÔDˆ	ÝÔ$ S¨¨¨¨A¨¤Yµe´mÐDÑDÔDÀtÑKˆ	ˆ	à*/Ñ'ˆ	�9˜iõ
 ”)˜JÑ'Ô'Ð'€Jå˜zÑ*Ô*ð "ñ "ˆØ˜!˜!˜!˜]Ð*Ô+×1Ò1Ñ3Ô3ˆØ˜a˜a˜a Ð.Ô/ˆõ œ y°+À
Ñ2JÑKÔKˆÝŒY�y >Ñ1Ñ2Ô2ˆÝŒY�{ ZÑ/°.Ñ@ÑAÔAˆØ˜‘N R¨-Ñ%7Ñ7ˆ	Ø˜9‘n rÑ)ˆØ$-°Ñ$;×#?Ò#?ÀÄÑ#MÔ#Mˆˆqˆqˆq�-ÐÑ õ œ i°*Ñ&<¸kÑJÔJˆÝŒY�y :Ñ-°Ñ=Ñ>Ô>ˆÝŒY�{ ]Ñ2Ñ3Ô3ˆØ˜‘N R¨-Ñ%7Ñ7ˆ	Ø˜‘N RÑ'ˆ	Ø!ˆ	‰	àð 2�uÐ(Ø˜I yÐ1ˆà�5ˆ=Ðr   c                 óì   — t          d„ | |||fD ¦   «         ¦  «        }|                     d¦  «        dk    }t          �|s|rt          | |||||¬¦  «        S t                               | |||||¦  «        S )Nc              3   ó6   K  — | ]}|j         j        d k    V — ŒdS )r#   N)r'   r8   )r.   Úts     r   ú	<genexpr>z(rwkv_linear_attention.<locals>.<genexpr>Ï   s+   è è € ÐXÐX¨a�!”(”- 6Ò)ÐXÐXÐXÐXÐXÐXr   r   ©rP   rQ   )Úanyr4   r   r{   r   Úapply)rL   rM   rN   rO   rP   rQ   Úno_cudaÚ	one_tokens           r   Úrwkv_linear_attentionr…   Î   sŠ   € ÝÐXÐX°JÀ
ÈCÐQVÐ3WÐXÑXÔXÑXÔX€Gð —’˜‘”˜qÒ €IÝÐ 7Ð¨iÐÝ(¨°ZÀÀeÐSXÐgsÐtÑtÔtÐtå"×(Ò(¨°ZÀÀeÈUÐT`ÑaÔaÐar   c                   ó0   ‡ — e Zd Zdˆ fd„	Zdd„Zd	d„Zˆ xZS )
ÚRwkvSelfAttentionr   c                 ód  •— t          ¦   «                              ¦   «          || _        t          d uot          j        |j        k    }t          ¦   «         rPt          ¦   «         rB|s@	 t          |j        ¦  «         n*# t          $ r t                               d¦  «         Y nw xY w|| _        |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          j        d¦  «        | _        t          j        ||d¬¦  «        | _        t          j        ||d¬¦  «        | _        t          j        ||d¬¦  «        | _        t          j        ||d¬¦  «        | _        d S )Nz9Could not load the custom CUDA kernel for RWKV attention.r   ©r   r   r   éÿÿÿÿF©Úbias)ÚsuperÚ__init__Úconfigr   r   r   r   r   r   Ú	ExceptionÚloggerÚinfoÚlayer_idrT   Úattention_hidden_sizer   Ú	Parameterr9   ÚemptyrL   rM   Útime_mix_keyÚtime_mix_valueÚtime_mix_receptanceÚ	ZeroPad2dÚ
time_shiftÚLinearrN   rO   Ú
receptancerU   )Úselfr�   r“   Úkernel_loadedrT   r”   Ú	__class__s         €r   rŽ   zRwkvSelfAttention.__init__Ú   s÷  ø€ Ý‰Œ×ÒÑÔÐØˆŒÝ(°Ð4ÐqÕ9IÔ9XÐ\bÔ\qÒ9qˆÝÑÔð 	YÕ$;Ñ$=Ô$=ð 	YÀmð 	YðYÝ$ VÔ%:Ñ;Ô;Ð;Ð;øÝð Yð Yð YÝ—’ÐWÑXÔXÐXÐXÐXðYøøøà ˆŒØÔ(ˆà,2Ô,HÐ,TˆFÔ(Ð(ÐZeð 	ð &;ˆÔ"åœ,¥u¤{Ð3HÑ'IÔ'IÑJÔJˆŒÝœ,¥u¤{Ð3HÑ'IÔ'IÑJÔJˆŒåœL­¬°Q¸¸;Ñ)GÔ)GÑHÔHˆÔÝ œl­5¬;°q¸!¸[Ñ+IÔ+IÑJÔJˆÔÝ#%¤<µ´¸A¸qÀ+Ñ0NÔ0NÑ#OÔ#OˆÔ åœ, }Ñ5Ô5ˆŒÝ”9˜[Ð*?ÀeÐLÑLÔLˆŒÝ”Y˜{Ð,AÈÐNÑNÔNˆŒ
Ýœ) KÐ1FÈUÐSÑSÔSˆŒÝ”iÐ 5°{ÈÐOÑOÔOˆŒˆˆs   Á&A; Á;$B"Â!B"Nc                 ób  — |                      d¦  «        dk    r|�|d         d d …d d …| j        f         }n8|                      |¦  «        }|�!|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   }|                      |¦  «        }|                      |¦  «        }t          j	        |  
                    |¦  «        ¦  «        }|�!|d d …df         |d         d d …d d …| j        f<   ||||fS ©Nr   r   rŠ   )r4   r“   r›   r—   r˜   r™   rN   rO   r9   Úsigmoidr�   )rž   ÚhiddenrP   ÚshiftedrN   rO   r�   s          r   Úextract_key_valuez#RwkvSelfAttention.extract_key_valueø   sW  € à�;Š;�q‰>Œ>˜QÒÐ 5Ð#4Ø˜A”h˜q˜q˜q ! ! ! T¤]Ð2Ô3ˆGˆGà—o’o fÑ-Ô-ˆGØÐ Ø % a¤¨¨¨¨A¨A¨A¨t¬}Ð)<Ô =�˜˜˜˜1˜‘Ø�tÔ(Ñ(¨7°a¸$Ô:KÑ6KÑ+LÑLˆØ˜Ô,Ñ,¨w¸!¸dÔ>QÑ:QÑ/RÑRˆØ˜dÔ6Ñ6¸ÀAÈÔH`ÑD`Ñ9aÑaˆ
à�hŠh�s‰mŒmˆØ—
’
˜5Ñ!Ô!ˆÝ”] 4§?¢?°:Ñ#>Ô#>Ñ?Ô?ˆ
ØÐØ,2°1°1°1°b°5¬MˆE�!ŒH�Q�Q�Q˜˜˜˜4œ=Ð(Ñ)Ø˜3  uÐ,Ð,r   Fc                 ó´  ‡ — ‰                       ||¬¦  «        \  }}}}|�#t          ˆ fd„|dd …         D ¦   «         ¦  «        nd }t          ‰ j        ‰ j        ||||¬¦  «        \  }}|�W|d         |d         d d …d d …‰ j        f<   |d         |d         d d …d d …‰ j        f<   |d         |d         d d …d d …‰ j        f<   ‰                      ||z  ¦  «        |fS )	N©rP   c              3   ó@   •K  — | ]}|d d …d d …‰j         f         V — Œd S rc   ©r“   )r.   r/   rž   s     €r   r   z,RwkvSelfAttention.forward.<locals>.<genexpr>  s9   øè è € ÐFÐF°q˜A˜a˜a˜a    D¤MÐ1Ô2ÐFÐFÐFÐFÐFÐFr   r(   r€   r   r   r   é   )r¦   Útupler…   rL   rM   r“   rU   )	rž   r¤   rP   Ú	use_cacher�   rN   rO   Úlayer_stateÚrwkvs	   `        r   rG   zRwkvSelfAttention.forward  s  ø€ Ø(,×(>Ò(>¸vÈUÐ(>Ñ(SÔ(SÑ%ˆ
�C˜ ØJOÐJ[•eÐFÐFÐFÐF¸EÀ!À"À"¼IÐFÑFÔFÑFÔFÐFÐaeˆÝ1ØŒOØŒOØØØØ"ð
ñ 
ô 
Ñˆˆkð Ð"Ø,7¸¬NˆE�!ŒH�Q�Q�Q˜˜˜˜4œ=Ð(Ñ)Ø,7¸¬NˆE�!ŒH�Q�Q�Q˜˜˜˜4œ=Ð(Ñ)Ø,7¸¬NˆE�!ŒH�Q�Q�Q˜˜˜˜4œ=Ð(Ñ)à�{Š{˜:¨Ñ,Ñ-Ô-¨uÐ4Ð4r   ©r   rc   rb   )rd   re   rf   rŽ   r¦   rG   Ú__classcell__©r    s   @r   r‡   r‡   Ù   sk   ø€ € € € € ðPð Pð Pð Pð Pð Pð<-ð -ð -ð -ð&5ð 5ð 5ð 5ð 5ð 5ð 5ð 5r   r‡   c                   ó(   ‡ — e Zd Zdˆ fd„	Zdd„Zˆ xZS )ÚRwkvFeedForwardr   c                 ó0  •— 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¬¦  «        | _        d S )Nr«   r‰   r   Fr‹   )r�   rŽ   r�   r“   rT   Úintermediate_sizer   rš   r›   r•   r9   r–   r—   r™   rœ   rN   r�   rO   )rž   r�   r“   rT   r¶   r    s        €r   rŽ   zRwkvFeedForward.__init__   sò   ø€ Ý‰Œ×ÒÑÔÐØˆŒØ ˆŒØÔ(ˆà(.Ô(@Ð(LˆFÔ$Ð$ÐRSÐV\ÔVhÑRhð 	õ œ, }Ñ5Ô5ˆŒÝœL­¬°Q¸¸;Ñ)GÔ)GÑHÔHˆÔÝ#%¤<µ´¸A¸qÀ+Ñ0NÔ0NÑ#OÔ#OˆÔ å”9˜[Ð*;À%ÐHÑHÔHˆŒÝœ) K°À5ÐIÑIÔIˆŒÝ”YÐ0°+ÀEÐJÑJÔJˆŒ
ˆ
ˆ
r   Nc                 ó|  — |                      d¦  «        dk    r|�|d         d d …d d …| j        f         }n8|                      |¦  «        }|�!|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        |                      |¦  «        ¦  «        ¦  «        }|  	                    |¦  «        }t          j
        |                      |¦  «        ¦  «        }|�!|d d …df         |d         d d …d d …| j        f<   ||z  |fS r¢   )r4   r“   r›   r—   r™   r9   ÚsquareÚrelurN   rO   r£   r�   )rž   r¤   rP   r¥   rN   r�   rO   s          r   rG   zRwkvFeedForward.forward1  sK  € Ø�;Š;�q‰>Œ>˜QÒÐ 5Ð#4Ø˜A”h˜q˜q˜q ! ! ! T¤]Ð2Ô3ˆGˆGà—o’o fÑ-Ô-ˆGØÐ Ø % a¤¨¨¨¨A¨A¨A¨t¬}Ð)<Ô =�˜˜˜˜1˜‘Ø�tÔ(Ñ(¨7°a¸$Ô:KÑ6KÑ+LÑLˆØ˜dÔ6Ñ6¸ÀAÈÔH`ÑD`Ñ9aÑaˆ
åŒl�5œ: d§h¢h¨s¡m¤mÑ4Ô4Ñ5Ô5ˆØ—
’
˜3‘”ˆÝ”] 4§?¢?°:Ñ#>Ô#>Ñ?Ô?ˆ
àÐØ,2°1°1°1°b°5¬MˆE�!ŒH�Q�Q�Q˜˜˜˜4œ=Ð(Ñ)à˜EÑ! 5Ð(Ð(r   r°   rc   ©rd   re   rf   rŽ   rG   r±   r²   s   @r   r´   r´     sW   ø€ € € € € ðKð Kð Kð Kð Kð Kð")ð )ð )ð )ð )ð )ð )ð )r   r´   c                   ó&   ‡ — e Zd Zˆ fd„Zdd„Zˆ xZS )Ú	RwkvBlockc                 ó¢  •— t          ¦   «                              ¦   «          || _        || _        |dk    r%t	          j        |j        |j        ¬¦  «        | _        t	          j        |j        |j        ¬¦  «        | _	        t	          j        |j        |j        ¬¦  «        | _
        t          ||¦  «        | _        t          ||¦  «        | _        d S )Nr   )Úeps)r�   rŽ   r�   r“   r   Ú	LayerNormrT   Úlayer_norm_epsilonÚpre_lnÚln1Úln2r‡   Ú	attentionr´   Úfeed_forward)rž   r�   r“   r    s      €r   rŽ   zRwkvBlock.__init__F  s­   ø€ Ý‰Œ×ÒÑÔÐØˆŒØ ˆŒà�qŠ=ˆ=Ýœ, vÔ'9¸vÔ?XÐYÑYÔYˆDŒKå”< Ô 2¸Ô8QÐRÑRÔRˆŒÝ”< Ô 2¸Ô8QÐRÑRÔRˆŒå*¨6°8Ñ<Ô<ˆŒÝ+¨F°HÑ=Ô=ˆÔÐÐr   NFc                 ó4  — | j         dk    r|                      |¦  «        }|                      |                      |¦  «        ||¬¦  «        \  }}||z   }|                      |                      |¦  «        |¬¦  «        \  }}||z   }||f}|r||fz  }n|dz  }|S )Nr   )rP   r­   r¨   rc   )r“   rÁ   rÄ   rÂ   rÅ   rÃ   )rž   r¤   rP   r­   Úoutput_attentionsrÄ   rÅ   Úoutputss           r   rG   zRwkvBlock.forwardT  s´   € ØŒ=˜AÒÐØ—[’[ Ñ(Ô(ˆFàŸ>š>¨$¯(ª(°6Ñ*:Ô*:À%ÐS\˜>Ñ]Ô]Ñˆ	�5Ø˜)Ñ#ˆà"×/Ò/°·²¸Ñ0@Ô0@ÈÐ/ÑNÔNÑˆ�eØ˜,Ñ&ˆà˜5�/ˆØð 	Ø˜	�|Ñ#ˆGˆGà�wÑˆGàˆr   )NFFrº   r²   s   @r   r¼   r¼   E  sL   ø€ € € € € ð>ð >ð >ð >ð >ðð ð ð ð ð ð ð r   r¼   c                   ó~   ‡ — e Zd ZU eed<   dZdgZddgZdZdZ	 e
j        ¦   «         dej        fˆ fd„¦   «         Zˆ xZS )	ÚRwkvPreTrainedModelr�   r¯   r¼   rL   rM   TÚmodulec           	      óä  •‡‡‡— t          ¦   «                              |¦  «         t          |t          ¦  «        �r|j        }|j        j        }|j        j        Š|j        Š||dz
  z  Šd||z  z
  }t          j
        ˆfd„t          ‰¦  «        D ¦   «         |j        j        |j        j        ¬¦  «        }|dddd…f         }ˆˆfd„t          ‰¦  «        D ¦   «         }t          j
        ||j        j        |j        j        ¬¦  «        }t          j
        d„ t          ‰¦  «        D ¦   «         |j        j        |j        j        ¬¦  «        dz  }t#          j        |j        |¦  «         t#          j        |j        t          j        |j        t)          j        d	¦  «        z  |z   ¦  «        ¦  «         t#          j        |j        t          j        ||¦  «        ¦  «         t#          j        |j        t          j        ||¦  «        d	‰z  z   ¦  «         t#          j        |j        t          j        |d|z  ¦  «        ¦  «         dS t          |t2          ¦  «        rÔ|j        }|j        j        }|j        j        Šd||z  z
  }t          j
        ˆfd
„t          ‰¦  «        D ¦   «         |j        j        |j        j        ¬¦  «        }|dddd…f         }t#          j        |j        t          j        ||¦  «        ¦  «         t#          j        |j        t          j        ||¦  «        ¦  «         dS t          |t4          j        ¦  «        rµ|j        j        }d}	d}
|j        �t#          j        |j        ¦  «         |d         |d         k    r#t)          j         |d         |d         z  ¦  «        }	|d         | j        j!        k    r|d         | j        j        k    rd}
|	|
z  }	t#          j"        |j        |	¬¦  «         dS t          |t4          j#        ¦  «        rZ|j        j        }dt)          j         tI          |d         |d         ¦  «        ¦  «        z  }	t#          j"        |j        |	¬¦  «         dS dS )zInitialize the weights.r   g      ð?c                 ó   •— g | ]}|‰z  ‘ŒS rh   rh   ©r.   ÚirT   s     €r   r0   z5RwkvPreTrainedModel._init_weights.<locals>.<listcomp>~  ó   ø€ Ð=Ð=Ð= Q��[‘Ð=Ð=Ð=r   ©r&   r'   Nc                 ó>   •— g | ]}d d|‰dz
  z  dd‰z  z   z  z  z   ‘ŒS )éûÿÿÿé   r   gffffffæ?gÍÌÌÌÌÌô?rh   )r.   Úhr”   Úratio_0_to_1s     €€r   r0   z5RwkvPreTrainedModel._init_weights.<locals>.<listcomp>„  sM   ø€ ð ð ð àð �Q˜!Ð4°qÑ8Ñ9¸sÀSÈ<ÑEWÑ?WÑXÑXÑXðð ð r   c                 ó$   — g | ]}|d z   dz  d z
  ‘ŒS )r   r   rh   )r.   rÏ   s     r   r0   z5RwkvPreTrainedModel._init_weights.<locals>.<listcomp>‹  s$   € ÐKÐKÐK¨�a˜!‘e˜q‘[ 1‘_ÐKÐKÐKr   g      à?g333333Ó?c                 ó   •— g | ]}|‰z  ‘ŒS rh   rh   rÎ   s     €r   r0   z5RwkvPreTrainedModel._init_weights.<locals>.<listcomp>   rÐ   r   r   )Úgaing-Cëâ6?)%r�   Ú_init_weightsÚ
isinstancer‡   r“   r�   Únum_hidden_layersrT   r”   r9   Útensorrk   r—   r&   r'   rL   rM   ÚinitÚcopy_Ú	ones_likeÚmathÚlogÚpowr˜   r™   r´   r   rœ   ÚweightÚshaperŒ   Úzeros_ÚsqrtÚ
vocab_sizeÚorthogonal_Ú	EmbeddingÚmax)rž   rË   r“   rÜ   Úratio_1_to_almost0Útime_weightÚdecay_speedÚzigzagrå   rÙ   Úscaler”   rT   rÖ   r    s              @@@€r   rÚ   z!RwkvPreTrainedModel._init_weightsp  sa  øøøø€ õ 	‰Œ×Ò˜fÑ%Ô%Ð%Ý�fÕ/Ñ0Ô0ñ D	7Ø”ˆHØ &¤Ô ?ÐØ œ-Ô3ˆKØ$*Ô$@Ð!à#Ð'8¸1Ñ'<Ñ=ˆLØ!$¨Ð3DÑ(DÑ!EÐåœ,Ø=Ð=Ð=Ð=­%°Ñ*<Ô*<Ð=Ñ=Ô=ØÔ)Ô/ØÔ*Ô1ðñ ô ˆKð
 & d¨D°!°!°! mÔ4ˆKðð ð ð ð åÐ4Ñ5Ô5ðñ ô ˆKõ  œ, {¸&Ô:KÔ:QÐZ`ÔZkÔZrÐsÑsÔsˆKå”ØKÐK­eÐ4IÑ.JÔ.JÐKÑKÔKØ Ô+Ô1Ø!Ô,Ô3ðñ ô ð
 ñð õ ŒJ�vÔ(¨+Ñ6Ô6Ð6ÝŒJ�vÔ(­%¬/¸&Ô:KÍdÌhÐWZÉmÌmÑ:[Ð^dÑ:dÑ*eÔ*eÑfÔfÐfåŒJ�vÔ*­E¬I°kÐCUÑ,VÔ,VÑWÔWÐWÝŒJ�vÔ,­e¬i¸ÐEWÑ.XÔ.XÐ[^ÐamÑ[mÑ.mÑnÔnÐnÝŒJ�vÔ1µ5´9¸[È#ÐPbÑJbÑ3cÔ3cÑdÔdÐdÐdÐdÝ˜¥Ñ0Ô0ð  	7Ø”ˆHØ &¤Ô ?ÐØ œ-Ô3ˆKà!$¨Ð3DÑ(DÑ!EÐåœ,Ø=Ð=Ð=Ð=­%°Ñ*<Ô*<Ð=Ñ=Ô=ØÔ)Ô/ØÔ*Ô1ðñ ô ˆKð
 & d¨D°!°!°! mÔ4ˆKåŒJ�vÔ*­E¬I°kÐCUÑ,VÔ,VÑWÔWÐWÝŒJ�vÔ1µ5´9¸[ÐJ\Ñ3]Ô3]Ñ^Ô^Ð^Ð^Ð^Ý˜¥¤	Ñ*Ô*ð 	7Ø”MÔ'ˆEØˆDØˆEØŒ{Ð&Ý”˜FœKÑ(Ô(Ð(Ø�QŒx˜% œ(Ò"Ð"Ý”y  q¤¨E°!¬HÑ!4Ñ5Ô5�Ø�QŒx˜4œ;Ô1Ò1Ð1°e¸A´hÀ$Ä+ÔBYÒ6YÐ6YØ�à�E‰MˆDÝÔ˜Vœ]°Ð6Ñ6Ô6Ð6Ð6Ð6Ý˜¥¤Ñ-Ô-ð 	7Ø”MÔ'ˆEØ�$œ)¥C¨¨a¬°%¸´(Ñ$;Ô$;Ñ<Ô<Ñ<ˆDÝÔ˜Vœ]°Ð6Ñ6Ô6Ð6Ð6Ð6ð	7ð 	7r   )rd   re   rf   r   Ú__annotations__Úbase_model_prefixÚ_no_split_modulesÚ_keep_in_fp32_modulesÚsupports_gradient_checkpointingÚ_is_statefulr9   Úno_gradr   ÚModulerÚ   r±   r²   s   @r   rÊ   rÊ   g  s•   ø€ € € € € € àÐÐÑØÐØ$˜ÐØ)¨<Ð8ÐØ&*Ð#Ø€Là€U„]�_„_ðG7 B¤Ið G7ð G7ð G7ð G7ð G7ñ „_ðG7ð G7ð G7ð G7ð G7r   rÊ   z+
    Class for the RWKV model outputs.
    )Úcustom_introc                   ó¸   — e Zd ZU dZdZej        dz  ed<   dZe	ej                 dz  ed<   dZ
eej        df         dz  ed<   dZeej        df         dz  ed<   dS )Ú
RwkvOutputa  
    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`.
    NÚlast_hidden_staterP   .Úhidden_statesÚ
attentions)rd   re   rf   Ú__doc__rü   r9   ÚFloatTensorrñ   rP   Úlistrý   r¬   rþ   rh   r   r   rû   rû   »  s˜   € € € € € € ðð ð 37Ð�uÔ(¨4Ñ/Ð6Ð6Ñ6Ø,0€Eˆ4�Ô!Ô" TÑ)Ð0Ð0Ñ0Ø:>€M�5˜Ô*¨CÐ/Ô0°4Ñ7Ð>Ð>Ñ>Ø7;€J��eÔ'¨Ð,Ô-°Ñ4Ð;Ð;Ñ;Ð;Ð;r   rû   zK
    Base class for causal language model (or autoregressive) outputs.
    c                   óÖ   — e Zd ZU dZdZej        dz  ed<   dZej        dz  ed<   dZ	e
ej                 dz  ed<   dZeej        df         dz  ed<   dZeej        df         dz  ed<   dS )	ÚRwkvCausalLMOutputap  
    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`.
    NÚlossÚlogitsrP   .rý   rþ   )rd   re   rf   rÿ   r  r9   r   rñ   r  rP   r  rý   r¬   rþ   rh   r   r   r  r  Î  s¯   € € € € € € ðð ð &*€Dˆ%Ô
˜dÑ
"Ð)Ð)Ñ)Ø'+€FˆEÔ Ñ$Ð+Ð+Ñ+Ø,0€Eˆ4�Ô!Ô" TÑ)Ð0Ð0Ñ0Ø:>€M�5˜Ô*¨CÐ/Ô0°4Ñ7Ð>Ð>Ñ>Ø7;€J��eÔ'¨Ð,Ô-°Ñ4Ð;Ð;Ñ;Ð;Ð;r   r  c                   óî   ‡ — e Zd Zˆ fd„Zd„ Zd„ Ze	 	 	 	 	 	 	 	 ddej        dz  dej        dz  dej	        dz  de
ej	                 dz  d	edz  d
edz  dedz  dedz  deez  fd„¦   «         Zd„ Zd„ Zˆ xZS )Ú	RwkvModelc                 ó‚  •‡— t          ¦   «                              ‰¦  «         t          j        ‰j        ‰j        ¦  «        | _        t          j        ˆfd„t          ‰j	        ¦  «        D ¦   «         ¦  «        | _
        t          j        ‰j        ¦  «        | _        d| _        d| _        |                      ¦   «          d S )Nc                 ó2   •— g | ]}t          ‰|¬ ¦  «        ‘ŒS )rª   )r¼   )r.   Úidxr�   s     €r   r0   z&RwkvModel.__init__.<locals>.<listcomp>ì  s&   ø€ Ð$pÐ$pÐ$pÈ¥Y¨vÀÐ%DÑ%DÔ%DÐ$pÐ$pÐ$pr   F)r�   rŽ   r   rê   rè   rT   Ú
embeddingsÚ
ModuleListrk   rÜ   Úblocksr¿   Úln_outÚlayers_are_rescaledÚgradient_checkpointingÚ	post_init©rž   r�   r    s    `€r   rŽ   zRwkvModel.__init__è  s¤   øø€ Ý‰Œ×Ò˜Ñ Ô Ð åœ, vÔ'8¸&Ô:LÑMÔMˆŒÝ”mÐ$pÐ$pÐ$pÐ$pÕPUÐV\ÔVnÑPoÔPoÐ$pÑ$pÔ$pÑqÔqˆŒÝ”l 6Ô#5Ñ6Ô6ˆŒà#(ˆÔ à&+ˆÔ#ð 	�ŠÑÔÐÐÐr   c                 ó   — | j         S rc   ©r  ©rž   s    r   Úget_input_embeddingszRwkvModel.get_input_embeddingsö  s
   € ØŒÐr   c                 ó   — || _         d S rc   r  ©rž   Únew_embeddingss     r   Úset_input_embeddingszRwkvModel.set_input_embeddingsù  s   € Ø(ˆŒˆˆr   NÚ	input_idsÚattention_maskÚinputs_embedsrP   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                               d¦  «         | j        | j        k    r|  	                    ¦   «          |�‰�t          d¦  «        ‚|€‰€t          d¦  «        ‚‰€|                      |¦  «        Š|rZ|€X‰                     d¦  «        | j         j        | j         j        fŠˆˆfd„t          d¦  «        D ¦   «         }|d	xx         d
z  cc<   | j        r%| j        r|rt                               d¦  «         d}‰}
|rdnd}|rdnd}t#          | j        ¦  «        D ]Z\  }} ||
|||¬¦  «        \  }
}}| j        r+| j         j        dk    r|dz   | j         j        z  dk    r|
dz  }
|r||
fz   }|r||fz   }Œ[|                      |
¦  «        }
|r||
fz   }|st+          d„ |
|||fD ¦   «         ¦  «        S t-          |
|||¬¦  «        S )a   
        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.get_seq_length()` (`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)
        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.
        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   c                 ól   •— g | ]0}t          j        ‰|d k    r‰j        nt           j        ‰j        dœŽ‘Œ1S )r   rÑ   )r9   r@   r&   rA   r'   )r.   rÏ   r  rå   s     €€r   r0   z%RwkvModel.forward.<locals>.<listcomp>3  sY   ø€ ð ð ð ð õ ”Ø¸¸aº¸ -Ô"5Ð"5ÅUÄ]Ð[hÔ[oðð ð ðð ð r   é   r«   gêŒ 9Y>)FzZ`use_cache=True` is incompatible with gradient checkpointing. Setting `use_cache=False`...rh   )rP   r­   rÇ   r   r(   c              3   ó   K  — | ]}|®|V — Œ	d S rc   rh   )r.   Úxs     r   r   z$RwkvModel.forward.<locals>.<genexpr>^  s(   è è € ÐtÐt˜qÐfgÐfs˜ÐfsÐfsÐfsÐfsÐtÐtr   )rü   rP   rý   rþ   )r�   rÇ   r  Útrainingr­   r  r‘   Úwarning_oncer  Ú_rescale_layersr5   r  r4   rT   rÜ   rk   r  Ú	enumerater  Úrescale_everyr  r¬   rû   )rž   r  r  r  rP   r­   rÇ   r  r  Úkwargsrý   Úall_self_attentionsÚall_hidden_statesr
  Úblockrþ   rå   s      `            @r   rG   zRwkvModel.forwardü  s  øø€ ð@ 2CÐ1NÐ-Ð-ÐTXÔT_ÔTqÐà$8Ð$DÐ Ð È$Ì+ÔJjð 	ð "+Ð!6�I�IÐZ^ÔZgÐ=r¸T¼[Ô=RÐ=RÐmrˆ	Ø%0Ð%<�k�kÀ$Ä+ÔBYˆàÐ%Ý×ÒÐ ^Ñ_Ô_Ð_àŒ=˜DÔ4Ò4Ð4Ø× Ò Ñ"Ô"Ð"àÐ  ]Ð%>ÝÐcÑdÔdÐdØÐ =Ð#8ÝÐTÑUÔUÐUàÐ Ø ŸOšO¨IÑ6Ô6ˆMàð 	˜˜Ø"×'Ò'¨Ñ*Ô*¨D¬KÔ,CÀTÄ[ÔEbÐcˆEðð ð ð ð õ ˜q™œð	ñ ô ˆEð �!ˆHˆHŒH˜ÑˆHˆH‰HàÔ&ð 	"¨4¬=ð 	"Øð "Ý×#Ò#Øpñô ð ð "�	à%ˆà$5Ð?˜b˜b¸4ÐØ"6Ð@˜B˜B¸DÐÝ# D¤KÑ0Ô0ð 	Jð 	J‰JˆC�Ø/4¨uØ U°iÐSdð0ñ 0ô 0Ñ,ˆM˜5 *ð
 Ô(ð2à”KÔ-°Ò1Ð1Ø˜1‘W ¤Ô 9Ñ9¸QÒ>Ð>à -°Ñ 1�à#ð IØ$5¸Ð8HÑ$HÐ!à ð JØ&9¸Z¸MÑ&IÐ#øàŸš MÑ2Ô2ˆàð 	EØ 1°]Ð4DÑ DÐàð 	uÝÐtÐt ]°EÐ;LÐNaÐ$bÐtÑtÔtÑtÔtÐtåØ+ØØ+Ø*ð	
ñ 
ô 
ð 	
r   c           	      ó,  — | j         | j         k    rd S | j        j        dk    �rbt	          j        ¦   «         5  t          | j        ¦  «        D �] \  }}| j        rƒ|j        j	        j
                             dt          || j        j        z  ¦  «        z  ¦  «         |j        j        j
                             dt          || j        j        z  ¦  «        z  ¦  «         Œ�t          |j        j	        j
        d¦  «        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¦  «        rB|                      |j        j	        |¦  «         |                      |j        j        |¦  «         �Œž|j        j	        j
                             dt          || j        j        z  ¦  «        z  ¦  «         |j        j        j
                             dt          || j        j        z  ¦  «        z  ¦  «         �Œ"	 d d d ¦  «         n# 1 swxY w Y   | j         | _         d S )Nr   r(   ÚSCBÚquant_state)r  r&  r�   r*  r9   r÷   r)  r  rÄ   rU   rä   Úmul_ÚintrÅ   rO   Úhasattrr0  Údiv_Ú _bnb_4bit_dequantize_and_rescale)rž   Úblock_idr.  s      r   r(  zRwkvModel._rescale_layersg  s¥  € àÔ#¨D¬MÐ(9Ò:Ð:ØˆFØŒ;Ô$ qÒ(Ñ(Ý”‘”ð rð rÝ'0°´Ñ'=Ô'=ð rñ r‘O�H˜eØ”}ð rØœÔ.Ô5×:Ò:¸1ÅÀHÐPTÔP[ÔPiÑDiÑ@jÔ@jÑ;jÑkÔkÐkØÔ*Ô0Ô7×<Ò<¸QÅ#ÀhÐRVÔR]ÔRkÑFkÑBlÔBlÑ=lÑmÔmÐmÐmõ # 5¤?Ô#9Ô#@À%ÑHÔHð rØ!œOÔ2Ô9Ô=×BÒBÀ1ÍÈHÐX\ÔXcÔXqÑLqÑHrÔHrÑCrÑsÔsÐsØ!Ô.Ô4Ô;Ô?×DÒDÀQÍ#ÈhÐZ^ÔZeÔZsÑNsÑJtÔJtÑEtÑuÔuÐuÑuÝ$ U¤_Ô%;Ô%BÀMÑRÔRð rØ ×AÒAÀ%Ä/ÔBXÐZbÑcÔcÐcØ ×AÒAÀ%ÔBTÔBZÐ\dÑeÔeÐeÑeà!œOÔ2Ô9×>Ò>¸qÅCÈÐTXÔT_ÔTmÑHmÑDnÔDnÑ?nÑoÔoÐoØ!Ô.Ô4Ô;×@Ò@ÀÅcÈ(ÐVZÔVaÔVoÑJoÑFpÔFpÑApÑqÔqÐqÑqðrðrð rð rñ rô rð rð rð rð rð rð røøøð rð rð rð rð" (,¤}Ð#4ˆÔ Ð Ð s   ¸H7I<É<J ÊJ c                 óº  — t          ¦   «         st          d¦  «        ‚ddl}|j                             |j        j        |j        j        ¦  «        }|                     dt          || j
        j        z  ¦  «        z  ¦  «         |j                             |                     d¦  «        d¬¦  «                             |j        ¦  «        }t!          |d|¦  «         dS )	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_gradrä   )r   r   ÚbitsandbytesÚ
functionalÚdequantize_4biträ   Údatar1  r5  r3  r�   r*  r   Ú
Params4bitrJ   r'   Úsetattr)rž   Útarget_layerr7  ÚbnbÚdequant_weightsÚquant_weights         r   r6  z*RwkvModel._bnb_4bit_dequantize_and_rescale  sÒ   € õ
 )Ñ*Ô*ð 	QÝÐOÑPÔPÐPØ"Ð"Ð"Ð"àœ.×8Ò8¸Ô9LÔ9QÐS_ÔSfÔSrÑsÔsˆà×Ò˜Q¥# h°$´+Ô2KÑ&KÑ"LÔ"LÑLÑMÔMÐMð ”v×(Ò(¨×);Ò);¸EÑ)BÔ)BÐRWÐ(ÑXÔX×[Ò[Ð\kÔ\rÑsÔsˆÝ�˜h¨Ñ5Ô5Ð5Ð5Ð5r   )NNNNNNNN)rd   re   rf   rŽ   r  r  r   r9   Ú
LongTensorr   r  Úboolr¬   rû   rG   r(  r6  r±   r²   s   @r   r  r  æ  sT  ø€ € € € € ðð ð ð ð ðð ð ð)ð )ð )ð ð .2Ø26Ø26Ø04Ø!%Ø)-Ø,0Ø#'ðh
ð h
àÔ# dÑ*ðh
ð Ô(¨4Ñ/ðh
ð Ô(¨4Ñ/ð	h
ð
 �EÔ%Ô&¨Ñ-ðh
ð ˜$‘;ðh
ð   $™;ðh
ð # T™kðh
ð ˜D‘[ðh
ð 
�Ñ	ðh
ð h
ð h
ñ „^ðh
ðT5ð 5ð 5ð06ð 6ð 6ð 6ð 6ð 6ð 6r   r  z‡
    The RWKV Model transformer with a language modeling head on top (linear layer with weights tied to the input
    embeddings).
    c                   ó  ‡ — e Zd ZddiZˆ fd„Zd„ Zd„ Ze	 	 	 	 	 	 	 	 	 	 ddej	        dz  d	ej	        dz  d
ej
        dz  deej
                 dz  dej	        dz  dedz  dedz  dedz  dedz  deej        z  deez  fd„¦   «         Zˆ xZS )ÚRwkvForCausalLMzhead.weightzrwkv.embeddings.weightc                 óæ   •— t          ¦   «                              |¦  «         t          |¦  «        | _        t	          j        |j        |j        d¬¦  «        | _        |  	                    ¦   «          d S )NFr‹   )
r�   rŽ   r  r¯   r   rœ   rT   rè   Úheadr  r  s     €r   rŽ   zRwkvForCausalLM.__init__ž  s`   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý˜fÑ%Ô%ˆŒ	Ý”I˜fÔ0°&Ô2CÈ%ÐPÑPÔPˆŒ	ð 	�ŠÑÔÐÐÐr   c                 ó   — | j         S rc   ©rJ  r  s    r   Úget_output_embeddingsz%RwkvForCausalLM.get_output_embeddings¦  s
   € ØŒyÐr   c                 ó   — || _         d S rc   rL  r  s     r   Úset_output_embeddingsz%RwkvForCausalLM.set_output_embeddings©  s   € Ø"ˆŒ	ˆ	ˆ	r   Nr   r  r  r  rP   Úlabelsr­   rÇ   r  r  Úlogits_to_keepr   c           	      ó¶  — |	�|	n| j         j        }	|                      |||||||	¬¦  «        }|d         }t          |
t          ¦  «        rt          |
 d¦  «        n|
}|                      |dd…|dd…f         ¦  «        }d}|� | j        d||| j         j        dœ|¤Ž}|	s|f|dd…         z   }|�|f|z   n|S t          |||j
        |j        |j        ¬¦  «        S )aJ  
        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.get_seq_length()` (`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)
        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).
        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]`
        use_cache (`bool`, *optional*):
            If set to `True`, the last state is returned and can be used to quickly generate the next logits.
        N)r  rP   r­   rÇ   r  r  r   )r  rP  rè   r   )r  r  rP   rý   rþ   rh   )r�   r  r¯   rÛ   r3  ÚslicerJ  Úloss_functionrè   r  rP   rý   rþ   )rž   r  r  r  rP   rP  r­   rÇ   r  r  rQ  r+  Úrwkv_outputsrý   Úslice_indicesr  r  rU   s                     r   rG   zRwkvForCausalLM.forward¬  s2  € ðL &1Ð%<�k�kÀ$Ä+ÔBYˆà—y’yØØ'ØØØ/Ø!5Ø#ð !ñ 
ô 
ˆð % Qœˆå8BÀ>ÕSVÑ8WÔ8WÐk�˜~˜o¨tÑ4Ô4Ð4Ð]kˆØ—’˜=¨¨¨¨M¸1¸1¸1Ð)<Ô=Ñ>Ô>ˆàˆØÐØ%�4Ô%Ðp¨V¸FÈtÌ{ÔOeÐpÐpÐioÐpÐpˆDàð 	FØ�Y ¨a¨b¨bÔ!1Ñ1ˆFØ)-Ð)9�T�G˜fÑ$Ð$¸vÐEå!ØØØÔ$Ø&Ô4Ø#Ô.ð
ñ 
ô 
ð 	
r   )
NNNNNNNNNr   )rd   re   rf   Ú_tied_weights_keysrŽ   rM  rO  r   r9   rE  r   r  rF  r3  ÚTensorr¬   r  rG   r±   r²   s   @r   rH  rH  •  ss  ø€ € € € € ð (Ð)AÐBÐðð ð ð ð ðð ð ð#ð #ð #ð ð .2Ø26Ø26Ø04Ø*.Ø!%Ø)-Ø,0Ø#'Ø-.ðD
ð D
àÔ# dÑ*ðD
ð Ô(¨4Ñ/ðD
ð Ô(¨4Ñ/ð	D
ð
 �EÔ%Ô&¨Ñ-ðD
ð Ô  4Ñ'ðD
ð ˜$‘;ðD
ð   $™;ðD
ð # T™kðD
ð ˜D‘[ðD
ð ˜eœlÑ*ðD
ð 
Ð#Ñ	#ðD
ð D
ð D
ñ „^ðD
ð D
ð D
ð D
ð D
r   rH  )rH  r  rÊ   rb   )-rÿ   rá   Údataclassesr   r9   r   Ú r   rÞ   Ú
generationr   Úmodeling_layersr   Úmodeling_utilsr	   Úutilsr
   r   r   r   r   r   r   Úconfiguration_rwkvr   Ú
get_loggerrd   r‘   r   r   ÚautogradÚFunctionr   r{   r…   rø   r‡   r´   r¼   rÊ   rû   r  r  rH  Ú__all__rh   r   r   ú<module>rd     s¹  ðð Ð à €€€Ø !Ð !Ð !Ð !Ð !Ð !à €€€Ø Ð Ð Ð Ð Ð à &Ð &Ð &Ð &Ð &Ð &Ø )Ð )Ð )Ð )Ð )Ð )Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø -Ð -Ð -Ð -Ð -Ð -ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð +Ð *Ð *Ð *Ð *Ð *ð 
ˆÔ	˜HÑ	%Ô	%€ð Ð ð5ð 5ð 5ðg
ð g
ð g
ð g
ð g
˜%œ.Ô1ñ g
ô g
ð g
ðT)ð )ð )ð )ðXbð bð bð bðC5ð C5ð C5ð C5ð C5˜œ	ñ C5ô C5ð C5ðL#)ð #)ð #)ð #)ð #)�b”iñ #)ô #)ð #)ðLð ð ð ð Ð*ñ ô ð ðD ðP7ð P7ð P7ð P7ð P7˜/ñ P7ô P7ñ „ðP7ðf €ððñ ô ð
 ð
<ð 
<ð 
<ð 
<ð 
<�ñ 
<ô 
<ñ „ñô ð
<ð €ððñ ô ð
 ð<ð <ð <ð <ð <˜ñ <ô <ñ „ñô ð<ð$ ðk6ð k6ð k6ð k6ð k6Ð#ñ k6ô k6ñ „ðk6ð\ €ððñ ô ðV
ð V
ð V
ð V
ð V
Ð)¨?ñ V
ô V
ñô ðV
ðr BÐ
AÐ
A€€€r   