§
    Ý˜ºhù|  ã                   óX  — 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	  e	j
        e¦  «        Z e¦   «         rd dlZd„ Z	 	 	 d"dee         d	ed
         dee         dedef         fd„Z	 	 	 d"dee         d	ed
         dee         dedef         fd„Z	 	 	 d"dee         d	ed
         dee         dedef         fd„Z	 d#ded	d
dee         dedef         fd„Z	 d#ded	d
dee         dedef         fd„Z	 d#ded	d
dee         dedef         fd„ZeeeeeedœZ	 	 d$dedededee         dee         f
d„Zd#dedee         fd„Zd#dedee         fd„Zd#dedee         fd„Zd#dedee         fd„Zd#dedee         fd„Z d#dedee         fd „Z!eeeee e!dœZ"d#dedee         fd!„Z#dS )%é    N©Úwraps)ÚOptionalé   )ÚPretrainedConfig)Úis_torch_availableÚloggingc                 óP   ‡ ‡‡— d„ Šd„ Št          ‰ ¦  «        ˆˆˆ fd„¦   «         }|S )ad  
    Decorator function to update the RoPE parameters in the forward pass, if the model is using a dynamic RoPE
    (i.e. a RoPE implementation that may recompute its frequencies in the forward pass).

    Args:
        rope_forward (Callable):
            The forward pass of the RoPE implementation.

    Returns:
        The decorated forward pass.
    c                 óÂ  — t          j        |¦  «        dz   }t          | j        d¦  «        r| j        j        }n| j        j        }||k    rWt          | d¦  «        s(|                      | j        ||dz   ¬¦  «        \  | _        }|                      d| j        d¬¦  «         dS | j	         
                    |¦  «        | _	        |                      d| j	        d¬¦  «         dS )	zbLongrope uses long factor if sequence is larger than original pretraining length, short otherwise.r   Ú original_max_position_embeddingsÚlong_inv_freq©Úseq_lenÚinv_freqF©Ú
persistentN)ÚtorchÚmaxÚhasattrÚconfigr   Úmax_position_embeddingsÚrope_init_fnr   Úregister_bufferÚoriginal_inv_freqÚto)ÚselfÚposition_idsÚdevicer   r   Ú_s         úh/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/transformers/modeling_rope_utils.pyÚlongrope_frequency_updatez6dynamic_rope_update.<locals>.longrope_frequency_update+   sû   € å”)˜LÑ)Ô)¨AÑ-ˆÝ�4”;Ð BÑCÔCð 	SØ/3¬{Ô/[Ð,Ð,à/3¬{Ô/RÐ,ØÐ5Ò5Ð5Ý˜4 Ñ1Ô1ð Ø(,×(9Ò(9Ø”K Ð1QÐTUÑ1Uð ):ñ )ô )Ñ%�Ô" Að × Ò  ¨TÔ-?ÈEÐ ÑRÔRÐRÐRÐRð &*Ô%;×%>Ò%>¸vÑ%FÔ%FˆDÔ"Ø× Ò  ¨TÔ-CÐPUÐ ÑVÔVÐVÐVÐVó    c                 ó   — t          j        |¦  «        dz   }|| j        k    rD|                      | j        ||¬¦  «        \  }| _        |                      d|d¬¦  «         || _        || j        k     rZ| j        | j        k    rL| j         	                    |¦  «        | _        |                      d| j        d¬¦  «         | j        | _        dS dS dS )a  
        dynamic RoPE layers should recompute `inv_freq` in the following situations:
        1 - growing beyond the cached sequence length (allow scaling)
        2 - the current sequence length is in the original scale (avoid losing precision with small sequences)
        r   r   r   Fr   N)
r   r   Úmax_seq_len_cachedr   r   Úattention_scalingr   Úoriginal_max_seq_lenr   r   )r   r   r   r   r   s        r    Údynamic_frequency_updatez5dynamic_rope_update.<locals>.dynamic_frequency_update>   så   € õ ”)˜LÑ)Ô)¨AÑ-ˆØ�TÔ,Ò,Ð,Ø/3×/@Ò/@ÀÄÈfÐ^eÐ/@Ñ/fÔ/fÑ,ˆH�dÔ,Ø× Ò  ¨XÀ%Ð ÑHÔHÐHØ&-ˆDÔ#à�TÔ.Ò.Ð.°4Ô3JÈTÔMfÒ3fÐ3fð &*Ô%;×%>Ò%>¸vÑ%FÔ%FˆDÔ"Ø× Ò  ¨TÔ-CÐPUÐ ÑVÔVÐVØ&*Ô&?ˆDÔ#Ð#Ð#ð /Ð.Ð3fÐ3fr"   c                 ó”   •— d| j         v r ‰| ||j        ¬¦  «         n| j         dk    r ‰| ||j        ¬¦  «          ‰| ||¦  «        S )NÚdynamic)r   Úlongrope)Ú	rope_typer   )r   Úxr   r'   r!   Úrope_forwards      €€€r    Úwrapperz$dynamic_rope_update.<locals>.wrapperQ   sh   ø€ à˜œÐ&Ð&Ø$Ð$ T¨<ÀÄÐIÑIÔIÐIÐIØŒ^˜zÒ)Ð)Ø%Ð% d¨LÀÄÐJÑJÔJÐJØˆ|˜D ! \Ñ2Ô2Ð2r"   r   )r-   r.   r'   r!   s   ` @@r    Údynamic_rope_updater/      sh   øøø€ ðWð Wð Wð&@ð @ð @õ& ˆ<ÑÔð3ð 3ð 3ð 3ð 3ð 3ñ Ôð3ð €Nr"   r   r   ztorch.devicer   Úreturnztorch.Tensorc                 óF  — | j         }t          | d¦  «        r| j        nd}t          | dd¦  «        p| j        | j        z  }t          ||z  ¦  «        }d}d|t          j        d|dt          j	        ¬¦  «         
                    |t          j        ¬¦  «        |z  z  z  }||fS )	ax  
    Computes the inverse frequencies according to the original RoPE implementation
    Args:
        config ([`~transformers.PretrainedConfig`]):
            The model configuration.
        device (`torch.device`):
            The device to use for initialization of the inverse frequencies.
        seq_len (`int`, *optional*):
            The current sequence length. Unused for this type of RoPE.
    Returns:
        Tuple of (`torch.Tensor`, `float`), containing the inverse frequencies for the RoPE embeddings and the
        post-processing scaling factor applied to the computed cos/sin (unused in this type of RoPE).
    Úpartial_rotary_factorç      ð?Úhead_dimNr   é   ©Údtype©r   r7   )Ú
