Ë
    ÜÓ^j®/  ã                   ó¤  — 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 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 ddlmZ  ej6                  e«      Z G d„ de«      Z G d„ dej>                  «      Z  G d„ dej>                  «      Z! G d„ de«      Z" G d„ de«      Z# G d„ de«      Z$ G d„ de«      Z% G d„ de«      Z&g d¢Z'y) é    N)Únné   )ÚACT2FN)ÚCache)ÚBaseModelOutputWithPooling)ÚUnpack)Úauto_docstringÚlogging)Úcan_return_tupleÚmerge_with_config_defaultsé   )ÚLlavaCausalLMOutputWithPastÚLlavaForConditionalGenerationÚ
LlavaModelÚLlavaModelOutputWithPastÚLlavaPreTrainedModelÚTransformersKwargs)ÚMistralRMSNormé   )ÚMistral3Configc                   ó   — e Zd Zy)ÚMistral3RMSNormN©Ú__name__Ú
__module__Ú__qualname__© ó    úx/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/mistral3/modular_mistral3.pyr   r   (   ó   „ Ør   r   c                   óx   ‡ — e Zd ZdZdefˆ fd„Zdej                  dej                  dej                  fd„Zˆ xZ	S )ÚMistral3PatchMergerz<
    Learned merging of spatial_merge_size ** 2 patches
    Úconfigc                 ó"  •— t         ‰| �  «        || _        |j                  j                  }|j
                  | _        | j                  j                  j                  | _        t        j                  || j
                  dz  z  |d¬«      | _	        y )Nr   F©Úbias)
ÚsuperÚ__init__r#   Úvision_configÚhidden_sizeÚspatial_merge_sizeÚ
patch_sizer   ÚLinearÚmerging_layer)Úselfr#   r*   Ú	__class__s      €r   r(   zMistral3PatchMerger.__init__1   sr   ø€ Ü‰ÑÔØˆŒà×*Ñ*×6Ñ6ˆØ"(×";Ñ";ˆÔØŸ+™+×3Ñ3×>Ñ>ˆŒÜŸY™Y {°T×5LÑ5LÈaÑ5OÑ'OÐQ\ÐchÔiˆÕr   Úimage_featuresÚimage_sizesÚreturnc                 óÚ  — |D �cg c]&  }|d   | j                   z  |d   | j                   z  f‘Œ( }}|D ��cg c]
  \  }}||z  ‘Œ }}}|j                  d   }g }t        |j                  |«      «      D ]Á  \  }	}
