§
    ‚Štj®/  ã                   ó¾  — 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j        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'dS ) é    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dS )ÚMistral3RMSNormN©Ú__name__Ú
__module__Ú__qualname__© ó    úk/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/mistral3/modular_mistral3.pyr   r   (   ó   € € € € € Ø€Dr   r   c                   óZ   ‡ — 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¬¦  «        | _	        d S )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   ss   ø€ Ý‰Œ×ÒÑÔÐØˆŒàÔ*Ô6ˆØ"(Ô";ˆÔØœ+Ô3Ô>ˆŒÝœY {°TÔ5LÈaÑ5OÑ'OÐQ\ÐchÐiÑiÔiˆÔÐÐr   Úimage_featuresÚimage_sizesÚreturnc                 ó†  ‡ — ˆ fd„|D ¦   «         }d„ |D ¦   «         }|j         d         }g }t          |                     |¦  «        ¦  «        D ]È\  }}||         \  }}	|                     ||	|¦  «                             ddd¦  «                             d¦  «        }
t          j        j         	                    |
‰ j
        ‰ j
        ¬¦  «        }|                     |‰ j
        dz  z  d¦  «                             ¦   «         }|                     |¦  «         ŒÉt          j        |d¬¦  «        }‰                      |¦  «        }|S )	Nc                 óP   •— g | ]"}|d          ‰j         z  |d         ‰j         z  f‘Œ#S )r   r   )r,   )Ú.0Ú
