Ë
    ÜÓ^j-E  ã                   óÎ  — 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mZ dd	lmZ dd
lmZ ddlmZmZ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!m"Z" ddl#m$Z$m%Z% ddl&m'Z'm(Z( ddl)m*Z*m+Z+ ddl,m-Z-m.Z. dej^                  de0fd„Z1ee G d„ de«      «       «       Z2 G d„ de(«      Z3 G d„ de'«      Z4 G d „ d!e"«      Z5 G d"„ d#e!«      Z6 G d$„ d%e+«      Z7 G d&„ d'e«      Z8 G d(„ d)e«      Z9 G d*„ d+e*«      Z: G d,„ d-ejv                  «      Z< G d.„ d/ejz                  «      Z> G d0„ d1e«      Z? G d2„ d3e?«      Z@ G d4„ d5e%«      ZAe G d6„ d7e$e«      «       ZBg d8¢ZCy)9é    N)Ú	dataclass)Únné   )Úinitialization)ÚCache)ÚGenerationMixin)ÚBaseModelOutputÚBaseModelOutputWithPooling)ÚPreTrainedModel)ÚUnpack)ÚTransformersKwargsÚauto_docstringÚcan_return_tuple)Úmerge_with_config_defaults)Úcapture_outputsé   )ÚAimv2AttentionÚAimv2EncoderLayer)Ú	AutoModel)ÚLlamaMLPÚLlamaRMSNorm)ÚLlavaForConditionalGenerationÚ
LlavaModel)ÚLlavaNextCausalLMOutputWithPastÚLlavaNextModelOutputWithPast)ÚSiglipEncoderÚSiglipVisionEmbeddingsé   )ÚOvis2ConfigÚOvis2VisionConfigÚlogitsÚdimc                 óì   — | j                  |«      }|j                  |d¬«      d   }t        j                  | t        j                  ¬«      j                  ||d«      }||j                  «       z
  |z   }|S )NT)Úkeepdimr   )Úmemory_formatg      ð?)ÚsoftmaxÚmaxÚtorchÚ
zeros_likeÚlegacy_contiguous_formatÚscatter_Údetach)r!   r"   Úy_softÚindexÚy_hardÚrets         úr/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/ovis2/modular_ovis2.pyÚhard_softmaxr2   '   sk   € Ø�^‰^˜CÓ €Fà�J‰J�s DˆJÓ)¨!Ñ,€EÜ×Ñ˜f´E×4RÑ4RÔS×\Ñ\Ð]`ÐbgÐilÓm€FØ
�6—=‘=“?Ñ
" VÑ
+€Cà€Jó    c                   ó:   — e Zd ZU dZdZej                  dz  ed<   y)Ú*BaseModelOutputWithVisualIndicatorFeatureszâ
    visual_indicator_features (`torch.FloatTensor` of shape `(batch_size, visual_indicator_size)`):
        Visual indicator features extracted from the model, which can be used for auxiliary tasks or further processing.
    NÚvisual_indicator_features)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r6   r(   ÚFloatTensorÚ__annotations__© r3   r1   r5   r5   1   s   … ñð
 ;?Ð˜u×0Ñ0°4Ñ7Ô>r3   r5   c                   ó   — e Zd Zy)ÚOvis2ModelOutputWithPastN©r7   r8   r9   r=   r3   r1   r?   r?   <   ó   „ Ør3   r?   c                   ó   — e Zd Zy)ÚOvis2CausalLMOutputWithPastNr@   r=   r3   r1   rC   rC   @   rA   r3   rC   c                   ó   — e Zd Zy)ÚOvis2RMSNormNr@   r=   r3   r1   rE   rE   D   rA   r3   rE   c                   ó   — e Zd Zy)ÚOvis2VisionMLPNr@   r=   r3   r1   rG   rG   H   rA   r3   rG   c                   ób   ‡ — e Zd Zdefˆ fd„Zd„ Zdej                  dej                  fd„Z	ˆ xZ
