
    Ch                        S SK Jr   S SKJr  S SKrS SKrS SKJ	r	  S SK
Jr   " S S\5      rg! \ a	    S SKJr   N.f = f)    )annotations)SelfN)Image)InputModulec                     ^  \ rS rSr% SrS\S'   SSU 4S jjjrSS jr\SS j5       r	\	R                  SS j5       r	SS	 jrSSS
 jjr\SS j5       rSS.SS jjr\     S             SS jj5       rSrU =r$ )	CLIPModel   Tboolsave_in_rootc                   > [         TU ]  5         Uc  Un[        R                  R	                  U5      U l        [        R                  R	                  U5      U l        g N)super__init__transformersr   from_pretrainedmodelCLIPProcessor	processor)self
model_nameprocessor_name	__class__s      ^/var/www/html/shao/venv/lib/python3.13/site-packages/sentence_transformers/models/CLIPModel.pyr   CLIPModel.__init__   sI    !'N!++;;JG
%33CCNS    c                    g)NzCLIPModel() r   s    r   __repr__CLIPModel.__repr__   s    r   c                B    U R                   R                  R                  $ r   r   	tokenizermodel_max_lengthr   s    r   max_seq_lengthCLIPModel.max_seq_length   s    ~~''888r   c                8    XR                   R                  l        g r   r"   )r   values     r   r%   r&   "   s    49  1r   c           
        / n/ nSU;   a:  U R                   R                  US   S9nU R                   R                  US   5      nSU;   a  U R                   R                  UR	                  S5      UR	                  SS 5      UR	                  SS 5      UR	                  SS 5      UR	                  SS 5      S	9nU R                   R                  US   5      n/ n[        U5      n[        U5      n[        US
   5       HA  u  pU
S:X  a  UR                  [        U5      5        M'  UR                  [        U5      5        MC     [        R                  " U5      R                  5       US'   U$ )Npixel_values)r*      	input_idsattention_maskposition_idsoutput_attentionsoutput_hidden_states)r,   r-   r.   r/   r0   image_text_infor   sentence_embedding)r   vision_modelvisual_projection
text_modelgettext_projectioniter	enumerateappendnexttorchstackfloat)r   featuresimage_embedstext_embedsvision_outputstext_outputsr2   image_featurestext_featuresidx
input_types              r   forwardCLIPModel.forward&   sO   X%!ZZ44(>BZ4[N::77q8IJL("::00",,{3'||,<dC%\\.$?"*,,/BD"I%-\\2H$%O 1 L **44\!_EKl+[)(2C)DEOCQ"))$~*>?"))$}*=>	  F */5G)H)N)N)P%&r   c                   / n/ n/ n[        U5       Hj  u  pg[        U[        R                  5      (       a$  UR                  U5        UR                  S5        MH  UR                  U5        UR                  S5        Ml     0 n[	        U5      (       a  U R
                  R                  XBSSS9n[	        U5      (       a)  U R
                  R                  USS9n	U	R                  US'   XXS'   [        U5      $ )	Nr   r+   Tpt)padding
truncationreturn_tensors)rN   r*   r1   )
r9   
isinstancer   r:   lenr   r#   image_processorr*   dict)
r   textsrL   imagestexts_valuesr1   rF   dataencodingrD   s
             r   tokenizeCLIPModel.tokenizeF   s    "5)IC$,,d#&&q)##D)&&q) * |~~//Z^os/tHv;;!^^;;FSW;XN'5'B'BH^$&5"#H~r   c                    U R                   $ r   )r   r   s    r   r#   CLIPModel.tokenizer^   s    ~~r   safe_serializationc               l    U R                   R                  XS9  U R                  R                  U5        g )Nr\   )r   save_pretrainedr   )r   output_pathr]   argskwargss        r   saveCLIPModel.saveb   s)    

"";"V&&{3r   c           	     :    U R                  UUUUUUS9nU " U5      $ )N)model_name_or_path	subfoldertokencache_folderrevisionlocal_files_only)load_dir_path)	clsrf   rg   rh   ri   rj   rk   rb   
local_paths	            r   loadCLIPModel.loadf   s7     &&1%- ' 

 :r   )r   r   )zopenai/clip-vit-base-patch32N)r   strreturnNone)rr   rq   )rr   int)r(   rt   rr   rs   )r?   dict[str, torch.Tensor]rr   ru   )T)rL   z
str | boolrr   ru   )rr   ztransformers.CLIPProcessor)r`   rq   r]   r
   rr   rs   ) NNNF)rf   rq   rg   rq   rh   zbool | str | Noneri   
str | Nonerj   rw   rk   r
   rr   r   )__name__
__module____qualname____firstlineno__r   __annotations__r   r   propertyr%   setterrH   rX   r#   rc   classmethodro   __static_attributes____classcell__)r   s   @r   r   r      s    L$T T 9 9 : :@0   HL 4  #'#'#!&  !	
 !   
 r   r   )
__future__r   typingr   ImportErrortyping_extensionsr<   r   PILr   #sentence_transformers.models.Routerr   r   r   r   r   <module>r      s@    "'    ;j j  '&'s   . ==