||	   \  }}|
j	                  |||«      j                  ddd«      j                  d«      }t        j                  j                  j                  || j                  | j                  ¬«      }|j	                  || j                  dz  z  d«      j                  «       }|j                  |«       ŒÃ t        j                  |d¬«      }| j                  |«      }|S c c}w c c}}w )Nr   r   éÿÿÿÿr   )Úkernel_sizeÚstride©Údim)r,   ÚshapeÚ	enumerateÚsplitÚviewÚpermuteÚ	unsqueezeÚtorchr   Ú
functionalÚunfoldr+   ÚtÚappendÚcatr.   )r/   r1   r2   Ú
image_sizeÚhÚwÚtokens_per_imageÚdÚpermuted_tensorÚimage_indexÚimage_tokensÚ
image_gridÚgrids                r   ÚforwardzMistral3PatchMerger.forward:   sl  € àcnö
ØU_ˆZ˜‰]˜dŸo™oÑ-¨z¸!©}ÀÇÁÑ/OÒPð
ˆð 
ð /:×:¡d a¨˜A ›EÐ:ÐÑ:Ø× Ñ  Ñ$ˆàˆÜ)2°>×3GÑ3GÐHXÓ3YÓ)Zò 	)Ñ%ˆK˜à˜{Ñ+‰DˆAˆqØ%×*Ñ*¨1¨a°Ó3×;Ñ;¸A¸qÀ!ÓD×NÑNÈqÓQˆJÜ—8‘8×&Ñ&×-Ñ-Ø¨×(?Ñ(?È×H_ÑH_ð .ó ˆDð —9‘9˜Q ×!8Ñ!8¸!Ñ!;Ñ;¸RÓ@×BÑBÓDˆDØ×"Ñ" 4Õ(ð	)ô Ÿ™ ?¸Ô:ˆØ×+Ñ+¨NÓ;ˆØÐùò)
ùó ;s
   …+E"·E')
r   r   r   Ú__doc__r   r(   r@   ÚTensorrP   Ú__classcell__©r0   s   @r   r"   r"   ,   s?   ø„ ñðj˜~õ jð e§l¡lð ÀÇÁð ÐRW×R^ÑR^÷ r   r"   c                   ó\   ‡ — e Zd Zdefˆ fd„Zdej                  dej                  fd„Zˆ xZS )ÚMistral3MultiModalProjectorr#   c                 ó¨  •— t         ‰| �  «        t        |j                  j                  |j
                  j                  ¬«      | _        t        |«      | _	        t        |j                  t        «      rdnt        |j                  «      | _        t        j                   |j                  j                  | j                  z  |j
                  j                  |j"                  ¬«      | _        t&        |j(                     | _        t        j                   |j
                  j                  |j
                  j                  |j"                  ¬«      | _        y )N)Úepsr   r%   )r'   r(   r   r)   r*   Útext_configÚrms_norm_epsÚnormr"   Úpatch_mergerÚ
isinstanceÚvision_feature_layerÚintÚlenÚnum_feature_layersr   r-   Úmultimodal_projector_biasÚlinear_1r   Úprojector_hidden_actÚactÚlinear_2)r/   r#   r0   s     €r   r(   z$Mistral3MultiModalProjector.__init__S   sø   ø€ Ü‰ÑÔÜ# F×$8Ñ$8×$DÑ$DÈ&×J\ÑJ\×JiÑJiÔjˆŒ	Ü/°Ó7ˆÔô ˜F×7Ñ7¼Ô=‰AÄ3Àv×GbÑGbÓCcð 	Ôô Ÿ	™	Ø× Ñ ×,Ñ,¨t×/FÑ/FÑFØ×Ñ×*Ñ*Ø×1Ñ1ô
ˆŒô
 ˜&×5Ñ5Ñ6ˆŒÜŸ	™	Ø×Ñ×*Ñ*¨F×,>Ñ,>×,JÑ,JÐQW×QqÑQqô
ˆ�r   r1   r2   c                 ó²   — | j                  |«      }| j                  ||«      }| j                  |«      }| j                  |«      }| j	                  |«      }|S ©N)r[   r\   rc   re   rf   )r/   r1   r2   Úhidden_statess       r   rP   z#Mistral3MultiModalProjector.forwarde   sR   € ØŸ™ >Ó2ˆØ×*Ñ*¨>¸;ÓGˆØŸ™ nÓ5ˆØŸ™ Ó/ˆØŸ™ mÓ4ˆØÐr   )	r   r   r   r   r(   r@   rR   rP   rS   rT   s   @r   rV   rV   R   s*   ø„ ð
˜~õ 
ð$ e§l¡lð ÀÇÁ÷ r   rV   c                   ó   — e Zd Zy)ÚMistral3CausalLMOutputWithPastNr   r   r   r   rk   rk   n   r    r   rk   c                   ó   — e Zd Zy)ÚMistral3ModelOutputWithPastNr   r   r   r   rm   rm   r   r    r   rm   c                   ó   — e Zd Zy)ÚMistral3PreTrainedModelNr   r   r   r   ro   ro   v   r    r   ro   c                   óî  — e Zd Zee ed¬«      	 	 ddej                  dej                  de	e
e	   z  e
e	   z  dz  dedz  dee   d	eez  fd
„«       «       «       Ze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	e
e	   z  e
e	   z  dz  dedz  dej                  dz  dee   d	eez  fd„«       «       «       Zy)ÚMistral3ModelzWObtains image last hidden states from the vision tower and apply multimodal projection.)Úcustom_introNÚpixel_valuesr2   r^   Úoutput_hidden_statesÚkwargsr3   c                 ó´  — |j                  «       D ��ci c]  \  }}|€Œ	||“Œ }}} | j                  |f|dddœ|¤Ž}t        |t        «      r|j                  |   }	n3|D �
cg c]  }
|j                  |
   ‘Œ }}
t        j                  |d¬«      }	| j                  |	j                  d«      |«      }| j                  j                  | j                  j                  z  }t        j                  ||j                  ¬«      |z  j                  d¬«      j                  «       }t        j                   |j                  d«      |«      }||_        |S c c}}w c c}
w )NT)r2   rt   Úreturn_dictr5   r8   r   )Údevice)ÚitemsÚvision_towerr]   r_   ri   r@   rE   Úmulti_modal_projectorÚsqueezer,   r#   r+   Ú	as_tensorrx   ÚprodÚtolistr<   Úpooler_output)r/   rs   r2   r^   rt   ru   ÚkÚvÚimage_outputsÚselected_image_featureÚ	layer_idxÚhs_poolr1   Údownsample_ratioÚsplit_sizess                  r   Úget_image_featuresz Mistral3Model.get_image_features{   sS  € ð $*§<¡<£>×C™4˜1˜a°Q±]�!�Q‘$ÐCˆÑCà)˜×)Ñ)Øð
à#Ø!%Øñ	
ð
 ñ
