
    uliD                       U d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlmZmZ d dlmZmZ d dlmZ d dlmZ d dlm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z& d dl'Z(dej)        vr:ej*        +                    d	 e, ee-          j.        j.        d
z                       d dl/Z/d dl/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5 e rd dl6m7Z7m8Z8  ej9        d          Z: e;ed          r! e;ed          r ej<        ej=                   dZ>de?d<   e/j@        jA        ZBdZCdZDdZE ed           G d d                      ZF ed           G d deF                      ZG eGd e(jH        e(jI                  ddg          ZJ eGd e(jH        e(jK                  ddg          ZL eGd  e(jH        e(jM                  g           ZN eGd! e(jH        e(jO                  g d"          ZP ed           G d# d$eF                      ZQ ed           G d% d&eQ                      ZR eRd e(jH        e(jK                  g e/jS        jT        d' e(jH        d(d)g          *          ZUi ZVd+e?d,<   ePeJeLeNfD ]#ZWeWjH        eVv r eXd-eW           eWeVeWjH        <   $ePeJeLeNd.ZYd/e?d0<    G d1 d2ejZ                  Z[e[j\        eLe[j]        eJe[j^        eUiZ_d3e?d4<   e G d5 d6                      Z`dd<Za G d= d>e          ZbddAZc G dB dCeb          ZddddJZeedZfe G dK dF                      ZgdLZhde?dM<   e%dN         Zide?dO<   e G dP dQ                      ZjddTZkddWZlddXZmddZZndd[Zodd^Zpe G d_ d`                      Zqe G da db                      Zr G dc ddejs                  ZtddiZuddkZvddnZw ejx        do          ddp            Zy e&dq          Zz e&dr          Z{ddd|Z|dddZ} G d d          Z~ddZddZddZddZddZddZddZ G d d          ZddZddZddZdddZedk    r e             dS dS )    )annotationsN)ABCabstractmethod)ProcessPoolExecutorThreadPoolExecutor)	dataclass)Path)TYPE_CHECKINGAnyCallableIOIterableLiteralTypeVarNO_LOCAL_GGUF   zgguf-py)	BaseVocabVocabNoVocabBpeVocabSentencePieceVocabLlamaHfVocab)Self	TypeAliasconvertregisterSIGUSR1znp.ndarray[Any, Any]r   NDArray   zadded_tokens.jsonztokenizer.jsonT)frozenc                  6    e Zd ZU ded<   ded<   ded<   dd
ZdS )DataTypestrnamenp.dtype[Any]dtype	list[str]valid_conversions
n_elementsintreturnc                     || j         j        z  S N)r&   itemsizeselfr)   s      examples/convert_legacy_llama.pyelements_to_byteszDataType.elements_to_bytesB   s    DJ///    Nr)   r*   r+   r*   )__name__
__module____qualname____annotations__r2    r3   r1   r"   r"   <   sK         III    0 0 0 0 0 0r3   r"   c                      e Zd ZdS )UnquantizedDataTypeN)r5   r6   r7   r9   r3   r1   r;   r;   F   s        Dr3   r;   F16F32Q8_0)r&   r(   I32BF16)r=   r<   r>   c                  >    e Zd ZU ded<   ded<   ded<   dd
ZddZdS )QuantizedDataTyper*   
block_sizer%   quantized_dtypezgguf.GGMLQuantizationType	ggml_typearrr   r+   c                2    t          d| j         d          )NzQuantization for z not implemented)NotImplementedErrorr$   )r0   rF   s     r1   quantizezQuantizedDataType.quantizeW   s    !"Qdi"Q"Q"QRRRr3   r)   c                    || j         z  dk    sJ d| d| j         d| j                      | j        j        || j         z  z  S )Nr   zInvalid number of elements z for z with block size )rC   r$   rD   r.   r/   s     r1   r2   z#QuantizedDataType.elements_to_bytesZ   sy    DO+q000  3OPZ  3O  3Oaeaj  3O  3O  ~B  ~M  3O  3O000#,
do0MNNr3   NrF   r   r+   r   r4   )r5   r6   r7   r8   rI   r2   r9   r3   r1   rB   rB   Q   si         OOO""""((((S S S SO O O O O Or3   rB   c                      e Zd ZddZdS )Q8_0QuantizedDataTyperF   r   r+   c                X   |j         | j        z  dk    r|j         dk    sJ d|j                      |j        t          j        k    sJ d|j                     |j         | j        z  }|                    || j        f          }d
d}t          j         ||          || j        	          S )Nr   zBad array size zBad array type blocksr   r+   Iterable[tuple[Any, Any]]c              3  T  K   t          |                               d          t          j        d          z  }t          j        d          5  | |d d d f         z                                  }d d d            n# 1 swxY w Y   d||dk    <   t          ||          E d {V  d S )Nr   axis   ignore)divider   )absmaxnpfloat32errstateroundzip)rO   dqss      r1   quantize_blocks_q8_0z<Q8_0QuantizedDataType.quantize.<locals>.quantize_blocks_q8_0i   s      Fq))BJsOO;Ah/// 3 3qDz)00223 3 3 3 3 3 3 3 3 3 3 3 3 3 3BqAvJ1bzz!!!!!!!!!s   "A>>BB)countr&   )rO   r   r+   rP   )sizerC   r&   rY   rZ   reshapefromiterrD   )r0   rF   n_blocksrO   r`   s        r1   rI   zQ8_0QuantizedDataType.quantizeb   s    x$/)Q..38q===B^TWT\B^B^==@yBJ&&&(E#)(E(E&&&8t.h899	" 	" 	" 	" {//77SWSghhhhr3   NrK   )r5   r6   r7   rI   r9   r3   r1   rM   rM   _   s.        i i i i i ir3   rM       )r^   z<f2)r_   i1)rf   )r&   r(   rE   rC   rD   zdict[np.dtype[Any], DataType]NUMPY_TYPE_TO_DATA_TYPEzInvalid duplicate data type )r@   r<   r=   r?   zdict[str, DataType]SAFETENSORS_DATA_TYPESc                  "    e Zd ZdZdZdZdd
ZdS )GGMLFileTyper   r      r$   r#   tensor
LazyTensorr+   r"   c                    t                               |           }|t          |           t          |j                  dk    r|nt
          S )Nr   )GGML_FILE_TYPE_TO_DATA_TYPEget
ValueErrorlenshapeDT_F32)r0   r$   rm   dts       r1   type_for_tensorzGGMLFileType.type_for_tensor   sH    (,,T22:T""" &&**rr6r3   N)r$   r#   rm   rn   r+   r"   )r5   r6   r7   AllF32	MostlyF16
MostlyQ8_0rw   r9   r3   r1   rk   rk      s7        FIJ7 7 7 7 7 7r3   rk   zdict[GGMLFileType, DataType]rp   c                  B   e Zd ZU ded<   ded<   ded<   ded<   ded<   ded<   ded<   d	Zd
ed<   d	Zd
ed<   d	Zded<   d	Zded<   d	Zded<   d	Z	ded<   d	Z
d
ed<   d	Zded<   d	Zded<   d	Zded<   ed%d            Zed&d             Zed&d!            Zed'd$            Zd	S )(Paramsr*   n_vocabn_embdn_layern_ctxn_ffn_head	n_head_kvN
int | None	n_expertsn_experts_usedzfloat | None
f_norm_epszgguf.RopeScalingType | Nonerope_scaling_typef_rope_freq_basef_rope_scale
n_ctx_origzbool | Nonerope_finetunedzGGMLFileType | NoneftypePath | None
path_modelmodel	LazyModelr+   c           
     <    d v r d         j         n d         j         \  }}d v r-t           fdt          j                    D                       }n]d v r-t           fdt          j                    D                       }n,t           fdt          j                    D                       }|dk     r#d	}t	          t          j        |                    |d
z  }d}t          dd|z  z  dz            }|||z   dz
  |z  z  }t          |||d|||d          S )Nmodel.embed_tokens.weighttok_embeddings.weightz&model.layers.0.self_attn.q_proj.weightc              3  ,   K   | ]}d | dv
