
    <h                         S SK Jr  S SKJrJr  S SKrS SKrSSKJr  SSK	J
r
  SSKJr  SSKJrJr  S	S
KJr  SSKJr  \R(                  " \5      r\ " S S\
5      5       r\ " S S\5      5       rS/rg)    )	dataclass)OptionalUnionN   )Cache)$ImageClassifierOutputWithNoAttention)PreTrainedModel)auto_docstringlogging   )AutoModelForImageTextToText   )ShieldGemma2Configc                   B    \ rS rSr% SrSr\\R                     \	S'   Sr
g)0ShieldGemma2ImageClassifierOutputWithNoAttention$   zVShieldGemma2 classifies imags as violative or not relative to a specific policy
Args:
Nprobabilities )__name__
__module____qualname____firstlineno____doc__r   r   torchTensor__annotations____static_attributes__r       n/var/www/html/shao/venv/lib/python3.13/site-packages/transformers/models/shieldgemma2/modeling_shieldgemma2.pyr   r   $   s     -1M8ELL)0r   r   c                      ^  \ rS rSr% \\S'   SSSSS.rS\4U 4S jjrS	 rS
 r	S r
S rS rS rS r\              S!S\\R$                     S\\R&                     S\\R(                     S\\R$                     S\\\\R&                     \4      S\\R$                     S\\R$                     S\\R&                     S\\R$                     S\\   S\\   S\\   S\\   S\\\R(                  4   S\4S jj5       rS rU =r$ )""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U ]  US9  [        USS5      U l        [        USS5      U l        [
        R                  " US9U l        g )N)r#   yes_token_indexi *  no_token_indexi  )super__init__getattrr%   r&   r   from_configmodel)selfr#   	__class__s     r   r(   +ShieldGemma2ForImageClassification.__init__7   sI    '&v/@&I%f.>E0<<FK
r   c                 J    U R                   R                  R                  5       $ N)r+   language_modelget_input_embeddingsr,   s    r   r2   7ShieldGemma2ForImageClassification.get_input_embeddings=   s    zz((==??r   c                 N    U R                   R                  R                  U5        g r0   )r+   r1   set_input_embeddings)r,   values     r   r6   7ShieldGemma2ForImageClassification.set_input_embeddings@   s    

!!66u=r   c                 J    U R                   R                  R                  5       $ r0   )r+   r1   get_output_embeddingsr3   s    r   r:   8ShieldGemma2ForImageClassification.get_output_embeddingsC   s    zz((>>@@r   c                 N    U R                   R                  R                  U5        g r0   )r+   r1   set_output_embeddings)r,   new_embeddingss     r   r=   8ShieldGemma2ForImageClassification.set_output_embeddingsF   s    

!!77Gr   c                 N    U R                   R                  R                  U5        g r0   )r+   r1   set_decoder)r,   decoders     r   rA   .ShieldGemma2ForImageClassification.set_decoderI   s    

!!--g6r   c                 J    U R                   R                  R                  5       $ r0   )r+   r1   get_decoderr3   s    r   rE   .ShieldGemma2ForImageClassification.get_decoderL       zz((4466r   c                 J    U R                   R                  R                  5       $ r0   )r+   r1   tie_weightsr3   s    r   rI   .ShieldGemma2ForImageClassification.tie_weightsO   rG   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                     U R                   " SUUUUUUUUU	U
UUUUS.UD6nUR                  nUSS2SU R                  U R                  /4   n[        R
                  " USS9n[        UUS9$ )a  
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.
)rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   N)dim)logitsr   r   )r+   r]   r%   r&   r   softmaxr   )r,   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   	lm_kwargsoutputsr]   selected_logitsr   s                       r   forward*ShieldGemma2ForImageClassification.forwardR   s    N ** 
%)%+))'/!5#)
 
"  B)=)=t?R?R(S!STo2>?"'
 	
r   )r+   r&   r%   )NNNNNNNNNNNNNr   )r   r   r   r   r   r   _checkpoint_conversion_mappingr(   r2   r6   r:   r=   rA   rE   rI   r
   r   r   
LongTensorFloatTensorr   r   listr   boolintr   rb   r   __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>rw      s     " "     D - / : 
		H	% 17[ 1 1 b
 b
 b
L )r   