
    3j                         S SK J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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)    )	dataclassN   )Cache)$ImageClassifierOutputWithNoAttention)PreTrainedModel)auto_docstringcan_return_tuplelogging   )AutoModelForImageTextToText   )ShieldGemma2Configc                   B    \ rS rSr% SrSr\R                  S-  \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   torchTensor__annotations____static_attributes__r       p/home/wildlama/miniconda3/lib/python3.13/site-packages/transformers/models/shieldgemma2/modeling_shieldgemma2.pyr   r   "   s     *.M5<<$&-r   r   c                     ^  \ rS rSr% \\S'   SrSrSrSr	Sr
SrS\4U 4S jjrS rS rS	 rS
 r\\             SS\R(                  S-  S\R*                  S-  S\R,                  S-  S\R(                  S-  S\S-  S\R(                  S-  S\R*                  S-  S\R(                  S-  S\S-  S\S-  S\S-  S\S-  S\\R,                  -  S\4S jj5       5       rSrU =r$ )"ShieldGemma2ForImageClassification+   config)imagetextmodelTc                    > [         TU ]  US9  [        USS5      U l        [        USS5      U l        [
        R                  " US9U l        U R                  5         g )N)r"   yes_token_indexi *  no_token_indexi  )	super__init__getattrr'   r(   r   from_configr%   	post_init)selfr"   	__class__s     r   r*   +ShieldGemma2ForImageClassification.__init__5   sS    '&v/@&I%f.>E0<<FK
r   c                 R    U R                   R                  5       R                  5       $ N)r%   get_decoderget_input_embeddingsr.   s    r   r4   7ShieldGemma2ForImageClassification.get_input_embeddings<   s    zz%%'<<>>r   c                 V    U R                   R                  5       R                  U5        g r2   )r%   r3   set_input_embeddings)r.   values     r   r8   7ShieldGemma2ForImageClassification.set_input_embeddings?   s    

 55e<r   c                 R    U R                   R                  5       R                  5       $ r2   )r%   r3   get_output_embeddingsr5   s    r   r<   8ShieldGemma2ForImageClassification.get_output_embeddingsB   s    zz%%'==??r   c                 V    U R                   R                  5       R                  U5        g r2   )r%   r3   set_output_embeddings)r.   new_embeddingss     r   r?   8ShieldGemma2ForImageClassification.set_output_embeddingsE   s    

 66~Fr   N	input_idspixel_valuesattention_maskposition_idspast_key_valuestoken_type_ids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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.
)rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   N)dim)logitsr   r   )r%   rS   r'   r(   r   softmaxr   )r.   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   	lm_kwargsoutputsrS   selected_logitsr   s                      r   forward*ShieldGemma2ForImageClassification.forwardH   s    N ** 
%)%+)'/!5#)
 
   B)=)=t?R?R(S!STo2>?"'
 	
r   )r%   r(   r'   )NNNNNNNNNNNNr   )r   r   r   r   r   r   input_modalitiesbase_model_prefix_supports_flash_attn_supports_sdpa_supports_flex_attn_supports_attention_backendr*   r4   r8   r<   r?   r   r	   r   
LongTensorFloatTensorr   r   boolintr   rX   r   __classcell__)r/   s   @r   r    r    +   s   (N"&1 ?=@G  .215.204(,2626*.!%)-,0#'-.;
##d*;
 ''$.;
 t+	;

 &&-;
 ;
 ((4/;
 ((4/;
   4';
 $;;
  $;;
 #Tk;
 D[;
 ell*;
  
:!;
  ;
r   r    )dataclassesr   r   cache_utilsr   modeling_outputsr   modeling_utilsr   utilsr   r	   r
   autor   configuration_shieldgemma2r   
get_loggerr   loggerr   r    __all__r   r   r   <module>ro      s    "    D - 
 / : 
		H	% .7[ . . Y
 Y
 Y
z )r   