a
    dg                     @   sV   d dl mZmZmZ d dlmZ d dlmZ d dlm	Z	m
Z
mZ G dd de	eZdS )    )AnyDictList)
Embeddings)
get_fields)	BaseModel
ConfigDictmodel_validatorc                   @   s   e Zd ZU dZeed< eed< eed< dZeed< dZeed< e	d	d
Z
eddeeedddZee eee  dddZeee dddZee eee  dddZdS )OpenCLIPEmbeddingszOpenCLIP Embeddings model.model
preprocess	tokenizerzViT-H-14
model_nameZlaion2b_s32b_b79k
checkpoint )Zprotected_namespacesbefore)mode)valuesreturnc           	      C   s   znddl }|dt| d j}|dt| d j}|j||d\}}}||}||d< ||d< ||d< W n ty   td	Y n0 |S )
z:Validate that open_clip and torch libraries are installed.r   Nr   r   )r   Z
pretrainedr   r   r   zaPlease ensure both open_clip and torch libraries are installed. pip install open_clip_torch torch)	open_clipgetr   defaultZcreate_model_and_transformsZget_tokenizerImportError)	clsr   r   r   r   r   _r   r   r   r   x/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/langchain_experimental/open_clip/open_clip.pyvalidate_environment   s     

z'OpenCLIPEmbeddings.validate_environment)textsr   c           	      C   sZ   g }|D ]L}|  |}| j|}|jdddd}||}|d }|| q|S )N      TpdimZkeepdimr   )r   r   Zencode_textnormdivsqueezetolistappend)	selfr   Ztext_featurestextZtokenized_textembeddings_tensorr#   normalized_embeddings_tensorembeddings_listr   r   r   embed_documents/   s    

z"OpenCLIPEmbeddings.embed_documents)r)   r   c                 C   s   |  |gd S )Nr   )r-   )r(   r)   r   r   r   embed_queryB   s    zOpenCLIPEmbeddings.embed_query)urisr   c           
         s   zddl m  W n ty*   tdY n0  fdd|D }g }|D ]R}| |d}| j|}|jdddd	}||}|	d
 }	||	 qF|S )
Nr   )Imagez2Please install the PIL library: pip install pillowc                    s   g | ]}  |qS r   )open).0uriZ	_PILImager   r   
<listcomp>L       z2OpenCLIPEmbeddings.embed_image.<locals>.<listcomp>r   r   Tr    )ZPILr0   r   r   Z	unsqueezer   Zencode_imager#   r$   r%   r&   r'   )
r(   r/   Z
pil_imagesZimage_featuresZ	pil_imageZpreprocessed_imager*   r#   r+   r,   r   r4   r   embed_imageE   s    
zOpenCLIPEmbeddings.embed_imageN)__name__
__module____qualname____doc__r   __annotations__r   strr   r   Zmodel_configr	   classmethodr   r   r   floatr-   r.   r7   r   r   r   r   r
      s   

r
   N)typingr   r   r   Zlangchain_core.embeddingsr   Zlangchain_core.utils.pydanticr   Zpydanticr   r   r	   r
   r   r   r   r   <module>   s   