Ë
    S^(hÚD  ã                   ó  — d Z ddlmZ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 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 ddlmZmZmZm Z m!Z!m"Z" ddl#m$Z$  ejJ                  e&«      Z'dZ( G d„ de	jR                  «      Z* ejV                  e*«        G d„ de!«      Z,d„ Z-d&d„Z. G d„ de«      Z/ G d„ de«      Z0 G d„ de	jR                  «      Z1 G d„ d e «      Z2 G d!„ d"ee«      Z3 G d#„ d$e«      Z4g d%¢Z5y)'zPyTorch Cohere model.é    )ÚCallableÚListÚOptionalÚTupleÚUnionN)Únné   )ÚCache)ÚFlashAttentionKwargs)ÚBaseModelOutputWithPastÚCausalLMOutputWithPast)Údynamic_rope_update)ÚALL_ATTENTION_FUNCTIONS)ÚUnpack)ÚALL_LAYERNORM_LAYERS)Ú
LossKwargsÚloggingé   )ÚLlamaAttentionÚLlamaForCausalLMÚLlamaMLPÚ
LlamaModelÚLlamaRotaryEmbeddingÚeager_attention_forwardé   )ÚCohereConfigr   c                   ó&   ‡ — e Zd Zdˆ fd„	Zd„ Zˆ xZS )ÚCohereLayerNormc                 óŠ   •— t         ‰| �  «        t        j                  t	        j
                  |«      «      | _        || _        y)zcThe hidden size can be a tuple or an int. The tuple is used for QKNorm to normalize across head_dimN)ÚsuperÚ__init__r   Ú	ParameterÚtorchÚonesÚweightÚvariance_epsilon)ÚselfÚhidden_sizeÚepsÚbiasÚ	__class__s       €úg/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/transformers/models/cohere/modular_cohere.pyr!   zCohereLayerNorm.__init__8   s/   ø€ ä‰ÑÔÜ—l‘l¤5§:¡:¨kÓ#:Ó;ˆŒØ #ˆÕó    c                 ó’  — |j                   }|j                  t        j                  «      }|j	                  dd¬«      }||z
  j                  d«      j	                  dd¬«      }||z
  t        j                  || j                  z   «      z  }| j                  j                  t        j                  «      |z  }|j                  |«      S )NéÿÿÿÿT)Úkeepdimr   )	ÚdtypeÚtor#   Úfloat32ÚmeanÚpowÚrsqrtr&   r%   )r'   Úhidden_statesÚinput_dtyper4   Úvariances        r,   ÚforwardzCohereLayerNorm.forward>   sª   € Ø#×)Ñ)ˆØ%×(Ñ(¬¯©Ó7ˆØ×!Ñ! "¨dÐ!Ó3ˆØ! DÑ(×-Ñ-¨aÓ0×5Ñ5°bÀ$Ð5ÓGˆØ&¨Ñ-´·±¸XÈ×H]ÑH]Ñ=]Ó1^Ñ^ˆØŸ™Ÿ™¤u§}¡}Ó5¸ÑEˆØ×Ñ Ó,Ð,r-   )Ngñhãˆµøä>F)Ú__name__Ú
__module__Ú__qualname__r!   r:   Ú__classcell__©r+   s   @r,   r   r   7   s   ø„ õ$ö-r-   r   c                   óD   — e Zd Z ej                  «       ed„ «       «       Zy)ÚCohereRotaryEmbeddingc                 ó.  — | j                   d d d …d f   j                  «       j                  |j                  d   dd«      }|d d …d d d …f   j                  «       }t	        |j
                  j                  t        «      r/|j
                  j                  dk7  r|j
                  j                  nd}t        j                  |d¬«      5  |j                  «       |j                  «       z  j                  dd«      }t        j                  |dd¬	«      }|j                  «       | j                  z  }|j                  «       | j                  z  }	d d d «       j                  |j                   ¬