|V  dS )model.layers..self_attn.q_proj.weightNr9   .0ir   s     r1   	<genexpr>z!Params.guessed.<locals>.<genexpr>   :      tt;f1;f;f;fns;s;s1;s;s;s;sttr3   z&model.layers.0.self_attn.W_pack.weightc              3  ,   K   | ]}d | dv
|V  dS )r   .self_attn.W_pack.weightNr9   r   s     r1   r   z!Params.guessed.<locals>.<genexpr>   r   r3   c              3  ,   K   | ]}d | dv
|V  dS )layers.z.attention.wq.weightNr9   r   s     r1   r   z!Params.guessed.<locals>.<genexpr>   s:      jj;\Q;\;\;\di;i;i1;i;i;i;ijjr3   r   z                failed to guess 'n_layer'. This model is unknown or unsupported.
                Suggestion: provide 'config.json' of the model in the same directory containing model files.               h㈵>r}   r~   r   r   r   r   r   r   )	rt   next	itertoolsra   KeyErrortextwrapdedentr*   r|   )r   r}   r~   r   msgr   n_multr   s   `       r1   guessedzParams.guessed   sv    GbejFjFj% ;<BBpu  wN  qO  qU 4u<<ttttio&7&7tttttGG5>>ttttio&7&7tttttGGjjjjio&7&7jjjjjGQ;;pC 8?3//0003 1F
#a'(($-!+67  	
 	
 	
 		
r3   config_pathr	   c                6   t          |          5 }t          j        |          }d d d            n# 1 swxY w Y   d x}x}x}}|                    d          }||                    d          x}	ri|                    d          }
|
}|	dk    rt          j        j        }n:|	dk    r"t          j        j        }|d         }|d         }nt          d|	           d	|v r	|d	         }n0d
|v r	|d
         }n#d}t          t          j        |                    d }d }d|v r|d         }|d         }t          |d         |d         |d         ||d         |d         x}|                    d|          |||d         |                    d          ||||          S )Nrope_scalingtypefactorlinearyarn original_max_position_embeddings	finetunedzUnknown rope scaling type: max_sequence_lengthmax_position_embeddingsz                failed to guess 'n_ctx'. This model is unknown or unsupported.
                Suggestion: provide 'config.json' of the model in the same directory containing model files.num_local_expertsnum_experts_per_tok
vocab_sizehidden_sizenum_hidden_layersintermediate_sizenum_attention_headsnum_key_value_headsrms_norm_eps
rope_theta)r}   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   )openjsonloadrq   ggufRopeScalingTypeLINEARYARNrH   r   r   r   r|   )r   r   fconfigr   r   r   r   r   typrope_factorr   r   r   r   r   s                   r1   loadHFTransformerJsonzParams.loadHFTransformerJson   s,   + 	"!Yq\\F	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" JNMMLM:zz.11#0@0@0H0H)H#&**844K&Lh$($8$?!!$($8$=!)*LM
!-k!:)*M*M*MNNN F**01EE&&0045EEpC 8?3//000	&((23I#$9:N &| 4 &} 5 &': ; % &': ;+12G+H!H &

+@& I I ) . &~ 6 &

< 8 8 1 , * .
 
 
 	
   155c                   t          |          5 }t          j        |          }d d d            n# 1 swxY w Y   d }d }d }d }|                    d          rd}n-|                    d          dk    rd}n|d         dk    rd}nd	}d
| v r| d
         j        d         }|                    d          r1| d         j        d         }|d         d         }|d         d         }d}|J t          | d         j        d         |d         |d         |||d         x}	|                    d|	          |||d         |                    d|                    S )Nmoei   r   i@B i @  norm_epsr      i   zlayers.0.feed_forward.w1.weightr   z)layers.0.feed_forward.experts.0.w1.weightnum_expertsr   g    .Ar   dimn_layersn_heads
n_kv_heads)r}   r~   r   r   r   r   r   r   r   r   r   )r   r   r   rq   rt   r|   )
r   r   r   r   r   r   r   r   r   r   s
             r1   loadOriginalParamsJsonzParams.loadOriginalParamsJson  s   + 	"!Yq\\F	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	 ::e 	EEZZ%%00EEJ5((EE E,55:;A!DD::e 	#DEKAND#E]=9I#E]+@AN"$%<=CAF%e}%j1$#*0*; ;%zz,??(-%j1%zz,8HII
 
 
 	
r   
model_plus	ModelPlusc                   | j         d         j        dz  }| j         d         j        dz  }|                                r!t                              | j        |          }no|                                r!t                              | j        |          }n:| j        dk    r t                              | j                  }nt          d          | j         d         j        |_
        |S )Nr   zconfig.jsonzparams.jsonnonez-Cannot guess params when model format is none)pathsparentexistsr|   r   r   r   formatr   rr   r   )r   hf_config_pathorig_config_pathparamss       r1   r   zParams.loadJ  s    %+A.5E%+A.5E  "" 	N11*2BNSSFF$$&& 	N22:3CEUVVFF&((^^J$455FFLMMM&,Q/6r3   )r   r   r+   r|   )r   r   r   r	   r+   r|   )r   r   r+   r|   )r5   r6   r7   r8   r   r   r   r   r   r   r   r   r   r   staticmethodr   r   r   r   r9   r3   r1   r|   r|      s        !%I%%%%!%N%%%%#'J''''599999%)))))!%L%%%%!J!!!!"&N&&&&!%E%%%% #J"""""
 "
 "
 \"
H 4
 4
 4
 \4
p .
 .
 .
 \.
`    \  r3   r|   weightsr   r*   r   r+   c                    |||k    r|} | j         |d| j        d         |z  dz  g| j        dd          R                      dd                               | j                  S )Nr   r   r   )rc   rt   swapaxes)r   r   r   s      r1   permuter   c  sr    9!4!4GOFAw}Q'76'AQ'F[WXWYWYIZ[[[Xa^^WW]##%r3   c                      e Zd ZU ded<   ded<   edd            Zedd            Zedd            Zedd            Zedd            Z	dS )Tensorr   ndarrayr"   	data_typer+   r   c                    d S r-   r9   r0   r   s     r1   astypezTensor.astypeo  s    363r3   r   r*   r   c                    d S r-   r9   r0   r   r   s      r1   r   zTensor.permuteq  s    <?Cr3   n_partc                    d S r-   r9   )r0   r   r   r   s       r1   permute_partzTensor.permute_parts  s    NQcr3   c                    d S r-   r9   )r0   r   s     r1   partzTensor.partu  s    ),r3   GGMLCompatibleTensorc                    d S r-   r9   r0   s    r1   to_ggmlzTensor.to_ggmlw  s    /2sr3   N)r   r"   r+   r   )r   r*   r   r*   r+   r   )r   r*   r   r*   r   r*   r+   r   )r   r*   r+   r   )r+   r   )
r5   r6   r7   r8   r   r   r   r   r   r   r9   r3   r1   r   r   k  s         666 ^6??? ^?QQQ ^Q,,, ^,222 ^222r3   r   bf16_arr$np.ndarray[Any, np.dtype[np.uint16]]c                    | j         t          j        k    sJ d| j                      |                     t          j                  dz  }|                    t          j                  S )Nz/Input array should be of dtype uint16, but got    )r&   rY   uint16r   uint32viewrZ   )r   fp32_arrs     r1   bf16_to_fp32r  {  sX    >RY&&&(jZbZh(j(j&&&ry))R/H==$$$r3   c                  >    e Zd ZddZddZdd	ZddZddZddZdS )UnquantizedTensorr   r   c                z    t          |t          j                  sJ || _        t          |j                 | _        d S r-   )
isinstancerY   r   rh   r&   r   )r0   r   s     r1   __init__zUnquantizedTensor.__init__  s3    '2:.....0?r3   r   r"   r+   c                    |j         }| j        t          k    rt          | j                  | _        t          | j                            |                    S r-   )r&   r   DT_BF16r  r   r	  r   )r0   r   r&   s      r1   r   zUnquantizedTensor.astype  sE    >W$$'55DL !4!4U!;!;<<<r3   r   c                    | S r-   r9   r   s    r1   r   zUnquantizedTensor.to_ggml  s    r3   r   r*   r   r   c                    | j         j        d         dz  }t          t          | j         ||z  ||z  |z   df         ||                    S Nr   r   .)r   rt   r	  r   )r0   r   r   r   rs        r1   r   zUnquantizedTensor.permute_part  sQ    Lq!Q& a&j1v:PQ>6QSV6V)WY_aj!k!klllr3   c                z    | j         j        d         dz  }t          | j         ||z  ||z  |z   df                   S r  )r   rt   r	  )r0   r   r  s      r1   r   zUnquantizedTensor.part  sA    Lq!Q& a&j1v:>.I3.N!OPPPr3   c                H    t          t          | j        ||                    S r-   )r	  r   r   r   s      r1   r   zUnquantizedTensor.permute  s     vy!I!IJJJr3   N)r   r   )r   r"   r+   r	  )r+   r   )r   r*   r   r*   r   r*   r+   r	  )r   r*   r+   r	  )r   r*   r   r*   r+   r	  )	r5   r6   r7   r  r   r   r   r   r   r9   r3   r1   r	  r	    s        @ @ @ @
= = = =   m m m mQ Q Q QK K K K K Kr3   r	  Flazy_tensorrn   expected_dtyper   boolc                v   |                                  }t          |t                    sJ t          |j        j                  }|| j        k    sJ || j        f            |Q||j        j        k    rA|r |j                            |          |_        nt          d| d|j        j                   |j        S )Nz#expected this tensor to have dtype z, got )	r   r  r	  listr   rt   r&   r   rr   )r  r  r   rm   actual_shapes        r1   load_unquantizedr    s    Ff/00000 ,--L;,,,,|[=N.O,,,!n8L&L&L 	q#^22>BBFNNo>ooY_YgYmooppp>r3   c                  P    e Zd ZU ded<   ded<   ded<   ded<   ddZddZddZdS )rn   zCallable[[], Tensor]_loadz	list[int]rt   r"   r   r#   descriptionr+   r   c                    |                                  }|j        | j        k    s6| j        j        |j        j        k    sJ | j        |j        | j        f            |S r-   )r  r   r&   r  )r0   rets     r1   r   zLazyTensor.load  sW    jjll}..4>3G3=K^3^3^3^^S]D,<= 4_3^_
r3   c           	                                           d fd}t          | j        d d j                   S )Nr+   r   c                 R                                                                    S r-   )r   r   )r   r0   s   r1   r   zLazyTensor.astype.<locals>.load  s    99;;%%i000r3   zconvert() r+   r   )validate_conversion_torn   rt   r  )r0   r   r   s   `` r1   r   zLazyTensor.astype  se    ##I...	1 	1 	1 	1 	1 	1 	1$
I7a)7a7atO_7a7abbbr3   Nonec                |    || j         k    r.|j        | j         j        vrt          d| j          d| d          d S d S )Nz Cannot validate conversion from z to .)r   r$   r(   rr   r   s     r1   r%  z!LazyTensor.validate_conversion_to  sS    &&9>Aa+a+a```T]```aaa '&+a+ar3   Nr$  )r   r"   r+   rn   )r   r"   r+   r&  )r5   r6   r7   r8   r   r   r%  r9   r3   r1   rn   rn     s            c c c cb b b b b br3   zdict[str, LazyTensor]r   )ggmltorchsafetensorsr   ModelFormatc                  8    e Zd ZU ded<   ded<   ded<   ded<   d	S )
r   r   r   
list[Path]r   r,  r   zBaseVocab | NonevocabNr5   r6   r7   r8   r9   r3   r1   r   r     sB         r3   r   modelslist[LazyModel]c                F     d  D             }d fdfd|D             S )	Nc                    i | ]
}|D ]}|d S r-   r9   r   r   r$   s      r1   
<dictcomp>z!merge_sharded.<locals>.<dictcomp>  s'    >>>E>>T4>>>>r3   r$   r#   r+   rn   c                2     fdD             t                    dk    rd         S t          d         j                  dk    rd         S                      d          s*                     d          s                     d          rdndt	          d         j                  }t          fdD                       |<   dfd
}dd                    d D                       z   dz   }t          ||d         j        |          S )Nc                     g | ]
}|         S r9   r9   r5  s     r1   
<listcomp>z2merge_sharded.<locals>.convert.<locals>.<listcomp>  s    888d888r3   r   r   ztok_embeddings.z.attention.wo.weightz.feed_forward.w2.weightc              3  2   K   | ]}|j                  V  d S r-   )rt   )r   rm   rS   s     r1   r   z1merge_sharded.<locals>.convert.<locals>.<genexpr>  s*      &U&Ufv|D'9&U&U&U&U&U&Ur3   r+   r	  c                 f    d D             } t          j        |           }t          |          S )Nc                ,    g | ]}t          |          S r9   )r  r   rm   s     r1   r9  z@merge_sharded.<locals>.convert.<locals>.load.<locals>.<listcomp>  s!    LLLV(00LLLr3   rR   )rY   concatenater	  )ndarraysconcatenatedrS   lazy_tensorss     r1   r   z,merge_sharded.<locals>.convert.<locals>.load  s8    LL|LLLH>(>>>L$\222r3   zconcatenated[[z] | [c              3  $   K   | ]}|j         V  d S r-   r  r   lts     r1   r   z1merge_sharded.<locals>.convert.<locals>.<genexpr>  s$      5\5\bn5\5\5\5\5\5\r3   z]]r+   r	  )	rs   rt   
startswithendswithr  sumjoinrn   r   )r$   concatenated_shaper   r  rS   rA  r1  s   `   @@r1   r   zmerge_sharded.<locals>.convert  sZ   8888888|!!  ?"|A$%%**?"??,-- 	==/00	==233	 DD D!,q/"788#&&U&U&U&U&U&U&U#U#U4 	3 	3 	3 	3 	3 	3 	3 '5\5\|5\5\5\)\)\\_cc$ 2LO4M{[[[r3   c                (    i | ]}| |          S r9   r9   )r   r$   r   s     r1   r6  z!merge_sharded.<locals>.<dictcomp>  s#    222DD''$--222r3   )r$   r#   r+   rn   r9   )r1  namesr   s   ` @r1   merge_shardedrN    sY     ?>V>>>E\ \ \ \ \ \4 3222E2222r3   models_pluslist[ModelPlus]c                   t          d | D                       }t          |          dk    s
J d            |                                }d | D             }	 t          d | D                       }n# t          $ r d }Y nw xY wt          d | D                       r"i }| D ]}|                    |j                   nt          d | D                       }t          ||||          S )Nc              3  $   K   | ]}|j         V  d S r-   )r   r   mps     r1   r   z)merge_multifile_models.<locals>.<genexpr>  s$      #D#D"BI#D#D#D#D#D#Dr3   r   zdifferent formats?c                &    g | ]}|j         D ]}|S r9   )r   )r   rT  paths      r1   r9  z*merge_multifile_models.<locals>.<listcomp>  s'    ===bBH==DT====r3   c              3  2   K   | ]}|j         	|j         V  d S r-   )r/  rS  s     r1   r   z)merge_multifile_models.<locals>.<genexpr>  s+      LL"rx7KRX7K7K7K7KLLr3   c              3  (   K   | ]}d |j         v V  dS )r   Nr   rS  s     r1   r   z)merge_multifile_models.<locals>.<genexpr>  s*      
I
Ir&"(2
I
I
I
I
I
Ir3   c                    g | ]	}|j         
S r9   rY  rS  s     r1   r9  z*merge_multifile_models.<locals>.<listcomp>	  s    >>>Brx>>>r3   )
setrs   popr   StopIterationanyupdater   rN  r   )rO  formatsr   r   r/  r   rT  s          r1   merge_multifile_modelsra    s+    ##D#D#D#D#D D DGw<<12[[]]F==K===ELLLLLLL    
I
I[
I
I
III @  	# 	#BLL""""	# >>+>>>??UE65111s   A2 2B Bc           
     n     d fd}t          | j         j        d d d j        z             S )Nr+   r   c                 T                                                                    S r-   )r   r   )r  r   r   s   r1   r   zpermute_lazy.<locals>.load  s%    !!))&)<<<r3   permute(, r#  r$  )rn   rt   r   r  )r  r   r   r   s   ``` r1   permute_lazyrf    sw    = = = = = = = =dK-{/DFhQWFhFh[dFhFhFhkv  lC  GC  D  D  Dr3   r   c           
          d	 fd} j                                         }|d         dz  |d<   t          || j        d d d j        z             S )
