
    #;7j                       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m	Z	 d dl
mZm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mZ d d	lmZmZ d dlZd
dlmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z( d
dl)m*Z*  ej+        e,          Z-dZ.e	 G d d                      Z/e	 G d d                      Z0 G d de          Z1 G d d          Z2dS )    )annotationsN)	dataclass)Enumauto)prod)Path)BufferedWriter)IOAnySequenceMappingascii_lettersdigits   )GGUF_DEFAULT_ALIGNMENT
GGUF_MAGICGGUF_VERSIONGGMLQuantizationType
GGUFEndianGGUFValueTypeKeysRopeScalingTypePoolingType	TokenTypeExpertGatingFuncType)quant_shape_from_byte_shapez{:s}-{:05d}-of-{:05d}.ggufc                  <    e Zd ZU ded<   ded<   ded<   dZded	<   dS )

TensorInfoSequence[int]shaper   dtypeintnbytesNznp.ndarray[Any, Any] | Nonetensor)__name__
__module____qualname____annotations__r%        >/home/rurouni/src/llama.cpp-master/gguf-py/gguf/gguf_writer.pyr   r   )   sD         KKK*.F......r+   r   c                  2    e Zd ZU ded<   ded<   dZded<   dS )	GGUFValuer   valuer   typeNGGUFValueType | Nonesub_type)r&   r'   r(   r)   r2   r*   r+   r,   r.   r.   1   s8         JJJ%)H))))))r+   r.   c                      e Zd Z e            Z e            Z e            Z e            Z e            Z e            Z	dS )WriterStateN)
r&   r'   r(   r   NO_FILEEMPTYHEADERKV_DATATI_DATAWEIGHTSr*   r+   r,   r4   r4   8   sP        dffGdffEdffFdffGdffGdffGGGr+   r4   c                  P   e Zd ZU ded<   ded<   ded<   ded<   d	ed
<   ded<   ej        dej        dej        dej        dej	        dej
        dej        dej        dej        dej        dej        diZdej        ddddfdd&Zdd)Zdd,Zddd/Zdd0Zdd1Zddd2Zdd3Zdd4Zddd<Zdd=Zdd>Zdd?Zdd@Z ddAZ!ddBZ"ddDZ#ddEZ$ddFZ%ddGZ&ddHZ'ddIZ(ddKZ)e*ddN            Z+	 dddWZ,	 	 dǐdd^Z-dddcZ.ddddZ/ddeddgZ0ddhZ1ddiZ2ddkZ3ddlZ4ddnZ5ddpZ6ddrZ7ddtZ8ddvZ9ddxZ:ddzZ;dd|Z<dd~Z=ddZ>ddZ?ddZ@ddZAddZBddZCddZDddZEddZFddZGddZHddZIddZJddZKddZLddZMddZNddZOddZPddZQddZRddZSddZTddZUddZVddZWddZXddZYddZZddZ[ddZ\ddZ]ddZ^ddZ_ddZ`ddZaddZbddZcddZdddZeddZfddZgddZhddZiddZjddZkddĄZlddƄZmddȄZnddʄZodd̄Zpdd̈́Zqdd΄ZrddτZsddЄZtddфZudd҄ZvddӄZwddԄZxddՄZyddքZzdd؄Z{ddڄZ|ddۄZ}dd܄Z~dd݄Zdd߄ZddZddZddZddZddZddZd dZd dZddZddZddZddZddZddZddZddZddZddZddZddZddZddZdd ZddZddZddZddZddZddZddZddZdd	Zdd
ZddZddZddZddZddZddZddZddZddZddZddZd	dZd	dZddZddZddZddZddZddZdd Zdd!Zdd"Zdd#Zdd$Zdd%Zdd&Zdd'Zdd(Zdd)Zdd*Zdd+Zdd,Zdd-Zdd.ZÐdd/ZĐdd0ZŐdd1ZƐd
d3Zǐdd4ZȐdd6Zɐdd7Zʐdd8Zːdd:Z̐dd;Z͐dd=Zΐdd>Zϐdd?ZАdd@ZѐddAZҐddBZӐddCZԐddDZՐddEZ֐ddFZאddGZؐddHZِddIZڐddJZېddKZܐddLZݐddMZސddNZߐddPZddRZddUZddWZddZZdd[Zdd]Zdd^Zdd_Zdd`ZddaZddbZddcZdddZddeZddfZddgZddhZddkZddmZddnZddoZddpZddqZddrZddtZdduZddvZddwZddxZddyZddzZdd{Z dd|Zdd}Zdd~ZddZddZddZddZddZddZ	ddZ
ddZddZddZddZddZddZddZddZddZddZddZddZddZddZddZddZddZddZddZddZddZddZ ddZ!ddZ"ddZ#ddZ$ddZ%ddZ&ddZ'ddZ(ddZ)ddZ*ddZ+ddZ,ddZ-ddZ.ddZ/ddZ0ddZ1ddZ2dddZ3dddZ4e*dd            Z5d-S (   
GGUFWriterzlist[BufferedWriter] | NonefoutPath | Nonepathz+tempfile.SpooledTemporaryFile[bytes] | None	temp_filezlist[dict[str, TensorInfo]]tensorszlist[dict[str, GGUFValue]]kv_datar4   stateBbHhIifQqd?Fr   os.PathLike[str] | str | Nonearchstruse_temp_filebool	endianessr   split_max_tensorsr#   split_max_sizedry_runsmall_first_shardc	                    d | _         |rt          |          nd | _        || _        || _        t
          | _        || _        d | _        i g| _	        i g| _
        || _        || _        || _        || _        t                              d                    | j        t$          j        k    rdnd                     t(          j        | _        | j        r| j	                            i            |                                  d S )Nz+gguf: This GGUF file is for {0} Endian onlyBigLittle)r=   r   r?   rP   rT   r   data_alignmentrR   r@   rA   rB   rU   rV   rW   rX   loggerinfoformatr   BIGr4   r5   rC   appendadd_architecture)	selfr?   rP   rR   rT   rU   rV   rW   rX   s	            r,   __init__zGGUFWriter.__init__V   s     	"&0DJJJD		"4*tt!2,!2AHH^z~55EE8
 
 	 	 	 !(
! 	$L###r+   returntuple[int, int, int, int]c                ^   d}d}d}d}d}d }| j         D ]}|                                D ]\  }}	|	j        }
|                    d          r||	f}&|                    d          rW||d         |d d         dz   k    rt                              d             dS g |
d d         |d         j        d         R }
t          |
          }d	|v r:t          |
          d
k    r!|
d|v rdnd         }|||z  z  }||z  }|dz  }n||z  }n||z  }||z  }|dk    r||z  nd}|| }||||fS )Nr   z.lora_az.lora_baz:can't measure LoRA size correctly, tensor order is unusual)r   r   r   r   r   z_exps.   z.bias)rA   itemsr!   endswithr]   warningr   len)rc   total_paramsshared_paramsexpert_params
expert_sumn_expert_tensorslast_lora_arA   namer^   r!   sizeexpert_counts                r,   get_total_parameter_countz$GGUFWriter.get_total_parameter_countq   s   
59| 	% 	%G%mmoo % %
d
==++ 	H#',K]]9-- H"*k!nSbS	C.O.O'cddd)zzz G%* Gk!n.B2.F G GE{{t##5zzQ',7d??RR'K%$,*>?"l2
(A-((%-!T)M$9%> <La;O;O
&666UV "(=L ]M<GGr+   r   
list[Path]c                     t           j                  dk    rgS  fdt          t           j                            D             S )Nr   c                    g | ]K}                     t                              j        |d z   t	          j                                      LS )r   )	with_nameSHARD_NAME_FORMATr_   stemrp   rA   ).0rI   r?   rc   s     r,   
<listcomp>z1GGUFWriter.format_shard_names.<locals>.<listcomp>   s[      A  A  Abc077	1q5#dlJ[J[\\]]  A  A  Ar+   )rp   rA   range)rc   r?   s   ``r,   format_shard_nameszGGUFWriter.format_shard_names   sn    t|!!6M A  A  A  A  Aglmpquq}m~m~gg  A  A  A  	Ar+   NNonec                <   | j         t          j        u r| j        ||| j        k    rd S | j         t          j        urt          d| j                    ||| _        | j        8|                                 }d |D             | _        t          j        | _         d S d S )N/Expected output file to be not yet opened, got c                .    g | ]}t          |d           S )wb)open)r   filenames     r,   r   z/GGUFWriter.open_output_file.<locals>.<listcomp>   s"    HHH(h--HHHr+   )rC   r4   r6   r=   r?   r5   
ValueError
print_plan)rc   r?   	filenamess      r,   open_output_filezGGUFWriter.open_output_file   s    :***ty/D$,Z^bfbkZkZkF:[000[tz[[\\\DI9 ))IHHiHHHDI$*DJJJ ! r+   c                j   t                               d           | j        J |                     | j                  }t	          |          t	          | j                  k    sJ t          || j                  D ]u\  }}t                               | dt	          |           dt                              t          d |
                                D                                             v| j        r<t                               d           |D ]}t          |           t                       |S )NzWriting the following files:z: n_tensors = z, total_size = c              3  $   K   | ]}|j         V  d S Nr$   r   tis     r,   	<genexpr>z(GGUFWriter.print_plan.<locals>.<genexpr>   sK        qW  qW  @Bqsqz  qW  qW  qW  qW  qW  qWr+   zDry run, not writing files)r]   r^   r?   r   rp   rA   zipr<   format_n_bytes_to_strsumvaluesrW   printexit)rc   r   rw   rA   s       r,   r   zGGUFWriter.print_plan   s|   2333y$$$++DI66	9~~T\!2!22222 DL99 	[ 	[MD'KK4  Z  Zs7||  Z  ZJLlLlmp  qW  qW  FM  FT  FT  FV  FV  qW  qW  qW  nW  nW  MX  MX  Z  Z  [  [  [  [< 	KK4555!  dFFFr+   c                t   t          | j                  dk    rd S t          d | j        D                       }| j        J t          | j                  }| j                            d t          t          | j                  |          D                        t          | j                  D ]\  }}t          |t          j
                  |t          j        j        <   t          |t          j
                  |t          j        j        <   t          |t          j                  |t          j        j        <   d S )Nr   c              3  4   K   | ]}t          |          V  d S r   )rp   )r   ts     r,   r   z/GGUFWriter.add_shard_kv_data.<locals>.<genexpr>   s(      99qCFF999999r+   c              3     K   | ]}i V  d S r   r*   )r   _s     r,   r   z/GGUFWriter.add_shard_kv_data.<locals>.<genexpr>   s"      OO1BOOOOOOr+   )rp   rA   r   r=   rB   extendr   	enumerater.   r   UINT16r   SplitLLM_KV_SPLIT_NOLLM_KV_SPLIT_COUNTINT32LLM_KV_SPLIT_TENSORS_COUNT)rc   total_tensorstotal_splitsrI   rB   s        r,   add_shard_kv_datazGGUFWriter.add_shard_kv_data   s   t|!!F99DL99999y$$$49~~OOc$,.?.?(N(NOOOOOO#DL11 	k 	kJAw2;A}?S2T2TGDJ./5>|]Ma5b5bGDJ12=F}VcVi=j=jGDJ9::	k 	kr+   c           	        t          | j                  dk    r0| j        dk    s| j        dk    rt                              d           |                     |           | j        t          j	        urt          d| j                   | j        J t          | j                  t          | j                  k    sJ t          | j                  dk    sJ |                                  t          | j        | j        | j                  D ]\  }}}|                    |                     dt"          d                     |                    |                     dt$                               |                    |                     d	t          |                               |                    |                     d	t          |                               |                                 t          j        | _        d S )
Nr   r   z-Model fails split requirements, not splittingz&Expected output file to be empty, got z<ITskip_pack_prefixrH   rK   )rp   rA   rU   rV   r]   ro   r   rC   r4   r6   r   r=   rB   r   r   write_packr   r   flushr7   )rc   r?   r=   rA   rB   s        r,   write_header_to_filezGGUFWriter.write_header_to_file   s   t|!!t'='B'BdFY]^F^F^NNJKKKd###:[...RdjRRSSSy$$$49~~T\!2!222224<  A%%%%   &)$)T\4<&P&P 	 	"D'7JJtzz$
tzLLMMMJJtzz#|44555JJtzz#s7||44555JJtzz#s7||44555JJLLLL '


r+   c           	        | j         t          j        urt          d| j                    | j        J t          | j        | j                  D ]\  }}t                      }|                                D ]U\  }}|| 	                    |t          j        d          z  }|| 	                    |j        |j        d|j                  z  }V|                    |           |                                  t          j        | _         d S )Nz0Expected output file to contain the header, got F	add_vtypeT)r   r2   )rC   r4   r7   r   r=   r   rB   	bytearrayrm   	_pack_valr   STRINGr/   r0   r2   r   r   r8   )rc   r=   rB   kv_byteskeyvals         r,   write_kv_data_to_filez GGUFWriter.write_kv_data_to_file   s    :[///\PTPZ\\]]]y$$$ DL99 	! 	!MD' {{H#MMOO g gSDNN30DPUNVVVDNN39ch$Y\YeNfffJJx    

 (


r+   c           
     R   | j         t          j        urt          d| j                    | j        J t          | j        | j                  D ]F\  }}t                      }d}|                                D ]\  }}|| 	                    |t          j        d          z  }t          |j                  }||                     d|          z  }t          |          D ],}||                     d|j        |dz
  |z
                     z  }-||                     d|j                  z  }||                     d|          z  }|t"                              |j        | j                  z  }|                    |           |                                 Ht          j        | _         d S )Nz-Expected output file to contain KV data, got r   Fr   rH   rK   r   )rC   r4   r8   r   r=   r   rA   r   rm   r   r   r   rp   r!   r   r   r"   r<   ggml_padr$   r\   r   r   r9   )	rc   r=   rA   ti_dataoffset_tensorrw   r   n_dimsjs	            r,   write_ti_data_to_filez GGUFWriter.write_ti_data_to_file   s   :[000YTZYYZZZy$$$ DL99 	 	MD'kkGM#MMOO U Ub4>>$0DPU>VVVRX4::c6222v I IAtzz#rx
Q/GHHHGG4::c284444::c=999!4!4RY@S!T!TTJJwJJLLLL (


r+   r   r   r   vtyper   r2   r1   c                    t          fd| j        D                       r(t                              dd|d|j                    t          |||          | j        d         <   d S )Nc              3      K   | ]}|v V  	d S r   r*   )r   rB   r   s     r,   r   z+GGUFWriter.add_key_value.<locals>.<genexpr>  s'      ::'sg~::::::r+   zDuplicated key name z , overwriting it with new value z	 of type )r/   r0   r2   r   )anyrB   r]   ro   rw   r.   )rc   r   r   r   r2   s    `   r,   add_key_valuezGGUFWriter.add_key_value  s    ::::T\::::: 	wNNu#uuY\uuinisuuvvv(sRRRQr+   c                H    |                      ||t          j                   d S r   )r   r   UINT8rc   r   r   s      r,   	add_uint8zGGUFWriter.add_uint8  s#    3sM$788888r+   c                H    |                      ||t          j                   d S r   )r   r   INT8r   s      r,   add_int8zGGUFWriter.add_int8  #    3]%788888r+   c                H    |                      ||t          j                   d S r   )r   r   r   r   s      r,   
add_uint16zGGUFWriter.add_uint16!  #    3]%9:::::r+   c                H    |                      ||t          j                   d S r   )r   r   INT16r   s      r,   	add_int16zGGUFWriter.add_int16$  #    3]%899999r+   c                H    |                      ||t          j                   d S r   )r   r   UINT32r   s      r,   
add_uint32zGGUFWriter.add_uint32'  r   r+   c                H    |                      ||t          j                   d S r   )r   r   r   r   s      r,   	add_int32zGGUFWriter.add_int32*  r   r+   floatc                H    |                      ||t          j                   d S r   )r   r   FLOAT32r   s      r,   add_float32zGGUFWriter.add_float32-  #    3]%:;;;;;r+   c                H    |                      ||t          j                   d S r   )r   r   UINT64r   s      r,   
add_uint64zGGUFWriter.add_uint640  r   r+   c                H    |                      ||t          j                   d S r   )r   r   INT64r   s      r,   	add_int64zGGUFWriter.add_int643  r   r+   c                H    |                      ||t          j                   d S r   )r   r   FLOAT64r   s      r,   add_float64zGGUFWriter.add_float646  r   r+   c                H    |                      ||t          j                   d S r   )r   r   BOOLr   s      r,   add_boolzGGUFWriter.add_bool9  r   r+   c                P    |sd S |                      ||t          j                   d S r   )r   r   r   r   s      r,   
add_stringzGGUFWriter.add_string<  s0     	F3]%9:::::r+   Sequence[Any]c                r    t          |          dk    rd S |                     ||t          j                   d S Nr   )rp   r   r   ARRAYr   s      r,   	add_arrayzGGUFWriter.add_arrayA  s7    s88q==F3]%899999r+   xnc                    | |z   dz
  |z  |z  S )Nr   r*   )r   r   s     r,   r   zGGUFWriter.ggml_padF  s    Qq A%%r+   rw   tensor_shaper    tensor_dtypenp.dtypetensor_nbytes	raw_dtypeGGMLQuantizationType | Nonec                b   | j         t          j        urt          d| j                    t	          fd| j        D                       rt          d          ||t          j        k    rt          j	        }n|t          j
        k    rt          j        }n|t          j        k    rt          j        }n|t          j        k    rt          j        }n|t          j        k    rt          j        }nk|t          j        k    rt          j        }nN|t          j        k    rt          j        }n1t          d          |}|t          j        k    rt/          ||          }t1          | j        d                   dk    r| j        dk    r#t1          | j        d                   | j        k    sM| j        dk    r\t7          d | j        d                                         D                       |z   | j        k    r| j                            i            t=          |||          | j        d         <   d S )	Nr   c              3      K   | ]}|v V  	d S r   r*   )r   rA   rw   s     r,   r   z-GGUFWriter.add_tensor_info.<locals>.<genexpr>Q  s'      ;;7tw;;;;;;r+   zDuplicated tensor name zCOnly F16, F32, F64, I8, I16, I32, I64 tensors are supported for nowrh   r   c              3  $   K   | ]}|j         V  d S r   r   r   s     r,   r   z-GGUFWriter.add_tensor_info.<locals>.<genexpr>q  s$      FFb	FFFFFFr+   )r!   r"   r$   )rC   r4   r5   r   r   rA   npfloat16r   F16float32F32float64F64int8I8int16I16int32I32int64I64uint8r   rp   rU   rV   r   r   ra   r   )rc   rw   r   r   r   r   r"   s    `     r,   add_tensor_infozGGUFWriter.add_tensor_infoJ  s    :[000[tz[[\\\;;;;dl;;;;; 	A?t??@@@rz)),0++,0++,0((,/)),0)),0)),0 !fgggErx'':<SS t|B  1$$&!++R())T-CCC#q((FFDL,<,C,C,E,EFFFFFVY]Ylll##B'''!+,eTa!b!b!bRr+   r%   np.ndarray[Any, Any]	raw_shapeSequence[int] | Nonetensor_endianessGGUFEndian | Nonec                0   |(t           j        dk    rt          j        nt          j        }|| j        k    r|                    d          }| j        r9| j        2t          j
        dd          }|                    d           || _        ||n|j        }|                     |||j        |j        |           | j        || j        d	         |         _        d S |                    | j                   |                     | j        |j                   d S )
