o
    հi                     @  s8  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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*e+Z,dZ-eG dd dZ.eG dd dZ/G dd de
Z0G dd dZ1d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                   @  s2   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#    r(   r(   D/home/ubuntu/.local/lib/python3.10/site-packages/gguf/gguf_writer.pyr   (   s
   
 r   c                   @  s*   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'   r.   r(   r(   r(   r)   r*   0   s   
 r*   c                   @  s0   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(   r)   r/   7   s    
r/   c                   @  s  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dd&d'Zdd*d+Zdd.d/Zddd2d3Zdd4d5Zdd6d7Zddd8d9Zdd:d;Zdd<d=ZdddEdFZddGdHZddIdJZddKdLZddMdNZ ddOdPZ!ddQdRZ"ddTdUZ#ddVdWZ$ddXdYZ%ddZd[Z&dd\d]Z'dd^d_Z(ddadbZ)e*ddedfZ+	0dddodpZ,	0	0d d!dudvZ-dd"d{d|Z.d#d}d~Z/ddd$ddZ0dddZ1dddZ2d%ddZ3dddZ4d&ddZ5d'ddZ6d(ddZ7d)ddZ8d*ddZ9d+ddZ:d,ddZ;d-ddZ<d.ddZ=d/ddZ>d0ddZ?d1ddZ@d2ddZAd2ddZBd2ddZCd3ddZDd4ddZEd5ddZFd6ddZGd3ddÄZHd4ddńZId5ddǄZJd6ddɄZKd7dd̄ZLd8ddτZMd9ddфZNd:ddӄZOd;ddՄZPd<ddׄZQd=ddلZRd>ddۄZSd?dd݄ZTd@dd߄ZUd7ddZVd8ddZWd9ddZXd:ddZYd;ddZZd<ddZ[d=ddZ\d>ddZ]d?ddZ^d@ddZ_dAddZ`dBddZadCddZbdDdd ZcdEddZddEddZedEddZfdEdd	ZgdEd
dZhdEddZidEddZjdEddZkdEddZldFddZmdEddZndEddZodGddZpdHdd ZqdId"d#ZrdId$d%ZsdEd&d'ZtdEd(d)ZudEd*d+ZvdEd,d-ZwdJd/d0ZxdKd2d3ZydKd4d5ZzdKd6d7Z{dKd8d9Z|dLd:d;Z}dLd<d=Z~dLd>d?ZdKd@dAZdMdBdCZdNdEdFZdOdGdHZdMdIdJZdLdKdLZdPdNdOZdPdPdQZdKdRdSZdKdTdUZdDdVdWZdLdXdYZdOdZd[ZdKd\d]ZdKd^d_ZdKd`daZdOdbdcZdMdddeZdEdfdgZdEdhdiZdEdjdkZdEdldmZdEdndoZdEdpdqZdOdrdsZdOdtduZdKdvdwZdQdydzZdLd{d|ZdRd~dZdKddZdSddZdKddZdKddZdOddZdMddZdKddZdOddZdOddZdOddZdOddZdMddZdTddZdUddZdVddZdWddZdXddZdOddZdYddZdHddZdHddZdHddZdHddZdHddZdHddZdMddZdMddZdMddZdMddÄZdZdƐdǄZd[dɐdʄZdHdːd̄ZdHd͐d΄Zd\dАdфZdMdҐdӄZdMdԐdՄZd]d֐dׄZdOdؐdلZÐdOdڐdۄZĐdOdܐd݄ZŐdOdސd߄ZƐdOddZǐdOddZȐdKddZɐdOddZʐd^ddZːd^ddZ̐dOddZ͐dMddZΐdMddZϐdOddZАdOddZѐdOddZҐdOddZӐdOddZԐdOddZՐdOdd Z֐dKddZאdOddZؐdOddZِd_d`d	d
ZڐddaddZe*dbddZd0S (c  
GGUFWriterzlist[BufferedWriter] | NonefoutPath | Nonepathz+tempfile.SpooledTemporaryFile[bytes] | None	temp_filezlist[dict[str, TensorInfo]]tensorszlist[dict[str, GGUFValue]]kv_datar/   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	           	      C  s   d | _ |r	t|nd | _|| _|| _t| _|| _d | _i g| _	i g| _
|| _|| _|| _|| _td| jtjkr;dnd tj| _| jrL| j	i  |   d S )Nz+gguf: This GGUF file is for {0} Endian onlyBigLittle)r7   r   r9   rJ   rN   r   data_alignmentrL   r:   r;   r<   rO   rP   rQ   rR   loggerinfoformatr   BIGr/   r0   r=   appendadd_architecture)	selfr9   rJ   rL   rN   rO   rP   rQ   rR   r(   r(   r)   __init__U   s(   zGGUFWriter.__init__returntuple[int, int, int, int]c                 C  s   d}d}d}d}d}d }| j D ]i}| D ]b\}}	|	j}
|dr&||	f}q|drT|d u s;|d |d d d krDtd   dS g |
d d |d jd R }
t|
}d	|v ro|||
d
  7 }||
d
 7 }|d7 }n||7 }||7 }qq|dkr|| nd}|d ur| }||||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.)r;   itemsr   endswithrV   warningr   )r\   total_paramsshared_paramsexpert_params
expert_sumn_expert_tensorslast_lora_ar;   namerW   r   sizeexpert_countr(   r(   r)   get_total_parameter_countp   s:   


 
 

z$GGUFWriter.get_total_parameter_countr   
list[Path]c                   s2   t jdkr
 gS  fddtt jD S )Nr   c              
     s,   g | ]}  t j|d  tjqS )r   )	with_nameSHARD_NAME_FORMATrX   stemlenr;   .0rC   r9   r\   r(   r)   
<listcomp>   s   , z1GGUFWriter.format_shard_names.<locals>.<listcomp>)rt   r;   range)r\   r9   r(   rw   r)   format_shard_names   s   zGGUFWriter.format_shard_namesNNonec                 C  s   | j tju r| jd ur|d u s|| jkrd S | j tjur$td| j  |d ur+|| _| jd urB|  }dd |D | _tj| _ d S d S )N/Expected output file to be not yet opened, got c                 S  s   g | ]}t |d qS )wb)open)rv   filenamer(   r(   r)   rx      s    z/GGUFWriter.open_output_file.<locals>.<listcomp>)r=   r/   r1   r7   r9   r0   
ValueError
print_plan)r\   r9   	filenamesr(   r(   r)   open_output_file   s   (
zGGUFWriter.open_output_filec                 C  s   t d | jd usJ | | j}t|t| jksJ t|| jD ]\}}t | dt| dtt	dd |
 D   q#| jrWt d |D ]}t| qMt  |S )NzWriting the following files:z: n_tensors = z, total_size = c                 s      | ]}|j V  qd S Nr"   rv   tir(   r(   r)   	<genexpr>       z(GGUFWriter.print_plan.<locals>.<genexpr>zDry run, not writing files)rV   rW   r9   rz   rt   r;   zipr6   format_n_bytes_to_strsumvaluesrQ   printexit)r\   r   rl   r;   r(   r(   r)   r      s   
