
    rh                         d dl mZ d dl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  ej(                  e      Ze G d de
             Ze G d de             ZdgZy)    )	dataclass)OptionalUnionN   )Cache)$ImageClassifierOutputWithNoAttention)PreTrainedModel)auto_docstringlogging   )AutoModelForImageTextToText   )ShieldGemma2Configc                   :    e Zd ZU dZdZeej                     ed<   y)0ShieldGemma2ImageClassifierOutputWithNoAttentionz^ShieldGemma2 classifies imags as violative or not relative to a specific policy
    Args:
    Nprobabilities)	__name__
__module____qualname____doc__r   r   torchTensor__annotations__     /var/www/html/ai-insurance-compliance-backend/venv/lib/python3.12/site-packages/transformers/models/shieldgemma2/modeling_shieldgemma2.pyr   r   $   s     -1M8ELL)0r   r   c                        e Zd ZU eed<   dddddZdef fdZd Zd	 Zd
 Z	d Z
d Zd Zd Ze	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddeej"                     deej$                     deej&                     deej"                     deeeej$                     ef      deej"                     deej"                     deej$                     deej"                     dee   dee   dee   dee   deeej&                  f   defd       Z xZS ) "ShieldGemma2ForImageClassificationconfigzmodel.model.language_modelzmodel.model.vision_towerz!model.model.multi_modal_projectorzmodel.lm_head)zmodel.language_model.modelzmodel.vision_towerzmodel.multi_modal_projectorzmodel.language_model.lm_headc                     t         |   |       t        |dd      | _        t        |dd      | _        t        j                  |      | _        y )N)r   yes_token_indexi *  no_token_indexi  )super__init__getattrr!   r"   r   from_configmodel)selfr   	__class__s     r   r$   z+ShieldGemma2ForImageClassification.__init__7   sI    '&v/@&I%f.>E0<<FK
r   c                 J    | j                   j                  j                         S N)r'   language_modelget_input_embeddingsr(   s    r   r-   z7ShieldGemma2ForImageClassification.get_input_embeddings=   s    zz((==??r   c                 N    | j                   j                  j                  |       y r+   )r'   r,   set_input_embeddings)r(   values     r   r0   z7ShieldGemma2ForImageClassification.set_input_embeddings@   s    

!!66u=r   c                 J    | j                   j                  j                         S r+   )r'   r,   get_output_embeddingsr.   s    r   r3   z8ShieldGemma2ForImageClassification.get_output_embeddingsC   s    zz((>>@@r   c                 N    | j                   j                  j                  |       y r+   )r'   r,   set_output_embeddings)r(   new_embeddingss     r   r5   z8ShieldGemma2ForImageClassification.set_output_embeddingsF   s    

!!77Gr   c                 N    | j                   j                  j                  |       y r+   )r'   r,   set_decoder)r(   decoders     r   r8   z.ShieldGemma2ForImageClassification.set_decoderI   s    

!!--g6r   c                 J    | j                   j                  j                         S r+   )r'   r,   get_decoderr.   s    r   r;   z.ShieldGemma2ForImageClassification.get_decoderL       zz((4466r   c                 J    | j                   j                  j                         S r+   )r'   r,   tie_weightsr.   s    r   r>   z.ShieldGemma2ForImageClassification.tie_weightsO   r<   r   	input_idspixel_valuesattention_maskposition_idspast_key_valuestoken_type_idscache_positioninputs_embedslabels	use_cacheoutput_attentionsoutput_hidden_statesreturn_dictlogits_to_keepreturnc                      | j                   d|||||||||	|
||||d|}|j                  }|ddd| j                  | j                  gf   }t	        j
                  |d      }t        ||      S )aY  
        Returns:
            A `ShieldGemma2ImageClassifierOutputWithNoAttention` instance containing the logits and probabilities
            associated with the model predicting the `Yes` or `No` token as the response to that prompt, captured in the
            following properties.

                *   `logits` (`torch.Tensor` of shape `(batch_size, 2)`):
                    The first position along dim=1 is the logits for the `Yes` token and the second position along dim=1 is
                    the logits for the `No` token.
                *   `probabilities` (`torch.Tensor` of shape `(batch_size, 2)`):
                    The first position along dim=1 is the probability of predicting the `Yes` token and the second position
                    along dim=1 is the probability of predicting the `No` token.

            ShieldGemma prompts are constructed such that predicting the `Yes` token means the content *does violate* the
            policy as described. If you are only interested in the violative condition, use
            `violated = outputs.probabilities[:, 1]` to extract that slice from the output tensors.

            When used with the `ShieldGemma2Processor`, the `batch_size` will be equal to `len(images) * len(policies)`,
            and the order within the batch will be img1_policy1, ... img1_policyN, ... imgM_policyN.
        )r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   N)dim)logitsr   r   )r'   rQ   r!   r"   r   softmaxr   )r(   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   	lm_kwargsoutputsrQ   selected_logitsr   s                       r   forwardz*ShieldGemma2ForImageClassification.forwardR   s    N $** 
%)%+))'/!5#)
 
"  B)=)=t?R?R(S!STo2>?"'
 	
r   )NNNNNNNNNNNNNr   )r   r   r   r   r   _checkpoint_conversion_mappingr$   r-   r0   r3   r5   r8   r;   r>   r
   r   r   
LongTensorFloatTensorr   r   listr   boolintr   rV   __classcell__)r)   s   @r   r   r   -   s   &B8'J(7	&"L1 L@>AH777  15481537KO595959-1$(,0/3&*34=
E,,-=
 u001=
 !.	=

 u//0=
 "%U->->(?(F"GH=
 !!1!12=
 !!1!12=
   1 12=
 ))*=
 D>=
 $D>=
 'tn=
 d^=
 c5<</0=
" 
:#=
 =
r   r   )dataclassesr   typingr   r   r   torch.utils.checkpointcache_utilsr   modeling_outputsr   modeling_utilsr	   utilsr
   r   autor   configuration_shieldgemma2r   
get_loggerr   loggerr   r   __all__r   r   r   <module>rj      s     " "     D - / : 
		H	% 17[ 1 1 b
 b
 b
L )r   