«      	j                  |j                   ¬
«      fS # 1 sw Y   ŒAxY w)Nr   r/   r   ÚmpsÚcpuF)Údevice_typeÚenabledr   ©Údim©r1   )Úinv_freqÚfloatÚexpandÚshapeÚ
isinstanceÚdeviceÚtypeÚstrr#   ÚautocastÚ	transposeÚrepeat_interleaveÚcosÚattention_scalingÚsinr2   r1   )
r'   ÚxÚposition_idsÚinv_freq_expandedÚposition_ids_expandedrE   ÚfreqsÚembrU   rW   s
             r,   r:   zCohereRotaryEmbedding.forwardL   sD  € ð !ŸM™M¨$²°4¨-Ñ8×>Ñ>Ó@×GÑGÈ×HZÑHZÐ[\ÑH]Ð_aÐcdÓeÐØ ,ªQ°²a¨ZÑ 8× >Ñ >Ó @Ðä'1°!·(±(·-±-ÄÔ'EÈ!Ï(É(Ï-É-Ð[`ÒJ`�a—h‘h—m’mÐfkˆÜ�^‰^¨¸UÔCñ 	5Ø&×,Ñ,Ó.Ð1F×1LÑ1LÓ1NÑN×YÑYÐZ[Ð]^Ó_ˆEÜ×)Ñ)¨%°¸Ô;ˆCØ—'‘'“)˜d×4Ñ4Ñ4ˆCØ—'‘'“)˜d×4Ñ4Ñ4ˆC÷		5ð �v‰v˜AŸG™GˆvÓ$ c§f¡f°1·7±7 fÓ&;Ð;Ð;÷	5ð 	5ús   ÃBFÆFN)r;   r<   r=   r#   Úno_gradr   r:   © r-   r,   rA   rA   K   s$   „ Ø€U‡]�]ƒ_Øñ<ó ó ñ<r-   rA   c                 ó€   — | dd d d…f   }| ddd d…f   }t        j                  | |gd¬«      j                  d«      }|S )N.r   r   r/   rG   éþÿÿÿ)r#   ÚstackÚflatten)rX   Úx1Úx2Úrot_xs       r,   Úrotate_halfrg   \   sL   € à	
ˆ3‘�!�ˆ8‰€BØ	
ˆ3���1�ˆ9‰€BÜ�K‰K˜"˜˜b˜	 rÔ*×2Ñ2°2Ó6€EØ€Lr-   c                 ó6  — | j                   }| j                  «       } |j                  «       }|j                  |«      }|j                  |«      }| |z  t        | «      |z  z   }||z  t        |«      |z  z   }|j	                  |¬«      |j	                  |¬«      fS )aÛ  Applies Rotary Position Embedding to the query and key tensors.

    Args:
        q (`torch.Tensor`): The query tensor.
        k (`torch.Tensor`): The key tensor.
        cos (`torch.Tensor`): The cosine part of the rotary embedding.
        sin (`torch.Tensor`): The sine part of the rotary embedding.
        position_ids (`torch.Tensor`, *optional*):
            Deprecated and unused.
        unsqueeze_dim (`int`, *optional*, defaults to 1):
            The 'unsqueeze_dim' argument specifies the dimension along which to unsqueeze cos[position_ids] and
            sin[position_ids] so that they can be properly broadcasted to the dimensions of q and k. For example, note
            that cos[position_ids] and sin[position_ids] have the shape [batch_size, seq_len, head_dim]. Then, if q and
            k have the shape [batch_size, heads, seq_len, head_dim], then setting unsqueeze_dim=1 makes
            cos[position_ids] and sin[position_ids] broadcastable to the shapes of q and k. Similarly, if q and k have
            the shape [batch_size, seq_len, heads, head_dim], then set unsqueeze_dim=2.
    Returns:
        `tuple(torch.Tensor)` comprising of the query and key tensors rotated using the Rotary Position Embedding.
    rI   )r1   rK   Ú	unsqueezerg   r2   )	ÚqÚkrU   rW   rY   Úunsqueeze_dimr1   Úq_embedÚk_embeds	            r,   Úapply_rotary_pos_embro   d   sŽ   € ð( �G‰G€EØ	�‰‹	€AØ	�‰‹	€AØ
�-‰-˜Ó
&€CØ
�-‰-˜Ó
&€CØ�3‰wœ; q›>¨CÑ/Ñ0€GØ�3‰wœ; q›>¨CÑ/Ñ0€GØ�:‰:˜Eˆ:Ó" G§J¡J°U JÓ$;Ð;Ð;r-   c                   ó   ‡ — e Zd Zˆ fd„Zˆ xZS )Ú	CohereMLPc                 óJ  •— t         ‰| �  |«       t        j                  | j                  | j
                  d¬«      | _        t        j                  | j                  | j
                  d¬«      | _        t        j                  | j
                  | j                  d¬«      | _        y )NF)r*   )	r    r!   r   ÚLinearr(   Úintermediate_sizeÚ	gate_projÚup_projÚ	down_proj©r'   Úconfigr+   s     €r,   r!   zCohereMLP.__init__ƒ   ss   ø€ Ü‰Ñ˜Ô ÜŸ™ 4×#3Ñ#3°T×5KÑ5KÐRWÔXˆŒÜ—y‘y ×!1Ñ!1°4×3IÑ3IÐPUÔVˆŒÜŸ™ 4×#9Ñ#9¸4×;KÑ;KÐRWÔXˆ�r-   )r;   r<   r=   r!   r>   r?   s   @r,   rq   rq   ‚   s   ø„ ÷Yð Yr-   rq   c                   ó>  ‡ — e Zd ZdZddedee   fˆ fd„Z	 	 ddej                  de
ej                  ej                  f   deej                     dee   d	eej                     d
ee   de
ej                  eej                     ee
ej                        f   fd„Zˆ xZS )ÚCohereAttentionz=Multi-headed attention from 'Attention Is All You Need' paperry   Ú	layer_idxc                 ó*  •— t         ‰| �  ||«       |j                  | _        | j                  ret        |j                  | j
                  f|j                  ¬«      | _        t        |j                  | j
                  f|j                  ¬«      | _	        y y )N©r(   r)   )
