o
    i6                     @   sx   d dl mZ d dl mZ ddlmZ ddlmZ ddlZddlZddlZG dd dZ	G d	d
 d
ej
jZdddZdS )   )hunyuan_video)sd3_clip    )sd1_clip)	sdxl_clipNc                   @   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 )HiDreamTokenizerNc                 C   sL   t j||d| _tj||d| _tj|dd|d| _t	j
|dd|d| _d S )N)embedding_directorytokenizer_data   )r   
min_length
max_lengthr	   	 )r   r   	pad_tokenr	   )r   SDTokenizerclip_lr   SDXLClipGTokenizerclip_gr   T5XXLTokenizert5xxlr   LLAMA3Tokenizerllama)selfr   r	    r   9/mnt/c/Users/fbmor/ComfyUI/comfy/text_encoders/hidream.py__init__   s   zHiDreamTokenizer.__init__Ftextc                 K   sz   i }| j j||fi ||d< | jj||fi ||d< | jj||fi |}|d g|d< | jj||fi ||d< |S )Nglr   r   r   )r   tokenize_with_weightsr   r   r   )r   r   return_word_idskwargsoutr   r   r   r   r      s   z&HiDreamTokenizer.tokenize_with_weightsc                 C   s   | j |S N)r   
untokenize)r   token_weight_pairr   r   r   r#      s   zHiDreamTokenizer.untokenizec                 C   s   i S r"   r   r   r   r   r   
state_dict   s   zHiDreamTokenizer.state_dict)F)__name__
__module____qualname__r   strr   r#   r&   r   r   r   r   r   
   s
    	r   c                	       sP   e Zd Zddddddddi f	 fdd	Zdd Zdd	 Zd
d Zdd Z  ZS )HiDreamTEModelTNcpuc
           
   
      s  t    t | _|rtj||d|	d| _| j| nd | _|r1tj	|||	d| _
| j| nd | _
|rOtj|||}tj|||	dd| _| j| nd | _|rztj|||}d|	vrdd|	d< tj|||	dd dd	d
d| _| j| nd | _td|||||| d S )NT)devicedtypereturn_projected_pooledmodel_options)r-   r.   r0   )r-   r.   r0   attention_mask
vocab_sizei  alli  r   )startpad)r-   r.   r0   layer	layer_idxspecial_tokenszQCreated HiDream text encoder with: clip_l {}, clip_g {}, t5xxl {}:{}, llama {}:{})superr   setdtypesr   SDClipModelr   addr   	SDXLClipGr   comfymodel_managementpick_weight_dtyper   
T5XXLModelr   r   
LLAMAModelr   loggingdebugformat)
r   r   r   t5r   dtype_t5dtype_llamar-   r.   r0   	__class__r   r   r   "   s.   
zHiDreamTEModel.__init__c                 C   s`   | j d ur| j | | jd ur| j| | jd ur!| j| | jd ur.| j| d S d S r"   )r   set_clip_optionsr   r   r   )r   optionsr   r   r   rL   C   s   



zHiDreamTEModel.set_clip_optionsc                 C   sX   | j d ur
| j   | jd ur| j  | jd ur| j  | jd ur*| j  d S d S r"   )r   reset_clip_optionsr   r   r   r%   r   r   r   rN   M   s   






z!HiDreamTEModel.reset_clip_optionsc                 C   s  |d }|d }|d }|d }d }d }i }t |dks"t |dkr[| jd ur0| j|\}}	n
tjdtj d}	| jd urH| j|\}
}n
tjdtj d}tj	|	|fd	d
}| j
d uro| j
|}|d d \}}nd }| jd ur| j|}|d d \}}|d d dd f }nd }|d u rtjdtj d}|d u rtjdtj d}|d u rtjdtj d}||d< |||fS )Nr   r   r   r   r   )r   i   )r-   )r   i   )dim   r   )r   r
      )r       r   rR   )r   i   conditioning_llama3)lenr   encode_token_weightstorchzerosr?   r@   intermediate_devicer   catr   r   )r   token_weight_pairstoken_weight_pairs_ltoken_weight_pairs_gtoken_weight_pairs_t5token_weight_pairs_llamalg_outpooledextral_pooledg_outg_pooled	t5_outputt5_out	t5_pooled	ll_outputll_out	ll_pooledr   r   r   rV   W   s@   




z#HiDreamTEModel.encode_token_weightsc                 C   sH   d|v r
| j |S d|v r| j|S d|v r| j|S | j|S )Nz+text_model.encoder.layers.30.mlp.fc1.weightz*text_model.encoder.layers.1.mlp.fc1.weightz3encoder.block.23.layer.1.DenseReluDense.wi_1.weight)r   load_sdr   r   r   )r   sdr   r   r   rl      s   zHiDreamTEModel.load_sd)	r'   r(   r)   r   rL   rN   rV   rl   __classcell__r   r   rJ   r   r+   !   s     !

/r+   Tc           	   	      s&   G  fdddt }|S )Nc                
       s4   e Zd Zddi f f	dd	Z  ZS )z%hidream_clip.<locals>.HiDreamTEModel_r,   Nc                    sR   d ur|  }|d< d ur|  }|d< t j|||d	 d S )Nt5xxl_quantization_metadatallama_quantization_metadata)	r   r   rG   r   rH   rI   r-   r.   r0   )copyr9   r   )r   r-   r.   r0   )	rK   r   r   rI   rH   r   rp   rG   t5_quantization_metadatar   r   r      s   "z.hidream_clip.<locals>.HiDreamTEModel_.__init__)r'   r(   r)   r   rn   r   r   r   rI   rH   r   rp   rG   rr   rJ   r   HiDreamTEModel_   s    ,rt   )r+   )	r   r   rG   r   rH   rI   rr   rp   rt   r   rs   r   hidream_clip   s   "	ru   )TTTTNNNN) r   r   r?   r   r   comfy.model_managementrW   rD   r   nnModuler+   ru   r   r   r   r   <module>   s    p