Nr+   r   c                 V                                                                    S r-   )r   r   )r  r   r   r   s   r1   r   zpermute_part_lazy.<locals>.load  s'    !!..vvyIIIr3   r   r   rd  re  r#  r$  rt   copyrn   r   r  )r  r   r   r   r   ss   ````  r1   permute_part_lazyrl    s    J J J J J J J J J  AQ419AaDdA{46X6X6X96X6X6X[f[r6rsssr3   c                     d fd} j                                         }|d         dz  |d<   t          || j        d j        z             S )Nr+   r   c                 R                                                                    S r-   )r   r   )r  r   s   r1   r   zpart_lazy.<locals>.load  s#    !!&&v...r3   r   r   zpart r$  ri  )r  r   r   rk  s   ``  r1   	part_lazyro    sk    / / / / / / /  AQ419AaDdA{4g@W6WXXXr3   rA  list[LazyTensor]c           
         d fd} d         j                                         }|                    dt                                t	          || d         j        dd                    d  D                       z             S )	Nr+   r   c                 r    d D             } t          t          j        d | D                                 S )Nc                6    g | ]}|                                 S r9   )r   )r   r  s     r1   r9  z3pack_experts_lazy.<locals>.load.<locals>.<listcomp>&  s$    FFF+;##%%FFFr3   c                    g | ]	}|j         