rope_thetar   r2   ÚgetattrÚhidden_sizeÚnum_attention_headsÚintr   ÚarangeÚint64r   Úfloat)	r   r   r   Úbaser2   r4   ÚdimÚattention_factorr   s	            r    Ú _compute_default_rope_parametersrD   \   sµ   € ð$ Ô€DÝ<CÀFÐLcÑ<dÔ<dÐm˜FÔ8Ð8ÐjmÐÝ�v˜z¨4Ñ0Ô0Ðd°FÔ4FÈ&ÔJdÑ4d€HÝ
ˆhÐ.Ñ.Ñ
/Ô
/€CàÐð �d�uœ|¨A¨s°A½U¼[ÐIÑIÔI×LÒLÐTZÕbgÔbmÐLÑnÔnÐqtÑtÑuÑv€HØÐ%Ð%Ð%r"   c                 óV   — | j         d         }t          | ||¦  «        \  }}||z  }||fS )aˆ  
    Computes the inverse frequencies with linear scaling. Credits to the Reddit user /u/kaiokendev
    Args:
        config ([`~transformers.PretrainedConfig`]):
            The model configuration.
        device (`torch.device`):
            The device to use for initialization of the inverse frequencies.
        seq_len (`int`, *optional*):
            The current sequence length. Unused for this type of RoPE.
    Returns:
        Tuple of (`torch.Tensor`, `float`), containing the inverse frequencies for the RoPE embeddings and the
        post-processing scaling factor applied to the computed cos/sin (unused in this type of RoPE).
    Úfactor)Úrope_scalingrD   )r   r   r   rF   r   rC   s         r    Ú'_compute_linear_scaling_rope_parametersrH   z   sD   € ð$ Ô  Ô*€Fõ "BÀ&È&ÐRYÑ!ZÔ!ZÑ€HÐð
 �Ñ€HØÐ%Ð%Ð%r"   c                 óf  — | j         }t          | d¦  «        r| j        nd}t          | d| j        | j        z  ¦  «        }t          ||z  ¦  «        }| j        }| j        d         }d}	|€|}n_t          |t          j        ¦  «        r5t          j        |t          j        ||j        |j        ¬¦  «        ¦  «        }nt!          ||¦  «        }|||z  |z  |dz
  z
  ||dz
  z  z  z  }d|t          j        d	|dt          j        ¬
¦  «                             |t          j        ¬¦  «        |z  z  z  }
|
|	fS )a§  
    Computes the inverse frequencies with NTK scaling. Credits to the Reddit users /u/bloc97 and /u/emozilla
    Args:
        config ([`~transformers.PretrainedConfig`]):
            The model configuration.
        device (`torch.device`):
            The device to use for initialization of the inverse frequencies.
        seq_len (`int`, *optional*):
            The current sequence length, used to update the dynamic RoPE at inference time.
    Returns:
        Tuple of (`torch.Tensor`, `float`), containing the inverse frequencies for the RoPE embeddings and the
        post-processing scaling factor applied to the computed cos/sin (unused in this type of RoPE).
    r2   r3   r4   rF   N©r7   r   r   r5   r   r6   r8   )r9   r   r2   r:   r;   r<   r=   r   rG   Ú
isinstancer   ÚTensorÚmaximumÚtensorr7   r   r   r>   r?   r   r@   )r   r   r   rA   r2   r4   rB   r   rF   rC   r   s              r    Ú_compute_dynamic_ntk_parametersrO   ˜   sY  € ð& Ô€DÝ<CÀFÐLcÑ<dÔ<dÐm˜FÔ8Ð8ÐjmÐÝ�v˜z¨6Ô+=ÀÔA[Ñ+[Ñ\Ô\€HÝ
ˆhÐ.Ñ.Ñ
/Ô
/€CØ$Ô<ÐØÔ  Ô*€FàÐð €Ø)ˆˆÝ	�G�Uœ\Ñ	*Ô	*ð 8Ý”-ØÝŒLÐ0¸¼ÈgÌnÐ]Ñ]Ô]ñ
ô 
ˆˆõ
 �gÐ6Ñ7Ô7ˆð �F˜WÑ$Ð'>Ñ>À6ÈAÁ:ÑNÐTWÐ[^ÐabÑ[bÑTcÑdÑd€DØ�d�uœ|¨A¨s°A½U¼[ÐIÑIÔI×LÒLÐTZÕbgÔbmÐLÑnÔnÐqtÑtÑuÑv€HØÐ%Ð%Ð%r"   c                 ó  ‡— | j         }t          | d¦  «        r| j        nd}t          | d| j        | j        z  ¦  «        }t          ||z  ¦  «        }| j        d         }| j                             d¦  «        }| j                             d¦  «        }	| j                             d¦  «        }