r    r!   Úuse_qk_normr   Únum_attention_headsÚhead_dimÚlayer_norm_epsÚq_normÚnum_key_value_headsÚk_norm©r'   ry   r|   r+   s      €r,   r!   zCohereAttention.__init__�   s|   ø€ Ü‰Ñ˜ Ô+Ø!×-Ñ-ˆÔØ×Òä)Ø#×7Ñ7¸¿¹ÐGÈV×MbÑMbôˆDŒKô *Ø#×7Ñ7¸¿¹ÐGÈV×MbÑMbôˆD�Kð r-   r7   Úposition_embeddingsÚattention_maskÚpast_key_valueÚcache_positionÚkwargsÚreturnc                 ó  — |j                   d d }g |¢d‘| j                  ‘­}| j                  |«      j                  |«      }	| j	                  |«      j                  |«      }
| j                  |«      j                  |«      }| j                  r"| j                  |	«      }	| j                  |
«      }
|	j                  dd«      }	|
j                  dd«      }
|j                  dd«      }|\  }}t        |	|
||«      \  }	}
|�'|||dœ}|j                  |
|| j                  |«      \  }
}t        }| j                  j                  dk7  r^| j                  j                  dk(  r(|j!                  dd«      rt"        j%                  d	«       nt&        | j                  j                     } || |	|
||f| j(                  sd
n| j*                  | j,                  dœ|¤Ž\  }} |j.                  g |¢d‘­Ž j1                  «       }| j3                  |«      }||fS )Nr/   r   r   )rW   rU   rŠ   ÚeagerÚsdpaÚoutput_attentionsFzã`torch.nn.functional.scaled_dot_product_attention` does not support `output_attentions=True`. Falling back to eager attention. This warning can be removed using the argument `attn_implementation="eager"` when loading the model.g        )ÚdropoutÚscaling)rM   r�   Úq_projÚviewÚk_projÚv_projr   rƒ   r…   rS   ro   Úupdater|   r   ry   Ú_attn_implementationÚgetÚloggerÚwarning_oncer   ÚtrainingÚattention_dropoutr’   ÚreshapeÚ
contiguousÚo_proj)r'   r7   r‡   rˆ   r‰   rŠ   r‹   Úinput_shapeÚhidden_shapeÚquery_statesÚ
key_statesÚvalue_statesrU   rW   Úcache_kwargsÚattention_interfaceÚattn_outputÚattn_weightss                     r,   r:   zCohereAttention.forward™   s  € ð $×)Ñ)¨#¨2Ð.ˆØ8˜Ð8 bÐ8¨$¯-©-Ñ8ˆà—{‘{ =Ó1×6Ñ6°|ÓDˆØ—[‘[ Ó/×4Ñ4°\ÓBˆ
Ø—{‘{ =Ó1×6Ñ6°|ÓDˆà×ÒØŸ;™; |Ó4ˆLØŸ™ ZÓ0ˆJà#×-Ñ-¨a°Ó3ˆØ×)Ñ)¨!¨QÓ/ˆ
Ø#×-Ñ-¨a°Ó3ˆà&‰ˆˆSÜ#7¸ÀjÐRUÐWZÓ#[Ñ ˆ�jàÐ%à#&¨sÀnÑUˆLØ'5×'<Ñ'<¸ZÈÐW[×WeÑWeÐgsÓ'tÑ$ˆJ˜ä(?ÐØ�;‰;×+Ñ+¨wÒ6Ø�{‰{×/Ñ/°6Ò9¸f¿j¹jÐI\Ð^cÔ>dÜ×#Ñ#ðLõô
 '>¸d¿k¹k×>^Ñ>^Ñ&_Ð#á$7ØØØØØð	%
ð  $Ÿ}š}‘C°$×2HÑ2HØ—L‘Lñ	%
ð ñ	%
Ñ!ˆ�\ð *�k×)Ñ)Ð;¨;Ð;¸Ò;×FÑFÓHˆØ—k‘k +Ó.ˆØ˜LÐ(Ð(r-   ©N)NN)r;   r<   r=   Ú__doc__r   r   Úintr!   r#   ÚTensorr   r
   Ú
