o
    iv                     @   s   d dl mZ ddlmZ d dlZ d dlmZ d dlZ G dd dejZ	G dd	 d	e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G dd dejZG dd dejZdddZdS )    )sd1_clip   )SPieceTokenizerN)Gemma3_Tokenizerc                       s*   e Zd Zdi f fdd	Zdd Z  ZS )Gemma2BTokenizerNc                    sB   | dd }ddi}t j|dddtddddd	d|d
|d d S )Nspiece_model<end_of_turn>k   Fi 	  	gemma2_2br   Tadd_bosadd_eosspecial_tokens)
pad_with_endembedding_sizeembedding_keytokenizer_classhas_end_tokenpad_to_max_length
max_length
min_lengthtokenizer_argstokenizer_datagetsuper__init__r   selfembedding_directoryr   	tokenizerr   	__class__ 9/mnt/c/Users/fbmor/ComfyUI/comfy/text_encoders/lumina2.pyr      s   .zGemma2BTokenizer.__init__c                 C   s   d| j  iS )Nr   )r!   serialize_model)r   r$   r$   r%   
state_dict   s   zGemma2BTokenizer.state_dict)__name__
__module____qualname__r   r'   __classcell__r$   r$   r"   r%   r      s    r   c                       "   e Zd Zdi f fdd	Z  ZS )Gemma3_4BTokenizerNc                    sF   | dd }ddd}t j|dddtdddd	d
d|dd
|d d S )Nr   i   j   )z<image_soft_token>r   Fi 
  	gemma3_4br   r   Tr   )r   r   r   r   r   r   r   r   r   disable_weightsr   r   r   r"   r$   r%   r      s   
0zGemma3_4BTokenizer.__init__r(   r)   r*   r   r+   r$   r$   r"   r%   r-          r-   c                       r,   )LuminaTokenizerNc                       t  j||dtd d S )Nr
   r    r   namer!   )r   r   r   r   r    r   r"   r$   r%   r         zLuminaTokenizer.__init__r1   r$   r$   r"   r%   r3      r2   r3   c                       r,   )
NTokenizerNc                    r4   )Nr/   r5   )r   r   r-   r7   r"   r$   r%   r      r8   zNTokenizer.__init__r1   r$   r$   r"   r%   r9      r2   r9   c                       *   e Zd Zdddddi f fdd	Z  ZS )Gemma2_2BModelcpuhiddenNTc                    s2   t  j|||i |ddddtjjj|||d d S )N   r   startpadFdevicelayer	layer_idxtextmodel_json_configdtyper   layer_norm_hidden_statemodel_classenable_attention_masksreturn_attention_masksmodel_options)r   r   comfytext_encodersllama	Gemma2_2B)r   rD   rE   rF   rH   attention_maskrM   r"   r$   r%   r      s   2zGemma2_2BModel.__init__r1   r$   r$   r"   r%   r;          "r;   c                       r:   )Gemma3_4BModelr<   r=   r>   NTc                    V   | dd }|d ur| }||d< t j|||i |ddddtjjj|||d d S Nllama_quantization_metadataquantization_metadatar?   r   r@   FrC   )r   copyr   r   rN   rO   rP   	Gemma3_4Br   rD   rE   rF   rH   rR   rM   rW   r"   r$   r%   r   #   
   2zGemma3_4BModel.__init__r1   r$   r$   r"   r%   rT   "   rS   rT   c                       s6   e Zd Zdddddi f fdd	Z fdd	Z  ZS )
Gemma3_4B_Vision_Modelr<   r=   r>   NTc                    rU   rV   )r   rY   r   r   rN   rO   rP   Gemma3_4B_Visionr[   r"   r$   r%   r   ,   r\   zGemma3_4B_Vision_Model.__init__c                    s6   t  ||\}}}}tj||| jjjjd  |S )Ng      ?)	r   process_tokensrN   utilsnormalize_image_embeddingstransformermodelconfighidden_size)r   tokensrD   embeds_embeds_infor"   r$   r%   r_   4   s   z%Gemma3_4B_Vision_Model.process_tokens)r(   r)   r*   r   r_   r+   r$   r$   r"   r%   r]   +   s    r]   c                       s(   e Zd Zddi def fdd	Z  ZS )LuminaModelr<   Nr
   c                    s   t  j|||||d d S )N)rD   rH   r6   
clip_modelrM   )r   r   )r   rD   rH   rM   r6   rk   r"   r$   r%   r   :   s   zLuminaModel.__init__)r(   r)   r*   r;   r   r+   r$   r$   r"   r%   rj   9   s     rj   r
   c                    sF   dkrt ndkrtndkrtG  fdddt}|S )Nr
   r/   gemma3_4b_visionc                       s,   e Zd Zddi f fdd	Z  ZS )zte.<locals>.LuminaTEModel_r<   Nc                    s>   d ur|  }|d< d ur}t j|||d d S )NrX   )rD   rH   r6   rM   rk   )rY   r   r   )r   rD   rH   rM   )r#   dtype_llamarW   rc   
model_typer$   r%   r   G   s   z#te.<locals>.LuminaTEModel_.__init__r1   r$   rm   rW   rc   rn   r"   r%   LuminaTEModel_F   s    $rp   )r;   rT   r]   rj   )rm   rW   rn   rp   r$   ro   r%   te>   s   rq   )NNr
   )rN   r   spiece_tokenizerr   comfy.text_encoders.llamacomfy.text_encoders.ltr   comfy.utilsSDTokenizerr   r-   SD1Tokenizerr3   r9   SDClipModelr;   rT   r]   SD1ClipModelrj   rq   r$   r$   r$   r%   <module>   s    		