| j                             d¦  «        p| j	        }dd
„}|€6|	r)|
r't           |||	¦  «         |||
¦  «        z  ¦  «        }n ||¦  «        }| j                             d¦  «        pd}| j                             d¦  «        pd	}d„ Šˆfd„}d„ }|t          j        d|d¦  «                             |t          j
        ¬¦  «        |z  z  }d|z  }d||z  z  }| j                             dd¦  «        } |||||||¦  «        \  }}d	 ||||dz  ¦  «                             |t          j
        ¬¦  «        z
  }|d	|z
  z  ||z  z   }||fS )a‘  
    Computes the inverse frequencies with NTK scaling. Please refer to the
    [original paper](https://huggingface.co/papers/2309.00071)
    Args:
        config ([`~transformers.PretrainedConfig`]):
            The model configuration.
        device (`torch.device`):
            The device to use for initialization of the inverse frequencies.
        seq_len (`int`, *optional*):
            The current sequence length. Unused for this type of RoPE.
    Returns:
        Tuple of (`torch.Tensor`, `float`), containing the inverse frequencies for the RoPE embeddings and the
        post-processing scaling factor applied to the computed cos/sin.
    r2   r3   r4   rF   rC   ÚmscaleÚmscale_all_dimr   r   c                 óL   — | dk    rdS d|z  t          j        | ¦  «        z  dz   S )Nr   r3   gš™™™™™¹?)ÚmathÚlog)ÚscalerQ   s     r    Ú
get_mscalez,_compute_yarn_parameters.<locals>.get_mscaleã   s,   € Ø�AŠ:ˆ:Ø�3Ø�V‰|�dœh u™oœoÑ-°Ñ3Ð3r"   NÚ	beta_fasté    Ú	beta_slowc                 ó†   — |t          j        || dz  t           j        z  z  ¦  «        z  dt          j        |¦  «        z  z  S )zPInverse dimension formula to find the dimension based on the number of rotationsr5   )rT   rU   Úpi)Únum_rotationsrB   rA   r   s       r    Úfind_correction_dimz5_compute_yarn_parameters.<locals>.find_correction_dimõ   sA   € à•d”hÐ6¸-È!Ñ:KÍdÌgÑ:UÑVÑWÔWÑWÐ\]Õ`dÔ`hÐimÑ`nÔ`nÑ\nÑoÐor"   c                 óÖ   •—  ‰| |||¦  «        } ‰||||¦  «        }|r(t          j        |¦  «        }t          j        |¦  «        }t          |d¦  «        t	          ||dz
  ¦  «        fS )z.Find dimension range bounds based on rotationsr   r   )rT   ÚfloorÚceilr   Úmin)	Úlow_rotÚhigh_rotrB   rA   r   ÚtruncateÚlowÚhighr^   s	           €r    Úfind_correction_rangez7_compute_yarn_parameters.<locals>.find_correction_rangeù   st   ø€ à!Ð! '¨3°Ð6MÑNÔNˆØ"Ð" 8¨S°$Ð8OÑPÔPˆØð 	#Ý”*˜S‘/”/ˆCÝ”9˜T‘?”?ˆDÝ�3˜‰{Œ{�C  c¨A¡gÑ.Ô.Ð.Ð.r"   c                 óš   — | |k    r|dz  }t          j        |t           j        ¬¦  «        | z
  || z
  z  }t          j        |dd¦  «        }|S )Ngü©ñÒMbP?r6   r   r   )r   r>   Úfloat32Úclamp)rb   r   rB   Úlinear_funcÚ	ramp_funcs        r    Úlinear_ramp_factorz4_compute_yarn_parameters.<locals>.linear_ramp_factor  sQ   € Ø�#Š:ˆ:Ø�5‰LˆCå”| C­u¬}Ð=Ñ=Ô=ÀÑCÈÈcÉ	ÑRˆÝ”K ¨Q°Ñ2Ô2ˆ	ØÐr"   r   r5   r8   re   T)r   )r9   r   r2   r:   r;   r<   r=   rG   Úgetr   r@   r   r>   r   )r   r   r   rA   r2   r4   rB   rF   rC   rQ   rR   r   rW   rX   rZ   rh   rn   Ú	pos_freqsÚinv_freq_extrapolationÚinv_freq_interpolationre   rf   rg   Úinv_freq_extrapolation_factorr   r^   s                            @r    Ú_compute_yarn_parametersrt   Å   s›  ø€ ð$ Ô€DÝ<CÀFÐLcÑ<dÔ<dÐm˜FÔ8Ð8ÐjmÐÝ�v˜z¨6Ô+=ÀÔA[Ñ+[Ñ\Ô\€HÝ