image_sizer/   s     €r   ú
<listcomp>z/Mistral3PatchMerger.forward.<locals>.<listcomp>;   sA   ø€ ð 
ð 
ð 
ØU_ˆZ˜Œ]˜dœoÑ-¨z¸!¬}ÀÄÑ/OÐPð
ð 
ð 
r   c                 ó   — g | ]
\  }}||z  ‘ŒS r   r   )r6   ÚhÚws      r   r8   z/Mistral3PatchMerger.forward.<locals>.<listcomp>?   s    € Ð:Ð:Ð:¡d a¨˜A ™EÐ:Ð:Ð:r   éÿÿÿÿr   r   r   )Úkernel_sizeÚstride©Údim)ÚshapeÚ	enumerateÚsplitÚviewÚpermuteÚ	unsqueezeÚtorchr   Ú
functionalÚunfoldr+   ÚtÚappendÚcatr.   )r/   r1   r2   Útokens_per_imageÚdÚpermuted_tensorÚimage_indexÚimage_tokensr:   r;   Ú
image_gridÚgrids   `           r   ÚforwardzMistral3PatchMerger.forward:   sa  ø€ ð
ð 
ð 
ð 
Øcnð
ñ 
ô 
ˆð ;Ð:¨kÐ:Ñ:Ô:ÐØÔ  Ô$ˆàˆÝ)2°>×3GÒ3GÐHXÑ3YÔ3YÑ)ZÔ)Zð 	)ð 	)Ñ%ˆK˜à˜{Ô+‰DˆAˆqØ%×*Ò*¨1¨a°Ñ3Ô3×;Ò;¸A¸qÀ!ÑDÔD×NÒNÈqÑQÔQˆJÝ”8Ô&×-Ò-Ø¨Ô(?ÈÔH_ð .ñ ô ˆDð —9’9˜Q Ô!8¸!Ñ!;Ñ;¸RÑ@Ô@×BÒBÑDÔDˆDØ×"Ò" 4Ñ(Ô(Ð(Ð(åœ ?¸Ð:Ñ:Ô:ˆØ×+Ò+¨NÑ;Ô;ˆØÐr   )
r   r   r   Ú__doc__r   r(   rG   ÚTensorrT   Ú__classcell__©r0   s   @r   r"   r"   ,   s†   ø€ € € € € ðð ðj˜~ð jð jð jð jð jð jð e¤lð ÀÄð ÐRWÔR^ð ð ð ð ð ð ð ð r   r"   c                   óH   ‡ — 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        ¬¦  «        | _        d S )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Ô$DÈ&ÔJ\ÔJiÐjÑjÔjˆŒ	Ý/°Ñ7Ô7ˆÔõ ˜FÔ7½Ñ=Ô=ÐcˆAˆAÅ3ÀvÔGbÑCcÔCcð 	Ôõ œ	ØÔ Ô,¨tÔ/FÑFØÔÔ*ØÔ1ð
ñ 
ô 
ˆŒõ
 ˜&Ô5Ô6ˆŒÝœ	ØÔÔ*¨FÔ,>Ô,JÐQWÔQqð
ñ 
ô 
ˆŒˆˆr   r1   r2   c                 óÚ   — |                       |¦  «        }|                      ||¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }|S ©N)r_   r`   rg   ri   rj   )r/   r1   r2   Úhidden_statess       r   rT   z#Mistral3MultiModalProjector.forwarde   sa   € ØŸš >Ñ2Ô2ˆØ×*Ò*¨>¸;ÑGÔGˆØŸš nÑ5Ô5ˆØŸš Ñ/Ô/ˆØŸš mÑ4Ô4ˆØÐr   )	r   r   r   r   r(   rG   rV   rT   rW   rX   s   @r   rZ   rZ   R   sj   ø€ € € € € ð
˜~ð 
ð 
ð 
ð 
ð 
ð 
ð$ e¤lð ÀÄð ð ð ð ð ð ð ð r   rZ   c                   ó   — e Zd ZdS )ÚMistral3CausalLMOutputWithPastNr   r   r   r   ro   ro   n   r    r   ro   c                   ó   — e Zd ZdS )ÚMistral3ModelOutputWithPastNr   r   r   r   rq   rq   r   r    r   rq   c                   ó   — e Zd ZdS )ÚMistral3PreTrainedModelNr   r   r   r   rs   rs   v   r    r   rs   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dS )ÚMistral3ModelzWObtains image last hidden states from the vision tower and apply multimodal projection.)Úcustom_introNÚpixel_valuesr2   rb   Úoutput_hidden_statesÚkwargsr3   c                 ó`  ‡— d„ |                      ¦   «         D ¦   «         } | j        |f|dddœ|¤ŽŠt          |t          ¦  «        r‰j        |         }n$ˆfd„|D ¦   «         }t          j        |d¬¦  «        }|                      |                     d¦  «        |¦  «        }| j        j	        | j
        j        z  }	t          j        ||j        ¬¦  «        |	z                       d¬¦  «                             ¦   «         }
t          j        |                     d¦  «        |
¦  «        }|‰_        ‰S )	Nc                 ó   — i | ]
\  }}|®||“ŒS rl   r   )r6   ÚkÚvs      r   ú
<dictcomp>z4Mistral3Model.get_image_features.<locals>.<dictcomp>ˆ   s   € ÐCÐCÐC™4˜1˜a°Q°]�!�Q°]°]°]r   T)r2   rx   Úreturn_dictc                 ó*   •— g | ]}‰j         |         ‘ŒS r   )rm   )r6   Ú	layer_idxÚimage_outputss     €r   r8   z4Mistral3Model.get_image_features.<locals>.<listcomp>–   s!   ø€ ÐdÐdÐdÀ)�}Ô2°9Ô=ÐdÐdÐdr   r<   r?   r   )Údevice)ÚitemsÚvision_towerra   rc   rm   rG   rL   Úmulti_modal_projectorÚsqueezer,   r#   r+   Ú	as_tensorrƒ   ÚprodÚtolistrC   Úpooler_output)r/   rw   r2   rb   rx   ry   Úselected_image_featureÚhs_poolr1   Údownsample_ratioÚsplit_sizesr‚   s              @r   Úget_image_featuresz Mistral3Model.get_image_features{   sU  ø€ ð DÐC 6§<¢<¡>¤>ÐCÑCÔCˆà)˜Ô)Øð
à#Ø!%Øð	
ð 
ð
 ð
ð 
ˆõ Ð*­CÑ0Ô0ð 	@Ø%2Ô%@ÐAUÔ%VÐ"Ð"àdÐdÐdÐdÐOcÐdÑdÔdˆGÝ%*¤Y¨w¸BÐ%?Ñ%?Ô%?Ð"à×3Ò3Ð4J×4RÒ4RÐSTÑ4UÔ4UÐWbÑcÔcˆØÔ,Ô7¸$¼+Ô:XÑXÐåŒ_˜[°Ô1FÐGÑGÔGÐK[Ñ[×aÒaÐfhÐaÑiÔi×pÒpÑrÔrð 	õ œ ^×%;Ò%;¸AÑ%>Ô%>ÀÑLÔLˆØ&4ˆÔ#àÐr   Ú	input_idsÚattention_maskÚposition_idsÚpast_key_valuesÚinputs_embedsÚ	use_cachec
           	      óò  — |d u |d uz  rt          d¦  «        ‚|€ |                      ¦   «         |¦  «        }|�€|                      |||	d¬¦  «        j        }t	          j        |d¬¦  «                             |j        |j        ¦  «        }|  	                    |||¬¦  «        }| 
                    ||¦  «        } | j        d	|||||dœ|
¤Ž}t          |j        |j        |j        |j        |�|nd ¬¦  «        S )
Nz:You must specify exactly one of input_ids or inputs_embedsT)rw   rb   r2   r   r   r?   )r•   r1   )r’   r“   r”   r•   r–   )Úlast_hidden_stater”   rm   Ú
attentionsÚimage_hidden_statesr   )Ú
ValueErrorÚget_input_embeddingsr�   r‹   rG   rL   Útorƒ   ÚdtypeÚget_placeholder_maskÚmasked_scatterÚlanguage_modelrq   r˜   r”   rm   r™   )r/   r‘   rw   r’   r“   r”   r•   rb   r–   r2   ry   r1   Úspecial_image_maskÚoutputss                 r   rT   zMistral3Model.forward£   s\  € ð  ˜Ð -°tÐ";Ñ<ð 	[ÝÐYÑZÔZÐZàÐ Ø7˜D×5Ò5Ñ7Ô7¸	ÑBÔBˆMàÐ#Ø!×4Ò4Ø)Ø%9Ø'Ø ð	 5ñ ô ô
 ð õ #œY ~¸1Ð=Ñ=Ô=×@Ò@ÀÔAUÐWdÔWjÑkÔkˆNØ!%×!:Ò!:Ø¨À~ð ";ñ "ô "Ðð *×8Ò8Ð9KÈ^Ñ\Ô\ˆMà%�$Ô%ð 
Ø)Ø%Ø+Ø'Øð
ð 
ð ð
ð 
ˆõ +Ø%Ô7Ø#Ô3Ø!Ô/ØÔ)Ø2>Ð2J  ÐPTð
ñ 
ô 
ð 	
r   )NN)	NNNNNNNNN)r   r   r   r   r   r	   rG   ÚFloatTensorrV   rc   ÚlistÚboolr   r   Útupler   r�   Ú
LongTensorr   rq   rT   r   r   r   ru   ru   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   ru   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dS )Ú Mistral3ForConditionalGenerationNrw   r2   rb   ry   r3   c                 ó.   —  | j         j        d|||dœ|¤ŽS )N)rw   r2   rb   r   )Úmodelr�   )r/   rw   r2   rb   ry   s        r   r�   z3Mistral3ForConditionalGeneration.get_image_featuresÙ   s:   € ð -ˆtŒzÔ,ð 
Ø%Ø#Ø!5ð
ð 
ð ð	
ð 
ð 	
r   r   r‘   r’   r“   r”   r•   Úlabelsr–   Úlogits_to_keepc                 ól  —  | j         d||||||||
dœ|¤Ž}|d         }t          |	t          ¦  «        rt          |	 d¦  «        n|	}|                      |dd…|dd…f         ¦  «        }d}|�  | 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‘   rw   r’   r“   r”   r•   r–   r2   r   N)Úlogitsr­   Ú
vocab_size)Úlossr°   r”   rm   r™   rš   r   )r¬   ra   rc   ÚsliceÚlm_headÚloss_functionr#   r]   r±   ro   r”   rm   r™   rš   )r/   r‘   rw   r’   r“   r”   r•   r­   r–   r®   r2   ry   r£   rm   Úslice_indicesr°   r²   s                    r   rT   z(Mistral3ForConditionalGeneration.forwardê   s  € ðR �$”*ð 

ØØ%Ø)Ø%Ø+Ø'ØØ#ð

ð 

ð ð

ð 

ˆð   œ
ˆÝ8BÀ>ÕSVÑ8WÔ8WÐk�˜~˜o¨tÑ4Ô4Ð4Ð]kˆØ—’˜m¨A¨A¨A¨}¸a¸a¸aÐ,?Ô@ÑAÔAˆàˆØÐØ%�4Ô%ð Ø f¸¼Ô9PÔ9[ðð Ø_eðð ˆDõ .ØØØ#Ô3Ø!Ô/ØÔ)Ø 'Ô ;ð
ñ 
ô 
ð 	
r   rl   )
NNNNNNNNr   N)r   r   r   r   r   r	   rG   r¤   rV   rc   r¥   r   r   r§   r   r�   r¨   r   r¦   ro   rT   r   r   r   rª   rª   Ø   sà  € € € € € ØØØð
 DHð	
ð 
àÔ'ð
ð ”\ð
ð " D¨¤I™o°°S´	Ñ9¸DÑ@ð	
ð
 Ð+Ô,ð
ð 
Ð+Ñ	+ð
ð 
ð 
ñ „^ñ Ôñ  Ôð
ð  ØØð .2Ø15Ø.2Ø04Ø(,Ø26Ø*.Ø!%Ø-.Ø+/ðC
ð C
àÔ# dÑ*ðC
ð Ô'¨$Ñ.ðC
ð œ tÑ+ð	C
ð
 Ô&¨Ñ-ðC
ð  ™ðC
ð Ô(¨4Ñ/ðC
ð Ô  4Ñ'ðC
ð ˜$‘;ðC
ð ˜eœlÑ*ðC
ð ”\ DÑ(ðC
ð Ð+Ô,ðC
ð 
Ð/Ñ	/ðC
ð C
ð C
ñ „^ñ Ôñ  ÔðC
ð C
ð C
r   rª   )ru   rs   rª   )(rG   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"   rZ   ro   rq   rs   ru   rª   Ú__all__r   r   r   ú<module>rÄ      s¤  ðð  €€€Ø Ð Ð Ð Ð Ð à !Ð !Ð !Ð !Ð !Ð !Ø  Ð  Ð  Ð  Ð  Ð  Ø :Ð :Ð :Ð :Ð :Ð :Ø &Ð &Ð &Ð &Ð &Ð &Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø IÐ IÐ IÐ IÐ IÐ IÐ IÐ Iðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð 6Ð 5Ð 5Ð 5Ð 5Ð 5Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2ð 
ˆÔ	˜HÑ	%Ô	%€ð	ð 	ð 	ð 	ð 	�nñ 	ô 	ð 	ð#ð #ð #ð #ð #˜"œ)ñ #ô #ð #ðLð ð ð ð  "¤)ñ ô ð ð8	ð 	ð 	ð 	ð 	Ð%@ñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	Ð":ñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	Ð2ñ 	ô 	ð 	ð[
ð [
ð [
ð [
ð [
�Jñ [
ô [
ð [
ð|X
ð X
ð X
ð X
ð X
Ð'Dñ X
ô X
ð X
ðvð ð €€€r   