S r9   )r   r=  s     r1   r9  z3pack_experts_lazy.<locals>.load.<locals>.<listcomp>'  s    *P*P*Pf6>*P*P*Pr3   )r	  rY   array)tensorsrA  s    r1   r   zpack_experts_lazy.<locals>.load%  s=    FFFFF *P*P*P*P*P!Q!QRRRr3   r   zpack_experts  | c              3  $   K   | ]}|j         V  d S r-   rC  rD  s     r1   r   z$pack_experts_lazy.<locals>.<genexpr>*  s'      V}V}jlWYWeV}V}V}V}V}V}r3   r$  )rt   rj  insertrs   rn   r   rJ  )rA  r   rk  s   `  r1   pack_experts_lazyrz  $  s    S S S S S S 	Q""$$AHHQL!!"""dA|A8/EJJV}V}p|V}V}V}L}L}:}~~~r3   c                      e Zd ZU ded<   dS )LazyStorageKindr"   r   Nr0  r9   r3   r1   r|  r|  5  s         r3   r|  c                  .    e Zd ZU ded<   ded<   ded<   dS )LazyStoragezCallable[[int, int], NDArray]r   r|  kindr#   r  Nr0  r9   r3   r1   r~  r~  :  s6         ''''r3   r~  c                       e Zd ZU d fdZddZe	 d d!d            Zed             Z eed           eed           e	e
           e	e           e	e           e	e          edZded<   d" fdZ xZS )#LazyUnpicklerfp	IO[bytes]data_base_pathr#   zip_filezipfile.ZipFilec                f    t                                          |           || _        || _        d S r-   )superr  r  r  )r0   r  r  r  	__class__s       r1   r  zLazyUnpickler.__init__B  s.    , r3   pidr   r+   c                >    |d         dk    sJ t          |d         t                    sJ |d         j        |d         } j         d| } j                            |          d fd}d d| d j        j         }t          ||d         |          S )Nr   storager   r   /offsetr*   	elm_countr+   r   c                B   j         }j                                      5 }|                    | |j        z             ||j        z  }|                    |          }d d d            n# 1 swxY w Y   t          |          |k    sJ t          j        ||          S r-   )	r&   r  r   seekr.   readrs   rY   
frombuffer)	r  r  r&   r  rb   datar   infor0   s	         r1   r   z+LazyUnpickler.persistent_load.<locals>.loadO  s    OE##D)) %R/000 5>1wwt}}% % % % % % % % % % % % % % % t99$$$$=u---s   =A,,A03A0zstorage data_type=z path-in-zip= path=)r   r  r  )r  r*   r  r*   r+   r   )r  r|  r   r  r  getinfofilenamer~  )r0   r  filename_stemr  r   r  r   r  s   `     @@r1   persistent_loadzLazyUnpickler.persistent_loadG  s    1v""""#a&/22222F$	A);;M;;}$$X..	. 	. 	. 	. 	. 	. 	. 	. l9kk8kkSWS`Sikk3q6{KKKKr3   Nr  storage_offsetrb   striderequires_gradbackward_hooksmetadatarn   c                     t           t                    sJ d fd}d d j         }t          |t	                     j        j        |          S )Nr+   r	  c                     d         d         z  } t                              |                                                   S )Nr   )r	  r   rc   )r  rb   r  r  r  s    r1   r   z2LazyUnpickler.lazy_rebuild_tensor_v2.<locals>.load_  s@    q	DG+I$W\\.)%L%L%T%TUY%Z%Z[[[r3   zpickled storage_offset=z in rF  )r  r~  r  rn   r  r  r   )	r  r  rb   r  r  r  r  r   r  s	   ````     r1   lazy_rebuild_tensor_v2z$LazyUnpickler.lazy_rebuild_tensor_v2Z  s     ';/////	\ 	\ 	\ 	\ 	\ 	\ 	\ 	\ 	\ ZYYGDWYY$T

GL,BKPPPr3   c                     | | S r-   r9   )funcnew_typeargsstates       r1   rebuild_from_type_v2z"LazyUnpickler.rebuild_from_type_v2e  s    tT{r3   __func__))ztorch._tensor_rebuild_from_type_v2)ztorch._utils_rebuild_tensor_v2)r*  BFloat16Storage)r*  HalfStorage)r*  FloatStorage)r*  
IntStorage)r*  r   z9dict[tuple[str, str], type[LazyTensor] | LazyStorageKind]CLASSESmoduler$   c                    |                     d          s"t                                          ||          S | j        ||f         S )Nr*  )rG  r  
find_classr  )r0   r  r$   r  s      r1   r  zLazyUnpickler.find_classu  sD      )) 	477%%fd333|VTN++r3   )r  r  r  r#   r  r  )r  r   r+   r   r-   )r  r   r  r   rb   r   r  r   r  r   r  r   r  r   r+   rn   )r  r#   r$   r#   r+   r   )r5   r6   r7   r  r  r   r  r  getattrr|  r  DT_F16ru   DT_I32rn   r  r8   r  __classcell__)r  s   @r1   r  r  A  s:        ! ! ! ! ! !
L L L L& X\Q Q Q Q \Q   \ 5<G<PR\4]4]078NPZ0[0[&5og&>&>"1/&"9"9#2?6#:#:!0!8!8'
J 
JG 
 
 
 
, , , , , , , , , ,r3   r  outer_fpr  rV  r	   c                   t          j        |           }d |                                D             }t          |          dk    s
J |            |                    |d         d          }t          ||d         d d         |          }|                                }d|v r|d         }t          |                                          }t          ||gdd 	          S )
Nc                <    g | ]}|                     d           |S )z.pkl)rH  )r   r$   s     r1   r9  z(lazy_load_torch_file.<locals>.<listcomp>}  s)    LLLTdmmF6K6KLDLLLr3   r   r   r  )r  r  r   r*  r   r   r   r/  )
zipfileZipFilenamelistrs   r   r  r   dictitemsr   )r  rV  zfpickle_paths	pickle_fp	unpicklerr   as_dicts           r1   lazy_load_torch_filer  {  s    		"	"BLLR[[]]LLLL|!!!<!!!Q--Ii-9!_SbS-A')+ + +I NNE%w5;;==!!G74&MMMMr3   r  c                   t          j        d|                     d                    \  }t          j        |                     |                    }t          t          j        |                                 dt          j                            }|d|z   d          dfd	fd
|	                                D             }t          |gdd           S )N<Qr   r   )accessr  dict[str, Any]r+   rn   c                \   t           | d                  }|j        | d         | d         \  }}d|cxk    r|cxk    rt          	          k    sn J ||z
  t          j                  j        z  k    sJ 	||         dfd}d| d	| d
| d
 }t          |||          S )Nr&   rt   data_offsetsr   r+   r	  c                 p    t          t          j                                                           S )N)r&   )r	  rY   r  rc   )bufnumpy_dtypert   s   r1   r   z9lazy_load_safetensors_file.<locals>.convert.<locals>.load  s/    $R]3k%J%J%J%R%RSX%Y%YZZZr3   zsafetensors begin=z end= type=r  rF  )ri   r&   rs   mathprodr.   rn   )r  r   beginendr   r  r  r  rt   byte_bufrV  s         @@@r1   r   z+lazy_load_safetensors_file.<locals>.convert  s
   *4=9	o=.)
sE1111S1111CMM111111U{di..1EEEEEEuSy!	[ 	[ 	[ 	[ 	[ 	[ 	[ 	[Y5YYsYY)YYSWYY$y+>>>r3   c                :    i | ]\  }}|d k    | |          S )__metadata__r9   )r   r$   r  r   s      r1   r6  z.lazy_load_safetensors_file.<locals>.<dictcomp>  s1    ^^^\dDt~G]G]T774==G]G]G]r3   r+  r  )r  r  r+   rn   )structunpackr  r   loads
memoryviewmmapfilenoACCESS_READr  r   )r  rV  header_sizeheadermappedr   r  r   s    `    @@r1   lazy_load_safetensors_filer    s    =rwwqzz22LK(,
277;3G3G(H(HF	"))++q9IJJJKKFa+o&&'H? ? ? ? ? ? ? _^^^V\\^^^^^E5}DQQQQr3   lengthbytesc                t    |                      |          }t          |          |k     rt          d          |S )Nz unexpectedly reached end of file)r  rs   EOFError)r  r  r   s      r1   	must_readr    s6    
''&//C
3xx&9:::Jr3   )maxsizec                4   t          | d          }|                    d          }|                    d           |d d         dk    rt          ||           S t	          j        d|          d         dk     rt          ||           S t          d|            )	Nrbr   r   r   s   PKr  i   zunknown format: )r   r  r  r  r  r  r  rr   )rV  r  first8s      r1   lazy_load_filer    s    	dD		BWWQZZFGGAJJJbqbzU#B---	tV	$	$Q	'*:	:	:)"d3332D22333r3   InOutr  Callable[[In], Out]iterableIterable[In]concurrencymax_workersr   use_processpool_executorIterable[Out]c           
   #    K   |dk     rt          | |          E d{V  t          |          }|rt          }nt          } ||          5 }g }d}t	          |          D ]L}		 |                    |                    | t          |                               :# t          $ r d}Y  nw xY w|r|	                    d          
                                }
|srt          |          |k     r_	 |                    |                    | t          |                               n# t          $ r d}Y nw xY w|st          |          |k     _|
V  |ddd           dS # 1 swxY w Y   dS )a  Parallel map, but with backpressure.  If the caller doesn't call `next`
    fast enough, this will stop calling `func` at some point rather than
    letting results pile up in memory.  Specifically, there is a max of one
    output value buffered per thread.r   N)r  FTr   )mapiterr   r   rangeappendsubmitr   r]  r\  resultrs   )r  r  r  r  r  executor_classexecutorfuturesdone_r  s              r1   bounded_parallel_mapr    s     
 QtX&&&&&&&&&H~~H ,,+	K	0	0	0 H8:{## 	 	AxtT(^^DDEEEE      	[[^^**,,F s7||k99NN8??4h#H#HIIII$   DE  s7||k99 LLL  	                 s[   E"6BEB)%E(B))AE+6D"!E"D1.E0D11EE #E r   r/  r   	pad_vocabr&  c                   | j         dk    r2t          dt          |t                    rd|j         dndz             t          |t                    sd S | j         |j        k    rt
                              d           d S |r| j         |j        k    r| j         |j        z
  }t
                              d| d|d	d
           t          d|dz             D ]0}d|j	        d|d	d
<   |j
                            d|d	d
           1| j         |_        d S d| j          d|j         d|j         d}|j        | j         cxk     r|j        dz   k     rn n|d|j        j         dz  }|j        | j         k     r|dz  }t          |          )Nr   zNThe model's vocab size is set to -1 in params.json. Please update it manually.z Maybe ? zEIgnoring added_tokens.json since model matches vocab size without it.zPadding vocab with z' token(s) - <dummy00001> through <dummy05>r   z<dummyzVocab size mismatch (model has z, but z has z).   z>  Most likely you are missing added_tokens.json (should be in z* Add the --pad-vocab option and try again.)r}   rr   r  r   r   loggerwarningdebugr  added_tokens_dictadded_tokens_listr  fname_tokenizerr   )r   r/  r  	pad_countr   r   s         r1   check_vocab_sizer    s   ~\0:5%0H0HP,),,,,bR
 
 	
 eU##  ~)))^___ 	V^e&666NU%55	c)ccT]cccc	
 	
 	
 q)a-(( 	= 	=A8:E#$4Q$4$4$4$45#**+;A+;+;+;+;<<<<!>
rFN
r
r%BW
r
r^c^n
r
r
rC&.@@@@5+;b+@@@@@@pPUPePlpppp&.((;;
S//r3   c                     e Zd Zej        j        fd2dZd3dZd4dZd5dZ	d6dZ
d7dZd8dZd9dZd9dZd:d#Zd9d$Zeej        j        d%d&fd;d)            Zed<d-            Zed=d/            Zeeej        j        d%d&fd>d1            Zd&S )?
OutputFile	fname_outr	   	endianessgguf.GGUFEndianc                h    t          j        |t           j        t                   |          | _         d S )Nr  )r   
GGUFWriterMODEL_ARCH_NAMESARCH)r0   r  r  s      r1   r  zOutputFile.__init__  s'    OIt/DT/JV_```			r3   r   r|   r  gguf.Metadata | Noner+   r&  c                `   d}||j         |j         }n!|j        |j        j         }n|j        dk    rd}| j                            |           |Z|j        | j                            |j                   |j        | j                            |j                   |j	        | j        
                    |j	                   |j        | j                            |j                   |j        | j                            |j                   |j        | j                            |j                   |j        | j                            |j                   |j        | j                            |j                   |j        | j                            |j                   |j        | j                            |j                   |j        | j                            |j                   |j        | j                            |j                   |j        | j                            |j                   |j        | j                             |j                   |j!        | j        "                    |j!                   |j#        | j        $                    |j#                   |j%        | j        &                    |j%                   |j'        | j        (                    |j'                   |j)        | j        *                    |j)                   |j+        | j        ,                    t[          |j+                             t]          |j+                  D ]S\  }}d|v r!| j        /                    ||d                    d|v r!| j        0                    ||d                    d|v r!| j        1                    ||d                    d|v r!| j        2                    ||d                    d|v r!| j        3                    ||d                    d	|v r!| j        4                    ||d	                    d
|v r!| j        5                    ||d
                    d|v r!| j        6                    ||d                    d|v r!| j        7                    ||d                    U|j8        | j        9                    t[          |j8                             t]          |j8                  D ]S\  }}d|v r!| j        :                    ||d                    d|v r!| j        ;                    ||d                    d|v r!| j        <                    ||d                    d|v r!| j        =                    ||d                    d|v r!| j        >                    ||d                    d	|v r!| j        ?                    ||d	                    d
|v r!| j        @                    ||d
                    d|v r!| j        A                    ||d                    d|v r!| j        B                    ||d                    U|jC        | j        D                    |jC                   |jE        #| j        F                    |jE                   d S d S d S )NLLaMAr   zLLaMA v2r$   authorversionorganizationr  urldoiuuidrepo_url)Gr$   r   r   r   add_namer   
add_authorr!  add_versionr"  add_organizationfinetuneadd_finetunebasenameadd_basenamer  add_descriptionquantized_byadd_quantized_by
size_labeladd_size_labellicenseadd_licenselicense_nameadd_license_namelicense_linkadd_license_linkr#  add_urlr$  add_doir%  add_uuidr&  add_repo_url
source_urladd_source_url
source_doiadd_source_doisource_uuidadd_source_uuidsource_repo_urladd_source_repo_urlbase_modelsadd_base_model_countrs   	enumerateadd_base_model_nameadd_base_model_authoradd_base_model_versionadd_base_model_organizationadd_base_model_descriptionadd_base_model_urladd_base_model_doiadd_base_model_uuidadd_base_model_repo_urldatasetsadd_dataset_countadd_dataset_nameadd_dataset_authoradd_dataset_versionadd_dataset_organizationadd_dataset_descriptionadd_dataset_urladd_dataset_doiadd_dataset_uuidadd_dataset_repo_urltagsadd_tags	languagesadd_languages)r0   r   r  r$   keybase_model_entrydataset_entrys          r1   add_meta_modelzOutputFile.add_meta_model  s   HM$==DD*$)DD\T!!D	4   *	$$X_555+	%%h&6777$0	**8+@AAA ,	&&x'8999 ,	&&x'8999#/	))(*>???$0	**8+@AAA".	(()<===+	%%h&6777$0	**8+@AAA$0	**8+@AAA|'	!!(,///|'	!!(,///}(	""8=111 ,	&&x'8999".	(()<===".	(()<===#/	))(*>???'3	--h.FGGG#/	..s83G/H/HIII-6x7K-L-L ] ])C)!111	55c;KF;STTT#333	77=Mh=WXXX $444	88>Ny>YZZZ%)999	==cCSTbCcddd$(888	<<SBRS`Babbb 000	44S:J5:QRRR 000	44S:J5:QRRR!111	55c;KF;STTT!%555	99#?OPZ?[\\\ ,	++C0A,B,BCCC*3H4E*F*F W W&C..	223f8MNNN=00	44S-:QRRR M11	55c=;STTT%66	::3n@]^^^$55	99#}]?[\\\--	11#}U7KLLL--	11#}U7KLLL..	223f8MNNN!]22	66sM*<UVVV}(	""8=111!-	''(:;;;;;{  x .-r3   c                   | j                             |j                   | j                             |j                   | j                             |j                   | j                             |j                   | j         	                    |j
                   | j                             |j        |j        z             | j                             |j                   | j                             |j                   |j        r| j                             |j                   |j        r| j                             |j                   |j        r | j                             |j                   nt-          d          |j        | j                             |j                   |j        rG|j        J | j                             |j                   | j                             |j                   |j        | j                             |j                   |j        | j                              |j                   |j!        !| j         "                    |j!                   d S d S )Nzf_norm_eps is None)#r   add_vocab_sizer}   add_context_lengthr   add_embedding_lengthr~   add_block_countr   add_feed_forward_lengthr   add_rope_dimension_countr   add_head_countadd_head_count_kvr   r   add_expert_countr   add_expert_used_countr   add_layer_norm_rms_epsrr   r   add_rope_freq_baser   r   add_rope_scaling_typeadd_rope_scaling_factorr   add_rope_scaling_orig_ctx_lenr   add_rope_scaling_finetunedr   add_file_type)r0   r   s     r1   add_meta_archzOutputFile.add_meta_archq  s*   	  000	$$V\222	&&v}555	!!&.111	))&+666	**6=FM+IJJJ	  6=999	##6+;<<< 	9I&&v'7888  	CI++F,ABBB 	3I,,V->????1222".I(()@AAA# 	C&222I++F,DEEEI--f.ABBB(I33F4EFFF ,I001FGGG<#I##FL11111 $#r3   r/  r   5tuple[list[bytes], list[float], list[gguf.TokenType]]c                    g }g }g }|                                 D ]E\  }}}|                    |           |                    |           |                    |           Ft          |          |j        k    sJ |||fS r-   )
all_tokensr  rs   r   )r0   r/  tokensscorestoktypestextscoretoktypes           r1   extract_vocabulary_from_modelz(OutputFile.extract_vocabulary_from_model  s     %*$4$4$6$6 	% 	% D%MM$MM%   OOG$$$$6{{e.....vx''r3   c                   | j                             |j                   |                     |          \  }}}| j                             |           | j                             |           | j                             |           d S r-   )r   add_tokenizer_modeltokenizer_modelr  add_token_listadd_token_scoresadd_token_types)r0   r/  r{  r|  r}  s        r1   add_meta_vocabzOutputFile.add_meta_vocab  s    	%%e&;<<< $(#E#Ee#L#L  		  (((	""6***	!!(+++++r3   svocabgguf.SpecialVocabc                :    |                     | j                   d S r-   )add_to_ggufr   )r0   r  s     r1   add_meta_special_vocabz!OutputFile.add_meta_special_vocab  s    49%%%%%r3   r$   r#   rm   rn   c                >   t          t          j        |j                            }t	          |j        dd           }t	          |j        dd           p|j        j        }|j                            |          }| j        	                    ||j        |||           d S )NrE   quantized_type)	raw_dtype)
r*   rY   r  rt   r  r   r&   r2   r   add_tensor_info)r0   r$   rm   r)   r  r   data_nbytess          r1   r  zOutputFile.add_tensor_info  s    ..//
F,k4@@	F,.>EE_IYI_	&88DD	!!$iXa!bbbbbr3   c                j    | j                                          | j                                          d S r-   )r   write_header_to_filewrite_kv_data_to_filer   s    r1   
write_metazOutputFile.write_meta  s0    	&&(((	'')))))r3   c                8    | j                                          d S r-   )r   write_ti_data_to_filer   s    r1   write_tensor_infozOutputFile.write_tensor_info  s    	'')))))r3   r   rk   r   r   r  r*   c                @   t          t          j        |                                |          }|t          j        k    rt          t          j        |||d          }nt          t          j        |          }t          j                    }t          t          |                                |                    D ]\  }\  \  }}	}
t          j                    |z
  }d                    d |	j        D                       }t          t          t          |                              }t                              d|dz   | dd	t          |           d
|dd|dd|	j        j        ddt'          |          d           | j                            |
           d S )N)r  T)r  r  r  z x c              3     K   | ]}|d V  	dS )6dNr9   )r   r   s     r1   r   z/OutputFile.write_tensor_data.<locals>.<genexpr>  s&      GGckkGGGGGGr3   [r   r^   r  z] Writing tensor 38sz | size 16z | type 4z | T+)r  r  do_itemr  rk   rz   maybe_do_quantizer  timerH  r]   rJ  rt   rs   r#   r  r  r   r$   r*   r   write_tensor_data)r0   r   r   r  ndarrays_innerr?  startr   r$   r  r   elapsedrb   padis                 r1   r  zOutputFile.write_tensor_data  s   -j.@%++--]hiiiL++++,n+cn)-  HH
 :7HHH	1:3u{{}}h;W;W1X1X 	1 	1-A-#{WikkE)G::GG[5FGGGGGDs3u::''DKK XAE4  X  X  X  X  XCJJ  X  X  X  X  XSW  X  X  Xdodyd~  X  X  X  HK  LS  HT  HT  X  X  X   I''0000	1 	1r3   c                8    | j                                          d S r-   )r   closer   s    r1   r  zOutputFile.close  s    	r3   FNr  r  c                F   t          |||           t          | |          }|                    ||           |                    |           |                    |           |                    |           |                                 |                                 d S N)r  r  )r  r  rd  rw  r  r  r  r  )r  r   r/  r  r  r  r  ofs           r1   write_vocab_onlyzOutputFile.write_vocab_only  s    
 	)<<<<	Y777 	&(+++
   
%   
!!&)))






r3   itemtuple[str, LazyTensor]tuple[DataType, NDArray]c                t    | \  }}|                                                                 }|j        |j        fS r-   )r   r   r   r   )r  r$   r  rm   s       r1   r  zOutputFile.do_item  s9     k!!##++--%v~66r3   r   c                d    | \  }}t          |t                    s|S |                    |          S r-   )r  rB   rI   )r  rv   rF   s      r1   r  zOutputFile.maybe_do_quantize  s5    C"/00 	J{{3r3   r   c
                f   t          |||           t          | |          }
|
                    ||	           |
                    |           t	          |t
                    r+|
                    |           |
                    |           n|
j        	                    |j
                   |                                D ]\  }}|
                    ||           |
                                 |
                                 |
                    |||           |
                                 d S r  )r  r  rd  rw  r  r   r  r  r   r  r  r  r  r  r  r  r  )r  r   r   r   r/  r  r  r  r  r  r  r$   r  s                r1   	write_allzOutputFile.write_all  s.    	)<<<<	Y777 	&(+++
   eU## 	?e$$$%%f----G''(=>>> "' 	2 	2D+t[1111

 	UE;777





r3   )r  r	   r  r  )r   r|   r  r  r+   r&  )r   r|   r+   r&  )r/  r   r+   rx  )r/  r   r+   r&  )r  r  r+   r&  )r$   r#   rm   rn   r+   r&  )r+   r&  )r   rk   r   r   r  r*   r+   r&  )r  r	   r   r|   r/  r   r  r  r  r  r  r  r  r  r+   r&  )r  r  r+   r  )r  r  r+   r   )r  r	   r   rk   r   r|   r   r   r/  r   r  r  r  r*   r  r  r  r  r  r  r+   r&  )r5   r6   r7   r   
GGUFEndianLITTLEr  rd  rw  r  r  r  r  r  r  r  r  r   r  r  r  DEFAULT_CONCURRENCYr  r9   r3   r1   r  r    s       DHODZ a a a a aj< j< j< j<X%2 %2 %2 %2N( ( ( (
, 
, 
, 
,& & & &c c c c* * * ** * * *1 1 1 1(     &*_%;uw{    \$ 7 7 7 \7
       \   /T_Mc)-	    \  r3   r  r   output_type_str
str | Nonec                   | t           j        t           j        j                                     d          dz            j        }|dk    s||t          t          fv rt          j	        S |dk    s||t          k    rt          j        S |dk    rt          j        S d |                                 D             }t          d|           )	Nr   )bid.weightf32f16q8_0c                $    i | ]\  }}||j         S r9   )r   )r   r$   r  s      r1   r6  z$pick_output_type.<locals>.<dictcomp>&  s"    YYY4GT;D+/YYYr3   z!Unexpected combination of types: )r   TENSOR_NAMESMODEL_TENSORATTN_Qr   r   ru   r  rk   rx   r  ry   rz   r  rr   )r   r  wq_typename_to_types       r1   pick_output_typer    s    D%d&7&>?FF1FMMPYYZdG%O$;FT[K\@\@\""%O$;6@Q@Q%%&  &&YY5;;==YYYL
GGG
H
HHr3   rv   Iterable[tuple[str, LazyTensor]]tuple[int, int, int]c                    d}d}d}| D ]D\  }}|                     d          rd}|j        D ]}||z  }d|v r
d|v r||z  }n||z  }||z  }E|||fS )Nr   )z.attention.masked_biasz.attention.biasz.rotary_emb.inv_freqr   z	.experts.z.experts.0.)rH  rt   )rv  total_paramsshared_paramsexpert_paramsr$   r  sum_weights_in_tensorr   s           r1   !per_model_weight_count_estimationr  +  s    LMM$ . .k==^__ 	 &' $ 	) 	)C!S(!!$$$!6622M--55r3   output_typec                D    fd|                                  D             S )Nc           	     j    i | ]/\  }}||                                         ||                    0S r9   )r   rw   )r   r$   rm   r  s      r1   r6  z*convert_to_output_type.<locals>.<dictcomp>H  sK     1 1 1v &-- ; ;D& I IJJ 1 1 1r3   )r  )r   r  s    `r1   convert_to_output_typer  G  s6    1 1 1 1"'++--1 1 1 1r3   skip_unknownc                   t          j        t          |j                  }t	          t           j                            t          g                     }| }|j        r|j        dk    rt          |j                  D ]}t          dd          D ]}g }t          |j                  D ]}	d| d|	 d| d| v r3|	                    | d| d|	 d| d                    |d| d|	 d| d= Cd| d	|	 d| d| v r3|	                    | d| d	|	 d| d                    |d| d	|	 d| d= t          d
| d|	 d| d          t          |          |d| d| d<   όt          j                    D ])}
d|
 d| v rvt                              d|
            t!          | d|
 d         |j        |j                  |d|
 d<   t!          | d|
 d         |j        |j                  |d|
 d<   d|
 d| v rt                              d|
            t'          | d|
 d         d|j        |j                  |d|
 d<   t'          | d|
 d         d|j        |j                  |d|
 d<   t)          | d|
 d         d          |d|
 d<   |d|
 d= * i }|                                 D ]\  }}|                    |d          pd\  }}|4|rt                              d| d           Dt          d| d          ||v rt                              d|            yt                              |dd|dd|j        j        dd|j                    |||<   |S )Nr   r   r   r   z.feed_forward.experts.z.wr  r   z.block_sparse_moe.experts.z Expert tensor not found: layers.z.feed_forward.experts.wr   zPermuting layer z.self_attn.k_proj.weightr   zUnpacking and permuting layer r   z.self_attn.v_proj.weight)r  z.bias)try_suffixes)NNzUnexpected tensor name: z - skippingz.. Use --skip-unknown to ignore it (e.g. LLaVA)zskipping tensor 48sz -> 40srw  6s)r   TensorNameMapr  r   r[  MODEL_TENSOR_SKIPrq   r   r  r  rr   rz  r   ra   r  r  rf  r   r   rl  ro  r  get_type_and_namer  r   r$   rt   )r   r   r  tmapshould_skiptmpi_lwexpertser   outr$   r  tensor_typename_news                   r1   convert_model_namesr  L  s   dFN33Dd,00r::;;K
C  cF,q00(( 	c 	cC1a[[ c cv/00 x xAKKKAKKKKKuTTu-as-a-aRS-a-aWX-a-a-a'bccc T# T TQ T T! T T TUUWWWWWQWWW[```u-kS-k-k\]-k-kab-k-k-k'lmmm ^ ^ ^q ^ ^TU ^ ^ ^__()vC)v)vgh)v)vlm)v)v)vwwwHYZaHbHbDcDD!DDDEEc _  61666%??LL/A//000?KER}bcR}R}R}L~  AG  AN  PV  P]  @^  @^C;;;;<?KER}bcR}R}R}L~  AG  AN  PV  P`  @a  @aC;;;;<<8Q888EAALL=!==>>>?PQV  XCgh  XC  XC  XC  RD  FG  IO  IV  X^  Xe  @f  @fC;;;;<?PQV  XCgh  XC  XC  XC  RD  FG  IO  IV  X^  Xh  @i  @iC;;;;<?HQV  XCgh  XC  XC  XC  RD  FG  @H  @HC;;;;<?A???@@C"[[]] $ $k $ 6 6tL` 6 a a qeqX K$KKKLLLllllmmm+%%LL6H66777lllhlll{7L7QlllYdYjllmmm#HJr3   nr   c                   dd|ddfdd|ddfd	|d
k    rdnd| fg}|D ]e\  }}t          j        || j                  rF|                     t          j        ||| j                            }|                                r|c S fdS )zkGiven any path belonging to a multi-file model (e.g. foo.bin.1), return
    the nth path in the model.
    z\.[0-9]{2}\.pth$r(  02z.pthz-[0-9]{5}-of-(.*)$-r  z-of-\1z(\.[0-9]+)?$r   z\1z\1.N)researchr$   	with_namesubr   )rV  r  patternsregexreplacementnew_paths         r1   nth_multifile_pathr    s     
n!nnnn-	 1Q 1 1 1 12	166%%zazz:H '    {9UDI&& 	 ~~bfUK&K&KLLH    4r3   r.  c                    g }t          j                    D ]+}t          | |          }| n|                    |           ,|s| gS |S )zvGiven any path belonging to a multi-file model (e.g. foo.bin.1), return
    the whole list of paths in the model.
    )r   ra   r  r  )rV  r   r   nth_paths       r1   find_multifile_pathsr    se     C_  %dA..E

8  vJr3   c                                                      rjg d} fd|D             }|sg d} fd|D             }|st          d            t          |          dk    rt          d  d|           |d	          t	                     }g }|D ]A t
                              d
             |                    t                                Bt          |          }|S )z%Load a model of any supported format.)zmodel-00001-of-*.safetensorszmodel.safetensorszconsolidated.safetensorsc                D    g | ]}                     |          D ]}|S r9   globr   r  filerV  s      r1   r9  z#load_some_model.<locals>.<listcomp>  s0    DDD$DIIdOODDDDDDDr3   )zconsolidated.00.pthzpytorch_model-00001-of-*.binz*.ptzpytorch_model.binc                D    g | ]}                     |          D ]}|S r9   r  r  s      r1   r9  z#load_some_model.<locals>.<listcomp>  s0    HHHd		$HHTHHHHr3   zCan't find model in directory r   zFound multiple models in z, not sure which to pick: r   zLoading model file )
is_dirFileNotFoundErrorrs   rr   r  r  r  r  r  ra  )rV  globsfilesr   rO  r   s   `     r1   load_some_modelr    s,    {{}} aaaDDDD%DDD 	IhhhEHHHHeHHHE 	M#$KT$K$KLLLu::>>```Y^``aaaQx &&E#%K 1 10$00111>$//0000'44Jr3   c                  D    e Zd ZU eeegZded<   ddZddZ	ddZ
ddZdS )VocabFactoryzlist[type[Vocab]]_VOCAB_CLASSESrV  r	   c                    || _         d S r-   )rV  )r0   rV  s     r1   r  zVocabFactory.__init__  s    			r3   r/  r   model_parent_pathr+   r  c                    |j         dk    }t          |t                    r|j        nd }t	          j        ||d |          S )Nbpe)load_mergesspecial_token_typesr}   )r$   r  r   r   r   SpecialVocab)r0   r/  r  r  r}   s        r1   _create_special_vocabz"VocabFactory._create_special_vocab  sP    jE)&0&>&>H%""D # $	
 
 
 	
r3   vocab_typesr'   r   c                   d | j         D             }i }|D ]/}	 ||         ||<   # t          $ r t          d|           d w xY w|                                D ]'\  }}	  || j                  } n"# t
          $ r Y $w xY wt          d|           t                              d|j        d|j	                   |S )Nc                    i | ]
}|j         |S r9   )r$   )r   clss     r1   r6  z6VocabFactory._create_vocab_by_path.<locals>.<dictcomp>  s    0^0^0^330^0^0^r3   zUnsupported vocabulary type z+Could not find a tokenizer matching any of zLoaded vocab file z, type )
r  r   rr   r  rV  r   r  r  r  r$   )r0   r  vocab_classesselected_vocabsvtyper  r/  s          r1   _create_vocab_by_pathz"VocabFactory._create_vocab_by_path  s!   0^0^$J]0^0^0^24  	S 	SES)6u)=&& S S S !G!G!GHHdRS *//11 	a 	aJE3DI$    $$_R]$_$_```W)>WWWWXXXs   %A A22
A?>A?list[str] | None#tuple[BaseVocab, gguf.SpecialVocab]c                    |t                      }n|                     |          }|                     ||          }||fS r-   )r   r  r  )r0   r  r  r/  special_vocabs        r1   
load_vocabzVocabFactory.load_vocab  sN    IIEE..{;;E22
 
 m##r3   N)rV  r	   )r/  r   r  r	   r+   r  )r  r'   r+   r   )r  r  r  r	   r+   r  )r5   r6   r7   r   r   r   r  r8   r  r  r  r  r9   r3   r1   r  r    s~         );X|(TNTTTT   
 
 
 
   *$ $ $ $ $ $r3   r  	file_typeexpert_countmodel_params_countr  gguf.Metadatar#   c                N   |j         |j         nd }|j        |j        nd }|j        |j        nd }|j        |j        nd }|j        |j        nt          j        |d|pdi}t          j        dt          j        dt          j	        di|          }	t          j
        ||||||	          S )Nr  r   r=   r<   r>   )r$   r-  r+  r!  r2  r   rk   rx   ry   rz   naming_convention)
r  r  r  r  r$   r-  r+  r!  r2  r  s
             r1   default_convention_outfiler"    s    $M58==4D$,$5$Ax  tH$,$5$Ax  tH"*"2">hDG(0(;(G$$T_^p  NR  @L  @Q  PQ  NR  NRJ 	 	K !$(GZQ\]]]r3   model_pathsc                    t          ||||          }| d         j        | dz  }|| v r2t                              d| d           t	          j        d           |S )Nr   z.ggufzError: Default output path (zN) would overwrite the input. Please explicitly specify a path using --outfile.r   )r"  r   r  errorsysexit)r#  r  r  r  r  default_filenamer   s          r1   default_outfiler)  
  s    1)\K]_ghh
a.
%5"<"<"<
<C
k@3 @ @ @	A 	A 	A 	Jr3   r   c           
         t          d| j                   t          d| j                   t          d| j                   | j                                        D ].\  }}t          | d|j         d|j         d|j                    /d S )Nzmodel_plus.paths = zmodel_plus.format = zmodel_plus.vocab = z: shape=r  z; )	printr   r   r/  r   r  rt   r   r  )r   r$   r  s      r1   do_dump_modelr,    s    	
4
 0
4
4555	
6!2
6
6777	
4
 0
4
4555'-3355 l lkjj{0jj8MjjQ\Qhjjkkkkl lr3   args_inr  c                   ddg}t          j        d          t          j        d                              d          k    r|                    d           t	          j        d          }|                    dd	d
           |                    dd	d           |                    dd	d           |                    dd	d           |                    d|d           |                    dt          d           |                    ddd           |                    dt          d           |                    dt          d           |                    d t          d!           |                    d"t          d#t           d$t          %           |                    d&d	d'           |                    d(d	d)           |                    d*d	d+           |                    d,d	d-           |                    d.t          d/           |                    d0d	d1           |                    d2t          d d34           |                    |           }|j        r t          j        t          j        5           nT|j        s|j        s|j        r t          j        t          j        5           nt          j        t          j        5           |j        }|j        }t.          j                            |j        ||          }|j        rt7          |          }t8                              |          }t;          |j        ||j                  }	t?          |j                                                   }
tC          |	|j"                  }||j#        |j$        |j$        j#        |_#        tK          tM          ||j'        |
|                      d S |j(        r|j)        rtU          d6          |j        r tW          |          }tY          |           d S |j)        st7          |          }nt[          i |d7z  gd8d 9          }|j        rtY          |           d S t.          j.        j/        }|j0        rt.          j.        j1        }d }|j2        s|j)        st8                              |          }|j3        d:k    r<|j4        )d;}|5                    tm          j7        |                     |j4        |_3        |j"        r4tp          j9        tp          j:        tp          j;        d<|j"                 |_<        tz          >                    d=|            |j?        d>         j@        }t          |jA        p|p|          }t          |          }|j(        rd n|jC        D                    d?          }|E                    ||          \  }}|j)        rt          |t                    sJ |jH        stU          d@          |jH        }|t9          |jI        dddddddAB          }t          K                    ||||||j2        |C           tz          >                    dD|            d S |jL        |jA        |j(        s|jL        }|J |j#        |j$        |j$        j#        |_#        t?          |j                                                   }
tz          >                    dE|
 dFt/          jM        |
d>                    d$           tz          >                    dG|            tz          >                    dH|            |j        }	t;          |	||j                  }	tC          |	|j"                  }t          |	|          }	|jH        pt          |j?        ||j'        |
|I          }t/          jP        |
dJ|j'        pd>i|_P        ||_<        tz          >                    dK| dL|            t          Q                    ||||	|||jR        ||j2        |M
  
         tz          >                    dD|            d S )NNr  r  r   <r  z/Convert a LLaMA model to a GGML compatible filerC  z--dump
store_truez,don't convert, just show what's in the model)actionhelpz--dump-singlez6don't convert, just show what's in a single model filez--vocab-onlyzextract only the vocabz
--no-vocabzstore model without the vocabz	--outtypezPoutput format - note: q8_0 may be very slow (default: f16 or f32 based on input))choicesr2  z--vocab-dirzAdirectory containing tokenizer.model, if separate from model file)r   r2  z--vocab-typezQvocab types to try in order, choose from 'spm', 'bpe', 'hfft' (default: spm,hfft)zspm,hfft)r2  defaultz	--outfilez)path to write to; default: based on inputr   zJdirectory containing model file, or model file itself (*.pth, *.pt, *.bin)z--ctxz0model training context (default: based on input)z--concurrencyz*concurrency used for conversion (default: ))r   r2  r4  z--big-endianz'model is executed on big endian machinez--pad-vocabzMadd pad tokens when model vocab expects more than tokenizer metadata providesz--skip-unknownz,skip unknown tensor names instead of failingz	--verbosezincrease output verbosityz
--metadataz9Specify the path for an authorship metadata override filez--get-outfilez#get calculated default outfile namez--model-namezname of the model)r   r4  r2  )levelz0--vocab-only does not make sense with --no-vocabdummyr   r  r   z                    The model doesn't have a context size, and you didn't specify one with --ctx
                    Please specify one with --ctx:
                     - LLaMA v1: --ctx 2048
                     - LLaMA v2: --ctx 4096)r  r  r  z	params = r   ,z$need --outfile if using --vocab-onlyr   r   )r  r  r  zWrote zmodel parameters count : z (zVocab info: zSpecial vocab info: )r  r  zWriting z	, format )r  r  r  r  )SrY   r  newbyteorderr  argparseArgumentParseradd_argumentr	   r*   r  r#   
parse_argsverboseloggingbasicConfigDEBUGdump_singledumpget_outfileWARNINGINFO
model_namer   r   Metadatar   r  r  r|   r  r  r  r  r  outtyper$   r   r+  r"  r   no_vocab
vocab_onlyrr   r  r,  r   r  r  
big_endianBIGr  r   ctxr%  r   r   rk   rx   ry   rz   r   r  r  r   r   	vocab_dirr  
vocab_typesplitr  r  r   outfiler   r  r  r/  #model_weight_count_rounded_notationr  r)  r2  r  r  )r-  output_choicesparserr  rG  	dir_modelr  r   r   r   r  r   r  r   r  
vocab_pathvocab_factoryr  r/  r  rR  s                        r1   mainrY    s	   U^N	y||ry||005555f%%%$1bcccF
Guvvv
G  A  A  A
G_```
Gfggg
.  HZ  [  [  [
t  HK  L  L  L
  H[  eo  p  p  p
tGrsss
t  HT  U  U  U
sGyzzz
s  HK  uH  HK  HK  HK  Uh  i  i  i
Gpqqq
  HW  X  X  X
(Guvvv
Gbccc
t  HC  D  D  D
Glmmm
sDGZ[[[W%%D| 0'-00000		 0TY 0$*: 0'/22222',////J
I}!!$-JGGH $Y//
Z((#J$4fd>OPP>z?O?U?U?W?WXX 55 56;L;X"-2HM+E63CEWYabbdeee} M MKLLL #I..
j!!!? i$Y//

rI4G3HSYcghhh
y j!!!&I (O'	F~ *T_ *Z((<2x/
 X_S112228FL< 	#*#-$/  l	FL 	((()))"(+2dnF	F5FGGJ ,,M-G$$T_-B-B3-G-GK(33KARSSE= %'''''| 	ECDDD,>"-!	 	 	F 	##GVUM.74>\d 	$ 	f 	f 	f&W&&'''#(>t}(> }!2!>).::;K;Q;Q;S;STT
KK  E,>  E  E$Bjk}~  lA  CB  CB  E  E  E  F  F  F
KK&u&&'''
KK6}66777E!%1BCCEudl33E$UE22Eloj.>vGWYkv~G/+=bFL\La`abbHFL
KK4744U44555%}%)%5VZVdow  y y y
KK"""#####r3   __main__)r   r   r   r*   r   r*   r+   r   )r   r   r+   r   )NF)r  rn   r  r   r   r  r+   r   )r1  r2  r+   r   )rO  rP  r+   r   )r  rn   r   r*   r   r*   r+   rn   )
r  rn   r   r*   r   r*   r   r*   r+   rn   )r  rn   r   r*   r+   rn   )rA  rp  r+   rn   )r  r  rV  r	   r+   r   )r  r  rV  r	   r+   r   )r  r  r  r*   r+   r  )rV  r	   r+   r   )r  r  r  r  r  r*   r  r   r  r  r+   r  )F)r   r|   r/  r   r  r  r+   r&  )r   r   r  r  r+   rk   )rv  r  r+   r  )r   r   r  rk   r+   r   )r   r   r   r|   r  r  r+   r   )rV  r	   r  r*   r+   r   )rV  r	   r+   r.  )
r  rk   r  r   r  r  r  r  r+   r#   )r#  r.  r  rk   r  r   r  r  r  r  r+   r	   )r   r   r+   r&  r-   )r-  r  r+   r&  )
__future__r   r?  r:  concurrent.futures
concurrentenumfaulthandler	functoolsr   r   r  r  ospickler  signalr  r&  r   r  r  abcr   r   r   r   dataclassesr   pathlibr	   typingr
   r   r   r   r   r   r   numpyrY   environrV  ry  r#   __file__r   r   r   r   r   r   r   r   typing_extensionsr   r   	getLoggerr  hasattrr   r   r   r8   
