§
    �M§j'  ã                   ó   — d dl mZ d dlZd dlmZ d dlmZ d dlZd dlm	Z	 d dl
mZ d dlmZ d dlmZmZmZ d dlmZ d d	lmZmZ g d
¢ZdZdZdefd„Z ed¬¦  «        dedeeef         fd„¦   «         Zdefd„Z G d„ de	j         ¦  «        Z!dS )é    )Útext_encoding_progressN)Ú	lru_cache)ÚList)Úinit_empty_weights)Ú	rearrange)Ú
AutoConfigÚAutoTokenizerÚQwen3ForCausalLM)Úoffload)Úhas_standard_gguf_tensor_namesÚremap_state_dict_triplet)é	   é   é   i   zmodel.embed_tokens.weightÚreturnc                 ó:   — | r	t           | v rdS t          | ¦  «        S )NF)Ú_HF_TOKEN_EMBEDDING_KEYr   )Ú
state_dicts    úNC:\Users\johnn\OneDrive\Documents\AI\models\flux\modules\text_encoder_qwen3.pyÚ_qwen3_gguf_mapping_neededr      s(   € Øð Õ0°JÐ>Ð>ØˆuÝ)¨*Ñ5Ô5Ð5ó    é   )ÚmaxsizeÚconfig_pathc                 óº   — t          j        | d¬¦  «        }t          ¦   «         5  t          |¦  «        }d d d ¦  «         n# 1 swxY w Y   ddlm}  ||¦  «        S )NT)Úlocal_files_onlyr   )Úget_gguf_hf_weights_map)r   Úfrom_pretrainedr   r
   Ú(transformers.modeling_gguf_pytorch_utilsr   )r   ÚconfigÚmodelr   s       r   Ú_qwen3_gguf_name_mapr"      s¨   € åÔ'¨ÀdÐKÑKÔK€FÝ	Ñ	Ô	ð )ð )Ý  Ñ(Ô(ˆð)ð )ð )ñ )ô )ð )ð )ð )ð )ð )ð )øøøð )ð )ð )ð )àPÐPÐPÐPÐPÐPà"Ð" 5Ñ)Ô)Ð)s   ¥AÁAÁAc                 óR   ‡ — t           j                             ‰ ¦  «        Š dˆ fd„	}|S )Nc                 óœ   •— t          | ¦  «        s| ||fS t          ‰¦  «        }t          | |||¦  «        \  }}}t          |vr| ||fS |||fS )N)r   r"   r   r   )r   Úquantization_mapÚtied_weights_mapÚname_mapÚmapped_state_dictÚmapped_quantization_mapÚmapped_tied_weights_mapr   s          €r   Úpreprocess_state_dictzC_build_qwen3_state_dict_preprocessor.<locals>.preprocess_state_dict'   s‚   ø€ Ý)¨*Ñ5Ô5ð 	BØÐ/Ð1AÐAÐAå'¨Ñ4Ô4ˆÝNfØÐ(Ð*:¸HñO
ô O
ÑKÐÐ2Ð4Kõ #Ð*;Ð;Ð;ØÐ/Ð1AÐAÐAà Ð"9Ð;RÐRÐRr   )NN)ÚosÚpathÚabspath)r   r+   s   ` r   Ú$_build_qwen3_state_dict_preprocessorr/   $   sB   ø€ Ý”'—/’/ +Ñ.Ô.€KðSð Sð Sð Sð Sð Sð !Ð r   c                   ó‚   ‡ — e Zd Z	 	 	 d	dedz  dedz  defˆ fd„Z ej        ¦   «         dee         fd„¦   «         Zˆ xZ	S )
ÚQwen3EmbedderNÚbfloat16Ú
model_specÚtokenizer_pathÚtorch_dtypec           	      ó  •— t          ¦   «                              ¦   «          |}|pt          j                             |¦  «        }t          j                             |d¦  «        }t          j        |dt          |t          |¦  «        ¬¦  «        | _
        |}t          j                             |d¦  «        }t          j                             |¦  «        r|}t          j        |d¬¦  «        | _        t          | _        d S )Nzconfig.jsonF)Úwritable_tensorsÚ
modelClassÚdefaultConfigPathÚpreprocess_sdÚ	tokenizerT)Útrust_remote_code)ÚsuperÚ__init__r,   r-   ÚdirnameÚjoinr   Úfast_load_transformers_modelr
   r/   r!   Úisdirr	   r   r;   Ú
MAX_LENGTHÚ
max_length)
Úselfr3   r4   r5   Ú	file_pathÚside_files_rootÚdefault_configÚtokenizer_rootÚtokenizer_subdirÚ	__class__s
            €r   r>   zQwen3Embedder.__init__8   sÙ   ø€ õ 	‰Œ×ÒÑÔÐØˆ	Ø(ÐF­B¬G¯OªO¸IÑ,FÔ,FˆÝœŸš o°}ÑEÔEˆÝÔ9ØØ"Ý'Ø,Ý>¸~ÑNÔNð
