
    Ng                    `    d dl mZ d dlZd dlZd dlmZ d dlmZ  G d dej                  ZdS )    )annotationsN)Image)nnc                       e Zd ZU dZded<   dd fd
ZddZddZdddZe	dd            Z
ddZed d            Z xZS )!	CLIPModelTboolsave_in_rootopenai/clip-vit-base-patch32N
model_namestrreturnNonec                    t                                                       ||}t          j                            |          | _        t          j                            |          | _        d S N)super__init__transformersr   from_pretrainedmodelCLIPProcessor	processor)selfr   processor_name	__class__s      b/var/www/html/ai-engine/env/lib/python3.11/site-packages/sentence_transformers/models/CLIPModel.pyr   zCLIPModel.__init__   sX    !'N!+;;JGG
%3CCNSS    c                    dS )NzCLIPModel() r   s    r   __repr__zCLIPModel.__repr__   s    }r   featuresdict[str, torch.Tensor]c           
     B   g }g }d|v rA| j                             |d                   }| j                             |d                   }d|v r| j                             |                    d          |                    dd           |                    dd           |                    dd           |                    dd           	          }| j                             |d                   }g }t          |          }t          |          }t          |d
                   D ]P\  }	}
|
dk    r#|                    t          |                     .|                    t          |                     Qt          j        |                                          |d<   |S )Npixel_values)r$      	input_idsattention_maskposition_idsoutput_attentionsoutput_hidden_states)r&   r'   r(   r)   r*   image_text_infor   sentence_embedding)r   vision_modelvisual_projection
text_modelgettext_projectioniter	enumerateappendnexttorchstackfloat)r   r!   image_embedstext_embedsvision_outputstext_outputsr,   image_featurestext_featuresidx
input_types              r   forwardzCLIPModel.forward   s   X%%!Z44(>BZ4[[N:77q8IJJL("":00",,{33'||,<dCC%\\.$??"*,,/BD"I"I%-\\2H$%O%O 1  L *44\!_EEKl++[))(2C)DEE 	? 	?OCQ"))$~*>*>????"))$}*=*=>>>>).5G)H)H)N)N)P)P%&r   padding
str | boolc                   g }g }g }t          |          D ]t\  }}t          |t          j                  r+|                    |           |                    d           J|                    |           |                    d           ui }t	          |          r| j                            |d|          }t	          |          r&| j                            |d          }	|	j        |d<   ||d<   t          |          S )Nr   r%   pt)return_tensorsrB   )rF   r$   r+   )
r3   
isinstancer   r4   lenr   	tokenizerimage_processorr$   dict)
r   textsrB   imagestexts_valuesr+   r?   dataencodingr=   s
             r   tokenizezCLIPModel.tokenize8   s   "5)) 	* 	*IC$,, *d###&&q))))##D)))&&q))))| 	d~//T[b/ccHv;; 	C!^;;FSW;XXN'5'BH^$&5"#H~~r   transformers.CLIPProcessorc                    | j         S r   )r   r   s    r   rI   zCLIPModel.tokenizerP   s
    ~r   output_pathc                n    | j                             |           | j                            |           d S r   )r   save_pretrainedr   )r   rT   s     r   savezCLIPModel.saveT   s4    
"";///&&{33333r   
input_pathc                "    t          |           S )N)r   )r   )rX   s    r   loadzCLIPModel.loadX   s    J////r   )r
   N)r   r   r   r   )r   r   )r!   r"   r   r"   )T)rB   rC   r   r"   )r   rR   )rT   r   r   r   )rX   r   r   r   )__name__
__module____qualname__r	   __annotations__r   r    rA   rQ   propertyrI   rW   staticmethodrZ   __classcell__)r   s   @r   r   r   	   s         LT T T T T T T      @    0    X4 4 4 4 0 0 0 \0 0 0 0 0r   r   )	
__future__r   r6   r   PILr   r   Moduler   r   r   r   <module>re      s    " " " " " "                 Q0 Q0 Q0 Q0 Q0	 Q0 Q0 Q0 Q0 Q0r   