S )ÚOvis2VisionEmbeddingsÚconfigc                 ón   •— t         ‰| �  |«       t        |j                  |j                  «      | _        y ©N)ÚsuperÚ__init__rE   Úhidden_sizeÚrms_norm_epsÚrms_norm©ÚselfrJ   Ú	__class__s     €r1   rN   zOvis2VisionEmbeddings.__init__M   s*   ø€ Ü‰Ñ˜Ô Ü$ V×%7Ñ%7¸×9LÑ9LÓMˆ�r3   c                 ó   — t        d«      ‚)NzNot needed for Ovis2)ÚNotImplementedError)rS   s    r1   Úinterpolate_pos_encodingz.Ovis2VisionEmbeddings.interpolate_pos_encodingQ   s   € Ü!Ð"8Ó9Ð9r3   Úpixel_valuesÚreturnc                 ó(  — | j                   j                  j                  }| j                  |j                  |¬«      «      }|j	                  d«      j                  dd«      }| j                  |«      }|| j                  | j                  «      z   }|S )N©Údtyper   r   )	Úpatch_embeddingÚweightr\   ÚtoÚflattenÚ	transposerQ   Úposition_embeddingÚposition_ids)rS   rX   Útarget_dtypeÚpatch_embedsÚ
embeddingss        r1   ÚforwardzOvis2VisionEmbeddings.forwardT   s€   € Ø×+Ñ+×2Ñ2×8Ñ8ˆØ×+Ñ+¨L¯O©OÀ,¨OÓ,OÓPˆØ!×)Ñ)¨!Ó,×6Ñ6°q¸!Ó<ˆ
Ø—]‘] :Ó.ˆ
à $×"9Ñ"9¸$×:KÑ:KÓ"LÑLˆ
àÐr3   )r7   r8   r9   r    rN   rW   r(   r;   ÚTensorrg   Ú__classcell__©rT   s   @r1   rI   rI   L   s4   ø„ ðNÐ0õ Nò:ð E×$5Ñ$5ð ¸%¿,¹,÷ r3   rI   c                   ó   — e Zd Zy)ÚOvis2VisionAttentionNr@   r=   r3   r1   rl   rl   _   rA   r3   rl   c                   ó$   ‡ — e Zd Zdefˆ fd„Zˆ xZS )ÚOvis2VisionEncoderLayerrJ   c                 óB   •— t         ‰| �  «        t        |«      | _        y rL   )rM   rN   rl   Ú	attentionrR   s     €r1   rN   z Ovis2VisionEncoderLayer.__init__d   s   ø€ Ü‰ÑÔÜ-¨fÓ5ˆ�r3   )r7   r8   r9   r    rN   ri   rj   s   @r1   rn   rn   c   s   ø„ ð6Ð0÷ 6ñ 6r3   rn   c            	       óp   ‡ — e Zd Zdefˆ fd„Zee	 ddej                  dz  de	e
   defd„«       «       Zˆ xZS )	ÚOvis2VisionEncoderrJ   c                 ó¶   •— t         ‰| �  |«       t        j                  t	        |j
                  «      D �cg c]  }t        |«      ‘Œ c}«      | _        y c c}w rL   )rM   rN   r   Ú