ˆhÐ.Ñ.Ñ
/Ô
/€CØÔ  Ô*€FØÔ*×.Ò.Ð/AÑBÔBÐØÔ ×$Ò$ XÑ.Ô.€FØÔ(×,Ò,Ð-=Ñ>Ô>€NàÔ×ÒÐ BÑCÔCÐeÀvÔGeð %ð4ð 4ð 4ð 4ð ÐØð 	2�nð 	2Ý$ Z Z°¸Ñ%?Ô%?À*À*ÈVÐUcÑBdÔBdÑ%dÑeÔeÐÐà)˜z¨&Ñ1Ô1Ðð Ô#×'Ò'¨Ñ4Ô4Ð:¸€IØÔ#×'Ò'¨Ñ4Ô4Ð9¸€Iðpð pð pð/ð /ð /ð /ð /ðð ð ð �œ a¨¨aÑ0Ô0×3Ò3¸6ÍÌÐ3ÑUÔUÐX[Ñ[Ñ\€IØ  9™_ÐØ  F¨YÑ$6Ñ7ÐàÔ"×&Ò& z°4Ñ8Ô8€HØ%Ð% i°¸CÀÐGgÐiqÑrÔr�I€Cˆð %&Ð(:Ð(:¸3ÀÀcÈQÁhÑ(OÔ(O×(RÒ(RÐZ`ÕhmÔhsÐ(RÑ(tÔ(tÑ$tÐ!à !Ð&CÑ"CÑDØ
 Ð#@Ñ
@ñ	Að ð Ð%Ð%Ð%r"   c                 óP  — | j         }t          | d¦  «        r| j        nd}t          | d| j        | j        z  ¦  «        }t          ||z  ¦  «        }| j        d         }| j        d         }| j                             d¦  «        }	| j                             d¦  «        }
t          | d¦  «        r| j	        }| j
        | j	        z  }	n| j
        }|
€G|	dk    rd}
n>t          j        d
t          j        |	¦  «        t          j        |¦  «        z  z   ¦  «        }
|r(||k    r"t          j        |t          j        |¬¦  «        }n!t          j        |t          j        |¬¦  «        }t          j        d|dt          j        |¬¦  «                             ¦   «         |z  }d|||z  z  z  }||
fS )a~  
    Computes the inverse frequencies with LongRoPE scaling. Please refer to the
    [original implementation](https://github.com/microsoft/LongRoPE)
    Args:
        config ([`~transformers.PretrainedConfig`]):
            The model configuration.
        device (`torch.device`):
            The device to use for initialization of the inverse frequencies.
        seq_len (`int`, *optional*):
            The current sequence length.
    Returns:
        Tuple of (`torch.Tensor`, `float`), containing the inverse frequencies for the RoPE embeddings and the
        post-processing scaling factor applied to the computed cos/sin.
    r2   r3   r4   Úlong_factorÚshort_factorrF   rC   r   Nr   rJ   r   r5   )r9   r   r2   r:   r;   r<   r=   rG   ro   r   r   rT   ÚsqrtrU   r   rN   rj   r>   r?   r@   )r   r   r   rA   r2   r4   rB   rv   rw   rF   rC   r   Úext_factorsÚinv_freq_shaper   s                  r    Ú_compute_longrope_parametersr{     s»  € ð$ Ô€DÝ<CÀFÐLcÑ<dÔ<dÐm˜FÔ8Ð8ÐjmÐÝ�v˜z¨6Ô+=ÀÔA[Ñ+[Ñ\Ô\€HÝ
ˆhÐ.Ñ.Ñ
/Ô
/€CØÔ% mÔ4€KØÔ& ~Ô6€LØÔ ×$Ò$ XÑ.Ô.€FØÔ*×.Ò.Ð/AÑBÔBÐõ
 ˆvÐ9Ñ:Ô:ð JØ+1Ô+RÐ(ØÔ/°&Ô2YÑYˆˆà+1Ô+IÐ(ð ÐØ�SŠ=ˆ=Ø"ÐÐå#œy¨­T¬X°fÑ-=Ô-=ÅÄÐIiÑ@jÔ@jÑ-jÑ)jÑkÔkÐð ð U�7Ð=Ò=Ð=Ý”l ;µe´mÈFÐSÑSÔSˆˆå”l <µu´}ÈVÐTÑTÔTˆÝ”\ ! S¨!µ5´;ÀvÐNÑNÔN×TÒTÑVÔVÐY\Ñ\€NØ�k D¨.Ñ$8Ñ8Ñ9€HàÐ%Ð%Ð%r"   c                 ó”  — t          | ||¦  «        \  }}| j        d         }| j        d         }| j        d         }| j        d         }||z  }	||z  }
dt          j        z  |z  }t	          j        ||	k    ||z  |¦  «        }||z  |z
  ||z
  z  }d|z
  |z  |z  ||z  z   }||