ˆô Ð*¬CÔ0Ø%2×%@Ñ%@ÐAUÑ%VÑ"àOcÖdÀ)�}×2Ñ2°9Ó=ÐdˆGÐdÜ%*§Y¡Y¨w¸BÔ%?Ð"à×3Ñ3Ð4J×4RÑ4RÐSTÓ4UÐWbÓcˆØ×,Ñ,×7Ñ7¸$¿+¹+×:XÑ:XÑXÐä�_‰_˜[°×1FÑ1FÔGÐK[Ñ[×aÑaÐfhÐaÓi×pÑpÓrð 	ô Ÿ™ ^×%;Ñ%;¸AÓ%>ÀÓLˆØ&4ˆÔ#àÐùó3 Dùò es   ”
EŸEÁ"EÚ	input_idsÚattention_maskÚposition_idsÚpast_key_valuesÚinputs_embedsÚ	use_cachec
           	      ó  — |d u |d uz  rt        d«      ‚|€ | j                  «       |«      }|�€| j                  |||	d¬«      j                  }t	        j
                  |d¬«      j                  |j                  |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)rs   r^   r2   rw   r   r8   )rŽ   r1   )r‹   rŒ   r�   rŽ   r�   )Úlast_hidden_stater�   ri   Ú
attentionsÚimage_hidden_statesr   )Ú
ValueErrorÚget_input_embeddingsr‰   r€   r@   rE   Útorx   ÚdtypeÚget_placeholder_maskÚmasked_scatterÚlanguage_modelrm   r‘   r�   ri   r’   )r/   rŠ   rs   r‹   rŒ   r�   rŽ   r^   r�   r2   ru   r1   Úspecial_image_maskÚoutputss                 r   rP   zMistral3Model.forward£   sH  € ð  ˜Ð -°tÐ";Ò<ÜÐYÓZÐZàÐ Ø7˜D×5Ñ5Ó7¸	ÓBˆMàÐ#Ø!×4Ñ4Ø)Ø%9Ø'Ø ð	 5ó ÷
 ‰mð ô #ŸY™Y ~¸1Ô=×@Ñ@À×AUÑAUÐWd×WjÑWjÓkˆNØ!%×!:Ñ!:Ø¨À~ð ";ó "Ðð *×8Ñ8Ð9KÈ^Ó\ˆMà%�$×%Ñ%ð 
Ø)Ø%Ø+Ø'Øñ
ð ñ
ˆô +Ø%×7Ñ7Ø#×3Ñ3Ø!×/Ñ/Ø×)Ñ)Ø2>Ð2J ô
ð 	
ð
 QUô
ð 	
r   )NN)	NNNNNNNNN)r   r   r   r   r   r	   r@   ÚFloatTensorrR   r_   ÚlistÚboolr   r   Útupler   r‰   Ú
LongTensorr   rm   rP   r   r   r   rq   rq   z   s¶  „ ØØÙØnôð DHØ,0ñ!à×'Ñ'ð!ð —\‘\ð!ð " D¨¡I™o°°S±	Ñ9¸DÑ@ð	!ð
 # T™kð!ð Ð+Ñ,ð!ð 