ModuleListÚrangeÚnum_hidden_layersrn   Úlayers)rS   rJ   Ú_rT   s      €r1   rN   zOvis2VisionEncoder.__init__j   s@   ø€ Ü‰Ñ˜Ô Ü—m‘mÌeÐTZ×TlÑTlÓNmÖ$nÈÔ%<¸VÕ%DÒ$nÓoˆ�ùÒ$ns   ·ANÚattention_maskÚkwargsrY   c                 óT   — |}| j                   D ]  } |||fi |¤Ž}Œ t        |¬«      S )N©Úlast_hidden_state)rw   r	   )rS   Úinputs_embedsry   rz   Úhidden_statesÚencoder_layers         r1   rg   zOvis2VisionEncoder.forwardn   s<   € ð &ˆØ!Ÿ[™[ò 	SˆMÙ)¨-¸ÑRÈ6ÑR‰Mð	Sô °Ô?Ð?r3   rL   )r7   r8   r9   r    rN   r   r   r(   rh   r   r   r	   rg   ri   rj   s   @r1   rr   rr   i   se   ø„ ðpÐ0õ pð Øð /3ñ
@ð Ÿ™ tÑ+ð
@ð Ð+Ñ,ð	
@ð
 
ò
@ó ó ô
@r3   rr   c                   óX   ‡ — e Zd Zdefˆ fd„Ze	 ddej                  dz  fd„«       Zˆ xZ	S )ÚOvis2VisionTransformerrJ   c                 óÈ   •— t         ‰| �  «        || _        t        |«      | _        t        |«      | _        t        |j                  |j                  «      | _
        d| _        y )NF)rM   rN   rJ   rI   rf   rr   ÚencoderrE   rO   rP   rQ   Úgradient_checkpointingrR   s     €r1   rN   zOvis2VisionTransformer.__init__~   sO   ø€ Ü‰ÑÔØˆŒÜ/°Ó7ˆŒÜ)¨&Ó1ˆŒÜ$ V×%7Ñ%7¸×9LÑ9LÓMˆŒØ&+ˆÕ#r3   Nry   c                 ó    — | j                  |«      } | j                  d||dœ|¤Ž}|j                  }| j                  |«      }t	        |¬«      S )N)r~   ry   r|   r=   )rf   r„   r}   rQ   r	   )rS   rX   ry   rz   r   Úencoder_outputsr}   s          r1   rg   zOvis2VisionTransformer.forward†   sa   € ð Ÿ™¨Ó5ˆà+7¨4¯<©<ð ,
Ø'Ø)ñ,
ð ñ,
ˆð ,×=Ñ=ÐØ ŸM™MÐ*;Ó<ÐäÐ1BÔCÐCr3   rL   )
r7   r8   r9   r    rN   r   r(   rh   rg   ri   rj   s   @r1   r‚   r‚   }   s?   ø„ ð,Ð0õ ,ð ð /3ñDð Ÿ™ tÑ+òDó ôDr3   r‚   c                   óP   ‡ — e Zd Zdej                  dej                  fˆ fd„Zˆ xZS )ÚOvis2VisualEmbeddingTableÚvisual_tokensrY   c                 ó  •— |j                   t        j                  t        j                  t        j                  t        j
                  t        j                  fv rt        ‰| �!  |«      S t        j                  || j                  «      S rL   )r\   r(   Úint8Úint16Úint32Úint64ÚlongrM   rg   Úmatmulr^   )rS   rŠ   rT   s     €r1   rg   z!Ovis2VisualEmbeddingTable.forwardœ   sW   ø€ Ø×Ñ¤5§:¡:¬u¯{©{¼E¿K¹KÌÏÉÔV[×V`ÑV`Ð"aÑaÜ‘7‘? =Ó1Ð1Ü�|‰|˜M¨4¯;©;Ó7Ð7r3   )r7   r8   r9   r(   rh   rg   ri   rj   s   @r1   r‰   r‰   ›   s#   ø„ ð8 U§\¡\ð 8°e·l±l÷ 8ñ 8r3   r‰   c                   óZ   ‡ — e Zd ZU eed<   dZdZdZdgZdgZ	dZ
dZdZdZdZdZˆ fd„Zˆ xZS )ÚOvis2PreTrainedModelrJ   Úmodel)ÚimageÚtextTrl   Úpast_key_valuesc                 óø   •— t         ‰| �  |«       t        |t        «      rZt	        j
                  |j                  t        j                  |j                  j                  d   «      j                  d«      «       y y )Néÿÿÿÿ)r   r™   )rM   Ú_init_weightsÚ
