
    EQh                        d dl mZ d dlZd dlZd dlZd dlmZ d dlZd dlm	Z	 d dl
mZ  G d deej                  ej                        Zy)    )annotationsN)Tuple)CLIPProcessor)PredictPluginc                  b     e Zd Zd
 fdZd Zd ZddZ fdZd fd	ZddZ	ddZ
dd	Z xZS )ClipEmbeddingc                T   t         |   ||       d| _        d| _        i | _        t        j                         | _        d| _        | j                         | _
        t        j                  dt        j                  j                  t        j                   d   dd            | _        y )	N)nativeIdplugin   g      ?zopenai/clip-vit-base-patch32SCRYPTED_PLUGIN_VOLUMEfileshf)	cache_dir)super__init__
inputwidthinputheightlabelsasyncioget_event_looploopminThreshold	initModelmodelr   from_pretrainedospathjoinenviron	processor)selfr   r
   	__class__s      B/server/volume/plugins/@scrypted/onnx/zip/unzipped/predict/clip.pyr   zClipEmbedding.__init__   s    (6:**,	^^%
&66*ggll2::.F#GRVW
    c                     y N r"   s    r$   getFileszClipEmbedding.getFiles       r%   c                    g }| j                         D ]9  }d|z   }| j                  || j                   d|       }|j                  |       ; | j	                  |      S )Nz0https://huggingface.co/koushd/clip/resolve/main//)r*   downloadFileidappend	loadModel)r"   local_filesfileremote_file	localFiles        r$   r   zClipEmbedding.initModel"   sf    !#MMO 	*DLtSK))+$''!D67JKIy)	* ~~k**r%   c                     y r'   r(   )r"   r   s     r$   r1   zClipEmbedding.loadModel*   r+   r%   c                V   K   t         |   |d        d {   }|d   d   d   S 7 w)N
detectionsr   	embedding)r   detectObjects)r"   inputr8   r#   s      r$   getImageEmbeddingzClipEmbedding.getImageEmbedding-   s5      70==
,'*;77 >s   )')c                   K   t         |   ||       d {   }|d   d   d   }t        j                  |      j	                  d      |d   d   d<   |S 7 >w)Nr8   r   r9   zutf-8)r   r:   base64	b64encodedecode)r"   mediaObjectsessionretr9   r#   s        r$   r:   zClipEmbedding.detectObjects1   sd     G)+w??%a(5	,2,<,<Y,G,N,Nw,WL![)
 @s   AA?Ac                4    | j                   | j                  dfS )N   r   r   r)   s    r$   get_input_detailszClipEmbedding.get_input_details8   s    !1!1155r%   c                2    | j                   | j                  fS r'   rF   r)   s    r$   get_input_sizezClipEmbedding.get_input_size;   s    !1!122r%   c                     y)Nrgbr(   r)   s    r$   get_input_formatzClipEmbedding.get_input_format>   s    r%   )r   r   r
   str)r   z	list[str]r'   )returnzTuple[int, int, int])rN   zTuple[float, float])rN   rM   )__name__
__module____qualname__r   r*   r   r1   r<   r:   rG   rI   rL   __classcell__)r#   s   @r$   r   r      s0    
 +863r%   r   )
__future__r   r   r>   r   typingr   scrypted_sdktransformersr   predictr   TextEmbeddingImageEmbeddingr   r(   r%   r$   <module>rZ      s9    "   	   & !1M<#=#=|?Z?Z 1r%   