LongTensorr   r   r:   r>   r?   s   @r,   r{   r{   Š   sÉ   ø„ ÙGñ
˜|ð 
¸À¹õ 
ð" +/Ø59ñ7)à—|‘|ð7)ð # 5§<¡<°·±Ð#=Ñ>ð7)ð ! §¡Ñ.ð	7)ð
 ! ™ð7)ð ! ×!1Ñ!1Ñ2ð7)ð Ð-Ñ.ð7)ð 
ˆu�|‰|˜X e§l¡lÑ3°X¸eÀEÇLÁLÑ>QÑ5RÐRÑ	S÷7)r-   r{   c                   óp  ‡ — e Zd Zdedefˆ fd„Z	 	 	 	 	 	 	 ddej                  deej                     deej                     dee
   dee   d	ee   d
eej                     deeej                  ej                  f      dee   deej                  eeej                  ej                  f      f   fd„Zˆ xZS )ÚCohereDecoderLayerry   r|   c                 óÔ   •— t         ‰| �  «        |j                  | _        t        ||¬«      | _        t        |«      | _        t        |j                  |j                  ¬«      | _	        y )N)ry   r|   r~   )
r    r!   r(   r{   Ú	self_attnrq   Úmlpr   r‚   Úinput_layernormr†   s      €r,   r!   zCohereDecoderLayer.__init__Ô   sR   ø€ Ü‰ÑÔØ!×-Ñ-ˆÔÜ(°À)ÔLˆŒÜ˜VÓ$ˆŒÜ.¸F×<NÑ<NÐU[×UjÑUjÔkˆÕr-   r7   rˆ   rY   r‰   r�   Ú	use_cacherŠ   r‡   r‹   rŒ   c	                 ó°   — |}
| j                  |«      } | j                  d||||||||dœ|	¤Ž\  }}| j                  |«      }|
|z   |z   }|f}|r||fz  }|S )a„  
        Args:
            hidden_states (`torch.FloatTensor`): input to the layer of shape `(batch, seq_len, embed_dim)`
            attention_mask (`torch.FloatTensor`, *optional*):
                attention mask of size `(batch_size, sequence_length)` if flash attention is used or `(batch_size, 1,
                query_sequence_length, key_sequence_length)` if default attention is used.
            past_key_value (`Tuple(torch.FloatTensor)`, *optional*): cached past key and value projection states
            output_attentions (`bool`, *optional*):
                Whether or not to return the attentions tensors of all attention layers. See `attentions` under
                returned tensors for more detail.
            use_cache (`bool`, *optional*):
                If set to `True`, `past_key_values` key value states are returned and can be used to speed up decoding
                (see `past_key_values`).
            cache_position (`torch.LongTensor` of shape `(sequence_length)`, *optional*):
                Indices depicting the position of the input sequence tokens in the sequence
            position_embeddings (`Tuple[torch.FloatTensor, torch.FloatTensor]`, *optional*):
                Tuple containing the cosine and sine positional embeddings of shape `(batch_size, seq_len, head_dim)`,
                with `head_dim` being the embedding dimension of each attention head.
        )r7   rˆ   rY   r‰   r�   rµ   rŠ   r‡   r_   )r´   r²   r³   )r'   r7   rˆ   rY   r‰   r�   rµ   rŠ   r‡   r‹   ÚresidualÚhidden_states_attentionÚself_attn_weightsÚhidden_states_mlpÚoutputss                  r,   r:   zCohereDecoderLayer.forwardÛ   sœ   € ð> !ˆà×,Ñ,¨]Ó;ˆð 6D°T·^±^ð 