MODEL_ARCHLLAMAr  r  ADDED_TOKENS_FILEFAST_TOKENIZER_FILEr"   r;   r&   float16r  rZ   ru   int16r  r  r  rB   rM   GGMLQuantizationTyper>   DT_Q8_0rh   rv   rr   ri   IntEnumrk   rx   ry   rz   rp   r|   r   r   r  r	  r  r   rn   r   r,  r   rN  ra  rf  rl  ro  rz  r|  r~  	Unpicklerr  r  r  r  	lru_cacher  r  r  r  r  r  r  r  r  r  r  r  r  r  r"  r)  r,  rY  r5   r9   r3   r1   <module>ry     s]
   " " " " " " "                       				  				   



    # # # # # # # # F F F F F F F F ! ! ! ! ! !       O O O O O O O O O O O O O O O O O O    "*$$HOOAss44>>07)CDDEEE  V V V V V V V V V V V V V V V V 211111111		9	%	%
7<$$ *)C)C *L&.)))+ + + + + ' &  $0 0 0 0 0 0 0 0 $	 	 	 	 	( 	 	 	 
ehbhrz.B.BY^`fXg
h
h
h

ehbhrz.B.BY^`fXg
h
h
h

ehbhrx.@.@XZ
[
[
[

fhbhry.A.AXnXnXn
o
o
o $
O 
O 
O 
O 
O 
O 
O 
O $i i i i i- i i i$  
(0(<(<RT,0,E,JY[2:"(LJ];^2_2_a a a :<  ; ; ; ;FFF
+ + +B	x***j<<<===(*BH%% 	/ /     7 7 7 7 74< 7 7 7 VVW=      v v v v v v v v~% % % %3 3 3 3 3S 3 3 3 % % % %K K K K K K K K6      )  b b b b b b b b2 /	 . . . . !GH H H H H
       3 3 3 3D2 2 2 2.D D D Dt t t tY Y Y Y   "                7, 7, 7, 7, 7,F$ 7, 7, 7,tN N N NR R R R0    T"""4 4 4 #"4 WT]]genn         F         FX X X X X X X XvI I I I6 6 6 681 1 1 1
6 6 6 6r   *   $   60$ 0$ 0$ 0$ 0$ 0$ 0$ 0$f^ ^ ^ ^    l l l lU$ U$ U$ U$ U$p zDFFFFF r3   