isinstancerI   ÚinitÚcopy_rc   r(   ÚarangeÚshapeÚexpand)rS   ÚmodulerT   s     €r1   rš   z"Ovis2PreTrainedModel._init_weights±   s[   ø€ Ü‰Ñ˜fÔ%Ü�fÔ3Ô4Ü�J‰J�v×*Ñ*¬E¯L©L¸×9LÑ9L×9RÑ9RÐSUÑ9VÓ,W×,^Ñ,^Ð_fÓ,gÕhð 5r3   )r7   r8   r9   r   r<   Úbase_model_prefixÚinput_modalitiesÚsupports_gradient_checkpointingÚ_no_split_modulesÚ_skip_keys_device_placementÚ_supports_cache_classÚ_supports_flash_attnÚ_supports_flex_attnÚ_supports_sdpaÚ_can_compile_fullgraphÚ_supports_attention_backendrš   ri   rj   s   @r1   r“   r“   ¢   s\   ø… ØÓØÐØ(ÐØ&*Ð#Ø/Ð0ÐØ#4Ð"5ÐØ ÐØÐØÐØ€Nà!ÐØ"&Ð÷ið ir3   r“   c            	       ó‚   ‡ — e Zd ZU eed<   eedœZdefˆ fd„Ze	e
dej                  dee   deez  fd„«       «       Zˆ xZS )ÚOvis2VisionModelrJ   )r   Ú
attentionsc                 óÈ  •— t         ‰| �  |«       || _        t        |«      | _        |j
                  | _        |j                  | _        t        j                  |j                  |j                  z  |j                  z  | j                  | j
                  z
  d¬«      | _        t        j                  | j                  | j
                  z
  «      | _        | j                  «        y ©NF)Úbias)rM   rN   rJ   r‚   ÚtransformerÚnum_visual_indicator_tokensÚ
vocab_sizer   ÚLinearrO   Úhidden_strideÚhead_linearÚ	LayerNormÚ	head_normÚ	post_initrR   s     €r1   rN   zOvis2VisionModel.__init__¾   s¯   ø€ Ü‰Ñ˜Ô ØˆŒÜ1°&Ó9ˆÔØ+1×+MÑ+MˆÔ(Ø ×+Ñ+ˆŒÜŸ9™9Ø×Ñ ×!5Ñ!5Ñ5¸×8LÑ8LÑLØ�O‰O˜d×>Ñ>Ñ>Øô
ˆÔô
 Ÿ™ d§o¡o¸×8XÑ8XÑ&XÓYˆŒà�‰Õr3   rX   rz   rY   c           	      ó°  —  | j                   |fi |¤Ž}|d   }| j                  j                  dkD  rÚ|j                  \  }}}| j                  j                  }t	        t        j                  |«      «      }	|	|	z  |k7  rt        d«      ‚||	|z  z
  |z  }
t        j                  j                  |ddd|
d|
fdd«      }|	|
z  }	|j                  ||	|z  ||	|z  ||«      }|j                  dddddd«      }|j                  |d	||z  |z  «      }| j                  |«      }| j                  |«      }| j                  j                  d
k(  r#t        j                  j!                  |d	d¬«      }na| j                  j                  dk(  rt#        |d	¬«      }n:| j                  j                  dk(  r!t        j                  j%                  |d	¬«      }t'        |¬«      S )Nr   r   z.Token sequence length must be a perfect squareÚconstantr   r   é   é   r™   Úgumbel_argmaxT)r"   ÚhardÚ	st_argmax©r"   r&   )r}   Úpooler_output)r³   rJ   r·   rŸ   ÚintÚmathÚsqrtÚ
ValueErrorr   Ú
functionalÚpadÚreshapeÚpermuter¸   rº   Útokenize_functionÚgumbel_softmaxr2   r&   r5   )rS   rX   rz   Úoutputsr}   Ú
num_imagesÚseq_lenÚ
hidden_dimr·   Úsqrt_lÚpad_sizer!   Ú
prob_tokens                r1   rg   zOvis2VisionModel.forwardÍ   sá  € ð
 #�$×"Ñ" <Ñ:°6Ñ:ˆØ# A™JÐØ�;‰;×$Ñ$ qÒ(Ø.?×.EÑ.EÑ+ˆJ˜ Ø ŸK™K×5Ñ5ˆMäœŸ™ 7Ó+Ó,ˆFØ˜‰ 'Ò)Ü Ð!QÓRÐRà%¨°-Ñ)?Ñ@ÀMÑQˆHÜ "§¡× 1Ñ 1Ð2CÀaÈÈAÈxÐYZÐ\dÐEeÐgqÐstÓ uÐØ�hÑˆFà 1× 9Ñ 9Ø˜F mÑ3°]ÀFÈmÑD[Ð]jÐlvó!Ðð !2× 9Ñ 9¸!¸QÀÀ1ÀaÈÓ KÐØ 1× 9Ñ 9Ø˜B °Ñ =À