6
Ø'Ø)Ø%Ø)Ø/ØØ)Ø 3ñ
6
ð ñ
6
Ñ2ÐÐ!2ð !ŸH™H ]Ó3Ðð !Ð#:Ñ:Ð=NÑNˆà Ð"ˆÙØÐ)Ð+Ñ+ˆGàˆr-   )NNNFFNN)r;   r<   r=   r   r¬   r!   r#   r­   r   r®   r
   Úboolr   r   r   ÚFloatTensorr:   r>   r?   s   @r,   r°   r°   Ó   s  ø„ ðl˜|ð l¸õ lð 26Ø37Ø*.Ø,1Ø$)Ø59ØKOñ:à—|‘|ð:ð ! §¡Ñ.ð:ð ˜u×/Ñ/Ñ0ð	:ð
 ! ™ð:ð $ D™>ð:ð ˜D‘>ð:ð ! ×!1Ñ!1Ñ2ð:ð & e¨E¯L©L¸%¿,¹,Ð,FÑ&GÑHð:ð Ð-Ñ.ð:ð 
ˆu× Ñ  (¨5°×1BÑ1BÀE×DUÑDUÐ1UÑ+VÑ"WÐWÑ	X÷:r-   r°   c                   ó$   ‡ — e Zd Zdefˆ fd„Zˆ xZS )ÚCohereModelry   c           	      ó&  •— t         ‰| �  |«       t        j                  t	        |j
                  «      D �cg c]  }t        ||«      ‘Œ c}«      | _        t        |¬«      | _	        t        |j                  |j                  ¬«      | _        y c c}w )N)ry   r~   )r    r!   r   Ú
ModuleListÚrangeÚnum_hidden_layersr°   ÚlayersrA   Ú
rotary_embr   r(   r‚   Únormr†   s      €r,   r!   zCohereModel.__init__  so   ø€ Ü‰Ñ˜Ô Ü—m‘mÜDIÈ&×JbÑJbÓDcÖd°yÔ ¨	Õ2Òdó
ˆŒô 0°vÔ>ˆŒÜ#°×1CÑ1CÈ&×J_ÑJ_Ô`ˆ�	ùò es   ·B)r;   r<   r=   r   r!   r>   r?   s   @r,   r¿   r¿     s   ø„ ða˜|÷ añ ar-   r¿   c                   ó   — e Zd Zy)ÚKwargsForCausalLMN)r;   r<   r=   r_   r-   r,   rÈ   rÈ   "  s   … r-   rÈ   c                   ón  ‡ — e Zd Zˆ fd„Z	 	 	 	 	 	 	 	 	 	 	 ddeej                     deej                     deej                     deee	e
ej                     f      deej                     deej                     dee   d	ee   d
ee   deej                     deeej                  f   dee   defd„Zˆ xZS )ÚCohereForCausalLMc                 óˆ   •— t         ‰| �  |«       t        |«      | _        |j                  | _        |j
                  | _        y rª   )r    r!   r¿   ÚmodelÚlogit_scaleÚtie_word_embeddingsrx   s     €r,   r!   zCohereForCausalLM.__init__&  s8   ø€ Ü‰Ñ˜Ô Ü  Ó(ˆŒ
Ø!×-Ñ-ˆÔØ#)×#=Ñ#=ˆÕ r-   Ú	input_idsrˆ   rY   Úpast_key_valuesÚinputs_embedsÚlabelsrµ   r�   Úoutput_hidden_statesrŠ   Úlogits_to_keepr‹   rŒ   c                 ó  — |�|n| j                   j                  }|	�|	n| j                   j                  }	 | j                  d||||||||	|
dœ	|¤Ž}|j                  }t        |t        «      rt        | d«      n|}| j                  |dd…|dd…f   «      }|| j                  z  }d}|�* | j                  d||| j                   j                  dœ|¤Ž}t        |||j                  |j                  |j                  ¬«      S )a0  
            labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
                Labels for computing the masked language modeling loss. Indices should either be in `[0, ...,
                config.vocab_size]` or -100 (see `input_ids` docstring). Tokens with indices set to `-100` are ignored
                (masked), the loss is only computed for the tokens with labels in `[0, ..., config.vocab_size]`.

            logits_to_keep (`int` or `torch.Tensor`, *optional*):
                If an `int`, compute logits for the last `logits_to_keep` tokens. If `0`, calculate logits for all
                `input_ids` (special case). Only last token logits are needed for generation, and calculating them only for that
                token can save memory, which becomes pretty significant for long sequences or large vocabulary size.
                If a `torch.Tensor`, must be 1D corresponding to the indices to keep in the sequence length dimension.
                This is useful when using packed tensor format (single dimension for batch and sequence length).

        Returns:

        Example:

        ```python
        >> from transformers import AutoTokenizer, CohereForCausalLM

        >> model = CohereForCausalLM.from_pretrained("CohereForAI/c4ai-command-r-v01")
        >> tokenizer = AutoTokenizer.from_pretrained("CohereForAI/c4ai-command-r-v01")

        >> prompt = "Hey, are you conscious? Can you talk to me?"
        >> inputs = tokenizer(prompt, return_tensors="pt")

        >> # Generate
        >> generate_ids = model.generate(inputs.input_ids, max_length=30)
        >> tokenizer.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]
        "Hey, are you conscious? Can you talk to me?\nI'm not conscious, but I can talk to you."
        ```N)	rÏ   rˆ   rY   rÐ   rÑ   rµ   r�   rÓ   rŠ   )ÚlogitsrÒ   Ú
