
    
i                         d Z ddlmZ ddlmZ ddlmZmZmZ ddl	m
Z
mZmZ ddlmZmZ  ej                   e      Z G d ded	
      Ze G d de             ZdgZy)zq
Processor class for InstructBLIP. Largely copy of Blip2Processor with addition of a tokenizer for the Q-Former.
   )BatchFeature)
ImageInput)ProcessingKwargsProcessorMixinUnpack)
AddedTokenPreTokenizedInput	TextInput)auto_docstringloggingc                   (    e Zd Zddddddddddd	iZy)InstructBlipProcessorKwargstext_kwargsTF    )	add_special_tokenspaddingstridereturn_overflowing_tokensreturn_special_tokens_maskreturn_offsets_mappingreturn_token_type_idsreturn_lengthverboseN)__name__
__module____qualname__	_defaults     t/mnt/e/genesis-system/.venv/lib/python3.12/site-packages/transformers/models/instructblip/processing_instructblip.pyr   r      s,    "&).*/&+%*"

Ir   r   F)totalc            
            e Zd Zd	 fd	Ze	 	 d
dedz  deez  ee   z  ee   z  de	e
   defd       Zed        Z xZS )InstructBlipProcessorNc                     t        |d      s2t        ddd      | _        |j                  | j                  gd       n|j                  | _        || _        t
        |   |||       y)a4  
        qformer_tokenizer (`AutoTokenizer`):
            An instance of ['PreTrainedTokenizer`]. The Q-Former tokenizer is a required input.
        num_query_tokens (`int`, *optional*):
            "
            Number of tokens used by the Qformer as queries, should be same as in model's config.
        image_tokenz<image>FT)
normalizedspecial)special_tokensN)hasattrr   r%   
add_tokensnum_query_tokenssuper__init__)selfimage_processor	tokenizerqformer_tokenizerr+   kwargs	__class__s         r    r-   zInstructBlipProcessor.__init__.   sd     y-0))tTD  $"2"2!3D I(44D 0)5FGr   imagestextr2   returnc                    ||t        d       | j                  t        fd| j                  j                  i|}|d   j                  dd       }i }|Kt        |t              r|g}n.t        |t              st        |d   t              st        d       | j                  |fi |d   }|j                  d      |d<   |j                  d	      |d
<   |d   j                  d      |d   dxx   | j                  z  cc<    | j                  |fi |d   }|t| j                  j                  | j                  z  }	d|d   d<   d|d   d<   d|d   d<    | j                  |	fi |d   }
|D ]  }||   D cg c]
  }|
|   |z    c}||<     |j                  |       |' | j                  |fi |d   }|j                  |       t!        ||      }|S c c}w )Nz,You have to specify at least images or text.tokenizer_init_kwargsr   return_tensorsr   zAInvalid input text. Please provide a string, or a list of strings	input_idsqformer_input_idsattention_maskqformer_attention_mask
max_lengthFr   r   
truncationimages_kwargs)tensor_type)
ValueError_merge_kwargsr   r0   init_kwargspop
isinstancestrlistr1   getr+   r%   contentupdater/   r   )r.   r4   r5   r2   output_kwargsr9   encodingqformer_text_encodingtext_encodingimage_tokensimage_text_encodingksampleimage_encodings                 r    __call__zInstructBlipProcessor.__call__?   s1    >dlKLL***'
"&.."<"<
 
 '}599:JDQ$$vd+JtAw4L !dee$:D$:$:4$`=Q^C_$`!,A,E,Ek,RH()1F1J1JK[1\H-. ]+//=Im,\:d>S>SS:*DNN4P=3OPM!#//77$:O:OOEJm,-AB:?m,Y7=Bm,\:&4dnn\&b]S`Ea&b#& hAVcdeVf'gF(;A(>(G'gM!$hOOM*1T11&[M/<Z[NOON+  nE (hs   :Gc                 r    | j                   j                  }| j                  j                  }ddg}||z   |z   S )Nr;   r=   )r0   model_input_namesr/   )r.   tokenizer_input_namesimage_processor_input_namesqformer_input_namess       r    rW   z'InstructBlipProcessor.model_input_namess   sB     $ @ @&*&:&:&L&L#24LM$'BBEXXXr   )N)NN)r   r   r   r-   r   r   r
   r	   rH   r   r   r   rU   propertyrW   __classcell__)r3   s   @r    r#   r#   ,   s    H"  %)Z^1T!1 ++d9o=EV@WW1 45	1
 
1 1f Y Yr   r#   N)__doc__image_processing_utilsr   image_utilsr   processing_utilsr   r   r   tokenization_utils_baser   r	   r
   utilsr   r   
get_loggerr   loggerr   r#   __all__r   r   r    <module>rf      sp    3 % H H O O , 
		H	%"2%   KYN KY KY\ #
#r   