Ñ Jó!Ðð ×!Ñ!Ð"3Ó4ˆØ—‘ Ó'ˆà�;‰;×(Ñ(¨OÒ;ÜŸ™×5Ñ5°fÀ"È4Ð5ÓP‰JØ�[‰[×*Ñ*¨kÒ9Ü% f°"Ô5‰JØ�[‰[×*Ñ*¨iÒ7ÜŸ™×.Ñ.¨v¸2Ð.Ó>ˆJä9Ø/Ø$ô
ð 	
r3   )r7   r8   r9   r    r<   rn   rl   Ú_can_record_outputsrN   r   r   r(   r;   r   r   Útupler5   rg   ri   rj   s   @r1   r®   r®   ·   sj   ø… ØÓà0Ø*ñÐð
Ð0õ ð  Øð&
Ø!×-Ñ-ð&
Ø9?Ð@RÑ9Sð&
à	Ð;Ñ	;ò&
ó ó  ô&
r3   r®   c                   óš  ‡ — e Zd Zdefˆ fd„Ze ed¬«      dej                  de	e
   deez  fd„«       «       Zee	 	 	 	 	 	 	 	 	 dd
ej                  d	z  dej                  d	z  dej                  d	z  dej                  d	z  ded	z  dej                  d	z  dej                  d	z  ded	z  deej                  z  deez  fd„«       «       Zˆ xZS )Ú
Ovis2ModelrJ   c                 ó|  •— t         ‰| �  |«       t        |j                  «      | _        t        |j                  j                  |j                  «      | _        |j                  j                  | _	        |j                  | _        |j                  | _
        t        j                  |j                  «      | _        | `y rL   )rM   rN   r®   Úvision_configÚvision_towerr‰   rµ   rO   Úvisual_embeddings_tableÚvisual_vocab_sizeÚvisual_indicator_token_idsr   Úfrom_configÚtext_configÚlanguage_modelÚmulti_modal_projectorrR   s     €r1   rN   zOvis2Model.__init__ù   s“   ø€ Ü‰Ñ˜Ô Ü,¨V×-AÑ-AÓBˆÔÜ'@À×AUÑAU×A`ÑA`Ðbh×btÑbtÓ'uˆÔ$à!'×!5Ñ!5×!@Ñ!@ˆÔØ ×+Ñ+ˆŒØ*0×*KÑ*KˆÔ'Ü'×3Ñ3°F×4FÑ4FÓGˆÔØÑ&r3   zWObtains image last hidden states from the vision tower and apply multimodal projection.)Úcustom_introrX   rz   rY   c                 óh  —  | j                   |fddi|¤Ž}|j                  }|j                  \  }}}t        j                  ||| j                   j
                  f|j                  |j                  d|j                  ¬«      }t        j                  ||gd¬«      }| j                  |«      }t        j                  | j                  | j                   j
                  z
  | j                  t        j                  ¬«      j                  |j                  «      }	||_        | j                  |	«      |_        |S )NÚreturn_dictTF)r\   ÚdeviceÚrequires_gradÚlayoutr   rÃ   r[   )rÜ   rÄ   rŸ   r(   Úzerosr´   r\   rç   ré   ÚcatrÝ   rž   rÞ   r�   r_   r6   )
rS   rX   rz   Úimage_outputsÚimage_featuresÚ
batch_sizeÚimg_seq_lenrx   Úpadding_tensorÚvisual_indicators
             r1   Úget_image_featureszOvis2Model.get_image_features  s  € ð *˜×)Ñ)¨,ÑSÀDÐSÈFÑSˆØ&×4Ñ4ˆØ%3×%9Ñ%9Ñ"ˆ
�K ÜŸ™Ø˜ d×&7Ñ&7×&SÑ&SÐTØ ×&Ñ&Ø!×(Ñ(ØØ!×(Ñ(ô
ˆô Ÿ™ N°NÐ#CÈÔKˆØ×5Ñ5°nÓEˆä Ÿ<™<Ø×"Ñ" T×%6Ñ%6×%RÑ%RÑRØ×"Ñ"Ü—*‘*ô
÷ ‰"ˆ^×"Ñ"Ó
#ð	 	ð
 '5ˆÔ#Ø26×2NÑ2NÐO_Ó2`ˆÔ/àÐr3   NÚ	input_idsry   rc   r—   r~   ÚlabelsÚ	use_cacheÚlogits_to_keepc
           
      ó¨  — |d u |d uz  rt        d«      ‚|€ | j                  «       |«      }|��J| j                  |d¬«      }|j                  }|j                  }| j                  |||¬«      }|j                  |j                  |j                  «      }|j                  ||«      }t        | j                  «      D ]»  \  }}|€Y| | j                  «       t        j                  |t        j                  |j                  ¬«      «      k(  }|j                  d«      }n||k(  j                  |j                  «      }|j!                  «       sŒ�||   j                  |j                  |j                  «      ||<   Œ½  | j"                  d	||||||	dœ|
