o
    il                     @   s   d dl mZ d dlZd dlZG dd dejZG dd dejZG dd dZG d	d
 d
ej	j
ZG dd dejZG dd dejZG dd dejZG dd dejZG dd dejZdS )    )sd1_clipNc                       s8   e Zd Zddddddi f fdd	Z fdd	Z  ZS )
	SDXLClipGcpuM   TpenultimateNc           	         sj   |dkrd}d}t jt jt jtd}i |ddi}t j||||||ddd	d
dd|d
 d S )Nr   hiddenclip_config_bigg.json
model_nameclip_g    r   startendpadFT)
devicefreezelayer	layer_idxtextmodel_json_configdtypespecial_tokenslayer_norm_hidden_statereturn_projected_pooledmodel_optionsospathjoindirnamerealpath__file__super__init__	selfr   
max_lengthr   r   r   r   r   r   	__class__ -/mnt/c/Users/fbmor/ComfyUI/comfy/sdxl_clip.pyr$      s   
zSDXLClipG.__init__c                       t  |S Nr#   load_sdr&   sdr(   r*   r+   r/         zSDXLClipG.load_sd__name__
__module____qualname__r$   r/   __classcell__r*   r*   r(   r+   r      s    
r   c                       $   e Zd Zddi f fdd	Z  ZS )SDXLClipGTokenizerNc                       t  j|d|dd|d d S )NF   r   pad_with_endembedding_directoryembedding_sizeembedding_keytokenizer_datar#   r$   r&   tokenizer_pathr>   rA   r(   r*   r+   r$         zSDXLClipGTokenizer.__init__r4   r5   r6   r$   r7   r*   r*   r(   r+   r9          r9   c                   @   s:   e Zd Zdi fddZddefddZdd	 Zd
d ZdS )SDXLTokenizerNc                 C   s"   t j||d| _t||d| _d S )N)r>   rA   )r   SDTokenizerclip_lr9   r   r&   r>   rA   r*   r*   r+   r$      s   zSDXLTokenizer.__init__Ftextc                 K   s<   i }| j j||fi ||d< | jj||fi ||d< |S )Ngl)r   tokenize_with_weightsrJ   )r&   rL   return_word_idskwargsoutr*   r*   r+   rO      s   z#SDXLTokenizer.tokenize_with_weightsc                 C   s   | j |S r-   )r   
untokenize)r&   token_weight_pairr*   r*   r+   rS   #   r2   zSDXLTokenizer.untokenizec                 C   s   i S r-   r*   r&   r*   r*   r+   
state_dict&   s   zSDXLTokenizer.state_dict)F)r4   r5   r6   r$   strrO   rS   rV   r*   r*   r*   r+   rH      s
    rH   c                       sD   e Zd Zddi f fdd	Zdd Zdd Zd	d
 Zdd Z  ZS )SDXLClipModelr   Nc                    sB   t    tjdd||d|d| _t|||d| _t|g| _d S )Nr   r   F)r   r   r   r   r   r   )r   r   r   )	r#   r$   r   SDClipModelrJ   r   r   setdtypesr&   r   r   r   r(   r*   r+   r$   *   s   
zSDXLClipModel.__init__c                 C   s   | j | | j| d S r-   )rJ   set_clip_optionsr   )r&   optionsr*   r*   r+   r]   0   s   zSDXLClipModel.set_clip_optionsc                 C   s   | j   | j  d S r-   )r   reset_clip_optionsrJ   rU   r*   r*   r+   r_   4   s   
z SDXLClipModel.reset_clip_optionsc           	      C   s|   |d }|d }| j |\}}| j|\}}t|jd |jd }tj|d d d |f |d d d |f gdd|fS )NrM   rN      )dim)r   encode_token_weightsrJ   minshapetorchcat)	r&   token_weight_pairstoken_weight_pairs_gtoken_weight_pairs_lg_outg_pooledl_outl_pooledcut_tor*   r*   r+   rc   8   s   6z"SDXLClipModel.encode_token_weightsc                 C   s    d|v r
| j |S | j|S )Nz+text_model.encoder.layers.30.mlp.fc1.weight)r   r/   rJ   r0   r*   r*   r+   r/   @   s   zSDXLClipModel.load_sd)	r4   r5   r6   r$   r]   r_   rc   r/   r7   r*   r*   r(   r+   rX   )   s    rX   c                       $   e Zd Zddi f fdd	Z  ZS )SDXLRefinerClipModelr   Nc                       t  j||dt|d d S NrM   )r   r   	clip_name
clip_modelr   )r#   r$   r   r\   r(   r*   r+   r$   G      zSDXLRefinerClipModel.__init__rF   r*   r*   r(   r+   rq   F   rG   rq   c                       r8   )StableCascadeClipGTokenizerNc                    r:   )NTr;   r   r<   rB   rC   r(   r*   r+   r$   L   rE   z$StableCascadeClipGTokenizer.__init__rF   r*   r*   r(   r+   rw   K   rG   rw   c                       s"   e Zd Zdi f fdd	Z  ZS )StableCascadeTokenizerNc                    s   t  j||dtd d S )NrM   )r>   rA   rt   	tokenizer)r#   r$   rw   rK   r(   r*   r+   r$   P   s   zStableCascadeTokenizer.__init__rF   r*   r*   r(   r+   rx   O   s    rx   c                       s8   e Zd Zddddddi f fdd	Z fd	d
Z  ZS )StableCascadeClipGr   r   Tr   ra   Nc           	         s\   t jt jt jtd}i |ddi}t j||||||ddddddd|d	 d S )
Nr	   r
   r   r   r   r   FT)r   r   r   r   r   r   r   r   enable_attention_masksr   r   r   r%   r(   r*   r+   r$   T   s
   
zStableCascadeClipG.__init__c                    r,   r-   r.   r0   r(   r*   r+   r/   Z   r2   zStableCascadeClipG.load_sdr3   r*   r*   r(   r+   rz   S   s    rz   c                       rp   )StableCascadeClipModelr   Nc                    rr   rs   )r#   r$   rz   r\   r(   r*   r+   r$   ^   rv   zStableCascadeClipModel.__init__rF   r*   r*   r(   r+   r|   ]   rG   r|   )comfyr   rf   r   rY   r   rI   r9   rH   nnModulerX   SD1ClipModelrq   rw   SD1Tokenizerrx   rz   r|   r*   r*   r*   r+   <module>   s    