8

zGGUFWriter.print_planc                 C  s   t | jdkr	d S tdd | jD }| jd usJ t | j}| jd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< q5d S )Nr   c                 s  s    | ]}t |V  qd S r   )rt   )rv   tr(   r(   r)   r          z/GGUFWriter.add_shard_kv_data.<locals>.<genexpr>c                 s  s    | ]}i V  qd S r   r(   )rv   _r(   r(   r)   r      s    )rt   r;   r   r7   r<   extendry   	enumerater*   r   UINT16r   SplitLLM_KV_SPLIT_NOLLM_KV_SPLIT_COUNTINT32LLM_KV_SPLIT_TENSORS_COUNT)r\   total_tensorstotal_splitsrC   r<   r(   r(   r)   add_shard_kv_data   s   
"zGGUFWriter.add_shard_kv_datac                 C  s  t | jdkr| jdks| jdkrtd | | | jtj	ur)t
d| j | jd us0J t | jt | jks<J t | jdksEJ |   t| j| j| jD ]3\}}}|| jdtdd || dt || d	t | || d	t | |  qRtj| _d S )
Nr   r   z-Model fails split requirements, not splittingz&Expected output file to be empty, got z<ITskip_pack_prefixrB   rE   )rt   r;   rO   rP   rV   re   r   r=   r/   r1   r   r7   r<   r   r   write_packr   r   flushr2   )r\   r9   r7   r;   r<   r(   r(   r)   write_header_to_file   s    "


zGGUFWriter.write_header_to_filec              	   C  s   | j tjurtd| j  | jd usJ t| j| jD ].\}}t }| D ]\}}|| j	|t
jdd7 }|| j	|j|jd|jd7 }q'|| q|   tj| _ d S )Nz0Expected output file to contain the header, got F	add_vtypeT)r   r.   )r=   r/   r2   r   r7   r   r<   	bytearrayrc   	_pack_valr   STRINGr+   r,   r.   r   r   r3   )r\   r7   r<   kv_byteskeyvalr(   r(   r)   write_kv_data_to_file   s   z GGUFWriter.write_kv_data_to_filec           	   
   C  s  | j tjurtd| j  | jd usJ t| j| jD ]d\}}t }d}| D ]M\}}|| j	|t
jdd7 }t|j}|| d|7 }t|D ]}|| d|j|d |  7 }qI|| d|j7 }|| d|7 }|t|j| j7 }q)|| |  qtj| _ d S )Nz-Expected output file to contain KV data, got r   Fr   rB   rE   r   )r=   r/   r3   r   r7   r   r;   r   rc   r   r   r   rt   r   r   ry   r    r6   ggml_padr"   rU   r   r   r4   )	r\   r7   r;   ti_dataoffset_tensorrl   r   n_dimsjr(   r(   r)   write_ti_data_to_file   s$   
 

z GGUFWriter.write_ti_data_to_filer   r   r
   vtyper   r.   r-   c                   sR   t  fdd| jD rtd d|d|j  t|||d| jd  < d S )Nc                 3      | ]} |v V  qd S r   r(   )rv   r<   r   r(   r)   r     r   z+GGUFWriter.add_key_value.<locals>.<genexpr>zDuplicated key name z , overwriting it with new value z	 of type )r+   r,   r.   r   )anyr<   rV   re   rl   r*   )r\   r   r   r   r.   r(   r   r)   add_key_value  s   zGGUFWriter.add_key_valuec                 C     |  ||tj d S r   )r   r   UINT8r\   r   r   r(   r(   r)   	add_uint8     zGGUFWriter.add_uint8c                 C  r   r   )r   r   INT8r   r(   r(   r)   add_int8  r   zGGUFWriter.add_int8c                 C  r   r   )r   r   r   r   r(   r(   r)   
add_uint16  r   zGGUFWriter.add_uint16c                 C  r   r   )r   r   INT16r   r(   r(   r)   	add_int16  r   zGGUFWriter.add_int16c                 C  r   r   )r   r   UINT32r   r(   r(   r)   
add_uint32"  r   zGGUFWriter.add_uint32c                 C  r   r   )r   r   r   r   r(   r(   r)   	add_int32%  r   zGGUFWriter.add_int32floatc                 C  r   r   )r   r   FLOAT32r   r(   r(   r)   add_float32(  r   zGGUFWriter.add_float32c                 C  r   r   )r   r   UINT64r   r(   r(   r)   
add_uint64+  r   zGGUFWriter.add_uint64c                 C  r   r   )r   r   INT64r   r(   r(   r)   	add_int64.  r   zGGUFWriter.add_int64c                 C  r   r   )r   r   FLOAT64r   r(   r(   r)   add_float641  r   zGGUFWriter.add_float64c                 C  r   r   )r   r   BOOLr   r(   r(   r)   add_bool4  r   zGGUFWriter.add_boolc                 C  s   |sd S |  ||tj d S r   )r   r   r   r   r(   r(   r)   
add_string7  s   zGGUFWriter.add_stringSequence[Any]c                 C  s$   t |dkrd S | ||tj d S Nr   )rt   r   r   ARRAYr   r(   r(   r)   	add_array<  s   zGGUFWriter.add_arrayxnc                 C  s   | | d | | S )Nr   r(   )r   r   r(   r(   r)   r   A  s   zGGUFWriter.ggml_padrl   tensor_shaper   tensor_dtypenp.dtypetensor_nbytes	raw_dtypeGGMLQuantizationType | Nonec                   sp  | j tjurtd| j  t fdd| jD r!td |d u rh|tjkr.tj	}nF|tj
kr7tj}n=|tjkr@tj}n4|tjkrItj}n+|tjkrRtj}n"|tjkr[tj}n|tjkrdtj}ntd|}|tjkrtt||}t| jd dkr| jdkrt| jd | jks| jdkrtdd | jd  D | | jkr| ji  t|||d	| jd  < d S )
Nr|   c                 3  r   r   r(   )rv   r;   rl   r(   r)   r   L  r   z-GGUFWriter.add_tensor_info.<locals>.<genexpr>zDuplicated tensor name zCOnly F16, F32, F64, I8, I16, I32, I64 tensors are supported for nowr`   r   c                 s  r   r   r   r   r(   r(   r)   r   l  r   )r   r    r"   )r=   r/   r0   r   r   r;   npfloat16r   F16float32F32float64F64int8I8int16I16int32I32int64I64uint8r   rt   rO   rP   r   r   rZ   r   )r\   rl   r   r   r   r   r    r(   r   r)   add_tensor_infoE  s<   










&zGGUFWriter.add_tensor_infor#   np.ndarray[Any, Any]	raw_shapeSequence[int] | Nonec                 C  s   | j tjkr|jdd | jr#| jd u r#tjddd}|d || _|d ur)|n|j	}| j
|||j|j|d | jd u rG|| jd | _d S || j | | j|j d S )	NTinplacezw+bi   )modemax_sizer   )r   r`   )rN   r   rY   byteswaprL   r:   tempfileSpooledTemporaryFileseekr   r   r    r"   r;   r#   tofilewrite_padding)r\   rl   r#   r   r   fpr   r(   r(   r)   
add_tensorr  s   