¤Ž}t%        |j&                  |j(                  |j*                  |j,                  |�¬«      S d ¬«      S )
Nz:You must specify exactly one of input_ids or inputs_embedsT)rX   ræ   )r~   rí   )r\   rç   r™   )ry   rc   r—   r~   rõ   rö   )r}   r—   r   r¯   Úimage_hidden_statesr=   )rÈ   Úget_input_embeddingsrò   rÄ   r6   Úget_placeholder_maskr_   rç   r\   Úmasked_scatterÚ	enumeraterß   r(   Útensorr�   ÚallÚanyrâ   r?   r}   r—   r   r¯   )rS   ró   rX   ry   rc   r—   r~   rô   rõ   rö   rz   rì   rí   r6   Úspecial_image_maskÚiÚvisual_indicator_idÚmaskrÏ   s                      r1   rg   zOvis2Model.forward$  s  € ð ˜Ð -°tÐ";Ò<ÜÐYÓZÐZàÐ Ø7˜D×5Ñ5Ó7¸	ÓBˆMàÑ#Ø ×3Ñ3ÀÐ[_Ð3Ó`ˆMØ*×8Ñ8ˆNØ(5×(OÑ(OÐ%à!%×!:Ñ!:ØØ+Ø-ð ";ó "Ðð
 ,×.Ñ.¨}×/CÑ/CÀ]×EXÑEXÓYˆNØ)×8Ñ8Ð9KÈ^Ó\ˆMä*3°D×4SÑ4SÓ*Tò 