NbigFinplacezw+bi   )modemax_sizer   )r   rh   )sys	byteorderr   r`   LITTLErT   byteswaprR   r@   tempfileSpooledTemporaryFileseekr!   r  r"   r$   rA   r%   tofilewrite_padding)rc   rw   r%   r  r   r  fpr!   s           r,   
add_tensorzGGUFWriter.add_tensorw  s   
 #14%1G1Gz~~ZM^t~--__U_33F 	 $."8.EDUVVVBGGAJJJDN,5,Ayyv|T5&,QZ[[[>!,2DLT")Fdn%%%4>6=99999r+   r'  	IO[bytes]align
int | Nonec                    t                               |||n| j                  |z
  }|dk    r(|                    t	          dg|z                       d S d S r   )r<   r   r\   r   bytes)rc   r'  r   r*  pads        r,   r&  zGGUFWriter.write_padding  s_    !!!e.?UUTEXYY\]]!88HHUA39%%&&&&& 8r+   c                ,   | j         t          j        ur*| j         t          j        urt	          d| j                    | j        J |(t          j        dk    rt          j	        nt          j
        }|| j        k    r|                    d          }d}t          | j                  D ]\  }}t          |          dk    r|} n| j        |         }t!          t#          | j        |                             }| j        |                             |          }|j        |j        k    sJ |                     ||                                           |                    |           |                     ||j                   t          j        | _         d S )Nz<Expected output file to contain tensor info or weights, got r  Fr  rh   r   )rC   r4   r9   r:   r   r=   r  r  r   r`   r   rT   r!  r   rA   rp   nextiterpopr$   r&  tellr%  )	rc   r%   r  file_idrI   rA   r=   first_tensor_namer   s	            r,   write_tensor_datazGGUFWriter.write_tensor_data  s   :[000TZ{GZ5Z5Zh\`\fhhiiiy$$$ #14%1G1Gz~~ZM^t~--__U_33F#DL11 	 	JAw7||a   y! !dl7&;!<!<==\'"&&'899yFM))))4---d4/// (


r+   )progressr7  c          	     `   |                                   | j        J | j        D ]*}|                     ||                                           +| j        d }d }|rpddlm} t          d | j        D                       }t          | j                  dk    r% |dt          | j                   dd dd	          } |d
|dd	          }t          t          | j        | j                            D ]0\  }\  }}|z|                    d|dz    dt          | j                   d           t          d |                                D                       }	|                    |	dk    r|	nd            |                                D ]}
|
j        J |
j        j        |
j        k    sJ |
j                            |           ||                    |
j                   ||                    |
j                   |                     ||
j                   d |
_        2nu| j                            d           t'          j        | j        | j        | j        sdnd                    |                                  | j                                         t0          j        | _        d S )Nr   )tqdmc              3  R   K   | ]"}|                                 D ]}|j        V  #d S r   )r   r$   )r   r   r   s      r,   r   z3GGUFWriter.write_tensors_to_file.<locals>.<genexpr>  s9      !W!WAHHJJ!W!Wb")!W!W!W!W!W!W!Wr+   r   z	Shard (0/)byteT)desctotalunit
unit_scaleWritingzShard (/c              3  $   K   | ]}|j         V  d S r   r   r   s     r,   r   z3GGUFWriter.write_tensors_to_file.<locals>.<genexpr>  s$      EEb	EEEEEEr+   )r>  )r   r=   r&  r3  r@   r9  r   rA   rp   r   r   set_descriptionr   resetr%   r$   r%  updater$  shutilcopyfileobjrX   r   closer4   r:   rC   )rc   r7  r=   	shard_barbarr9  total_bytesrI   rA   r>  r   s              r,   write_tensors_to_filez GGUFWriter.write_tensors_to_file  s   ""$$$y$$$I 	2 	2DtTYY[[1111>!IC \%%%%%%!!W!WT\!W!W!WWWty>>A%% $*Gc$)nn*G*G*GtZ`mq r r rId	6VZ[[[&/DIt|0L0L&M&M % %"?D'(--.QA.Q.QDI.Q.Q.QRRREEGNN4D4DEEEEEEOOEAII554OIII "..** 	% 	%B90009+ry8888I$$T*** ,!((333

29---&&tRY777 $BII	%%$ N"""t~ty$BX9_^_/`aaaJJLLLN  """ (


r+   c                T    | j         J | j         D ]}|                                 d S r   )r=   r   rc   r=   s     r,   r   zGGUFWriter.flush  s:    y$$$I 	 	DJJLLLL	 	r+   c                b    | j         '| j         D ]}|                                 d | _         d S d S r   )r=   rI  rO  s     r,   rI  zGGUFWriter.close  s=    9 	  

DIII ! r+   	type_namec                P    |                      t          j        j        |           d S r   )r   r   GeneralTYPE)rc   rQ  s     r,   add_typezGGUFWriter.add_type  s!    )955555r+   c                Z    |                      t          j        j        | j                   d S r   )r   r   rS  ARCHITECTURErP   )rc   s    r,   rb   zGGUFWriter.add_architecture  s#    149=====r+   quantization_versionc                P    |                      t          j        j        |           d S r   )r   r   rS  QUANTIZATION_VERSION)rc   rX  s     r,   add_quantization_versionz#GGUFWriter.add_quantization_version  s"    9;OPPPPPr+   	alignmentc                    |dk    s||dz
  z  dk    rt          d          || _        |                     t          j        j        |           d S )Nr   r   z2Invalid alignment: must be a non-zero power of two)r   r\   r   r   rS  	ALIGNMENT)rc   r\  s     r,   add_custom_alignmentzGGUFWriter.add_custom_alignment  sT    >>i9q=9a??QRRR'.	:::::r+   ftypec                P    |                      t          j        j        |           d S r   )r   r   rS  	FILE_TYPE)rc   r`  s     r,   add_file_typezGGUFWriter.add_file_type  s!    .66666r+   sequencec                P    |                      t          j        j        |           d S r   )r   r   rS  SAMPLING_SEQUENCE)rc   rd  s     r,   add_sampling_sequencez GGUFWriter.add_sampling_sequence  s!    6AAAAAr+   top_kc                P    |                      t          j        j        |           d S r   )r   r   rS  SAMPLING_TOP_Krc   rh  s     r,   add_sampling_top_kzGGUFWriter.add_sampling_top_k  s!    t|2E:::::r+   top_pc                P    |                      t          j        j        |           d S r   )r   r   rS  SAMPLING_TOP_P)rc   rm  s     r,   add_sampling_top_pzGGUFWriter.add_sampling_top_p  #    4e<<<<<r+   min_pc                P    |                      t          j        j        |           d S r   )r   r   rS  SAMPLING_MIN_P)rc   rr  s     r,   add_sampling_min_pzGGUFWriter.add_sampling_min_p  rq  r+   xtc_probabilityc                P    |                      t          j        j        |           d S r   )r   r   rS  SAMPLING_XTC_PROBABILITY)rc   rv  s     r,   add_sampling_xtc_probabilityz'GGUFWriter.add_sampling_xtc_probability  s#    >PPPPPr+   xtc_thresholdc                P    |                      t          j        j        |           d S r   )r   r   rS  SAMPLING_XTC_THRESHOLD)rc   rz  s     r,   add_sampling_xtc_thresholdz%GGUFWriter.add_sampling_xtc_threshold  s#    <mLLLLLr+   tempc                P    |                      t          j        j        |           d S r   )r   r   rS  SAMPLING_TEMP)rc   r~  s     r,   add_sampling_tempzGGUFWriter.add_sampling_temp  s#    3T:::::r+   penalty_last_nc                P    |                      t          j        j        |           d S r   )r   r   rS  SAMPLING_PENALTY_LAST_N)rc   r  s     r,   add_sampling_penalty_last_nz&GGUFWriter.add_sampling_penalty_last_n  s!    t|;^LLLLLr+   penalty_repeatc                P    |                      t          j        j        |           d S r   )r   r   rS  SAMPLING_PENALTY_REPEAT)rc   r  s     r,   add_sampling_penalty_repeatz&GGUFWriter.add_sampling_penalty_repeat  s#    =~NNNNNr+   mirostatc                P    |                      t          j        j        |           d S r   )r   r   rS  SAMPLING_MIROSTAT)rc   r  s     r,   add_sampling_mirostatz GGUFWriter.add_sampling_mirostat  s!    t|5x@@@@@r+   mirostat_tauc                P    |                      t          j        j        |           d S r   )r   r   rS  SAMPLING_MIROSTAT_TAU)rc   r  s     r,   add_sampling_mirostat_tauz$GGUFWriter.add_sampling_mirostat_tau   #    ;\JJJJJr+   mirostat_etac                P    |                      t          j        j        |           d S r   )r   r   rS  SAMPLING_MIROSTAT_ETA)rc   r  s     r,   add_sampling_mirostat_etaz$GGUFWriter.add_sampling_mirostat_eta#  r  r+   c                P    |                      t          j        j        |           d S r   )r   r   rS  NAME)rc   rw   s     r,   add_namezGGUFWriter.add_name&  !    )400000r+   authorc                P    |                      t          j        j        |           d S r   )r   r   rS  AUTHOR)rc   r  s     r,   
add_authorzGGUFWriter.add_author)  s!    +V44444r+   versionc                P    |                      t          j        j        |           d S r   )r   r   rS  VERSION)rc   r  s     r,   add_versionzGGUFWriter.add_version,  !    ,g66666r+   organizationc                P    |                      t          j        j        |           d S r   )r   r   rS  ORGANIZATION)rc   r  s     r,   add_organizationzGGUFWriter.add_organization/  s!    1<@@@@@r+   finetunec                P    |                      t          j        j        |           d S r   )r   r   rS  FINETUNE)rc   r  s     r,   add_finetunezGGUFWriter.add_finetune2  !    -x88888r+   basenamec                P    |                      t          j        j        |           d S r   )r   r   rS  BASENAME)rc   r  s     r,   add_basenamezGGUFWriter.add_basename5  r  r+   descriptionc                P    |                      t          j        j        |           d S r   )r   r   rS  DESCRIPTION)rc   r  s     r,   add_descriptionzGGUFWriter.add_description8  s!    0+>>>>>r+   	quantizedc                P    |                      t          j        j        |           d S r   )r   r   rS  QUANTIZED_BY)rc   r  s     r,   add_quantized_byzGGUFWriter.add_quantized_by;  s!    19=====r+   
size_labelc                P    |                      t          j        j        |           d S r   )r   r   rS  
SIZE_LABEL)rc   r  s     r,   add_size_labelzGGUFWriter.add_size_label>  s!    /<<<<<r+   licensec                P    |                      t          j        j        |           d S r   )r   r   rS  LICENSErc   r  s     r,   add_licensezGGUFWriter.add_licenseA  r  r+   c                P    |                      t          j        j        |           d S r   )r   r   rS  LICENSE_NAMEr  s     r,   add_license_namezGGUFWriter.add_license_nameD  !    17;;;;;r+   c                P    |                      t          j        j        |           d S r   )r   r   rS  LICENSE_LINKr  s     r,   add_license_linkzGGUFWriter.add_license_linkG  r  r+   urlc                P    |                      t          j        j        |           d S r   )r   r   rS  URLrc   r  s     r,   add_urlzGGUFWriter.add_urlJ  !    (#.....r+   doic                P    |                      t          j        j        |           d S r   )r   r   rS  DOIrc   r  s     r,   add_doizGGUFWriter.add_doiM  r  r+   uuidc                P    |                      t          j        j        |           d S r   )r   r   rS  UUIDrc   r  s     r,   add_uuidzGGUFWriter.add_uuidP  r  r+   repo_urlc                P    |                      t          j        j        |           d S r   )r   r   rS  REPO_URLrc   r  s     r,   add_repo_urlzGGUFWriter.add_repo_urlS  r  r+   c                P    |                      t          j        j        |           d S r   )r   r   rS  
SOURCE_URLr  s     r,   add_source_urlzGGUFWriter.add_source_urlV  !    /55555r+   c                P    |                      t          j        j        |           d S r   )r   r   rS  
SOURCE_DOIr  s     r,   add_source_doizGGUFWriter.add_source_doiY  r  r+   c                P    |                      t          j        j        |           d S r   )r   r   rS  SOURCE_UUIDr  s     r,   add_source_uuidzGGUFWriter.add_source_uuid\  s!    0$77777r+   c                P    |                      t          j        j        |           d S r   )r   r   rS  SOURCE_REPO_URLr  s     r,   add_source_repo_urlzGGUFWriter.add_source_repo_url_  s!    4h?????r+   source_countc                P    |                      t          j        j        |           d S r   )r   r   rS  BASE_MODEL_COUNTrc   r  s     r,   add_base_model_countzGGUFWriter.add_base_model_countb  s!    5|DDDDDr+   	source_idc                x    |                      t          j        j                            |          |           d S N)id)r   r   rS  BASE_MODEL_NAMEr_   rc   r  rw   s      r,   add_base_model_namezGGUFWriter.add_base_model_namee  2    4;;y;II4PPPPPr+   c                x    |                      t          j        j                            |          |           d S r  )r   r   rS  BASE_MODEL_AUTHORr_   rc   r  r  s      r,   add_base_model_authorz GGUFWriter.add_base_model_authorh  s2    6===KKVTTTTTr+   c                x    |                      t          j        j                            |          |           d S r  )r   r   rS  BASE_MODEL_VERSIONr_   rc   r  r  s      r,   add_base_model_versionz!GGUFWriter.add_base_model_versionk  s2    7>>)>LLgVVVVVr+   c                x    |                      t          j        j                            |          |           d S r  )r   r   rS  BASE_MODEL_ORGANIZATIONr_   rc   r  r  s      r,   add_base_model_organizationz&GGUFWriter.add_base_model_organizationn  s3    <CCyCQQS_`````r+   c                x    |                      t          j        j                            |          |           d S r  )r   r   rS  BASE_MODEL_DESCRIPTIONr_   rc   r  r  s      r,   add_base_model_descriptionz%GGUFWriter.add_base_model_descriptionq  s3    ;BBiBPPR]^^^^^r+   c                x    |                      t          j        j                            |          |           d S r  )r   r   rS  BASE_MODEL_URLr_   rc   r  r  s      r,   add_base_model_urlzGGUFWriter.add_base_model_urlt  2    3::i:HH#NNNNNr+   c                x    |                      t          j        j                            |          |           d S r  )r   r   rS  BASE_MODEL_DOIr_   rc   r  r  s      r,   add_base_model_doizGGUFWriter.add_base_model_doiw  r  r+   c                x    |                      t          j        j                            |          |           d S r  )r   r   rS  BASE_MODEL_UUIDr_   rc   r  r  s      r,   add_base_model_uuidzGGUFWriter.add_base_model_uuidz  r  r+   c                x    |                      t          j        j                            |          |           d S r  )r   r   rS  BASE_MODEL_REPO_URLr_   rc   r  r  s      r,   add_base_model_repo_urlz"GGUFWriter.add_base_model_repo_url}  s2    8??9?MMxXXXXXr+   c                P    |                      t          j        j        |           d S r   )r   r   rS  DATASET_COUNTr  s     r,   add_dataset_countzGGUFWriter.add_dataset_count  s!    2LAAAAAr+   c                x    |                      t          j        j                            |          |           d S r  )r   r   rS  DATASET_NAMEr_   r  s      r,   add_dataset_namezGGUFWriter.add_dataset_name  2    188I8FFMMMMMr+   c                x    |                      t          j        j                            |          |           d S r  )r   r   rS  DATASET_AUTHORr_   r  s      r,   add_dataset_authorzGGUFWriter.add_dataset_author  s2    3::i:HH&QQQQQr+   c                x    |                      t          j        j                            |          |           d S r  )r   r   rS  DATASET_VERSIONr_   r  s      r,   add_dataset_versionzGGUFWriter.add_dataset_version  s2    4;;y;II7SSSSSr+   c                x    |                      t          j        j                            |          |           d S r  )r   r   rS  DATASET_ORGANIZATIONr_   r  s      r,   add_dataset_organizationz#GGUFWriter.add_dataset_organization  s3    9@@I@NNP\]]]]]r+   c                x    |                      t          j        j                            |          |           d S r  )r   r   rS  DATASET_DESCRIPTIONr_   r  s      r,   add_dataset_descriptionz"GGUFWriter.add_dataset_description  s2    8??9?MM{[[[[[r+   c                x    |                      t          j        j                            |          |           d S r  )r   r   rS  DATASET_URLr_   r
  s      r,   add_dataset_urlzGGUFWriter.add_dataset_url  2    07797EEsKKKKKr+   c                x    |                      t          j        j                            |          |           d S r  )r   r   rS  DATASET_DOIr_   r  s      r,   add_dataset_doizGGUFWriter.add_dataset_doi  r/  r+   c                x    |                      t          j        j                            |          |           d S r  )r   r   rS  DATASET_UUIDr_   r  s      r,   add_dataset_uuidzGGUFWriter.add_dataset_uuid  r  r+   c                x    |                      t          j        j                            |          |           d S r  )r   r   rS  DATASET_REPO_URLr_   r  s      r,   add_dataset_repo_urlzGGUFWriter.add_dataset_repo_url  s2    5<<	<JJHUUUUUr+   tagsSequence[str]c                P    |                      t          j        j        |           d S r   )r   r   rS  TAGS)rc   r9  s     r,   add_tagszGGUFWriter.add_tags  s!    t|($/////r+   	languagesc                P    |                      t          j        j        |           d S r   )r   r   rS  	LANGUAGES)rc   r>  s     r,   add_languageszGGUFWriter.add_languages  s!    t|-y99999r+   layoutc                    |                      t          j        j                            | j                  |           d S NrP   )r   r   LLMTENSOR_DATA_LAYOUTr_   rP   )rc   rB  s     r,   add_tensor_data_layoutz!GGUFWriter.add_tensor_data_layout  s4    3::	:JJFSSSSSr+   rx   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   rF  
VOCAB_SIZEr_   rP   rc   rx   s     r,   add_vocab_sizezGGUFWriter.add_vocab_size  s4    +22	2BBDIIIIIr+   lengthc                    |                      t          j        j                            | j                  |           d S rD  )r   r   rF  CONTEXT_LENGTHr_   rP   rc   rM  s     r,   add_context_lengthzGGUFWriter.add_context_length  s4    /66DI6FFOOOOOr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   rF  EMBEDDING_LENGTHr_   rP   rP  s     r,   add_embedding_lengthzGGUFWriter.add_embedding_length  s4    188di8HH&QQQQQr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   rF  EMBEDDING_LENGTH_OUTr_   rP   rP  s     r,   add_embedding_length_outz#GGUFWriter.add_embedding_length_out  s4    5<<$)<LLfUUUUUr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   rF  FEATURES_LENGTHr_   rP   rP  s     r,   add_features_lengthzGGUFWriter.add_features_length  s4    077TY7GGPPPPPr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   PosNetrS  r_   rP   rP  s     r,   add_posnet_embedding_lengthz&GGUFWriter.add_posnet_embedding_length  s4    4;;;KKVTTTTTr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   r\  BLOCK_COUNTr_   rP   rP  s     r,   add_posnet_block_countz!GGUFWriter.add_posnet_block_count  s4    /66DI6FFOOOOOr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   ConvNextrS  r_   rP   rP  s     r,   add_convnext_embedding_lengthz(GGUFWriter.add_convnext_embedding_length  s4    6==49=MMvVVVVVr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   rb  r_  r_   rP   rP  s     r,   add_convnext_block_countz#GGUFWriter.add_convnext_block_count  s4    188di8HH&QQQQQr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   	ShortConvL_CACHEr_   rP   rP  s     r,   add_shortconv_l_cachez GGUFWriter.add_shortconv_l_cache  s4    .55495EEvNNNNNr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   rF  r_  r_   rP   rP  s     r,   add_block_countzGGUFWriter.add_block_count  s4    ,333CCVLLLLLr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   rF  LEADING_DENSE_BLOCK_COUNTr_   rP   rP  s     r,   add_leading_dense_block_countz(GGUFWriter.add_leading_dense_block_count  s5    :AAtyAQQSYZZZZZr+   intervalc                    |                      t          j        j                            | j                  |           d S rD  )r   r   rF  FULL_ATTENTION_INTERVALr_   rP   )rc   ro  s     r,   add_full_attention_intervalz&GGUFWriter.add_full_attention_interval  s5    8??TY?OOQYZZZZZr+   int | Sequence[int]c                ,   t          |t                    r@|                     t          j        j                            | j                  |           d S |                     t          j        j                            | j                  |           d S rD  )	
isinstancer#   r   r   rF  FEED_FORWARD_LENGTHr_   rP   r   rP  s     r,   add_feed_forward_lengthz"GGUFWriter.add_feed_forward_length  s{    fc"" 	XOODH8??TY?OOQWXXXXXNN487>>DI>NNPVWWWWWr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   rF  EXPERT_FEED_FORWARD_LENGTHr_   rP   rP  s     r,   add_expert_feed_forward_lengthz)GGUFWriter.add_expert_feed_forward_length  s5    ;BB	BRRTZ[[[[[r+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   rF  !EXPERT_SHARED_FEED_FORWARD_LENGTHr_   rP   rP  s     r,   %add_expert_shared_feed_forward_lengthz0GGUFWriter.add_expert_shared_feed_forward_length  s5    BIItyIYY[abbbbbr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   rF   EXPERT_CHUNK_FEED_FORWARD_LENGTHr_   rP   rP  s     r,   $add_expert_chunk_feed_forward_lengthz/GGUFWriter.add_expert_chunk_feed_forward_length  s5    AHHdiHXXZ`aaaaar+   usec                    |                      t          j        j                            | j                  |           d S rD  )r   r   rF  USE_PARALLEL_RESIDUALr_   rP   )rc   r  s     r,   add_parallel_residualz GGUFWriter.add_parallel_residual  s4    dh4;;;KKSQQQQQr+   r  c                    |                      t          j        j                            | j                  |           d S rD  )r   r   rF  DECODER_START_TOKEN_IDr_   rP   rc   r  s     r,   add_decoder_start_token_idz%GGUFWriter.add_decoder_start_token_id  s5    7>>DI>NNPRSSSSSr+   r/   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   rF  DECODER_BLOCK_COUNTr_   rP   rc   r/   s     r,   add_decoder_block_countz"GGUFWriter.add_decoder_block_count  4    4;;;KKUSSSSSr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   rF  EMBD_LENGTH_PER_LAYER_INPr_   rP   r  s     r,   $add_embedding_length_per_layer_inputz/GGUFWriter.add_embedding_length_per_layer_input  5    :AAtyAQQSXYYYYYr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   rF  ALTUP_ACTIVE_IDXr_   rP   rc   r   s     r,   add_altup_active_idxzGGUFWriter.add_altup_active_idx  4    188di8HH#NNNNNr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   rF  ALTUP_NUM_INPUTSr_   rP   r  s     r,   add_altup_num_inputszGGUFWriter.add_altup_num_inputs  r  r+   r   Sequence[float]c                    |                      t          j        j                            | j                  |           d S rD  )r   r   rF  ACTIVATION_SPARSITY_SCALEr_   rP   rc   r   s     r,   add_activation_sparsity_scalez(GGUFWriter.add_activation_sparsity_scale  s5    tx9@@di@PPRXYYYYYr+   countc                ,   t          |t                    r@|                     t          j        j                            | j                  |           d S |                     t          j        j                            | j                  |           d S rD  )	ru  r#   r   r   	Attention
HEAD_COUNTr_   rP   r   rc   r  s     r,   add_head_countzGGUFWriter.add_head_count  sy    eS!! 	TOODN5<<$)<LLeTTTTTNN4>4;;;KKUSSSSSr+   c                ,   t          |t                    r@|                     t          j        j                            | j                  |           d S |                     t          j        j                            | j                  |           d S rD  )	ru  r#   r   r   r  HEAD_COUNT_KVr_   rP   r   r  s     r,   add_head_count_kvzGGUFWriter.add_head_count_kv  s{    eS!! 	WOODN8??TY?OOQVWWWWWNN4>7>>DI>NNPUVVVVVr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   r  
KEY_LENGTHr_   rP   rP  s     r,   add_key_lengthzGGUFWriter.add_key_length  s4    188di8HH&QQQQQr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   r  VALUE_LENGTHr_   rP   rP  s     r,   add_value_lengthzGGUFWriter.add_value_length  4    3::	:JJFSSSSSr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   r  KEY_LENGTH_MLAr_   rP   rP  s     r,   add_key_length_mlazGGUFWriter.add_key_length_mla  4    5<<$)<LLfUUUUUr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   r  VALUE_LENGTH_MLAr_   rP   rP  s     r,   add_value_length_mlazGGUFWriter.add_value_length_mla  5    7>>DI>NNPVWWWWWr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   r  KEY_LENGTH_SWAr_   rP   rP  s     r,   add_key_length_swazGGUFWriter.add_key_length_swa
  r  r+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   r  VALUE_LENGTH_SWAr_   rP   rP  s     r,   add_value_length_swazGGUFWriter.add_value_length_swa  r  r+   c                    |                      t          j        j        j                            | j                  |           d S rD  )r   r   r  Indexerr  r_   rP   r  s     r,   add_indexer_head_countz!GGUFWriter.add_indexer_head_count  s8    .9@@di@PPRWXXXXXr+   c                    |                      t          j        j        j                            | j                  |           d S rD  )r   r   r  r  r  r_   rP   rP  s     r,   add_indexer_key_lengthz!GGUFWriter.add_indexer_key_length  s8    .9@@di@PPRXYYYYYr+   c                    |                      t          j        j        j                            | j                  |           d S rD  )r   r   r  r  TOP_Kr_   rP   rk  s     r,   add_indexer_top_kzGGUFWriter.add_indexer_top_k  s7    .4;;;KKUSSSSSr+   biasc                    |                      t          j        j                            | j                  |           d S rD  )r   r   r  MAX_ALIBI_BIASr_   rP   )rc   r  s     r,   add_max_alibi_biaszGGUFWriter.add_max_alibi_bias  s6    6==49=MMtTTTTTr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   r  	CLAMP_KQVr_   rP   r  s     r,   add_clamp_kqvzGGUFWriter.add_clamp_kqv  s6    188di8HH%PPPPPr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   r  SHARED_KV_LAYERSr_   rP   r  s     r,   add_shared_kv_layerszGGUFWriter.add_shared_kv_layers  5    7>>DI>NNPUVVVVVr+   int | Sequence[bool]c                    t           j        j                            | j                  }t          |t                    r|                     ||           d S |                     ||           d S rD  )	r   r  SLIDING_WINDOW_PATTERNr_   rP   ru  r#   r   r   )rc   r/   r   s      r,   add_sliding_window_patternz%GGUFWriter.add_sliding_window_pattern#  se    n3::	:JJeS!! 	'OOC'''''NN3&&&&&r+   densein_fout_fc                   |                      t          j        j                            | j        |          |           |                      t          j        j                            | j        |          |           d S )N)rP   r  )r   r   rF  DENSE_FEAT_IN_SIZEr_   rP   DENSE_FEAT_OUT_SIZE)rc   r  r  r  s       r,   add_dense_features_dimsz"GGUFWriter.add_dense_features_dims*  sh    3::	QV:WWY]^^^4;;RW;XXZ_`````r+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   rF  LOGIT_SCALEr_   rP   r  s     r,   add_logit_scalezGGUFWriter.add_logit_scale.  s6    -44$)4DDeLLLLLr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   rF  ATTN_LOGIT_SOFTCAPPINGr_   rP   r  s     r,   add_attn_logit_softcappingz%GGUFWriter.add_attn_logit_softcapping1  s7    8??TY?OOQVWWWWWr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   rF  ROUTER_LOGIT_SOFTCAPPINGr_   rP   r  s     r,   add_router_logit_softcappingz'GGUFWriter.add_router_logit_softcapping4  s7    :AAtyAQQSXYYYYYr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   rF  FINAL_LOGIT_SOFTCAPPINGr_   rP   r  s     r,   add_final_logit_softcappingz&GGUFWriter.add_final_logit_softcapping7  s7    9@@di@PPRWXXXXXr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   rF  EXPERT_COUNTr_   rP   r  s     r,   add_expert_countzGGUFWriter.add_expert_count:  s4    -44$)4DDeLLLLLr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   rF  EXPERT_USED_COUNTr_   rP   r  s     r,   add_expert_used_countz GGUFWriter.add_expert_used_count=  4    299ty9II5QQQQQr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   rF  EXPERT_SHARED_COUNTr_   rP   r  s     r,   add_expert_shared_countz"GGUFWriter.add_expert_shared_count@  r  r+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   rF  EXPERT_GROUP_COUNTr_   rP   r  s     r,   add_expert_group_countz!GGUFWriter.add_expert_group_countC  4    3::	:JJERRRRRr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   rF  EXPERT_GROUP_USED_COUNTr_   rP   r  s     r,   add_expert_group_used_countz&GGUFWriter.add_expert_group_used_countF  s5    8??TY?OOQVWWWWWr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   rF  EXPERT_WEIGHTS_SCALEr_   rP   r  s     r,   add_expert_weights_scalez#GGUFWriter.add_expert_weights_scaleI  s6    6==49=MMuUUUUUr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   rF  EXPERT_WEIGHTS_NORMr_   rP   r  s     r,   add_expert_weights_normz"GGUFWriter.add_expert_weights_normL  s4    dh299ty9II5QQQQQr+   r   c                    |                      t          j        j                            | j                  |j                   d S rD  )r   r   rF  EXPERT_GATING_FUNCr_   rP   r/   r  s     r,   add_expert_gating_funcz!GGUFWriter.add_expert_gating_funcO  s6    3::	:JJEKXXXXXr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   rF  SWIGLU_CLAMP_EXPr_   rP   r  s     r,   add_swiglu_clamp_expzGGUFWriter.add_swiglu_clamp_expR  s4    tx077TY7GGPPPPPr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   rF  SWIGLU_CLAMP_SHEXPr_   rP   r  s     r,   add_swiglu_clamp_shexpz!GGUFWriter.add_swiglu_clamp_shexpU  s4    tx299ty9II6RRRRRr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   rF  
HIDDEN_ACTr_   rP   r  s     r,   add_hidden_actzGGUFWriter.add_hidden_actX  4    +22	2BBEJJJJJr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   rF  EXPERT_GROUP_SCALEr_   rP   r  s     r,   add_expert_group_scalez!GGUFWriter.add_expert_group_scale[  s6    4;;;KKUSSSSSr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   rF  EXPERTS_PER_GROUPr_   rP   r  s     r,   add_experts_per_groupz GGUFWriter.add_experts_per_group^  r  r+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   rF  MOE_EVERY_N_LAYERSr_   rP   r  s     r,   add_moe_every_n_layersz!GGUFWriter.add_moe_every_n_layersa  r  r+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   rF  MOE_LATENT_SIZEr_   rP   r  s     r,   add_moe_latent_sizezGGUFWriter.add_moe_latent_sized  s4    077TY7GGOOOOOr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   rF  NEXTN_PREDICT_LAYERSr_   rP   r  s     r,   add_nextn_predict_layersz#GGUFWriter.add_nextn_predict_layersg  s4    5<<$)<LLeTTTTTr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   rF  	SWIN_NORMr_   rP   r  s     r,   add_swin_normzGGUFWriter.add_swin_normj  s4    dh(//TY/??GGGGGr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   rF  RESCALE_EVERY_N_LAYERSr_   rP   r  s     r,   add_rescale_every_n_layersz%GGUFWriter.add_rescale_every_n_layersm  s5    7>>DI>NNPUVVVVVr+   dimc                    |                      t          j        j                            | j                  |           d S rD  )r   r   rF  TIME_MIX_EXTRA_DIMr_   rP   rc   r   s     r,   add_time_mix_extra_dimz!GGUFWriter.add_time_mix_extra_dimp  s4    3::	:JJCPPPPPr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   rF  TIME_DECAY_EXTRA_DIMr_   rP   r#  s     r,   add_time_decay_extra_dimz#GGUFWriter.add_time_decay_extra_dims  s4    5<<$)<LLcRRRRRr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   rF  RESIDUAL_SCALEr_   rP   r  s     r,   add_residual_scalezGGUFWriter.add_residual_scalev  s6    077TY7GGOOOOOr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   rF  EMBEDDING_SCALEr_   rP   r  s     r,   add_embedding_scalezGGUFWriter.add_embedding_scaley  s6    188di8HH%PPPPPr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   WKV	HEAD_SIZEr_   rP   rK  s     r,   add_wkv_head_sizezGGUFWriter.add_wkv_head_size|  s4    *11ty1AA4HHHHHr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   rF  TOKEN_SHIFT_COUNTr_   rP   r  s     r,   add_token_shift_countz GGUFWriter.add_token_shift_count  r  r+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   rF  INTERLEAVE_MOE_LAYER_STEPr_   rP   r  s     r,   add_interleave_moe_layer_stepz(GGUFWriter.add_interleave_moe_layer_step  r  r+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   r  LAYERNORM_EPSr_   rP   r  s     r,   add_layer_norm_epszGGUFWriter.add_layer_norm_eps  6    5<<$)<LLeTTTTTr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   r  LAYERNORM_RMS_EPSr_   rP   r  s     r,   add_layer_norm_rms_epsz!GGUFWriter.add_layer_norm_rms_eps  7    9@@di@PPRWXXXXXr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   r  GROUPNORM_EPSr_   rP   r  s     r,   add_group_norm_epszGGUFWriter.add_group_norm_eps  r;  r+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   r  GROUPNORM_GROUPSr_   rP   r  s     r,   add_group_norm_groupsz GGUFWriter.add_group_norm_groups  r  r+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   r  CAUSALr_   rP   r  s     r,   add_causal_attentionzGGUFWriter.add_causal_attention  s4    dn+22	2BBEJJJJJr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   r  Q_LORA_RANKr_   rP   rP  s     r,   add_q_lora_rankzGGUFWriter.add_q_lora_rank  s4    299ty9II6RRRRRr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   r  KV_LORA_RANKr_   rP   rP  s     r,   add_kv_lora_rankzGGUFWriter.add_kv_lora_rank  r  r+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   r  DECAY_LORA_RANKr_   rP   rP  s     r,   add_decay_lora_rankzGGUFWriter.add_decay_lora_rank  s4    6==49=MMvVVVVVr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   r  ICLR_LORA_RANKr_   rP   rP  s     r,   add_iclr_lora_rankzGGUFWriter.add_iclr_lora_rank  r  r+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   r  VALUE_RESIDUAL_MIX_LORA_RANKr_   rP   rP  s     r,    add_value_residual_mix_lora_rankz+GGUFWriter.add_value_residual_mix_lora_rank  s7    CJJPTPYJZZ\bcccccr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   RopeFREQ_BASE_SWAr_   rP   r  s     r,   add_rope_freq_base_swaz!GGUFWriter.add_rope_freq_base_swa  6    077TY7GGOOOOOr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   r  GATE_LORA_RANKr_   rP   rP  s     r,   add_gate_lora_rankzGGUFWriter.add_gate_lora_rank  r  r+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   r  REL_BUCKETS_COUNTr_   rP   r  s     r,   add_relative_attn_buckets_countz*GGUFWriter.add_relative_attn_buckets_count  s5    8??TY?OOQVWWWWWr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   r  SLIDING_WINDOWr_   rP   r  s     r,   add_sliding_windowzGGUFWriter.add_sliding_window  s4    5<<$)<LLeTTTTTr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   r  SCALEr_   rP   r  s     r,   add_attention_scalezGGUFWriter.add_attention_scale  s6    -44$)4DDeLLLLLr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   r  OUTPUT_SCALEr_   rP   r  s     r,   add_attn_output_scalez GGUFWriter.add_attn_output_scale  s6    4;;;KKUSSSSSr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   r  VALUE_SCALEr_   rP   r  s     r,   add_attn_value_scalezGGUFWriter.add_attn_value_scale  s6    3::	:JJERRRRRr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   r  TEMPERATURE_LENGTHr_   rP   r  s     r,   add_attn_temperature_lengthz&GGUFWriter.add_attn_temperature_length  s5    9@@di@PPRWXXXXXr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   r  TEMPERATURE_SCALEr_   rP   r  s     r,   add_attn_temperature_scalez%GGUFWriter.add_attn_temperature_scale  r?  r+   r   c                    |                      t          j        j                            | j                  |j                   d S rD  )r   r   rF  POOLING_TYPEr_   rP   r/   r  s     r,   add_pooling_typezGGUFWriter.add_pooling_type  s6    -44$)4DDekRRRRRr+   c                    |                      t          j        j                            | j                  |           dS )z1Add scalar deepstack layer count (qwen3vl format)rE  N)r   r   rF  NUM_DEEPSTACK_LAYERSr_   rP   r  s     r,   add_num_deepstack_layersz#GGUFWriter.add_num_deepstack_layers  s4    5<<$)<LLeTTTTTr+   layersc                    |                      t          j        j                            | j                  t          |                     dS )zBAdd per-layer deepstack projector indices (Granite4 Vision format)rE  N)r   r   rF  DEEPSTACK_MAPPINGr_   rP   listrc   r{  s     r,   add_deepstack_mappingz GGUFWriter.add_deepstack_mapping  s:    tx188di8HH$v,,WWWWWr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   rY  DIMENSION_COUNTr_   rP   r  s     r,   add_rope_dimension_countz#GGUFWriter.add_rope_dimension_count  s4    	188di8HH%PPPPPr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   rY  DIMENSION_COUNT_SWAr_   rP   r  s     r,   add_rope_dimension_count_swaz'GGUFWriter.add_rope_dimension_count_swa  s4    	5<<$)<LLeTTTTTr+   dimsc                    |                      t          j        j                            | j                  |           d S rD  )r   r   rY  DIMENSION_SECTIONSr_   rP   )rc   r  s     r,   add_rope_dimension_sectionsz&GGUFWriter.add_rope_dimension_sections  s4    ty3::	:JJDQQQQQr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   rY  	FREQ_BASEr_   rP   r  s     r,   add_rope_freq_basezGGUFWriter.add_rope_freq_base  s6    ,333CCUKKKKKr+   r   c                    |                      t          j        j                            | j                  |j                   d S rD  )r   r   rY  SCALING_TYPEr_   rP   r/   r  s     r,   add_rope_scaling_typez GGUFWriter.add_rope_scaling_type  s6    	.55495EEu{SSSSSr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   rY  SCALING_FACTORr_   rP   r  s     r,   add_rope_scaling_factorz"GGUFWriter.add_rope_scaling_factor  s6    188di8HH%PPPPPr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   rY  SCALING_ALPHAr_   rP   r  s     r,   add_rope_scaling_alphaz!GGUFWriter.add_rope_scaling_alpha  r\  r+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   rY  SCALING_ATTN_FACTORr_   rP   r  s     r,   add_rope_scaling_attn_factorsz(GGUFWriter.add_rope_scaling_attn_factors  s6    6==49=MMuUUUUUr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   rY  SCALING_ORIG_CTX_LENr_   rP   r  s     r,   add_rope_scaling_orig_ctx_lenz(GGUFWriter.add_rope_scaling_orig_ctx_len  s4    	6==49=MMuUUUUUr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   rY  SCALING_FINETUNEDr_   rP   r  s     r,   add_rope_scaling_finetunedz%GGUFWriter.add_rope_scaling_finetuned  s4    di188di8HH%PPPPPr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   rY  SCALING_YARN_LOG_MULr_   rP   r  s     r,   add_rope_scaling_yarn_log_mulz(GGUFWriter.add_rope_scaling_yarn_log_mul  s7    7>>DI>NNPUVVVVVr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   rY  SCALING_YARN_EXT_FACTORr_   rP   r  s     r,    add_rope_scaling_yarn_ext_factorz+GGUFWriter.add_rope_scaling_yarn_ext_factor  s7    :AAtyAQQSXYYYYYr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   rY  SCALING_YARN_ATTN_FACTORr_   rP   r  s     r,   !add_rope_scaling_yarn_attn_factorz,GGUFWriter.add_rope_scaling_yarn_attn_factor  s7    ;BB	BRRTYZZZZZr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   rY  SCALING_YARN_BETA_FASTr_   rP   r  s     r,   add_rope_scaling_yarn_beta_fastz*GGUFWriter.add_rope_scaling_yarn_beta_fast  7    9@@di@PPRWXXXXXr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   rY  SCALING_YARN_BETA_SLOWr_   rP   r  s     r,   add_rope_scaling_yarn_beta_slowz*GGUFWriter.add_rope_scaling_yarn_beta_slow  r  r+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   SSMCONV_KERNELr_   rP   r  s     r,   add_ssm_conv_kernelzGGUFWriter.add_ssm_conv_kernel  4    ,333CCUKKKKKr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   r  
INNER_SIZEr_   rP   r  s     r,   add_ssm_inner_sizezGGUFWriter.add_ssm_inner_size  r
  r+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   r  
STATE_SIZEr_   rP   r  s     r,   add_ssm_state_sizezGGUFWriter.add_ssm_state_size  r
  r+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   r  TIME_STEP_RANKr_   rP   r  s     r,   add_ssm_time_step_rankz!GGUFWriter.add_ssm_time_step_rank  s4    /66DI6FFNNNNNr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   r  GROUP_COUNTr_   rP   r  s     r,   add_ssm_group_countzGGUFWriter.add_ssm_group_count  r  r+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   r  
DT_B_C_RMSr_   rP   r  s     r,   add_ssm_dt_b_c_rmszGGUFWriter.add_ssm_dt_b_c_rms  s4    dh)00di0@@%HHHHHr+   c                    |                      t          j        j                            | j                  |           d S rD  )r   r   KDAHEAD_DIMr_   rP   r  s     r,   add_kda_head_dimzGGUFWriter.add_kda_head_dim  s4    )00di0@@%HHHHHr+   modelc                P    |                      t          j        j        |           d S r   )r   r   	TokenizerMODEL)rc   r  s     r,   add_tokenizer_modelzGGUFWriter.add_tokenizer_model  s!    ,e44444r+   prec                P    |                      t          j        j        |           d S r   )r   r   r  PRE)rc   r  s     r,   add_tokenizer_prezGGUFWriter.add_tokenizer_pre  s!    *C00000r+   tokens5Sequence[str] | Sequence[bytes] | Sequence[bytearray]c                P    |                      t          j        j        |           d S r   )r   r   r  LISTrc   r  s     r,   add_token_listzGGUFWriter.add_token_list  s!    t~*F33333r+   mergesc                P    |                      t          j        j        |           d S r   )r   r   r  MERGES)rc   r  s     r,   add_token_mergeszGGUFWriter.add_token_merges  !    t~,f55555r+   types#Sequence[TokenType] | Sequence[int]c                P    |                      t          j        j        |           d S r   )r   r   r  
TOKEN_TYPE)rc   r  s     r,   add_token_typeszGGUFWriter.add_token_types  s!    t~0%88888r+   c                P    |                      t          j        j        |           d S r   )r   r   r  TOKEN_TYPE_COUNTr  s     r,   add_token_type_countzGGUFWriter.add_token_type_count  !    7?????r+   scoresc                P    |                      t          j        j        |           d S r   )r   r   r  SCORES)rc   r  s     r,   add_token_scoreszGGUFWriter.add_token_scores  r  r+   c                P    |                      t          j        j        |           d S r   )r   r   r  BOS_IDr  s     r,   add_bos_token_idzGGUFWriter.add_bos_token_id   !    -r22222r+   c                P    |                      t          j        j        |           d S r   )r   r   r  EOS_IDr  s     r,   add_eos_token_idzGGUFWriter.add_eos_token_id#  r  r+   c                P    |                      t          j        j        |           d S r   )r   r   r  UNK_IDr  s     r,   add_unk_token_idzGGUFWriter.add_unk_token_id&  r  r+   c                P    |                      t          j        j        |           d S r   )r   r   r  SEP_IDr  s     r,   add_sep_token_idzGGUFWriter.add_sep_token_id)  r  r+   c                P    |                      t          j        j        |           d S r   )r   r   r  PAD_IDr  s     r,   add_pad_token_idzGGUFWriter.add_pad_token_id,  r  r+   c                P    |                      t          j        j        |           d S r   )r   r   r  MASK_IDr  s     r,   add_mask_token_idzGGUFWriter.add_mask_token_id/  s!    .33333r+   c                P    |                      t          j        j        |           d S r   )r   r   r  ADD_BOSr  s     r,   add_add_bos_tokenzGGUFWriter.add_add_bos_token2  !    dn,e44444r+   c                P    |                      t          j        j        |           d S r   )r   r   r  ADD_EOSr  s     r,   add_add_eos_tokenzGGUFWriter.add_add_eos_token5  r  r+   c                P    |                      t          j        j        |           d S r   )r   r   r  ADD_SEPr  s     r,   add_add_sep_tokenzGGUFWriter.add_add_sep_token8  r  r+   c                P    |                      t          j        j        |           d S r   )r   r   r  
ADD_PREFIXr  s     r,   add_add_space_prefixzGGUFWriter.add_add_space_prefix;  s!    dn/77777r+   c                P    |                      t          j        j        |           d S r   )r   r   r  REMOVE_EXTRA_WSr  s     r,   add_remove_extra_whitespacesz'GGUFWriter.add_remove_extra_whitespaces>  s!    dn4e<<<<<r+   charsmapr-  c                P    |                      t          j        j        |           d S r   )r   r   r  PRECOMPILED_CHARSMAP)rc   r  s     r,   add_precompiled_charsmapz#GGUFWriter.add_precompiled_charsmapA  s!    t~:HEEEEEr+   !str | Sequence[Mapping[str, str]]c                b   t          |t                    sd }t                      }|D ]}|                    dd          }|                    d          }d                    d |D                       }|rY|W|dk    r|}Y|                    |           |                     t          j        j	        
                    |          |           |r2|                     t          j        j        t          |                     |d S |}|                     t          j        j        |           d S )Nrw    templatec              3  @   K   | ]}|t           t          z   v r|nd V  dS )r   Nr   )r   cs     r,   r   z/GGUFWriter.add_chat_template.<locals>.<genexpr>N  s5      XXaQ-&*@%@%@cXXXXXXr+   default)rw   )ru  rQ   setgetjoinaddr   r   r  CHAT_TEMPLATE_Nr_   r   CHAT_TEMPLATESr~  CHAT_TEMPLATE)rc   r/   template_defaulttemplate_nameschoicerw   r  s          r,   add_chat_templatezGGUFWriter.add_chat_templateD  s7   %%% 	%# UUN d dzz&"--!::j11 wwXXSWXXXYY dH0y((+3((&**4000(F(M(MSW(M(X(XZbccc Tt~<d>>R>RSSS'$E4e<<<<<r+   c                P    |                      t          j        j        |           d S r   )r   r   r  SUPPRESS_TOKENSr  s     r,   add_suppress_tokenszGGUFWriter.add_suppress_tokensa  s!    t~5v>>>>>r+   c                P    |                      t          j        j        |           d S r   )r   r   r  NORMALIZER_LOWERCASEr  s     r,   add_normalizer_lowercasez#GGUFWriter.add_normalizer_lowercased  s!    dn95AAAAAr+   c                P    |                      t          j        j        |           d S r   )r   r   r  NORMALIZER_STRIP_ACCENTSr  s     r,   add_normalizer_strip_accentsz'GGUFWriter.add_normalizer_strip_accentsg  s!    dn=uEEEEEr+   c                P    |                      t          j        j        |           d S r   )r   r   r  EOT_IDr  s     r,   add_eot_token_idzGGUFWriter.add_eot_token_idj  r  r+   c                P    |                      t          j        j        |           d S r   )r   r   r  EOM_IDr  s     r,   add_eom_token_idzGGUFWriter.add_eom_token_idm  r  r+   labelsc                    |                      t          j        j                            | j                  |           d S rD  )r   r   
ClassifierOUTPUT_LABELSr_   rP   )rc   r1  s     r,   add_classifier_output_labelsz'GGUFWriter.add_classifier_output_labelsp  s4    t4;;;KKVTTTTTr+   c                P    |                      t          j        j        |           d S r   )r   r   ClipHAS_VISION_ENCODERr  s     r,   add_clip_has_vision_encoderz&GGUFWriter.add_clip_has_vision_encoderu  s!    di2E:::::r+   c                P    |                      t          j        j        |           d S r   )r   r   r7  HAS_AUDIO_ENCODERr  s     r,   add_clip_has_audio_encoderz%GGUFWriter.add_clip_has_audio_encoderx  s!    di1599999r+   c                P    |                      t          j        j        |           d S r   )r   r   r7  PROJECTOR_TYPEr  s     r,   add_clip_projector_typez"GGUFWriter.add_clip_projector_type{  s!    	0%88888r+   c                P    |                      t          j        j        |           d S r   )r   r   
ClipVisionr>  r  s     r,   add_clip_vision_projector_typez)GGUFWriter.add_clip_vision_projector_type~  !    6>>>>>r+   c                P    |                      t          j        j        |           d S r   )r   r   rA  PROJECTION_DIMr  s     r,   add_vision_projection_dimz$GGUFWriter.add_vision_projection_dim  rC  r+   c                P    |                      t          j        j        |           d S r   )r   r   rA  
PATCH_SIZEr  s     r,   add_vision_patch_sizez GGUFWriter.add_vision_patch_size  !    2E:::::r+   c                P    |                      t          j        j        |           d S r   )r   r   rA  rS  r  s     r,   add_vision_embedding_lengthz&GGUFWriter.add_vision_embedding_length  !    8%@@@@@r+   c                P    |                      t          j        j        |           d S r   )r   r   rA  rv  r  s     r,   add_vision_feed_forward_lengthz)GGUFWriter.add_vision_feed_forward_length  s!    ;UCCCCCr+   c                P    |                      t          j        j        |           d S r   )r   r   rA  r_  r  s     r,   add_vision_block_countz!GGUFWriter.add_vision_block_count  !    3U;;;;;r+   c                Z    |                      t          j        j        j        |           d S r   )r   r   rA  r  r  r  s     r,   add_vision_head_countz GGUFWriter.add_vision_head_count  $    1<eDDDDDr+   c                Z    |                      t          j        j        j        |           d S r   )r   r   rA  r  r  r  s     r,   add_vision_head_count_kvz#GGUFWriter.add_vision_head_count_kv  s$    1?GGGGGr+   c                Z    |                      t          j        j        j        |           d S r   )r   r   rA  r  r9  r  s     r,   "add_vision_attention_layernorm_epsz-GGUFWriter.add_vision_attention_layernorm_eps  s&    2@%HHHHHr+   c                P    |                      t          j        j        |           d S r   )r   r   rA  
IMAGE_SIZEr  s     r,   add_vision_image_sizez GGUFWriter.add_vision_image_size  rJ  r+   c                P    |                      t          j        j        |           d S r   )r   r   rA  IMAGE_MAX_PIXELSr  s     r,   add_vision_max_pixelsz GGUFWriter.add_vision_max_pixels  rM  r+   c                P    |                      t          j        j        |           d S r   )r   r   rA  IMAGE_MIN_PIXELSr  s     r,   add_vision_min_pixelsz GGUFWriter.add_vision_min_pixels  rM  r+   c                P    |                      t          j        j        |           d S r   )r   r   rA  PREPROC_MAX_TILESr  s     r,   add_vision_preproc_max_tilesz'GGUFWriter.add_vision_preproc_max_tiles  !    95AAAAAr+   c                P    |                      t          j        j        |           d S r   )r   r   rA  PREPROC_MIN_TILESr  s     r,   add_vision_preproc_min_tilesz'GGUFWriter.add_vision_preproc_min_tiles  rf  r+   c                P    |                      t          j        j        |           d S r   )r   r   rA  PREPROC_IMAGE_SIZEr  s     r,   add_vision_preproc_image_sizez(GGUFWriter.add_vision_preproc_image_size  !    :EBBBBBr+   c                Z    |                      t          j        j        j        |           d S r   )r   r   rA  	Projector
QUERY_SIDEr  s     r,   add_vision_projector_query_sidez*GGUFWriter.add_vision_projector_query_side  rU  r+   c                Z    |                      t          j        j        j        |           d S r   )r   r   rA  ro  WINDOW_SIDEr  s     r,    add_vision_projector_window_sidez+GGUFWriter.add_vision_projector_window_side  s$    1=uEEEEEr+   c                Z    |                      t          j        j        j        |           d S r   )r   r   rA  ro  SPATIAL_OFFSETSr  s     r,   add_vision_spatial_offsetsz%GGUFWriter.add_vision_spatial_offsets  s$    t0@&IIIIIr+   c                P    |                      t          j        j        |           d S r   )r   r   rA  
IMAGE_MEANr  s     r,   add_vision_image_meanz GGUFWriter.add_vision_image_mean  s!    t16:::::r+   c                P    |                      t          j        j        |           d S r   )r   r   rA  	IMAGE_STDr  s     r,   add_vision_image_stdzGGUFWriter.add_vision_image_std  s!    t0&99999r+   c                P    |                      t          j        j        |           d S r   )r   r   rA  SPATIAL_MERGE_SIZEr  s     r,   add_vision_spatial_merge_sizez(GGUFWriter.add_vision_spatial_merge_size  rm  r+   c                P    |                      t          j        j        |           d S r   )r   r   rA  USE_GELUr  s     r,   add_vision_use_geluzGGUFWriter.add_vision_use_gelu  !    do.66666r+   c                P    |                      t          j        j        |           d S r   )r   r   rA  USE_SILUr  s     r,   add_vision_use_siluzGGUFWriter.add_vision_use_silu  r  r+   c                Z    |                      t          j        j        j        |           d S r   )r   r   rA  ro  SCALE_FACTORr  s     r,   !add_vision_projector_scale_factorz,GGUFWriter.add_vision_projector_scale_factor  s$    1>FFFFFr+   c                P    |                      t          j        j        |           dS )a  Add window attention pattern interval for vision models.

        This defines the pattern interval for window attention vs full attention layers.
        For example, if n_wa_pattern=4, then layers 3, 7, 11, ... use full attention,
        while other layers use window attention.

        Used by models like Qwen2.5-VL where full attention layers follow a regular pattern.
        N)r   r   rA  N_WA_PATTERNr  s     r,   add_vision_n_wa_patternz"GGUFWriter.add_vision_n_wa_pattern  s#     	4e<<<<<r+   c                P    |                      t          j        j        |           dS )a  Add explicit layer indexes that use full attention in vision models.

        This specifies the exact layer indices (0-based) that should use full attention
        instead of window attention. All other layers will use window attention.

        Args:
            layers: List of layer indices that use full attention (e.g., [3, 7, 11, 15])

        Used by models like YoutuVL where full attention layers are explicitly specified
        rather than following a regular pattern.

        Difference from add_vision_n_wa_pattern:
        - n_wa_pattern: Defines a regular interval pattern (every Nth layer uses full attention)
        - wa_layer_indexes: Explicitly lists which layers use full attention (irregular pattern)
        N)r   r   rA  WA_LAYER_INDEXESr  s     r,   add_vision_wa_layer_indexesz&GGUFWriter.add_vision_wa_layer_indexes  s#      	t7@@@@@r+   Sequence[bool]c                P    |                      t          j        j        |           d S r   )r   r   rA  IS_DEEPSTACK_LAYERSr  s     r,   add_vision_is_deepstack_layersz)GGUFWriter.add_vision_is_deepstack_layers  s!    t:FCCCCCr+   modesc                P    |                      t          j        j        |           d S r   )r   r   rA  WA_PATTERN_MODE)rc   r  s     r,   add_vision_wa_pattern_modez%GGUFWriter.add_vision_wa_pattern_mode  s!    t6>>>>>r+   c                P    |                      t          j        j        |           d S r   )r   r   rA  WINDOW_SIZEr  s     r,   add_vision_window_sizez!GGUFWriter.add_vision_window_size  rR  r+   c                P    |                      t          j        j        |           d S r   )r   r   rA  FEATURE_LAYERSr  s     r,   add_vision_feature_layersz$GGUFWriter.add_vision_feature_layers  s!    t5v>>>>>r+   Sequence[Sequence[int]]c                P    |                      t          j        j        |           d S r   )r   r   rA  IMAGE_GRID_PINPOINTSr  s     r,   add_vision_image_grid_pinpointsz*GGUFWriter.add_vision_image_grid_pinpoints  s!    t;VDDDDDr+   c                Z    |                      t          j        j        j        |           d S r   )r   r   rA  SAMr_  r  s     r,   add_vision_sam_layers_countz&GGUFWriter.add_vision_sam_layers_count  s$    +7?????r+   c                Z    |                      t          j        j        j        |           d S r   )r   r   rA  r  rS  r  s     r,   add_vision_sam_embedding_lengthz*GGUFWriter.add_vision_sam_embedding_length  s$    +<eDDDDDr+   c                Z    |                      t          j        j        j        |           d S r   )r   r   rA  r  r  r  s     r,   add_vision_sam_head_countz$GGUFWriter.add_vision_sam_head_count  s$    +6>>>>>r+   c                P    |                      t          j        j        |           d S r   )r   r   	ClipAudior>  r  s     r,   add_clip_audio_projector_typez(GGUFWriter.add_clip_audio_projector_type  !    5u=====r+   c                P    |                      t          j        j        |           d S r   )r   r   r  rE  r  s     r,   add_audio_projection_dimz#GGUFWriter.add_audio_projection_dim   r  r+   c                P    |                      t          j        j        |           d S r   )r   r   r  rS  r  s     r,   add_audio_embedding_lengthz%GGUFWriter.add_audio_embedding_length  r  r+   c                P    |                      t          j        j        |           d S r   )r   r   r  rv  r  s     r,   add_audio_feed_forward_lengthz(GGUFWriter.add_audio_feed_forward_length  s!    :EBBBBBr+   c                P    |                      t          j        j        |           d S r   )r   r   r  r_  r  s     r,   add_audio_block_countz GGUFWriter.add_audio_block_count	  !    2E:::::r+   c                Z    |                      t          j        j        j        |           d S r   )r   r   r  r  r  r  s     r,   add_audio_head_countzGGUFWriter.add_audio_head_count  $    0;UCCCCCr+   c                Z    |                      t          j        j        j        |           d S r   )r   r   r  r  r9  r  s     r,   !add_audio_attention_layernorm_epsz,GGUFWriter.add_audio_attention_layernorm_eps  s&    1?GGGGGr+   c                P    |                      t          j        j        |           d S r   )r   r   r  NUM_MEL_BINSr  s     r,   add_audio_num_mel_binsz!GGUFWriter.add_audio_num_mel_bins  s!    3U;;;;;r+   c                Z    |                      t          j        j        j        |           d S r   )r   r   r  ro  STACK_FACTORr  s     r,   add_audio_stack_factorz!GGUFWriter.add_audio_stack_factor  s$    0=uEEEEEr+   c                P    |                      t          j        j        |           d S r   )r   r   r  
CHUNK_SIZEr  s     r,   add_audio_chunk_sizezGGUFWriter.add_audio_chunk_size  s!    1599999r+   c                P    |                      t          j        j        |           d S r   )r   r   r  CONV_KERNEL_SIZEr  s     r,   add_audio_conv_kernel_sizez%GGUFWriter.add_audio_conv_kernel_size  r  r+   c                P    |                      t          j        j        |           d S r   )r   r   r  MAX_POS_EMBr  s     r,   add_audio_max_pos_embz GGUFWriter.add_audio_max_pos_emb  r  r+   c                Z    |                      t          j        j        j        |           d S r   )r   r   r  ro  r  r  s     r,   add_audio_projector_window_sizez*GGUFWriter.add_audio_projector_window_size!  s$    0<eDDDDDr+   c                Z    |                      t          j        j        j        |           d S r   )r   r   r  ro  DOWNSAMPLE_RATEr  s     r,   #add_audio_projector_downsample_ratez.GGUFWriter.add_audio_projector_downsample_rate$  s$    0@%HHHHHr+   c                Z    |                      t          j        j        j        |           d S r   )r   r   r  ro  r  r  s     r,   add_audio_projector_head_countz)GGUFWriter.add_audio_projector_head_count'  r  r+   c                P    |                      t          j        j        |           d S r   )r   r   xIELUALPHA_Pr  s     r,   add_xielu_alpha_pzGGUFWriter.add_xielu_alpha_p*  !    tz)622222r+   c                P    |                      t          j        j        |           d S r   )r   r   r  ALPHA_Nr  s     r,   add_xielu_alpha_nzGGUFWriter.add_xielu_alpha_n-  r  r+   c                P    |                      t          j        j        |           d S r   )r   r   r  BETAr  s     r,   add_xielu_betazGGUFWriter.add_xielu_beta0  s     tz/////r+   c                P    |                      t          j        j        |           d S r   )r   r   r  EPSr  s     r,   add_xielu_epszGGUFWriter.add_xielu_eps3  s     tz~v.....r+   c                P    |                      t          j        j        |           d S r   )r   r   	DiffusionSHIFT_LOGITSr  s     r,   add_diffusion_shift_logitsz%GGUFWriter.add_diffusion_shift_logits8  s!    dn1599999r+   fmtr   c                n    d}|s| j         t          j        k    rdnd}t          j        | | |          S )Nr  <>)rT   r   r   structpack)rc   r  r/   r   pack_prefixs        r,   r   zGGUFWriter._pack;  sE     	N!%:3D!D!D###K{k0300%888r+   r   c                F  	 t                      }|r||                     d|          z  }| j                            |          }|+||                     |||t          j        k              z  }n|t          j        k    rYt          |t                    r|	                    d          n|}||                     dt          |                    z  }||z  }n9|t          j        k    rt          |t                    st          d          t          |          dk    rt          d          ||	nnt          |t                    rt          j        	nLt	          j        |d                   	t#          	fd|d	d          D                       st          d
          ||                     d	          z  }||                     dt          |                    z  }|D ]}||                     |	d          z  }nt          d          t          |          S )NrH   r   zutf-8rK   z/Invalid GGUF metadata array, expecting sequencer   z(Invalid GGUF metadata array. Empty arrayc              3  D   K   | ]}t          j        |          u V  d S r   )r   get_type)r   rI   ltypes     r,   r   z'GGUFWriter._pack_val.<locals>.<genexpr>\  s3      OO!=1!44=OOOOOOr+   r   z4All items in a GGUF array should be of the same typeFr   z)Invalid GGUF metadata value type or value)r   r   _simple_value_packingr  r   r   r   ru  rQ   encoderp   r   r   r   r-  r   r  allr   )
rc   r   r   r   r2   rB   pack_fmtencoded_valitemr  s
            @r,   r   zGGUFWriter._pack_valA  s   ++ 	.tzz#u---G-11%88tzz(CE]M_D_z```GGm***1;C1E1EN#**W---3Ktzz#s;'7'7888G{"GGm)))c8,, T !RSSS3xx1}} !KLLL# C'' ]%+%.s1v66OOOOs122wOOOOO ]$%[\\\tzz#u---Gtzz#s3xx000G H H4>>$>GGGH HIIIW~~r+   numc                    | dk    rdS t          |           }dD ]#}t          |          dk     r	|d| c S |dz  }$|ddS )Nr   znegligible - metadata only)r  KMGg     @@z3.1fz.1fzT - over 1TB, split recommended)r   abs)r  fnumr?  s      r,   r   z GGUFWriter.format_n_bytes_to_strg  ss    !88//Szz' 	 	D4yy6!!++T+++++FNDD;;;;;r+   )r?   rO   rP   rQ   rR   rS   rT   r   rU   r#   rV   r#   rW   rS   rX   rS   )re   rf   )r?   r   re   r{   r   )r?   r>   re   r   )re   r{   )re   r   )
r   rQ   r   r   r   r   r2   r1   re   r   )r   rQ   r   r#   re   r   )r   rQ   r   r   re   r   )r   rQ   r   rS   re   r   )r   rQ   r   rQ   re   r   )r   rQ   r   r   re   r   )r   r#   r   r#   re   r#   )rw   rQ   r   r    r   r   r   r#   r   r   re   r   )NNN)rw   rQ   r%   r  r  r  r   r   r  r  re   r   )r'  r)  r   r#   r*  r+  re   r   )r%   r  r  r  re   r   )r7  rS   re   r   )rQ  rQ   re   r   )rX  r#   re   r   )r\  r#   re   r   )r`  r#   re   r   )rd  rQ   re   r   )rh  r#   re   r   )rm  r   re   r   )rr  r   re   r   )rv  r   re   r   )rz  r   re   r   )r~  r   re   r   )r  r#   re   r   )r  r   re   r   )r  r#   re   r   )r  r   re   r   )r  r   re   r   )rw   rQ   re   r   )r  rQ   re   r   )r  rQ   re   r   )r  rQ   re   r   )r  rQ   re   r   )r  rQ   re   r   )r  rQ   re   r   )r  rQ   re   r   )r  rQ   re   r   )r  rQ   re   r   )r  rQ   re   r   )r  rQ   re   r   )r  rQ   re   r   )r  rQ   re   r   )r  r#   re   r   )r  r#   rw   rQ   re   r   )r  r#   r  rQ   re   r   )r  r#   r  rQ   re   r   )r  r#   r  rQ   re   r   )r  r#   r  rQ   re   r   )r  r#   r  rQ   re   r   )r  r#   r  rQ   re   r   )r  r#   r  rQ   re   r   )r  r#   r  rQ   re   r   )r9  r:  re   r   )r>  r:  re   r   )rB  rQ   re   r   )rx   r#   re   r   )rM  r#   re   r   )ro  r#   re   r   )rM  rs  re   r   )r  rS   re   r   )r  r#   re   r   )r/   r#   re   r   )r   r#   re   r   )r   r  re   r   )r  rs  re   r   )r  r#   re   r   )r  r   re   r   )r/   r   re   r   )r/   r  re   r   )r  rQ   r  r#   r  r#   re   r   )r/   rS   re   r   )r/   r   re   r   )r/   rQ   re   r   )r   r#   re   r   )r/   r   re   r   )r{  r    re   r   )r  r    re   r   )r/   r   re   r   )r  rQ   re   r   )r  rQ   re   r   )r  r  re   r   )r  r  re   r   )r  r  re   r   )r  r  re   r   )r  r-  re   r   )r/   r  re   r   )r  r    re   r   )r1  r:  re   r   )r{  r  re   r   )r  r    re   r   )r{  r  re   r   )r   r  )F)r  rQ   r/   r   r   rS   re   r-  )
r   r   r   r   r   rS   r2   r1   re   r-  )r  r#   re   rQ   (6  r&   r'   r(   r)   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r   rd   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   staticmethodr   r  r(  r&  r6  rM  r   rI  rU  rb   r[  r_  rc  rg  rl  rp  ru  ry  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  r  r  r  r  r  r  r"  r%  r(  r+  r.  r2  r5  r8  r=  rA  rH  rL  rQ  rT  rW  rZ  r]  r`  rc  re  ri  rk  rn  rr  rw  rz  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  r  r  r  r   r  r  r	  r  r  r  r  r  r  r  r$  r'  r*  r-  r1  r4  r7  r:  r>  rB  rE  rH  rK  rN  rQ  rT  rW  r[  r_  rb  re  rh  rk  rn  rq  rt  rw  rz  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  r  r  r  r  r  r  r  r  r  r!  r$  r'  r*  r-  r0  r5  r9  r<  r?  rB  rF  rI  rL  rO  rQ  rT  rW  rY  r\  r_  rb  re  ri  rl  rq  rt  rw  rz  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  r  r  r   r   r   r*   r+   r,   r<   r<   A   s        %%%%::::((((''''sssssssssss UZs}  tE!"!Uns         61H 1H 1H 1HfA A A A
+ + + + +     k k k k( ( ( ( (.) ) ) )") ) ) ).S S S S S9 9 9 99 9 9 9; ; ; ;: : : :; ; ; ;: : : :< < < <; ; ; ;: : : :< < < <9 9 9 9; ; ; ;
: : : :
 & & & \&
 FJ+c +c +c +c +c\ Z^]a: : : : :4' ' ' ' '
) ) ) ) )@ 9> -) -) -) -) -) -)^   
   6 6 6 6> > > >Q Q Q Q; ; ; ;7 7 7 7B B B B; ; ; ;= = = == = = =Q Q Q QM M M M; ; ; ;M M M MO O O OA A A AK K K KK K K K1 1 1 15 5 5 57 7 7 7A A A A9 9 9 99 9 9 9? ? ? ?> > > >= = = =7 7 7 7< < < << < < </ / / // / / /1 1 1 19 9 9 96 6 6 66 6 6 68 8 8 8@ @ @ @E E E EQ Q Q QU U U UW W W Wa a a a_ _ _ _O O O OO O O OQ Q Q QY Y Y YB B B BN N N NR R R RT T T T^ ^ ^ ^\ \ \ \L L L LL L L LN N N NV V V V0 0 0 0: : : :T T T TJ J J JP P P PR R R RV V V VQ Q Q QU U U UP P P PW W W WR R R RO O O OM M M M[ [ [ [[ [ [ [X X X X\ \ \ \c c c cb b b bR R R RT T T TT T T TZ Z Z ZO O O OO O O OZ Z Z ZT T T TW W W WR R R RT T T TV V V VX X X XV V V VX X X XY Y Y YZ Z Z ZT T T TU U U UQ Q Q QW W W W' ' ' 'a a a aM M M MX X X XZ Z Z ZY Y Y YM M M MR R R RT T T TS S S SX X X XV V V VR R R RY Y Y YQ Q Q QS S S SK K K KT T T TR R R RS S S SP P P PU U U UH H H HW W W WQ Q Q QS S S SP P P PQ Q Q QI I I IR R R RZ Z Z ZU U U UY Y Y YU U U UW W W WK K K KS S S ST T T TW W W WV V V Vd d d dP P P PV V V VX X X XU U U UM M M MT T T TS S S SY Y Y YY Y Y YS S S SU U U UX X X XQ Q Q QU U U UR R R RL L L LT T T TQ Q Q QP P P PV V V VV V V VQ Q Q QW W W WZ Z Z Z[ [ [ [Y Y Y YY Y Y YL L L LK K K KK K K KO O O OL L L LI I I II I I I5 5 5 51 1 1 14 4 4 46 6 6 69 9 9 9@ @ @ @6 6 6 63 3 3 33 3 3 33 3 3 33 3 3 33 3 3 34 4 4 45 5 5 55 5 5 55 5 5 58 8 8 8= = = =F F F F= = = =:? ? ? ?B B B BF F F F3 3 3 33 3 3 3U U U U
; ; ; ;: : : :9 9 9 9? ? ? ?? ? ? ?; ; ; ;A A A AD D D D< < < <E E E EH H H HI I I I; ; ; ;A A A AA A A AB B B BB B B BC C C CE E E EF F F FJ J J J; ; ; ;: : : :C C C C7 7 7 77 7 7 7G G G G	= 	= 	= 	=A A A A$D D D D? ? ? ?< < < <? ? ? ?E E E E@ @ @ @E E E E? ? ? ?
> > > >> > > >@ @ @ @C C C C; ; ; ;D D D DH H H H< < < <F F F F: : : :@ @ @ @; ; ; ;E E E EI I I ID D D D3 3 3 33 3 3 30 0 0 0/ / / /
: : : :9 9 9 9 9$ $ $ $ $L < < < \< < <r+   r<   )3
__future__r   loggingosrG  r  r  r"  dataclassesr   enumr   r   mathr   pathlibr   ior	   typingr
   r   r   r   stringr   r   numpyr  	constantsr   r   r   r   r   r   r   r   r   r   r   quantsr   	getLoggerr&   r]   r   r   r.   r4   r<   r*   r+   r,   <module>r     ss   " " " " " "  				   



  ! ! ! ! ! !                           - - - - - - - - - - - - ( ( ( ( ( ( ( (                              0 / / / / /		8	$	$ 1  / / / / / / / / * * * * * * * *    $   o< o< o< o< o< o< o< o< o< o<r+   