ñ 
ô 
ˆŒ
ð )ˆÝœ7Ÿ<š<¨¸ÑDÔDÐÝŒ7�=Š=Ð)Ñ*Ô*ð 	.Ø-ˆNÝ&Ô6°~ÐY]Ð^Ñ^Ô^ˆŒÝ$ˆŒˆˆr   Útxtc                 óþ  ‡— g }g }|D ]{}d|dœg}| j                              |ddd¬¦  «        }|                       |ddd| j        ¬¦  «        }|                     |d	         ¦  «         |                     |d
         ¦  «         Œ|t	          j        |d¬¦  «                             | j        j        ¦  «        }t	          j        |d¬¦  «                             | j        j        ¦  «        }	t          | j        j        j
        t          |¦  «        ¬¦  «        5  |                      ||	dd¬¦  «        Šd d d ¦  «         n# 1 swxY w Y   t	          j        ˆfd„t          D ¦   «         d¬¦  «        }
t          |
d¦  «        S )NÚuser)ÚroleÚcontentFT)ÚtokenizeÚadd_generation_promptÚenable_thinkingÚptrD   )Úreturn_tensorsÚpaddingÚ
truncationrD   Ú	input_idsÚattention_maskr   )Údim)Úprompt_count)rX   rY   Úoutput_hidden_statesÚ	use_cachec                 ó*   •— g | ]}‰j         |         ‘ŒS © )Úhidden_states)Ú.0ÚkÚoutputs     €r   ú
<listcomp>z)Qwen3Embedder.forward.<locals>.<listcomp>t   s!   ø€ ÐJÐJÐJ°q˜6Ô/°Ô2ÐJÐJÐJr   é   zb c l d -> b l (c d))r;   Úapply_chat_templaterD   ÚappendÚtorchÚcatÚtor!   Údevicer   ÚlayersÚlenÚstackÚOUTPUT_LAYERSr   )rE   rL   Úall_input_idsÚall_attention_masksÚpromptÚmessagesÚtextÚmodel_inputsrX   rY   Úoutrc   s              @r   ÚforwardzQwen3Embedder.forwardQ   sà  ø€ àˆØ Ðàð 	Gð 	GˆFØ!'°FÐ;Ð;Ð<ˆHØ”>×5Ò5ØØØ&*Ø %ð	 6ñ ô ˆDð  Ÿ>š>ØØ#Ø$ØØœ?ð *ñ ô ˆLð × Ò  ¨kÔ!:Ñ;Ô;Ð;Ø×&Ò& |Ð4DÔ'EÑFÔFÐFÐFå”I˜m°Ð3Ñ3Ô3×6Ò6°t´zÔ7HÑIÔIˆ	ÝœÐ#6¸AÐ>Ñ>Ô>×AÒAÀ$Ä*ÔBSÑTÔTˆå# D¤JÔ$4Ô$;Í#ÈcÉ(Ì(ÐSÑSÔSð 	ð 	Ø—Z’ZØ#Ø-Ø%)Øð	  ñ ô ˆFð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	õ ŒkÐJÐJÐJÐJ½MÐJÑJÔJÐPQÐRÑRÔRˆÝ˜Ð4Ñ5Ô5Ð5s   ÄD=Ä=EÅE)NNr2   )
Ú__name__Ú
__module__Ú__qualname__Ústrr>   rh   Úno_gradr   rw   Ú__classcell__)rK   s   @r   r1   r1   7   s¤   ø€ € € € € ð "&Ø%)Ø%ð	%ð %à˜$‘Jð%ð ˜d™
ð%ð ð	%ð %ð %ð %ð %ð %ð2 €U„]�_„_ð#6˜4 œ9ð #6ð #6ð #6ñ „_ð#6ð #6ð #6ð #6ð #6r   r1   )"Úshared.utils.phase_progressr   r,   Ú	functoolsr   Útypingr   rh   Útorch.nnÚnnÚ
accelerater   Úeinopsr   Útransformersr   r	   r
   Úmmgpr   Úshared.utils.gguf_mappingr   r   ro   rC   r   Úboolr   r{   Údictr"   r/   ÚModuler1   r_   r   r   ú<module>r‹      s�  ðØ >Ð >Ð >Ð >Ð >Ð >Ø 	€	€	€	Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à €€€Ø Ð Ð Ð Ð Ð Ø )Ð )Ð )Ð )Ð )Ð )Ø Ð Ð Ð Ð Ð Ø DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ Dà Ð Ð Ð Ð Ð Ø ^Ð ^Ð ^Ð ^Ð ^Ð ^Ð ^Ð ^à��€Ø€
Ø5Ð ð6¨dð 6ð 6ð 6ð 6ð €�1ÐÑÔð* cð *¨d°3¸°8¬nð *ð *ð *ñ Ôð*ð!°cð !ð !ð !ð !ð&>6ð >6ð >6ð >6ð >6�B”Iñ >6ô >6ð >6ð >6ð >6r   