k      ||	k     z  }t	          j        |||¦  «        }||fS )a<  
    Computes the inverse frequencies for llama 3.1.

    Args:
        config ([`~transformers.PretrainedConfig`]):
            The model configuration.
        device (`torch.device`):
            The device to use for initialization of the inverse frequencies.
        seq_len (`int`, *optional*):
            The current sequence length. Unused for this type of RoPE.
    Returns:
        Tuple of (`torch.Tensor`, `float`), containing the inverse frequencies for the RoPE embeddings and the
        post-processing scaling factor applied to the computed cos/sin.
    rF   Úlow_freq_factorÚhigh_freq_factorr   r5   r   )rD   rG   rT   r\   r   Úwhere)r   r   r   r   rC   rF   r}   r~   Úold_context_lenÚlow_freq_wavelenÚhigh_freq_wavelenÚwavelenÚinv_freq_llamaÚsmooth_factorÚsmoothed_inv_freqÚis_medium_freqs                   r    Ú_compute_llama3_parametersrˆ   R  s  € õ$ "BÀ&È&ÐRYÑ!ZÔ!ZÑ€HÐàÔ  Ô*€FØÔ)Ð*;Ô<€OØÔ*Ð+=Ô>ÐØÔ)Ð*LÔM€Oà&¨Ñ8ÐØ'Ð*:Ñ:Ðà•$”'‰k˜HÑ$€Gõ ”[ Ð+;Ò!;¸XÈÑ=NÐPXÑYÔY€Nà$ wÑ.°Ñ@ÐEUÐXgÑEgÑh€MØ˜]Ñ*¨nÑ<¸vÑEÈÐXfÑHfÑfÐØÐ!2Ò2Ð3¸ÐBRÒ8RÐ6SÑS€NÝ”[ Ð1BÀNÑSÔS€NàÐ+Ð+Ð+r"   )ÚdefaultÚlinearr)   Úyarnr*   Úllama3r+   Úreceived_keysÚrequired_keysÚoptional_keysÚignore_keysc                 óò   — d|v r|dhz  }|                      d¦  «         |�||z  }||z
  }|rt          d| › d|› �¦  «        ‚|�	||z
  |z
  }n||z
  }|r"t                               d| › d|› �¦  «         dS dS )zYCompare the received keys in `config.rope_scaling` against the expected and optional keysÚtyper+   Nz9Missing required keys in `rope_scaling` for 'rope_type'='z': z5Unrecognized keys in `rope_scaling` for 'rope_type'=')ÚaddÚKeyErrorÚloggerÚwarning)r+   r�   rŽ   r�   r�   Úmissing_keysÚunused_keyss          r    Ú_check_received_keysr™   ˆ  sÕ   € ð �ÐÐØ˜&˜Ñ!ˆØ×Ò˜+Ñ&Ô&Ð&ð ÐØ˜Ñ$ˆà  =Ñ0€LØð qÝÐoÐS\ÐoÐoÐamÐoÐoÑpÔpÐpàÐ Ø# mÑ3°mÑCˆˆà# mÑ3ˆØð lÝ�ŠÐjÈyÐjÐjÐ]hÐjÐjÑkÔkÐkÐkÐkðlð lr"   c                 óÖ   — | j         }|                     d|                     dd ¦  «        ¦  «        }dh}t          |                     ¦   «         ¦  «        }t	          ||||¬¦  «         d S )Nr+   r’   ©r�   )rG   ro   ÚsetÚkeysr™   )r   r�   rG   r+   rŽ   r�   s         r    Ú!_validate_default_rope_parametersrž   ¥  sl   € ØÔ&€LØ× Ò  ¨l×.>Ò.>¸vÀtÑ.LÔ.LÑMÔM€IØ �M€MÝ˜×)Ò)Ñ+Ô+Ñ,Ô,€MÝ˜ M°=ÈkÐZÑZÔZÐZÐZÐZr"   c                 ó`  — | j         }|                     d|                     dd ¦  «        ¦  «        }ddh}t          |                     ¦   «         ¦  «        }t	          ||||¬¦  «         |d         }|�t          |t          ¦  «        r|dk     rt                               d|› �¦  «         d S d S )Nr+   r’   rF   r›   r3   ú8`rope_scaling`'s factor field must be a float >= 1, got ©	rG   ro   rœ   r�   r™   rK   r@   r•   r–   )r   r�   rG   r+   rŽ   r�   rF   s          r    Ú(_validate_linear_scaling_rope_parametersr¢   ­  s¸   € ØÔ&€LØ× Ò  ¨l×.>Ò.>¸vÀtÑ.LÔ.LÑMÔM€IØ  (Ð+€MÝ˜×)Ò)Ñ+Ô+Ñ,Ô,€MÝ˜ M°=ÈkÐZÑZÔZÐZà˜(Ô#€FØ€~�Z¨µÑ6Ô6€~¸&À3º,¸,Ý�ŠÐZÐRXÐZÐZÑ[Ô[Ð[Ð[Ð[ð ;G¸,r"   c                 óh  — | j         }|                     d|                     dd ¦  «        ¦  «        }ddh}dh}t          |                     ¦   «         ¦  «        }t	          |||||¬¦  «         |d         }|�t          |t          ¦  «        r|dk     rt                               d|› �¦  «         d S d S )Nr+   r’   rF   r   r›   r3   r    r¡   )r   r�   rG   r+   rŽ   r�   r�   rF   s           r    Ú)_validate_dynamic_scaling_rope_parametersr¤   ¹  sÃ   € ØÔ&€LØ× Ò  ¨l×.>Ò.>¸vÀtÑ.LÔ.LÑMÔM€IØ  (Ð+€Mà7Ð8€MÝ˜×)Ò)Ñ+Ô+Ñ,Ô,€MÝ˜ M°=À-Ð]hÐiÑiÔiÐià˜(Ô#€FØ€~�Z¨µÑ6Ô6€~¸&À3º,¸,Ý�ŠÐZÐRXÐZÐZÑ[Ô[Ð[Ð[Ð[ð ;G¸,r"   c           	      óZ  — | j         }|                     d|                     dd ¦  «        ¦  «        }ddh}h d£}t          |                     ¦   «         ¦  «        }t	          |||||¬¦  «         |d         }|�t          |t          ¦  «        r|dk     rt                               d|› �¦  «         |                     d¦  «        }|�8t          |t          ¦  «        r|d	k     rt                               d
|› �¦  «         |                     d¦  «        }	|	�2t          |	t          ¦  «        st                               d|	› �¦  «         |                     d¦  «        }
|
�2t          |
t          ¦  «        st                               d|
› �¦  «         |	pd|
pdk     r!t                               d|	› d|
› d�¦  «         | j                              d¦  «        }|�8| j	        |z  }||k    r&t           
                    d|› d|› d|› d�¦  «         d S d S t           
                    d¦  «         d S )Nr+   r’   rF   >   rQ   re   rX   rZ   rR   rC   r   r›   r3   r    rC   r   úL`rope_scaling`'s attention_factor field must be a float greater than 0, got rX   z6`rope_scaling`'s beta_fast field must be a float, got rZ   z6`rope_scaling`'s beta_slow field must be a float, got rY   r   zO`rope_scaling`'s beta_fast field must be greater than beta_slow, got beta_fast=z( (defaults to 32 if None) and beta_slow=z (defaults to 1 if None)r   zHThe explicitly set RoPE scaling factor (config.rope_scaling['factor'] = zá) does not match the ratio implicitly set by other parameters (implicit factor = post-yarn context length / pre-yarn context length = config.max_position_embeddings / config.rope_scaling['original_max_position_embeddings'] = z). Using the explicit factor (z‡) in YaRN. This may cause unexpected behaviour in model usage, please correct the 'max_position_embeddings' fields in the model config.a~  config.rope_scaling['original_max_position_embeddings'], the pre-yarn context length, is unset. We will **assume** config.max_position_embeddings holds the pre-yarn context length. Some use cases may expect config.max_position_embeddings to hold the post-yarn context length (pre-yarn context length * factor) -- we recommend updating both fields for optimal downstream model usage.)rG   ro   rœ   r�   r™   rK   r@   r•   r–   r   Úwarning_once)r   r�   rG   r+   rŽ   r�   r�   rF   rC   rX   rZ   r   Úimplicit_factors                r    Ú_validate_yarn_parametersr©   Ç  sÂ  € ØÔ&€LØ× Ò  ¨l×.>Ò.>¸vÀtÑ.LÔ.LÑMÔM€IØ  (Ð+€Mðð ð €Mõ ˜×)Ò)Ñ+Ô+Ñ,Ô,€MÝ˜ M°=À-Ð]hÐiÑiÔiÐià˜(Ô#€FØ€~�Z¨µÑ6Ô6€~¸&À3º,¸,Ý�ŠÐZÐRXÐZÐZÑ[Ô[Ð[à#×'Ò'Ð(:Ñ;Ô;ÐØÐ#­ZÐ8HÍ%Ñ-PÔ-PÐ#ÐTdÐghÒThÐThÝ�ŠØmÐ[kÐmÐmñ	
ô 	
ð 	
ð × Ò  Ñ-Ô-€IØÐ¥Z°	½5Ñ%AÔ%AÐÝ�ŠÐ[ÐPYÐ[Ð[Ñ\Ô\Ð\Ø× Ò  Ñ-Ô-€IØÐ¥Z°	½5Ñ%AÔ%AÐÝ�ŠÐ[ÐPYÐ[Ð[Ñ\Ô\Ð\àˆ�R˜I˜N¨Ò+Ð+Ý�ŠðZÐ^gð Zð ZØ6?ðZð Zð Zñ	
ô 	
ð 	
ð (.Ô':×'>Ò'>Ð?aÑ'bÔ'bÐ$Ø'Ð3à Ô8Ð;[Ñ[ˆØ˜fÒ$Ð$Ý×ÒðuÐ[að uð uð #ð	uð uð CIð	uð uð uñô ð ð ð ð %Ð$õ 	×Òð_ñ	
ô 	
ð 	
ð 	
ð 	
r"   c                 óÞ  — | j         }|                     d|                     dd ¦  «        ¦  «        }h d£}h d£}t          |                     ¦   «         ¦  «        }t	          |||||¬¦  «         t          | d¦  «        r| j        nd}t          | d| j        | j	        z  ¦  «        }t          ||z  ¦  «        }	|                     d	¦  «        }
t          |
t          ¦  «        s6t          d
„ |
D ¦   «         ¦  «        rt                               d|
› �¦  «         t!          |
¦  «        |	dz  k    r0t                               d|	dz  › dt!          |
¦  «        › �¦  «         |                     d¦  «        }t          |t          ¦  «        s6t          d„ |D ¦   «         ¦  «        rt                               d|› �¦  «         t!          |¦  «        |	dz  k    r0t                               d|	dz  › dt!          |¦  «        › �¦  «         t          | d¦  «        rt                               d¦  «         d S |                     d¦  «        }|€t                               d¦  «         n8t          |t$          ¦  «        r|dk     rt                               d|› �¦  «         |                     d¦  «        }|�:t          |t$          ¦  «        r|dk     r!t                               d|› �¦  «         d S d S d S )Nr+   r’   >   r+   rv   rw   >   rF   rC   r   r›   r2   r3   r4   rw   c              3   óN   K  — | ] }t          |t          t          f¦  «        V — Œ!d S ©N©rK   r=   r@   ©Ú.0r,   s     r    ú	<genexpr>z0_validate_longrope_parameters.<locals>.<genexpr>  s1   è è € Ð1dÐ1dÐRSµ*¸QÅÅeÀÑ2MÔ2MÐ1dÐ1dÐ1dÐ1dÐ1dÐ1dr"   zC`rope_scaling`'s short_factor field must be a list of numbers, got r5   z5`rope_scaling`'s short_factor field must have length z, got rv   c              3   óN   K  — | ] }t          |t          t          f¦  «        V — Œ!d S r¬   r­   r®   s     r    r°   z0_validate_longrope_parameters.<locals>.<genexpr>  s1   è è € Ð0bÐ0bÐQRµ¸AÅÅU¸|Ñ1LÔ1LÐ0bÐ0bÐ0bÐ0bÐ0bÐ0br"   zB`rope_scaling`'s long_factor field must be a list of numbers, got z4`rope_scaling`'s long_factor field must have length r   aY  This model has set a `original_max_position_embeddings` field, to be used together with `max_position_embeddings` to determine a scaling factor. Please set the `factor` field of `rope_scaling`with this ratio instead -- we recommend the use of this field over `original_max_position_embeddings`, as it is compatible with most model architectures.rF   z1Missing required keys in `rope_scaling`: 'factor'r    rC   g        r¦   )rG   ro   rœ   r�   r™   r   r2   r:   r;   r<   r=   rK   ÚlistÚallr•   r–   Úlenr§   r@   )r   r�   rG   r+   rŽ   r�   r�   r2   r4   rB   rw   rv   rF   rC   s                 r    Ú_validate_longrope_parametersrµ   	  s3  € ØÔ&€LØ× Ò  ¨l×.>Ò.>¸vÀtÑ.LÔ.LÑMÔM€IØ@Ð@Ð@€MàVÐVÐV€MÝ˜×)Ò)Ñ+Ô+Ñ,Ô,€MÝ˜ M°=À-Ð]hÐiÑiÔiÐiå<CÀFÐLcÑ<dÔ<dÐm˜FÔ8Ð8ÐjmÐÝ�v˜z¨6Ô+=ÀÔA[Ñ+[Ñ\Ô\€HÝ
ˆhÐ.Ñ.Ñ
/Ô
/€Cà×#Ò# NÑ3Ô3€LÝ�l¥DÑ)Ô)ð m­cÐ1dÐ1dÐWcÐ1dÑ1dÔ1dÑ.dÔ.dð mÝ�ŠÐkÐ]iÐkÐkÑlÔlÐlÝ
ˆ<ÑÔ˜C 1™HÒ$Ð$Ý�ŠÐrÈsÐVWÉxÐrÐrÕ_bÐcoÑ_pÔ_pÐrÐrÑsÔsÐsà×"Ò" =Ñ1Ô1€KÝ�k¥4Ñ(Ô(ð k­SÐ0bÐ0bÐVaÐ0bÑ0bÔ0bÑ-bÔ-bð kÝ�ŠÐiÐ\gÐiÐiÑjÔjÐjÝ
ˆ;ÑÔ˜3 !™8Ò#Ð#Ý�ŠÐpÈcÐUVÉhÐpÐpÕ^aÐbmÑ^nÔ^nÐpÐpÑqÔqÐqõ
 ˆvÐ9Ñ:Ô:ð Ý×ÒðAñ	
ô 	
ð 	
ð 	
ð 	
ð ×!Ò! (Ñ+Ô+ˆØˆ>Ý�NŠNÐNÑOÔOÐOÐOÝ˜F¥EÑ*Ô*ð 	`¨f°sªl¨lÝ�NŠNÐ^ÐV\Ð^Ð^Ñ_Ô_Ð_à'×+Ò+Ð,>Ñ?Ô?ÐØÐ'ÝÐ.µÑ6Ô6ð Ð:JÈSÒ:PÐ:PÝ—’ØuÐcsÐuÐuñô ð ð ð ð (Ð'Ø:PÐ:Pr"   c                 ót  — | j         }|                     d|                     dd ¦  «        ¦  «        }h d£}t          |                     ¦   «         ¦  «        }t	          ||||¬¦  «         |d         }|�t          |t          ¦  «        r|dk     rt                               d|› �¦  «         |d         }|d	         }|�t          |t          ¦  «        st                               d
|› �¦  «         |�t          |t          ¦  «        st                               d|› �¦  «         ||k    r t                               d|› d|› �¦  «         |d         }	|	�t          |	t          ¦  «        st                               d|	› �¦  «         |	| j
        k    r't                               d|	› d| j
        › �¦  «         d S d S )Nr+   r’   >   rF   r+   r}   r~   r   r›   rF   r3   r    r}   r~   z<`rope_scaling`'s low_freq_factor field must be a float, got z=`rope_scaling`'s high_freq_factor field must be a float, got zc`rope_scaling`'s high_freq_factor field must be greater than low_freq_factor, got high_freq_factor=z and low_freq_factor=r   zP`rope_scaling`'s original_max_position_embeddings field must be an integer, got zg`rope_scaling`'s original_max_position_embeddings field must be less than max_position_embeddings, got z and max_position_embeddings=)rG   ro   rœ   r�   r™   rK   r@   r•   r–   r=   r   )
r   r�   rG   r+   rŽ   r�   rF   r}   r~   r   s
             r    Ú_validate_llama3_parametersr·   ;  s  € ØÔ&€LØ× Ò  ¨l×.>Ò.>¸vÀtÑ.LÔ.LÑMÔM€IØvÐvÐv€MÝ˜×)Ò)Ñ+Ô+Ñ,Ô,€MÝ˜ M°=ÈkÐZÑZÔZÐZà˜(Ô#€FØ€~�Z¨µÑ6Ô6€~¸&À3º,¸,Ý�ŠÐZÐRXÐZÐZÑ[Ô[Ð[à"Ð#4Ô5€OØ#Ð$6Ô7ÐØÐ¥j°Å%Ñ&HÔ&HÐÝ�ŠÐgÐVeÐgÐgÑhÔhÐhØÐ¥zÐ2BÅEÑ'JÔ'JÐÝ�ŠÐiÐWgÐiÐiÑjÔjÐjØ˜?Ò*Ð*Ý�ŠðHØðHð HØ6EðHð Hñ	
ô 	
ð 	
ð
 (4Ð4VÔ'WÐ$Ø'Ð/µzÐBbÕdgÑ7hÔ7hÐ/Ý�Šð2Ø/ð2ð 2ñ	
ô 	
ð 	
ð (¨6Ô+IÒIÐIÝ�ŠðoØ/ðoð oØNTÔNlðoð oñ	
ô 	
ð 	
ð 	
ð 	
ð JÐIr"   c                 ó  — t          | dd¦  «        }|€dS |                     d|                     dd¦  «        ¦  «        }t                               |¦  «        }|� || |¬¦  «         dS t                               d|› d�¦  «         dS )	zO
    Validate the RoPE config arguments, given a `PretrainedConfig` object
    rG   Nr+   r’   r‰   r›   zTMissing validation function mapping in `ROPE_VALIDATION_FUNCTIONS` for 'rope_type'='ú')r:   ro   ÚROPE_VALIDATION_FUNCTIONSr•   r–   )r   r�   rG   r+   Úvalidation_fns        r    Úrope_config_validationr¼   j  sª   € õ ˜6 >°4Ñ8Ô8€LØÐØˆð × Ò  ¨l×.>Ò.>¸vÀyÑ.QÔ.QÑRÔR€IÝ-×1Ò1°)Ñ<Ô<€MØÐ Øˆ�f¨+Ð6Ñ6Ô6Ð6Ð6Ð6å�ŠØoÐclÐoÐoÐoñ	
ô 	
ð 	
ð 	
ð 	
r"   )NNNr¬   )NN)$rT   Ú	functoolsr   Útypingr   Úconfiguration_utilsr   Úutilsr   r	   Ú
get_loggerÚ__name__r•   r   r/   r=   Útupler@   rD   rH   rO   rt   r{   rˆ   ÚROPE_INIT_FUNCTIONSÚstrrœ   r™   rž   r¢   r¤   r©   rµ   r·   rº   r¼   © r"   r    ú<module>rÇ      sº  ðð €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø .Ð .Ð .Ð .Ð .Ð .Ð .Ð .ð 
ˆÔ	˜HÑ	%Ô	%€ð ÐÑÔð Ø€L€L€Lð;ð ;ð ;ð~ *.Ø'+Ø!ð&ð &ØÐ%Ô&ð&à�^Ô$ð&ð �cŒ]ð&ð ˆ>˜5Ð Ô!ð	&ð &ð &ð &ð> *.Ø'+Ø!ð&ð &ØÐ%Ô&ð&à�^Ô$ð&ð �cŒ]ð&ð ˆ>˜5Ð Ô!ð	&ð &ð &ð &ð> *.Ø'+Ø!ð*&ð *&ØÐ%Ô&ð*&à�^Ô$ð*&ð �cŒ]ð*&ð ˆ>˜5Ð Ô!ð	*&ð *&ð *&ð *&ð\ PTðT&ð T&ØðT&Ø&4ðT&Ø?GÈ¼}ðT&à
ˆ>˜5Ð Ô!ðT&ð T&ð T&ð T&ðp PTð3&ð 3&Øð3&Ø&4ð3&Ø?GÈ¼}ð3&à
ˆ>˜5Ð Ô!ð3&ð 3&ð 3&ð 3&ðn PTð&,ð &,Øð&,Ø&4ð&,Ø?GÈ¼}ð&,à
ˆ>˜5Ð Ô!ð&,ð &,ð &,ð &,ðZ 0Ø5Ø.Ø$Ø,Ø(ðð Ð ð $(Ø!%ðlð lØðlàðlð ðlð ˜C”=ð	lð
 ˜#”ðlð lð lð lð:[ð [Ð.>ð [ÈXÐVYÌ]ð [ð [ð [ð [ð	\ð 	\Ð5Eð 	\ÐT\Ð]`ÔTað 	\ð 	\ð 	\ð 	\ð\ð \Ð6Fð \ÐU]Ð^aÔUbð \ð \ð \ð \ð?
ð ?
Ð&6ð ?
ÀXÈcÄ]ð ?
ð ?
ð ?
ð ?
ðD/ð /Ð*:ð /ÈÐRUÌð /ð /ð /ð /ðd!
ð !
Ð(8ð !
ÀxÐPSÄ}ð !
ð !
ð !
ð !
ðL 1Ø6Ø8Ø%Ø-Ø)ðð Ð ð
ð 
Ð#3ð 
À(È3Ä-ð 
ð 
ð 
ð 
ð 
ð 
r"   