uÑ&�Ð&ØÐ$Ø(Ð,G¨D×,EÑ,EÓ,GÜŸ™Ð%8ÄÇ
Á
ÐS`×SgÑSgÔhó-ñ �Dð  Ÿ8™8 B›<‘Dà%Ð)<Ñ<×@Ñ@À×AUÑAUÓV�Dà—8‘8•:Ø*CÀAÑ*F×*IÑ*IÈ-×J^ÑJ^Ð`m×`sÑ`sÓ*t�M $Ò'ð
uð &�$×%Ñ%ð 
Ø)Ø%Ø+Ø'ØØ)ñ
ð ñ
ˆô (Ø%×7Ñ7Ø#×3Ñ3Ø!×/Ñ/Ø×)Ñ)Ø2>Ð2J ô
ð 	
ð
 QUô
ð 	
r3   ©	NNNNNNNNr   )r7   r8   r9   r   rN   r   r   r(   r;   r   r   r×   r5   rò   Ú
LongTensorrh   r   ÚboolrÅ   r?   rg   ri   rj   s   @r1   rÙ   rÙ   ø   sS  ø„ ð	'˜{õ 	'ð ÙØnôðà×'Ñ'ðð Ð+Ñ,ðð 
Ð;Ñ	;ò	óó ðð8 Øð .2Ø15Ø.2Ø04Ø(,Ø26Ø*.Ø!%Ø-.ñ<
à×#Ñ# dÑ*ð<
ð ×'Ñ'¨$Ñ.ð<
ð Ÿ™ tÑ+ð	<
ð
 ×&Ñ&¨Ñ-ð<
ð  ™ð<
ð ×(Ñ(¨4Ñ/ð<
ð × Ñ  4Ñ'ð<
ð ˜$‘;ð<
ð ˜eŸl™lÑ*ð<
ð 
Ð)Ñ	)ò<
ó ó ô<
r3   rÙ   c                   ó‚  ‡ — e Zd Zdefˆ fd„Zedej                  dee	   de
ez  fd„«       Zee	 	 	 	 	 	 	 	 	 ddej                  dz  dej                  dz  d	ej                  dz  d
ej                  dz  dedz  dej                  dz  dej                  dz  dedz  deej                  z  de
ez  fd„«       «       Zˆ xZS )ÚOvis2ForConditionalGenerationrJ   c                 ó†   •— t         ‰| �  |«       t        j                  |j                  |j
                  d¬«      | _        y r±   )rM   rN   r   r¶   rO   rµ   Úlm_headrR   s     €r1   rN   z&Ovis2ForConditionalGeneration.__init__g  s0   ø€ Ü‰Ñ˜Ô Ü—y‘y ×!3Ñ!3°V×5FÑ5FÈUÔSˆ�r3   rX   rz   rY   c                 ó>   —  | j                   j                  dd|i|¤ŽS )NrX   r=   )r”   rò   )rS   rX   rz   s      r1   rò   z0Ovis2ForConditionalGeneration.get_image_featuresk  s#   € ð -ˆt�z‰z×,Ñ,ÑQ¸,ÐQÈ&ÑQÐQr3   Nró   ry   rc   r—   r~   rô   rõ   rö   c
                 ó–  —  | j                   d|||||||dœ|
¤Ž}|d   }t        |	t        «      rt        |	 d«      n|	}| j	                  |dd…|dd…f   «      }d}|�4 | j
                  d||| j                  j                  j                  dœ|