zGGUFWriter.add_tensorr   	IO[bytes]align
int | Nonec                 C  sB   t ||d ur	|n| j| }|dkr|tdg|  d S d S r   )r6   r   rU   r   bytes)r\   r   r   r   padr(   r(   r)   r     s   zGGUFWriter.write_paddingc                 C  s   | j tjur| j tjurtd| j  | jd usJ | jtjkr'|j	dd d}t
| jD ]\}}t|dkr<|} nq.| j| }dd t| j|  tdD d }| j| |}|j|jkseJ | ||  || | ||j tj| _ d S )	Nz<Expected output file to contain tensor info or weights, got Tr   r`   r   c                 S  s   g | ]\}}|qS r(   r(   )rv   rl   r   r(   r(   r)   rx     s    z0GGUFWriter.write_tensor_data.<locals>.<listcomp>r   )r=   r/   r4   r5   r   r7   rN   r   rY   r   r   r;   rt   r   keysry   popr"   r   tellr   )r\   r#   file_idrC   r;   r7   first_tensor_namer   r(   r(   r)   write_tensor_data  s&   
&
zGGUFWriter.write_tensor_data)progressr
  c                C  s  |    | jd usJ | jD ]
}| ||  q| jd u rd }d }|rRddlm} tdd | jD }t| jdkrJ|dt| j dd dd	d
}|d|dd	d
}t	t
| j| jD ]m\}\}}|d ur|d|d  dt| j d tdd | D }	|j|	dkr|	nd d | D ]6}
|
jd usJ |
jj|
jksJ |
j| |d ur||
j |d ur||
j | ||
j d |
_qq[n| jd t| j| j| jsdnd  |   | j  tj| _d S )Nr   )tqdmc                 s  s$    | ]}|  D ]}|jV  qqd S r   )r   r"   )rv   r   r   r(   r(   r)   r        " z3GGUFWriter.write_tensors_to_file.<locals>.<genexpr>r   z	Shard (0/)byteT)desctotalunit
unit_scaleWritingzShard (/c                 s  r   r   r   r   r(   r(   r)   r     r   )r  )r   r7   r   r  r:   r  r   r;   rt   r   r   set_descriptionr   resetr#   r"   r   updater   shutilcopyfileobjrR   r   closer/   r5   r=   )r\   r
  r7   	shard_barbarr  total_bytesrC   r;   r  r   r(   r(   r)   write_tensors_to_file  sF   

"
z GGUFWriter.write_tensors_to_filec                 C  s&   | j d usJ | j D ]}|  q
d S r   )r7   r   r\   r7   r(   r(   r)   r     s   

zGGUFWriter.flushc                 C  s,   | j d ur| j D ]}|  qd | _ d S d S r   )r7   r  r  r(   r(   r)   r    s
   



zGGUFWriter.close	type_namec                 C     |  tjj| d S r   )r   r   GeneralTYPE)r\   r   r(   r(   r)   add_type  r   zGGUFWriter.add_typec                 C  s   |  tjj| j d S r   )r   r   r"  ARCHITECTURErJ   )r\   r(   r(   r)   r[        zGGUFWriter.add_architecturequantization_versionc                 C  r!  r   )r   r   r"  QUANTIZATION_VERSION)r\   r'  r(   r(   r)   add_quantization_version  r   z#GGUFWriter.add_quantization_version	alignmentc                 C  s   || _ | tjj| d S r   )rU   r   r   r"  	ALIGNMENT)r\   r*  r(   r(   r)   add_custom_alignment  s   zGGUFWriter.add_custom_alignmentftypec                 C  r!  r   )r   r   r"  	FILE_TYPE)r\   r-  r(   r(   r)   add_file_type  r   zGGUFWriter.add_file_typec                 C  r!  r   )r   r   r"  NAME)r\   rl   r(   r(   r)   add_name  r   zGGUFWriter.add_nameauthorc                 C  r!  r   )r   r   r"  AUTHOR)r\   r2  r(   r(   r)   
add_author  r   zGGUFWriter.add_authorversionc                 C  r!  r   )r   r   r"  VERSION)r\   r5  r(   r(   r)   add_version  r   zGGUFWriter.add_versionorganizationc                 C  r!  r   )r   r   r"  ORGANIZATION)r\   r8  r(   r(   r)   add_organization  r   zGGUFWriter.add_organizationfinetunec                 C  r!  r   )r   r   r"  FINETUNE)r\   r;  r(   r(   r)   add_finetune  r   zGGUFWriter.add_finetunebasenamec                 C  r!  r   )r   r   r"  BASENAME)r\   r>  r(   r(   r)   add_basename  r   zGGUFWriter.add_basenamedescriptionc                 C  r!  r   )r   r   r"  DESCRIPTION)r\   rA  r(   r(   r)   add_description  r   zGGUFWriter.add_description	quantizedc                 C  r!  r   )r   r   r"  QUANTIZED_BY)r\   rD  r(   r(   r)   add_quantized_by  r   zGGUFWriter.add_quantized_by
size_labelc                 C  r!  r   )r   r   r"  
SIZE_LABEL)r\   rG  r(   r(   r)   add_size_label
  r   zGGUFWriter.add_size_labellicensec                 C  r!  r   )r   r   r"  LICENSEr\   rJ  r(   r(   r)   add_license  r   zGGUFWriter.add_licensec                 C  r!  r   )r   r   r"  LICENSE_NAMErL  r(   r(   r)   add_license_name  r   zGGUFWriter.add_license_namec                 C  r!  r   )r   r   r"  LICENSE_LINKrL  r(   r(   r)   add_license_link  r   zGGUFWriter.add_license_linkurlc                 C  r!  r   )r   r   r"  URLr\   rR  r(   r(   r)   add_url  r   zGGUFWriter.add_urldoic                 C  r!  r   )r   r   r"  DOIr\   rV  r(   r(   r)   add_doi  r   zGGUFWriter.add_doiuuidc                 C  r!  r   )r   r   r"  UUIDr\   rZ  r(   r(   r)   add_uuid  r   zGGUFWriter.add_uuidrepo_urlc                 C  r!  r   )r   r   r"  REPO_URLr\   r^  r(   r(   r)   add_repo_url  r   zGGUFWriter.add_repo_urlc                 C  r!  r   )r   r   r"  
SOURCE_URLrT  r(   r(   r)   add_source_url"  r   zGGUFWriter.add_source_urlc                 C  r!  r   )r   r   r"  
SOURCE_DOIrX  r(   r(   r)   add_source_doi%  r   zGGUFWriter.add_source_doic                 C  r!  r   )r   r   r"  SOURCE_UUIDr\  r(   r(   r)   add_source_uuid(  r   zGGUFWriter.add_source_uuidc                 C  r!  r   )r   r   r"  SOURCE_REPO_URLr`  r(   r(   r)   add_source_repo_url+  r   zGGUFWriter.add_source_repo_urlsource_countc                 C  r!  r   )r   r   r"  BASE_MODEL_COUNTr\   rj  r(   r(   r)   add_base_model_count.  r   zGGUFWriter.add_base_model_count	source_idc                 C     |  tjjj|d| d S N)id)r   r   r"  BASE_MODEL_NAMErX   r\   rn  rl   r(   r(   r)   add_base_model_name1     zGGUFWriter.add_base_model_namec                 C  ro  rp  )r   r   r"  BASE_MODEL_AUTHORrX   r\   rn  r2  r(   r(   r)   add_base_model_author4  ru  z GGUFWriter.add_base_model_authorc                 C  ro  rp  )r   r   r"  BASE_MODEL_VERSIONrX   r\   rn  r5  r(   r(   r)   add_base_model_version7  ru  z!GGUFWriter.add_base_model_versionc                 C  ro  rp  )r   r   r"  BASE_MODEL_ORGANIZATIONrX   r\   rn  r8  r(   r(   r)   add_base_model_organization:  ru  z&GGUFWriter.add_base_model_organizationc                 C  ro  rp  )r   r   r"  BASE_MODEL_DESCRIPTIONrX   r\   rn  rA  r(   r(   r)   add_base_model_description=  ru  z%GGUFWriter.add_base_model_descriptionc                 C  ro  rp  )r   r   r"  BASE_MODEL_URLrX   r\   rn  rR  r(   r(   r)   add_base_model_url@  ru  zGGUFWriter.add_base_model_urlc                 C  ro  rp  )r   r   r"  BASE_MODEL_DOIrX   r\   rn  rV  r(   r(   r)   add_base_model_doiC  ru  zGGUFWriter.add_base_model_doic                 C  ro  rp  )r   r   r"  BASE_MODEL_UUIDrX   r\   rn  rZ  r(   r(   r)   add_base_model_uuidF  ru  zGGUFWriter.add_base_model_uuidc                 C  ro  rp  )r   r   r"  BASE_MODEL_REPO_URLrX   r\   rn  r^  r(   r(   r)   add_base_model_repo_urlI  ru  z"GGUFWriter.add_base_model_repo_urlc                 C  r!  r   )r   r   r"  DATASET_COUNTrl  r(   r(   r)   add_dataset_countL  r   zGGUFWriter.add_dataset_countc                 C  ro  rp  )r   r   r"  DATASET_NAMErX   rs  r(   r(   r)   add_dataset_nameO  ru  zGGUFWriter.add_dataset_namec                 C  ro  rp  )r   r   r"  DATASET_AUTHORrX   rw  r(   r(   r)   add_dataset_authorR  ru  zGGUFWriter.add_dataset_authorc                 C  ro  rp  )r   r   r"  DATASET_VERSIONrX   rz  r(   r(   r)   add_dataset_versionU  ru  zGGUFWriter.add_dataset_versionc                 C  ro  rp  )r   r   r"  DATASET_ORGANIZATIONrX   r}  r(   r(   r)   add_dataset_organizationX  ru  z#GGUFWriter.add_dataset_organizationc                 C  ro  rp  )r   r   r"  DATASET_DESCRIPTIONrX   r  r(   r(   r)   add_dataset_description[  ru  z"GGUFWriter.add_dataset_descriptionc                 C  ro  rp  )r   r   r"  DATASET_URLrX   r  r(   r(   r)   add_dataset_url^  ru  zGGUFWriter.add_dataset_urlc                 C  ro  rp  )r   r   r"  DATASET_DOIrX   r  r(   r(   r)   add_dataset_doia  ru  zGGUFWriter.add_dataset_doic                 C  ro  rp  )r   r   r"  DATASET_UUIDrX   r  r(   r(   r)   add_dataset_uuidd  ru  zGGUFWriter.add_dataset_uuidc                 C  ro  rp  )r   r   r"  DATASET_REPO_URLrX   r  r(   r(   r)   add_dataset_repo_urlg  ru  zGGUFWriter.add_dataset_repo_urltagsSequence[str]c                 C  r!  r   )r   r   r"  TAGS)r\   r  r(   r(   r)   add_tagsj  r   zGGUFWriter.add_tags	languagesc                 C  r!  r   )r   r   r"  	LANGUAGES)r\   r  r(   r(   r)   add_languagesm  r   zGGUFWriter.add_languageslayoutc                 C     |  tjjj| jd| d S N)rJ   )r   r   LLMTENSOR_DATA_LAYOUTrX   rJ   )r\   r  r(   r(   r)   add_tensor_data_layoutp     z!GGUFWriter.add_tensor_data_layoutrm   c                 C  r  r  )r   r   r  
VOCAB_SIZErX   rJ   r\   rm   r(   r(   r)   add_vocab_sizes  r  zGGUFWriter.add_vocab_sizelengthc                 C  r  r  )r   r   r  CONTEXT_LENGTHrX   rJ   r\   r  r(   r(   r)   add_context_lengthv  r  zGGUFWriter.add_context_lengthc                 C  r  r  )r   r   r  EMBEDDING_LENGTHrX   rJ   r  r(   r(   r)   add_embedding_lengthy  r  zGGUFWriter.add_embedding_lengthc                 C  r  r  )r   r   r  FEATURES_LENGTHrX   rJ   r  r(   r(   r)   add_features_length|  r  zGGUFWriter.add_features_lengthc                 C  r  r  )r   r   PosNetr  rX   rJ   r  r(   r(   r)   add_posnet_embedding_length  r  z&GGUFWriter.add_posnet_embedding_lengthc                 C  r  r  )r   r   r  BLOCK_COUNTrX   rJ   r  r(   r(   r)   add_posnet_block_count  r  z!GGUFWriter.add_posnet_block_countc                 C  r  r  )r   r   ConvNextr  rX   rJ   r  r(   r(   r)   add_convnext_embedding_length  r  z(GGUFWriter.add_convnext_embedding_lengthc                 C  r  r  )r   r   r  r  rX   rJ   r  r(   r(   r)   add_convnext_block_count  r  z#GGUFWriter.add_convnext_block_countc                 C  r  r  )r   r   r  r  rX   rJ   r  r(   r(   r)   add_block_count  r  zGGUFWriter.add_block_countc                 C  r  r  )r   r   r  LEADING_DENSE_BLOCK_COUNTrX   rJ   r  r(   r(   r)   add_leading_dense_block_count  r  z(GGUFWriter.add_leading_dense_block_countint | Sequence[int]c                 C  F   t |tr| tjjj| jd| d S | tjjj| jd| d S r  )	
isinstancer!   r   r   r  FEED_FORWARD_LENGTHrX   rJ   r   r  r(   r(   r)   add_feed_forward_length     
z"GGUFWriter.add_feed_forward_lengthc                 C  r  r  )r   r   r  EXPERT_FEED_FORWARD_LENGTHrX   rJ   r  r(   r(   r)   add_expert_feed_forward_length  r  z)GGUFWriter.add_expert_feed_forward_lengthc                 C  r  r  )r   r   r  !EXPERT_SHARED_FEED_FORWARD_LENGTHrX   rJ   r  r(   r(   r)   %add_expert_shared_feed_forward_length  r  z0GGUFWriter.add_expert_shared_feed_forward_lengthusec                 C  r  r  )r   r   r  USE_PARALLEL_RESIDUALrX   rJ   )r\   r  r(   r(   r)   add_parallel_residual  r  z GGUFWriter.add_parallel_residualrq  c                 C  r  r  )r   r   r  DECODER_START_TOKEN_IDrX   rJ   r\   rq  r(   r(   r)   add_decoder_start_token_id  r  z%GGUFWriter.add_decoder_start_token_idcountc                 C  r  r  )	r  r!   r   r   	Attention
HEAD_COUNTrX   rJ   r   r\   r  r(   r(   r)   add_head_count  r  zGGUFWriter.add_head_countc                 C  r  r  )	r  r!   r   r   r  HEAD_COUNT_KVrX   rJ   r   r  r(   r(   r)   add_head_count_kv  r  zGGUFWriter.add_head_count_kvc                 C  r  r  )r   r   r  
KEY_LENGTHrX   rJ   r  r(   r(   r)   add_key_length  r  zGGUFWriter.add_key_lengthc                 C  r  r  )r   r   r  VALUE_LENGTHrX   rJ   r  r(   r(   r)   add_value_length  r  zGGUFWriter.add_value_lengthc                 C  r  r  )r   r   r  KEY_LENGTH_MLArX   rJ   r  r(   r(   r)   add_key_length_mla  r  zGGUFWriter.add_key_length_mlac                 C  r  r  )r   r   r  VALUE_LENGTH_MLArX   rJ   r  r(   r(   r)   add_value_length_mla  r  zGGUFWriter.add_value_length_mlabiasc                 C  r  r  )r   r   r  MAX_ALIBI_BIASrX   rJ   )r\   r  r(   r(   r)   add_max_alibi_bias  r  zGGUFWriter.add_max_alibi_biasr+   c                 C  r  r  )r   r   r  	CLAMP_KQVrX   rJ   r\   r+   r(   r(   r)   add_clamp_kqv  r  zGGUFWriter.add_clamp_kqvc                 C  r  r  )r   r   r  LOGIT_SCALErX   rJ   r  r(   r(   r)   add_logit_scale  r  zGGUFWriter.add_logit_scalec                 C  r  r  )r   r   r  ATTN_LOGIT_SOFTCAPPINGrX   rJ   r  r(   r(   r)   add_attn_logit_softcapping  r  z%GGUFWriter.add_attn_logit_softcappingc                 C  r  r  )r   r   r  FINAL_LOGIT_SOFTCAPPINGrX   rJ   r  r(   r(   r)   add_final_logit_softcapping  r  z&GGUFWriter.add_final_logit_softcappingc                 C  r  r  )r   r   r  EXPERT_COUNTrX   rJ   r  r(   r(   r)   add_expert_count  r  zGGUFWriter.add_expert_countc                 C  r  r  )r   r   r  EXPERT_USED_COUNTrX   rJ   r  r(   r(   r)   add_expert_used_count  r  z GGUFWriter.add_expert_used_countc                 C  r  r  )r   r   r  EXPERT_SHARED_COUNTrX   rJ   r  r(   r(   r)   add_expert_shared_count  r  z"GGUFWriter.add_expert_shared_countc                 C  r  r  )r   r   r  EXPERT_WEIGHTS_SCALErX   rJ   r  r(   r(   r)   add_expert_weights_scale  r  z#GGUFWriter.add_expert_weights_scalec                 C  r  r  )r   r   r  EXPERT_WEIGHTS_NORMrX   rJ   r  r(   r(   r)   add_expert_weights_norm  r  z"GGUFWriter.add_expert_weights_normr   c                 C      |  tjjj| jd|j d S r  )r   r   r  EXPERT_GATING_FUNCrX   rJ   r+   r  r(   r(   r)   add_expert_gating_func      z!GGUFWriter.add_expert_gating_funcc                 C  r  r  )r   r   r  MOE_EVERY_N_LAYERSrX   rJ   r  r(   r(   r)   add_moe_every_n_layers  r  z!GGUFWriter.add_moe_every_n_layersc                 C  r  r  )r   r   r  	SWIN_NORMrX   rJ   r  r(   r(   r)   add_swin_norm  r  zGGUFWriter.add_swin_normc                 C  r  r  )r   r   r  RESCALE_EVERY_N_LAYERSrX   rJ   r  r(   r(   r)   add_rescale_every_n_layers  r  z%GGUFWriter.add_rescale_every_n_layersdimc                 C  r  r  )r   r   r  TIME_MIX_EXTRA_DIMrX   rJ   r\   r  r(   r(   r)   add_time_mix_extra_dim  r  z!GGUFWriter.add_time_mix_extra_dimc                 C  r  r  )r   r   r  TIME_DECAY_EXTRA_DIMrX   rJ   r  r(   r(   r)   add_time_decay_extra_dim  r  z#GGUFWriter.add_time_decay_extra_dimc                 C  r  r  )r   r   r  RESIDUAL_SCALErX   rJ   r  r(   r(   r)   add_residual_scale  r  zGGUFWriter.add_residual_scalec                 C  r  r  )r   r   r  EMBEDDING_SCALErX   rJ   r  r(   r(   r)   add_embedding_scale  r  zGGUFWriter.add_embedding_scalec                 C  r  r  )r   r   WKV	HEAD_SIZErX   rJ   r  r(   r(   r)   add_wkv_head_size  r  zGGUFWriter.add_wkv_head_sizec                 C  r  r  )r   r   r  TOKEN_SHIFT_COUNTrX   rJ   r  r(   r(   r)   add_token_shift_count  r  z GGUFWriter.add_token_shift_countc                 C  r  r  )r   r   r  INTERLEAVE_MOE_LAYER_STEPrX   rJ   r  r(   r(   r)   add_interleave_moe_layer_step  r  z(GGUFWriter.add_interleave_moe_layer_stepc                 C  r  r  )r   r   r  LAYERNORM_EPSrX   rJ   r  r(   r(   r)   add_layer_norm_eps  r  zGGUFWriter.add_layer_norm_epsc                 C  r  r  )r   r   r  LAYERNORM_RMS_EPSrX   rJ   r  r(   r(   r)   add_layer_norm_rms_eps  r  z!GGUFWriter.add_layer_norm_rms_epsc                 C  r  r  )r   r   r  GROUPNORM_EPSrX   rJ   r  r(   r(   r)   add_group_norm_eps   r  zGGUFWriter.add_group_norm_epsc                 C  r  r  )r   r   r  GROUPNORM_GROUPSrX   rJ   r  r(   r(   r)   add_group_norm_groups  r  z GGUFWriter.add_group_norm_groupsc                 C  r  r  )r   r   r  CAUSALrX   rJ   r  r(   r(   r)   add_causal_attention  r  zGGUFWriter.add_causal_attentionc                 C  r  r  )r   r   r  Q_LORA_RANKrX   rJ   r  r(   r(   r)   add_q_lora_rank	  r  zGGUFWriter.add_q_lora_rankc                 C  r  r  )r   r   r  KV_LORA_RANKrX   rJ   r  r(   r(   r)   add_kv_lora_rank  r  zGGUFWriter.add_kv_lora_rankc                 C  r  r  )r   r   r  DECAY_LORA_RANKrX   rJ   r  r(   r(   r)   add_decay_lora_rank  r  zGGUFWriter.add_decay_lora_rankc                 C  r  r  )r   r   r  ICLR_LORA_RANKrX   rJ   r  r(   r(   r)   add_iclr_lora_rank  r  zGGUFWriter.add_iclr_lora_rankc                 C  r  r  )r   r   r  VALUE_RESIDUAL_MIX_LORA_RANKrX   rJ   r  r(   r(   r)    add_value_residual_mix_lora_rank  r  z+GGUFWriter.add_value_residual_mix_lora_rankc                 C  r  r  )r   r   r  GATE_LORA_RANKrX   rJ   r  r(   r(   r)   add_gate_lora_rank  r  zGGUFWriter.add_gate_lora_rankc                 C  r  r  )r   r   r  REL_BUCKETS_COUNTrX   rJ   r  r(   r(   r)   add_relative_attn_buckets_count  r  z*GGUFWriter.add_relative_attn_buckets_countc                 C  r  r  )r   r   r  SLIDING_WINDOWrX   rJ   r  r(   r(   r)   add_sliding_window  r  zGGUFWriter.add_sliding_windowc                 C  r  r  )r   r   r  SCALErX   rJ   r  r(   r(   r)   add_attention_scale!  r  zGGUFWriter.add_attention_scaler   c                 C  r  r  )r   r   r  POOLING_TYPErX   rJ   r+   r  r(   r(   r)   add_pooling_type$  r  zGGUFWriter.add_pooling_typec                 C  r  r  )r   r   RopeDIMENSION_COUNTrX   rJ   r  r(   r(   r)   add_rope_dimension_count'  r  z#GGUFWriter.add_rope_dimension_countdimsc                 C  r  r  )r   r   r3  DIMENSION_SECTIONSrX   rJ   )r\   r6  r(   r(   r)   add_rope_dimension_sections*  r  z&GGUFWriter.add_rope_dimension_sectionsc                 C  r  r  )r   r   r3  	FREQ_BASErX   rJ   r  r(   r(   r)   add_rope_freq_base-  r  zGGUFWriter.add_rope_freq_baser   c                 C  r  r  )r   r   r3  SCALING_TYPErX   rJ   r+   r  r(   r(   r)   add_rope_scaling_type0  r  z GGUFWriter.add_rope_scaling_typec                 C  r  r  )r   r   r3  SCALING_FACTORrX   rJ   r  r(   r(   r)   add_rope_scaling_factor3  r  z"GGUFWriter.add_rope_scaling_factorc                 C  r  r  )r   r   r3  SCALING_ATTN_FACTORrX   rJ   r  r(   r(   r)   add_rope_scaling_attn_factors6  r  z(GGUFWriter.add_rope_scaling_attn_factorsc                 C  r  r  )r   r   r3  SCALING_ORIG_CTX_LENrX   rJ   r  r(   r(   r)   add_rope_scaling_orig_ctx_len9  r  z(GGUFWriter.add_rope_scaling_orig_ctx_lenc                 C  r  r  )r   r   r3  SCALING_FINETUNEDrX   rJ   r  r(   r(   r)   add_rope_scaling_finetuned<  r  z%GGUFWriter.add_rope_scaling_finetunedc                 C  r  r  )r   r   r3  SCALING_YARN_LOG_MULrX   rJ   r  r(   r(   r)   add_rope_scaling_yarn_log_mul?  r  z(GGUFWriter.add_rope_scaling_yarn_log_mulc                 C  r  r  )r   r   SSMCONV_KERNELrX   rJ   r  r(   r(   r)   add_ssm_conv_kernelB  r  zGGUFWriter.add_ssm_conv_kernelc                 C  r  r  )r   r   rG  
INNER_SIZErX   rJ   r  r(   r(   r)   add_ssm_inner_sizeE  r  zGGUFWriter.add_ssm_inner_sizec                 C  r  r  )r   r   rG  
STATE_SIZErX   rJ   r  r(   r(   r)   add_ssm_state_sizeH  r  zGGUFWriter.add_ssm_state_sizec                 C  r  r  )r   r   rG  TIME_STEP_RANKrX   rJ   r  r(   r(   r)   add_ssm_time_step_rankK  r  z!GGUFWriter.add_ssm_time_step_rankc                 C  r  r  )r   r   rG  
DT_B_C_RMSrX   rJ   r  r(   r(   r)   add_ssm_dt_b_c_rmsN  r  zGGUFWriter.add_ssm_dt_b_c_rmsmodelc                 C  r!  r   )r   r   	TokenizerMODEL)r\   rR  r(   r(   r)   add_tokenizer_modelQ  r   zGGUFWriter.add_tokenizer_modelprec                 C  r!  r   )r   r   rS  PRE)r\   rV  r(   r(   r)   add_tokenizer_preT  r   zGGUFWriter.add_tokenizer_pretokens5Sequence[str] | Sequence[bytes] | Sequence[bytearray]c                 C  r!  r   )r   r   rS  LIST)r\   rY  r(   r(   r)   add_token_listW  r   zGGUFWriter.add_token_listmergesc                 C  r!  r   )r   r   rS  MERGES)r\   r]  r(   r(   r)   add_token_mergesZ  r   zGGUFWriter.add_token_mergestypes#Sequence[TokenType] | Sequence[int]c                 C  r!  r   )r   r   rS  
TOKEN_TYPE)r\   r`  r(   r(   r)   add_token_types]  r   zGGUFWriter.add_token_typesc                 C  r!  r   )r   r   rS  TOKEN_TYPE_COUNTr  r(   r(   r)   add_token_type_count`  r   zGGUFWriter.add_token_type_countscoresSequence[float]c                 C  r!  r   )r   r   rS  SCORES)r\   rf  r(   r(   r)   add_token_scoresc  r   zGGUFWriter.add_token_scoresc                 C  r!  r   )r   r   rS  BOS_IDr  r(   r(   r)   add_bos_token_idf  r   zGGUFWriter.add_bos_token_idc                 C  r!  r   )r   r   rS  EOS_IDr  r(   r(   r)   add_eos_token_idi  r   zGGUFWriter.add_eos_token_idc                 C  r!  r   )r   r   rS  UNK_IDr  r(   r(   r)   add_unk_token_idl  r   zGGUFWriter.add_unk_token_idc                 C  r!  r   )r   r   rS  SEP_IDr  r(   r(   r)   add_sep_token_ido  r   zGGUFWriter.add_sep_token_idc                 C  r!  r   )r   r   rS  PAD_IDr  r(   r(   r)   add_pad_token_idr  r   zGGUFWriter.add_pad_token_idc                 C  r!  r   )r   r   rS  MASK_IDr  r(   r(   r)   add_mask_token_idu  r   zGGUFWriter.add_mask_token_idc                 C  r!  r   )r   r   rS  ADD_BOSr  r(   r(   r)   add_add_bos_tokenx  r   zGGUFWriter.add_add_bos_tokenc                 C  r!  r   )r   r   rS  ADD_EOSr  r(   r(   r)   add_add_eos_token{  r   zGGUFWriter.add_add_eos_tokenc                 C  r!  r   )r   r   rS  
ADD_PREFIXr  r(   r(   r)   add_add_space_prefix~  r   zGGUFWriter.add_add_space_prefixc                 C  r!  r   )r   r   rS  REMOVE_EXTRA_WSr  r(   r(   r)   add_remove_extra_whitespaces  r   z'GGUFWriter.add_remove_extra_whitespacescharsmapr  c                 C  r!  r   )r   r   rS  PRECOMPILED_CHARSMAP)r\   r~  r(   r(   r)   add_precompiled_charsmap  r   z#GGUFWriter.add_precompiled_charsmap!str | Sequence[Mapping[str, str]]c                 C  s   t |tsVd }t }|D ]5}|dd}|d}ddd |D }|rA|d urA|dkr0|}q|| | tjj	j
|d| q|rN| tjjt| |d u rTd S |}| tjj| d S )Nrl    templatec                 s  s$    | ]}|t t v r|nd V  qdS )r   Nr   )rv   cr(   r(   r)   r     r  z/GGUFWriter.add_chat_template.<locals>.<genexpr>defaultr   )r  rK   setgetjoinaddr   r   rS  CHAT_TEMPLATE_NrX   r   CHAT_TEMPLATESlistCHAT_TEMPLATE)r\   r+   template_defaulttemplate_nameschoicerl   r  r(   r(   r)   add_chat_template  s&   


zGGUFWriter.add_chat_templatec                 C  r!  r   )r   r   rS  EOT_IDr  r(   r(   r)   add_eot_token_id  r   zGGUFWriter.add_eot_token_idc                 C  r!  r   )r   r   rS  EOM_IDr  r(   r(   r)   add_eom_token_id  r   zGGUFWriter.add_eom_token_idlabelsc                 C  r  r  )r   r   
ClassifierOUTPUT_LABELSrX   rJ   )r\   r  r(   r(   r)   add_classifier_output_labels  r  z'GGUFWriter.add_classifier_output_labelsc                 C  r!  r   )r   r   ClipHAS_VISION_ENCODERr  r(   r(   r)   add_clip_has_vision_encoder  r   z&GGUFWriter.add_clip_has_vision_encoderc                 C  r!  r   )r   r   r  HAS_AUDIO_ENCODERr  r(   r(   r)   add_clip_has_audio_encoder  r   z%GGUFWriter.add_clip_has_audio_encoderc                 C  r!  r   )r   r   r  PROJECTOR_TYPEr  r(   r(   r)   add_clip_projector_type  r   z"GGUFWriter.add_clip_projector_typec                 C  r!  r   )r   r   
ClipVisionPROJECTION_DIMr  r(   r(   r)   add_vision_projection_dim  r   z$GGUFWriter.add_vision_projection_dimc                 C  r!  r   )r   r   r  
PATCH_SIZEr  r(   r(   r)   add_vision_patch_size  r   z GGUFWriter.add_vision_patch_sizec                 C  r!  r   )r   r   r  r  r  r(   r(   r)   add_vision_embedding_length  r   z&GGUFWriter.add_vision_embedding_lengthc                 C  r!  r   )r   r   r  r  r  r(   r(   r)   add_vision_feed_forward_length  r   z)GGUFWriter.add_vision_feed_forward_lengthc                 C  r!  r   )r   r   r  r  r  r(   r(   r)   add_vision_block_count  r   z!GGUFWriter.add_vision_block_countc                 C     |  tjjj| d S r   )r   r   r  r  r  r  r(   r(   r)   add_vision_head_count  r&  z GGUFWriter.add_vision_head_countc                 C  r  r   )r   r   r  r  r  r  r(   r(   r)   "add_vision_attention_layernorm_eps  r&  z-GGUFWriter.add_vision_attention_layernorm_epsc                 C  r!  r   )r   r   r  
IMAGE_SIZEr  r(   r(   r)   add_vision_image_size  r   z GGUFWriter.add_vision_image_sizer   c                 C  r!  r   )r   r   r  
IMAGE_MEANr\   r   r(   r(   r)   add_vision_image_mean  r   z GGUFWriter.add_vision_image_meanc                 C  r!  r   )r   r   r  	IMAGE_STDr  r(   r(   r)   add_vision_image_std  r   zGGUFWriter.add_vision_image_stdc                 C  r!  r   )r   r   r  SPATIAL_MERGE_SIZEr  r(   r(   r)   add_vision_spatial_merge_size  r   z(GGUFWriter.add_vision_spatial_merge_sizec                 C  r!  r   )r   r   r  USE_GELUr  r(   r(   r)   add_vision_use_gelu  r   zGGUFWriter.add_vision_use_geluc                 C  r!  r   )r   r   r  USE_SILUr  r(   r(   r)   add_vision_use_silu  r   zGGUFWriter.add_vision_use_siluc                 C  r  r   )r   r   r  	ProjectorSCALE_FACTORr  r(   r(   r)   !add_vision_projector_scale_factor  r&  z,GGUFWriter.add_vision_projector_scale_factorc                 C  r!  r   )r   r   r  N_WA_PATTERNr  r(   r(   r)   add_vision_n_wa_pattern  r   z"GGUFWriter.add_vision_n_wa_patternc                 C  r!  r   )r   r   	ClipAudior  r  r(   r(   r)   add_audio_projection_dim  r   z#GGUFWriter.add_audio_projection_dimc                 C  r!  r   )r   r   r  r  r  r(   r(   r)   add_audio_embedding_length  r   z%GGUFWriter.add_audio_embedding_lengthc                 C  r!  r   )r   r   r  r  r  r(   r(   r)   add_audio_feed_forward_length  r   z(GGUFWriter.add_audio_feed_forward_lengthc                 C  r!  r   )r   r   r  r  r  r(   r(   r)   add_audio_block_count  r   z GGUFWriter.add_audio_block_countc                 C  r  r   )r   r   r  r  r  r  r(   r(   r)   add_audio_head_count  r&  zGGUFWriter.add_audio_head_countc                 C  r  r   )r   r   r  r  r  r  r(   r(   r)   !add_audio_attention_layernorm_eps  r&  z,GGUFWriter.add_audio_attention_layernorm_epsc                 C  r!  r   )r   r   r  NUM_MEL_BINSr  r(   r(   r)   add_audio_num_mel_bins  r   z!GGUFWriter.add_audio_num_mel_binsc                 C  r  r   )r   r   r  r  STACK_FACTORr  r(   r(   r)   add_audio_stack_factor  r&  z!GGUFWriter.add_audio_stack_factorfmtr   c                 C  s0   d}|s| j tjkrdnd}t| | |S )Nr  <>)rN   r   LITTLEstructpack)r\   r  r+   r   pack_prefixr(   r(   r)   r     s   zGGUFWriter._packr   c           	        s`  t  }|r|| d|7 }| j|}|d ur&|| j|||tjkd7 }|S |tjkrGt|tr5|	dn|}|| dt
|7 }||7 }|S |tjkrt|tsUtdt
|dkr_td|d urf| n#t|trotj nt|d  t fdd	|d
d  D std|| d 7 }|| dt
|7 }|D ]}|| j| dd7 }q|S td)NrB   r   zutf-8rE   z/Invalid GGUF metadata array, expecting sequencer   z(Invalid GGUF metadata array. Empty arrayc                 3  s    | ]
}t | u V  qd S r   )r   get_typeru   ltyper(   r)   r      s    z'GGUFWriter._pack_val.<locals>.<genexpr>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   r  rK   encodert   r   r   r   r  r   r  allr   )	r\   r   r   r   r.   r<   pack_fmtencoded_valitemr(   r  r)   r     s<   