Ð+Ñ	+ò!óó ó  ð
!ðF  ØØð .2Ø15Ø.2Ø04Ø(,Ø26ØCGØ!%Ø+/ñ/
à×#Ñ# dÑ*ð/
ð ×'Ñ'¨$Ñ.ð/
ð Ÿ™ tÑ+ð	/
ð
 ×&Ñ&¨Ñ-ð/
ð  ™ð/
ð ×(Ñ(¨4Ñ/ð/
ð " D¨¡I™o°°S±	Ñ9¸DÑ@ð/
ð ˜$‘;ð/
ð —\‘\ DÑ(ð/
ð Ð+Ñ,ð/
ð 
Ð,Ñ	,ò/
ó ó ó  ñ/
r   rq   c                   óð  — e Zd Zeee	 ddej                  dej                  de	e
e	   z  e
e	   z  dz  dee   deez  f
d„«       «       «       Ze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j                  dz  dee   deez  fd„«       «       «       Zy)Ú Mistral3ForConditionalGenerationNrs   r2   r^   ru   r3   c                 óB   —  | j                   j                  d|||dœ|¤ŽS )N)rs   r2   r^   r   )Úmodelr‰   )r/   rs   r2   r^   ru   s        r   r‰   z3Mistral3ForConditionalGeneration.get_image_featuresÙ   s5   € ð -ˆt�z‰z×,Ñ,ð 
Ø%Ø#Ø!5ñ
ð ñ	
ð 	
r   rŠ   r‹   rŒ   r�   rŽ   Úlabelsr�   Úlogits_to_keepc                 ó˜  —  | 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 )a1  
        Example:

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

        >>> model = Mistral3ForConditionalGeneration.from_pretrained("mistralai/Mistral-Small-3.1-24B-Instruct-2503")
        >>> processor = AutoProcessor.from_pretrained("mistralai/Mistral-Small-3.1-24B-Instruct-2503")

        >>> prompt = "<s>[INST][IMG]What is the image?[/INST]"
        >>> url = "http://images.cocodataset.org/val2017/000000039769.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, clean_up_tokenization_spaces=False)[0]
        "What is the image?The image depicts two cats lying on a pink blanket."
        ```)rŠ   rs   r‹   rŒ   r�   rŽ   r�   r2   r   N)Úlogitsr¦   Ú
vocab_size)Úlossr©   r�   ri   r’   r“   r   )r¥   r]   r_   ÚsliceÚlm_headÚloss_functionr#   rY   rª   rk   r�   ri   r’   r“   )r/   rŠ   rs   r‹   rŒ   r�   rŽ   r¦   r�   r§   r2   ru   rœ   ri   Úslice_indicesr©   r«   s                    r   rP   z(Mistral3ForConditionalGeneration.forwardê   sö   € ðR �$—*‘*ð 

ØØ%Ø)Ø%Ø+Ø'ØØ#ñ

ð ñ

ˆð   ™
ˆÜ8BÀ>ÔSVÔ8Wœ˜~˜o¨tÔ4Ð]kˆØ—‘˜mªA¨}ºaÐ,?Ñ@ÓAˆàˆØÐØ%�4×%Ñ%ð Ø f¸¿¹×9PÑ9P×9[Ñ9[ñØ_eñˆDô .ØØØ#×3Ñ3Ø!×/Ñ/Ø×)Ñ)Ø '× ;Ñ ;ô
ð 	
r   rh   )
NNNNNNNNr   N)r   r   r   r   r   r	   r@   r�   rR   r_   rž   r   r   r    r   r‰   r¡   r   rŸ   rk   rP   r   r   r   r£   r£   Ø   sµ  „ ØØØð
 DHñ	
à×'Ñ'ð
ð —\‘\ð
ð " D¨¡I™o°°S±	Ñ9¸DÑ@ð	
ð
 Ð+Ñ,ð
ð 
Ð+Ñ	+ò
ó ó ó  ð
ð  ØØð .2Ø15Ø.2Ø04Ø(,Ø26Ø*.Ø!%Ø-.Ø+/ñC
à×#Ñ# dÑ*ðC
ð ×'Ñ'¨$Ñ.ðC
ð Ÿ™ tÑ+ð	C
ð
 ×&Ñ&¨Ñ-ðC
ð  ™ðC
ð ×(Ñ(¨4Ñ/ðC
ð × Ñ  4Ñ'ðC
ð ˜$‘;ðC
ð ˜eŸl™lÑ*ðC
ð —\‘\ DÑ(ðC
ð Ð+Ñ,ðC
ð 
Ð/Ñ	/òC
ó ó ó  ñC
r   r£   )rq   ro   r£   )(r@   r   Úactivationsr   Úcache_utilsr   Úmodeling_outputsr   Úprocessing_utilsr   Úutilsr	   r
   Úutils.genericr   r   Úllava.modeling_llavar   r   r   r   r   r   Úmistral.modeling_mistralr   Úconfiguration_mistral3r   Ú
get_loggerr   Úloggerr   ÚModuler"   rV   rk   rm   ro   rq   r£   Ú__all__r   r   r   ú<module>r½      s¿   ðó  Ý å !Ý  Ý :Ý &ß ,ß I÷÷ õ 6Ý 2ð 
ˆ×	Ñ	˜HÓ	%€ô	�nô 	ô#˜"Ÿ)™)ô #ôL "§)¡)ô ô8	Ð%@ô 	ô	Ð":ô 	ô	Ð2ô 	ô[
�Jô [
ô|X
Ð'Dô X
òv�r   