vocab_size)ÚlossrÖ   rÐ   r7   Ú
attentionsr_   )ry   r�   rÓ   rÌ   Úlast_hidden_staterN   r¬   ÚsliceÚlm_headrÍ   Úloss_functionr×   r   rÐ   r7   rÙ   )r'   rÏ   rˆ   rY   rÐ   rÑ   rÒ   rµ   r�   rÓ   rŠ   rÔ   r‹   r»   r7   Úslice_indicesrÖ   rØ   s                     r,   r:   zCohereForCausalLM.forward,  s+  € ð\ 2CÐ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð
 ,6¨4¯:©:ð ,
ØØ)Ø%Ø+Ø'ØØ/Ø!5Ø)ñ,
ð ñ,
ˆð  ×1Ñ1ˆä8BÀ>ÔSVÔ8Wœ˜~˜o¨tÔ4Ð]kˆØ—‘˜mªA¨}ºaÐ,?Ñ@ÓAˆØ˜$×*Ñ*Ñ*ˆàˆØÐØ%�4×%Ñ%Ðp¨V¸FÈtÏ{É{×OeÑOeÑpÐioÑpˆDä%ØØØ#×3Ñ3Ø!×/Ñ/Ø×)Ñ)ô
ð 	
r-   )NNNNNNNNNNr   )r;   r<   r=   r!   r   r#   r®   r­   r   r
   r   r½   r¼   r¬   r   rÈ   r   r:   r>   r?   s   @r,   rÊ   rÊ   %  s8  ø„ ô>ð 15Ø15Ø37ØKOØ59Ø-1Ø$(Ø,0Ø/3Ø59Ø34ñQ
à˜E×,Ñ,Ñ-ðQ
ð ! §¡Ñ.ðQ
ð ˜u×/Ñ/Ñ0ð	Q
ð
 " %¨¨t°E×4EÑ4EÑ/FÐ(FÑ"GÑHðQ
ð   × 1Ñ 1Ñ2ðQ
ð ˜×)Ñ)Ñ*ðQ
ð ˜D‘>ðQ
ð $ D™>ðQ
ð ' t™nðQ
ð ! ×!1Ñ!1Ñ2ðQ
ð ˜c 5§<¡<Ð/Ñ0ðQ
ð Ð*Ñ+ðQ
ð 
 ÷Q
r-   rÊ   )rÊ   r¿   ÚCoherePreTrainedModel)Nr   )6r«   Útypingr   r   r   r   r   r#   Útorch.utils.checkpointr   Úcache_utilsr
   Úmodeling_flash_attention_utilsr   Úmodeling_outputsr   r   Úmodeling_rope_utilsr   Úmodeling_utilsr   Úprocessing_utilsr   Úpytorch_utilsr   Úutilsr   r   Úllama.modeling_llamar   r   r   r   r   r   Úconfiguration_coherer   Ú
get_loggerr;   rš   Ú_CONFIG_FOR_DOCÚModuler   ÚappendrA   rg   ro   rq   r{   r°   r¿   rÈ   rÊ   Ú__all__r_   r-   r,   ú<module>rñ      sõ   ðñ. ç 9Õ 9ã Û Ý å  Ý Bß OÝ 6Ý 5Ý &Ý 1ß (÷÷ õ /ð 
ˆ×	Ñ	˜HÓ	%€à €ô-�b—i‘iô -ð" Ð × Ñ ˜OÔ ,ô<Ð0ô <ò"ó<ô<Y�ô YôF)�nô F)ôRB˜Ÿ™ô BôJa�*ô aô ?Ð,¨jÔ >ôX
Ð(ô X
òv�r-   