zGGUFWriter._pack_valnumc                 C  sP   | dkrdS t | }dD ]}t|dk r|d|   S |d }q|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  r(   r(   r)   r   +  s   
z GGUFWriter.format_n_bytes_to_str)r9   rI   rJ   rK   rL   rM   rN   r   rO   r!   rP   r!   rQ   rM   rR   rM   )r^   r_   )r9   r   r^   rp   r   )r9   r8   r^   r{   )r^   rp   )r^   r{   )
r   rK   r   r
   r   r   r.   r-   r^   r{   )r   rK   r   r!   r^   r{   )r   rK   r   r   r^   r{   )r   rK   r   rM   r^   r{   )r   rK   r   rK   r^   r{   )r   rK   r   r   r^   r{   )r   r!   r   r!   r^   r!   )rl   rK   r   r   r   r   r   r!   r   r   r^   r{   )NN)
rl   rK   r#   r   r   r   r   r   r^   r{   )r   r   r   r!   r   r  r^   r{   )r#   r   r^   r{   )r
  rM   r^   r{   )r   rK   r^   r{   )r'  r!   r^   r{   )r*  r!   r^   r{   )r-  r!   r^   r{   )rl   rK   r^   r{   )r2  rK   r^   r{   )r5  rK   r^   r{   )r8  rK   r^   r{   )r;  rK   r^   r{   )r>  rK   r^   r{   )rA  rK   r^   r{   )rD  rK   r^   r{   )rG  rK   r^   r{   )rJ  rK   r^   r{   )rR  rK   r^   r{   )rV  rK   r^   r{   )rZ  rK   r^   r{   )r^  rK   r^   r{   )rj  r!   r^   r{   )rn  r!   rl   rK   r^   r{   )rn  r!   r2  rK   r^   r{   )rn  r!   r5  rK   r^   r{   )rn  r!   r8  rK   r^   r{   )rn  r!   rA  rK   r^   r{   )rn  r!   rR  rK   r^   r{   )rn  r!   rV  rK   r^   r{   )rn  r!   rZ  rK   r^   r{   )rn  r!   r^  rK   r^   r{   )r  r  r^   r{   )r  r  r^   r{   )r  rK   r^   r{   )rm   r!   r^   r{   )r  r!   r^   r{   )r  r  r^   r{   )r  rM   r^   r{   )rq  r!   r^   r{   )r  r  r^   r{   )r  r   r^   r{   )r+   r   r^   r{   )r  r!   r^   r{   )r+   rM   r^   r{   )r+   r   r^   r{   )r+   r!   r^   r{   )r  r!   r^   r{   )r+   r   r^   r{   )r6  r   r^   r{   )r+   r   r^   r{   )rR  rK   r^   r{   )rV  rK   r^   r{   )rY  rZ  r^   r{   )r]  rZ  r^   r{   )r`  ra  r^   r{   )rf  rg  r^   r{   )r~  r  r^   r{   )r+   r  r^   r{   )r  r  r^   r{   )r+   rK   r^   r{   )r   rg  r^   r{   )F)r  rK   r+   r
   r   rM   r^   r  )
r   r
   r   r   r   rM   r.   r-   r^   r  )r  r!   r^   rK   )r$   r%   r&   r'   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r  r]   ro   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   staticmethodr   r   r   r   r	  r  r   r  r$  r[   r)  r,  r/  r1  r4  r7  r:  r=  r@  rC  rF  rI  rM  rO  rQ  rU  rY  r]  ra  rc  re  rg  ri  rm  rt  rx  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  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  r2  r5  r8  r:  r<  r>  r@  rB  rD  rF  rI  rK  rM  rO  rQ  rU  rX  r\  r_  rc  re  ri  rk  rm  ro  rq  rs  ru  rw  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)   r6   @   s  
 /./&r6   )2
__future__r   loggingosr  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$   rV   rr   r   r*   r/   r6   r(   r(   r(   r)   <module>   s0    4
	