¤Ž}t        |||j                  |j                  |j                  |j                  ¬«      S )aâ  
        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]`.

        Example:

        ```python
        >>> from PIL import Image
        >>> import httpx
        >>> from io import BytesIO
        >>> from transformers import AutoProcessor, Ovis2ForConditionalGeneration

        >>> model = Ovis2ForConditionalGeneration.from_pretrained("thisisiron/Ovis2-2B-hf")
        >>> processor = AutoProcessor.from_pretrained("thisisiron/Ovis2-2B-hf")

        >>> prompt = "<|im_start|>user\n<image>\nDescribe the image.<|im_end|>\n<|im_start|>assistant\n"
        >>> url = "http://images.cocodataset.org/val2014/COCO_val2014_000000537955.jpg"
        >>> with httpx.stream("GET", url) as response:
        ...     image = Image.open(BytesIO(response.read()))

        >>> inputs = processor(images=image, text=prompt, return_tensors="pt")

        >>> # Generate
        >>> generate_ids = model.generate(**inputs, max_new_tokens=15)
        >>> processor.batch_decode(generate_ids, skip_special_tokens=True)[0]
        "user\n\nDescribe the image.\nassistant\nThe image features a brown dog standing on a wooden floor, looking up with"
        ```)ró   rX   ry   rc   r—   r~   rõ   r   N)r!   rô   rµ   )Úlossr!   r—   r   r¯   rø   r=   )r”   r›   rÅ   Úslicer
  Úloss_functionrJ   rá   rµ   rC   r—   r   r¯   rø   )rS   ró   rX   ry   rc   r—   r~   rô   rõ   rö   rz   rÏ   r   Úslice_indicesr!   r  s                   r1   rg   z%Ovis2ForConditionalGeneration.forwardq  só   € ðX �$—*‘*ð 	
ØØ%Ø)Ø%Ø+Ø'Øñ	
ð ñ	
ˆð   ™
ˆä8BÀ>ÔSVÔ8Wœ˜~˜o¨tÔ4Ð]kˆØ—‘˜mªA¨}ºaÐ,?Ñ@ÓAˆàˆØÐØ%�4×%Ñ%ð Ø f¸¿¹×9PÑ9P×9[Ñ9[ñØ_eñˆDô +ØØØ#×3Ñ3Ø!×/Ñ/Ø×)Ñ)Ø '× ;Ñ ;ô
ð 	
r3   r  )r7   r8   r9   r   rN   r   r(   r;   r   r   r×   r5   rò   r   r  rh   r   r  rÅ   rC   rg   ri   rj   s   @r1   r  r  e  sR  ø„ ðT˜{õ Tð ðRØ!×-Ñ-ðRØ9?Ð@RÑ9SðRà	Ð;Ñ	;òRó ðRð
 Øð .2Ø15Ø.2Ø04Ø(,Ø26Ø*.Ø!%Ø-.ñG
à×#Ñ# dÑ*ðG
ð ×'Ñ'¨$Ñ.ðG
ð Ÿ™ tÑ+ð	G
ð
 ×&Ñ&¨Ñ-ðG
ð  ™ðG
ð ×(Ñ(¨4Ñ/ðG
ð × Ñ  4Ñ'ðG
ð ˜$‘;ðG
ð ˜eŸl™lÑ*ðG
ð 
Ð,Ñ	,òG
ó ó ôG
r3   r  )r“   rÙ   r  )DrÆ   Údataclassesr   r(   r   Ú r   rœ   Úcache_utilsr   Ú
generationr   Úmodeling_outputsr	   r
   Úmodeling_utilsr   Úprocessing_utilsr   Úutilsr   r   r   Úutils.genericr   Úutils.output_capturingr   Úaimv2.modeling_aimv2r   r   Úautor   Úllama.modeling_llamar   r   Úllava.modeling_llavar   r   Úllava_next.modeling_llava_nextr   r   Úsiglip.modeling_siglipr   r   Úconfiguration_ovis2r   r    rh   rÅ   r2   r5   r?   rC   rE   rG   rI   rl   rn   rr   ÚModuler‚   Ú	Embeddingr‰   r“   r®   rÙ   r  Ú__all__r=   r3   r1   ú<module>r%     s^  ðó Ý !ã Ý å &Ý  Ý )ß KÝ -Ý &ß IÑ IÝ 7Ý 5ß DÝ ß 9ß Lß jß Jß ?ð˜Ÿ™ð ¨Có ð Ø
ô?Ð1Kó ?ó ó ð?ô	Ð;ô 	ô	Ð"Aô 	ô	�<ô 	ô	�Xô 	ôÐ2ô ô&	˜>ô 	ô6Ð/ô 6ô@˜ô @ô(D˜RŸY™Yô Dô<8 §¡ô 8ôi˜?ô iô*>
Ð+ô >
ôBj
�ô j
ðZ ôT
Ð$AÀ?ó T
ó ðT
òn R�r3   