o
    0 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(   \/home/app/PaddleOCR-VL-test/.venv_paddleocr/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 onlyZBigZ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   endswithrT   warningr   )rZ   Ztotal_paramsZshared_paramsZexpert_paramsZ
expert_sumZn_expert_tensorsZlast_lora_ar;   namerU   r   sizeZ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_FORMATrV   stemlenr;   .0rC   r9   rZ   r(   r)   
<listcomp>   s   , z1GGUFWriter.format_shard_names.<locals>.<listcomp>)rk   r;   range)rZ   r9   r(   rn   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)rm   filenamer(   r(   r)   ro      s    z/GGUFWriter.open_output_file.<locals>.<listcomp>)r=   r/   r1   r7   r9   r0   
ValueError
print_plan)rZ   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"   rm   tir(   r(   r)   	<genexpr>       z(GGUFWriter.print_plan.<locals>.<genexpr>zDry run, not writing files)rT   rU   r9   rq   rk   r;   zipr6   format_n_bytes_to_strsumvaluesrQ   printexit)rZ   ry   rd   r;   r(   r(   r)   rx      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|   )rk   )rm   tr(   r(   r)   r          z/GGUFWriter.add_shard_kv_data.<locals>.<genexpr>c                 s  s    | ]}i V  qd S r|   r(   )rm   _r(   r(   r)   r      s    )rk   r;   r   r7   r<   extendrp   	enumerater*   r   UINT16r   ZSplitZLLM_KV_SPLIT_NOZLLM_KV_SPLIT_COUNTINT32ZLLM_KV_SPLIT_TENSORS_COUNT)rZ   Ztotal_tensorsZ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   )rk   r;   rO   rP   rT   rc   rz   r=   r/   r1   rw   r7   r<   r   r   write_packr   r   flushr2   )rZ   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   rw   r7   r   r<   	bytearrayra   	_pack_valr   STRINGr+   r,   r.   r   r   r3   )rZ   r7   r<   Z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   rw   r7   r   r;   r   ra   r   r   r   rk   r   r   rp   r    r6   ggml_padr"   rS   r   r   r4   )	rZ   r7   r;   Zti_dataZoffset_tensorrd   r   Z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(   )rm   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<   rT   rc   rd   r*   )rZ   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rZ   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   )rk   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_padrd   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 )
Nrs   c                 3  r   r|   r(   )rm   r;   rd   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   rw   r   r;   npZfloat16r   ZF16Zfloat32ZF32Zfloat64ZF64Zint8ZI8Zint16ZI16Zint32ZI32Zint64ZI64Zuint8r   rk   rO   rP   r   r   rX   r   )rZ   rd   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Zinplacezw+bi   )modemax_sizer   )r   r^   )rN   r   rW   byteswaprL   r:   tempfileSpooledTemporaryFileseekr   r   r    r"   r;   r#   tofilewrite_padding)rZ   rd   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   rS   r   bytes)rZ   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(   )rm   rd   r   r(   r(   r)   ro     s    z0GGUFWriter.write_tensor_data.<locals>.<listcomp>r   )r=   r/   r4   r5   rw   r7   rN   r   rW   r   r   r;   rk   r   keysrp   popr"   r   tellr   )rZ   r#   Zfile_idrC   r;   r7   Z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"   )rm   r   r   r(   r(   r)   r        " z3GGUFWriter.write_tensors_to_file.<locals>.<genexpr>r   z	Shard (0/)byteT)ZdesctotalunitZ
unit_scaleZWritingzShard (/c                 s  r{   r|   r}   r~   r(   r(   r)   r     r   )r   )r   r7   r   r   r:   r   r   r;   rk   r   r   set_descriptionr   resetr#   r"   r   updater   shutilcopyfileobjrR   r   closer/   r5   r=   )rZ   r   r7   Z	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   rZ   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   GeneralZTYPE)rZ   r   r(   r(   r)   add_type  r   zGGUFWriter.add_typec                 C  s   |  tjj| j d S r|   )r   r   r   ZARCHITECTURErJ   )rZ   r(   r(   r)   rY        zGGUFWriter.add_architecturequantization_versionc                 C  r   r|   )r   r   r   ZQUANTIZATION_VERSION)rZ   r   r(   r(   r)   add_quantization_version  r   z#GGUFWriter.add_quantization_version	alignmentc                 C  s   || _ | tjj| d S r|   )rS   r   r   r   Z	ALIGNMENT)rZ   r   r(   r(   r)   add_custom_alignment  s   zGGUFWriter.add_custom_alignmentftypec                 C  r   r|   )r   r   r   Z	FILE_TYPE)rZ   r   r(   r(   r)   add_file_type  r   zGGUFWriter.add_file_typec                 C  r   r|   )r   r   r   NAME)rZ   rd   r(   r(   r)   add_name  r   zGGUFWriter.add_nameauthorc                 C  r   r|   )r   r   r   ZAUTHOR)rZ   r  r(   r(   r)   
add_author  r   zGGUFWriter.add_authorversionc                 C  r   r|   )r   r   r   VERSION)rZ   r  r(   r(   r)   add_version  r   zGGUFWriter.add_versionorganizationc                 C  r   r|   )r   r   r   ZORGANIZATION)rZ   r	  r(   r(   r)   add_organization  r   zGGUFWriter.add_organizationfinetunec                 C  r   r|   )r   r   r   ZFINETUNE)rZ   r  r(   r(   r)   add_finetune  r   zGGUFWriter.add_finetunebasenamec                 C  r   r|   )r   r   r   ZBASENAME)rZ   r  r(   r(   r)   add_basename  r   zGGUFWriter.add_basenamedescriptionc                 C  r   r|   )r   r   r   ZDESCRIPTION)rZ   r  r(   r(   r)   add_description  r   zGGUFWriter.add_description	quantizedc                 C  r   r|   )r   r   r   ZQUANTIZED_BY)rZ   r  r(   r(   r)   add_quantized_by  r   zGGUFWriter.add_quantized_by
size_labelc                 C  r   r|   )r   r   r   Z
SIZE_LABEL)rZ   r  r(   r(   r)   add_size_label
  r   zGGUFWriter.add_size_labellicensec                 C  r   r|   )r   r   r   LICENSErZ   r  r(   r(   r)   add_license  r   zGGUFWriter.add_licensec                 C  r   r|   )r   r   r   ZLICENSE_NAMEr  r(   r(   r)   add_license_name  r   zGGUFWriter.add_license_namec                 C  r   r|   )r   r   r   ZLICENSE_LINKr  r(   r(   r)   add_license_link  r   zGGUFWriter.add_license_linkurlc                 C  r   r|   )r   r   r   URLrZ   r  r(   r(   r)   add_url  r   zGGUFWriter.add_urldoic                 C  r   r|   )r   r   r   ZDOIrZ   r  r(   r(   r)   add_doi  r   zGGUFWriter.add_doiuuidc                 C  r   r|   )r   r   r   UUIDrZ   r"  r(   r(   r)   add_uuid  r   zGGUFWriter.add_uuidrepo_urlc                 C  r   r|   )r   r   r   ZREPO_URLrZ   r&  r(   r(   r)   add_repo_url  r   zGGUFWriter.add_repo_urlc                 C  r   r|   )r   r   r   Z
SOURCE_URLr  r(   r(   r)   add_source_url"  r   zGGUFWriter.add_source_urlc                 C  r   r|   )r   r   r   Z
SOURCE_DOIr   r(   r(   r)   add_source_doi%  r   zGGUFWriter.add_source_doic                 C  r   r|   )r   r   r   ZSOURCE_UUIDr$  r(   r(   r)   add_source_uuid(  r   zGGUFWriter.add_source_uuidc                 C  r   r|   )r   r   r   Z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   ZBASE_MODEL_COUNTrZ   r-  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   ZBASE_MODEL_NAMErV   rZ   r0  rd   r(   r(   r)   add_base_model_name1     zGGUFWriter.add_base_model_namec                 C  r1  r2  )r   r   r   ZBASE_MODEL_AUTHORrV   rZ   r0  r  r(   r(   r)   add_base_model_author4  r6  z GGUFWriter.add_base_model_authorc                 C  r1  r2  )r   r   r   ZBASE_MODEL_VERSIONrV   rZ   r0  r  r(   r(   r)   add_base_model_version7  r6  z!GGUFWriter.add_base_model_versionc                 C  r1  r2  )r   r   r   ZBASE_MODEL_ORGANIZATIONrV   rZ   r0  r	  r(   r(   r)   add_base_model_organization:  r6  z&GGUFWriter.add_base_model_organizationc                 C  r1  r2  )r   r   r   ZBASE_MODEL_DESCRIPTIONrV   rZ   r0  r  r(   r(   r)   add_base_model_description=  r6  z%GGUFWriter.add_base_model_descriptionc                 C  r1  r2  )r   r   r   ZBASE_MODEL_URLrV   rZ   r0  r  r(   r(   r)   add_base_model_url@  r6  zGGUFWriter.add_base_model_urlc                 C  r1  r2  )r   r   r   ZBASE_MODEL_DOIrV   rZ   r0  r  r(   r(   r)   add_base_model_doiC  r6  zGGUFWriter.add_base_model_doic                 C  r1  r2  )r   r   r   ZBASE_MODEL_UUIDrV   rZ   r0  r"  r(   r(   r)   add_base_model_uuidF  r6  zGGUFWriter.add_base_model_uuidc                 C  r1  r2  )r   r   r   ZBASE_MODEL_REPO_URLrV   rZ   r0  r&  r(   r(   r)   add_base_model_repo_urlI  r6  z"GGUFWriter.add_base_model_repo_urlc                 C  r   r|   )r   r   r   ZDATASET_COUNTr.  r(   r(   r)   add_dataset_countL  r   zGGUFWriter.add_dataset_countc                 C  r1  r2  )r   r   r   ZDATASET_NAMErV   r4  r(   r(   r)   add_dataset_nameO  r6  zGGUFWriter.add_dataset_namec                 C  r1  r2  )r   r   r   ZDATASET_AUTHORrV   r7  r(   r(   r)   add_dataset_authorR  r6  zGGUFWriter.add_dataset_authorc                 C  r1  r2  )r   r   r   ZDATASET_VERSIONrV   r9  r(   r(   r)   add_dataset_versionU  r6  zGGUFWriter.add_dataset_versionc                 C  r1  r2  )r   r   r   ZDATASET_ORGANIZATIONrV   r;  r(   r(   r)   add_dataset_organizationX  r6  z#GGUFWriter.add_dataset_organizationc                 C  r1  r2  )r   r   r   ZDATASET_DESCRIPTIONrV   r=  r(   r(   r)   add_dataset_description[  r6  z"GGUFWriter.add_dataset_descriptionc                 C  r1  r2  )r   r   r   ZDATASET_URLrV   r?  r(   r(   r)   add_dataset_url^  r6  zGGUFWriter.add_dataset_urlc                 C  r1  r2  )r   r   r   ZDATASET_DOIrV   rA  r(   r(   r)   add_dataset_doia  r6  zGGUFWriter.add_dataset_doic                 C  r1  r2  )r   r   r   ZDATASET_UUIDrV   rC  r(   r(   r)   add_dataset_uuidd  r6  zGGUFWriter.add_dataset_uuidc                 C  r1  r2  )r   r   r   ZDATASET_REPO_URLrV   rE  r(   r(   r)   add_dataset_repo_urlg  r6  zGGUFWriter.add_dataset_repo_urltagsSequence[str]c                 C  r   r|   )r   r   r   ZTAGS)rZ   rQ  r(   r(   r)   add_tagsj  r   zGGUFWriter.add_tags	languagesc                 C  r   r|   )r   r   r   Z	LANGUAGES)rZ   rT  r(   r(   r)   add_languagesm  r   zGGUFWriter.add_languageslayoutc                 C     |  tjjj| jd| d S N)rJ   )r   r   LLMZTENSOR_DATA_LAYOUTrV   rJ   )rZ   rV  r(   r(   r)   add_tensor_data_layoutp     z!GGUFWriter.add_tensor_data_layoutre   c                 C  rW  rX  )r   r   rY  Z
VOCAB_SIZErV   rJ   rZ   re   r(   r(   r)   add_vocab_sizes  r[  zGGUFWriter.add_vocab_sizelengthc                 C  rW  rX  )r   r   rY  ZCONTEXT_LENGTHrV   rJ   rZ   r^  r(   r(   r)   add_context_lengthv  r[  zGGUFWriter.add_context_lengthc                 C  rW  rX  )r   r   rY  EMBEDDING_LENGTHrV   rJ   r_  r(   r(   r)   add_embedding_lengthy  r[  zGGUFWriter.add_embedding_lengthc                 C  rW  rX  )r   r   rY  ZFEATURES_LENGTHrV   rJ   r_  r(   r(   r)   add_features_length|  r[  zGGUFWriter.add_features_lengthc                 C  rW  rX  )r   r   PosNetra  rV   rJ   r_  r(   r(   r)   add_posnet_embedding_length  r[  z&GGUFWriter.add_posnet_embedding_lengthc                 C  rW  rX  )r   r   rd  BLOCK_COUNTrV   rJ   r_  r(   r(   r)   add_posnet_block_count  r[  z!GGUFWriter.add_posnet_block_countc                 C  rW  rX  )r   r   ConvNextra  rV   rJ   r_  r(   r(   r)   add_convnext_embedding_length  r[  z(GGUFWriter.add_convnext_embedding_lengthc                 C  rW  rX  )r   r   rh  rf  rV   rJ   r_  r(   r(   r)   add_convnext_block_count  r[  z#GGUFWriter.add_convnext_block_countc                 C  rW  rX  )r   r   rY  rf  rV   rJ   r_  r(   r(   r)   add_block_count  r[  zGGUFWriter.add_block_countc                 C  rW  rX  )r   r   rY  ZLEADING_DENSE_BLOCK_COUNTrV   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 rX  )	
isinstancer!   r   r   rY  FEED_FORWARD_LENGTHrV   rJ   r   r_  r(   r(   r)   add_feed_forward_length     
z"GGUFWriter.add_feed_forward_lengthc                 C  rW  rX  )r   r   rY  ZEXPERT_FEED_FORWARD_LENGTHrV   rJ   r_  r(   r(   r)   add_expert_feed_forward_length  r[  z)GGUFWriter.add_expert_feed_forward_lengthc                 C  rW  rX  )r   r   rY  Z!EXPERT_SHARED_FEED_FORWARD_LENGTHrV   rJ   r_  r(   r(   r)   %add_expert_shared_feed_forward_length  r[  z0GGUFWriter.add_expert_shared_feed_forward_lengthusec                 C  rW  rX  )r   r   rY  ZUSE_PARALLEL_RESIDUALrV   rJ   )rZ   ru  r(   r(   r)   add_parallel_residual  r[  z GGUFWriter.add_parallel_residualr3  c                 C  rW  rX  )r   r   rY  ZDECODER_START_TOKEN_IDrV   rJ   rZ   r3  r(   r(   r)   add_decoder_start_token_id  r[  z%GGUFWriter.add_decoder_start_token_idcountc                 C  rn  rX  )	ro  r!   r   r   	Attention
HEAD_COUNTrV   rJ   r   rZ   ry  r(   r(   r)   add_head_count  rr  zGGUFWriter.add_head_countc                 C  rn  rX  )	ro  r!   r   r   rz  ZHEAD_COUNT_KVrV   rJ   r   r|  r(   r(   r)   add_head_count_kv  rr  zGGUFWriter.add_head_count_kvc                 C  rW  rX  )r   r   rz  Z
KEY_LENGTHrV   rJ   r_  r(   r(   r)   add_key_length  r[  zGGUFWriter.add_key_lengthc                 C  rW  rX  )r   r   rz  ZVALUE_LENGTHrV   rJ   r_  r(   r(   r)   add_value_length  r[  zGGUFWriter.add_value_lengthc                 C  rW  rX  )r   r   rz  ZKEY_LENGTH_MLArV   rJ   r_  r(   r(   r)   add_key_length_mla  r[  zGGUFWriter.add_key_length_mlac                 C  rW  rX  )r   r   rz  ZVALUE_LENGTH_MLArV   rJ   r_  r(   r(   r)   add_value_length_mla  r[  zGGUFWriter.add_value_length_mlabiasc                 C  rW  rX  )r   r   rz  ZMAX_ALIBI_BIASrV   rJ   )rZ   r  r(   r(   r)   add_max_alibi_bias  r[  zGGUFWriter.add_max_alibi_biasr+   c                 C  rW  rX  )r   r   rz  Z	CLAMP_KQVrV   rJ   rZ   r+   r(   r(   r)   add_clamp_kqv  r[  zGGUFWriter.add_clamp_kqvc                 C  rW  rX  )r   r   rY  ZLOGIT_SCALErV   rJ   r  r(   r(   r)   add_logit_scale  r[  zGGUFWriter.add_logit_scalec                 C  rW  rX  )r   r   rY  ZATTN_LOGIT_SOFTCAPPINGrV   rJ   r  r(   r(   r)   add_attn_logit_softcapping  r[  z%GGUFWriter.add_attn_logit_softcappingc                 C  rW  rX  )r   r   rY  ZFINAL_LOGIT_SOFTCAPPINGrV   rJ   r  r(   r(   r)   add_final_logit_softcapping  r[  z&GGUFWriter.add_final_logit_softcappingc                 C  rW  rX  )r   r   rY  ZEXPERT_COUNTrV   rJ   r|  r(   r(   r)   add_expert_count  r[  zGGUFWriter.add_expert_countc                 C  rW  rX  )r   r   rY  ZEXPERT_USED_COUNTrV   rJ   r|  r(   r(   r)   add_expert_used_count  r[  z GGUFWriter.add_expert_used_countc                 C  rW  rX  )r   r   rY  ZEXPERT_SHARED_COUNTrV   rJ   r|  r(   r(   r)   add_expert_shared_count  r[  z"GGUFWriter.add_expert_shared_countc                 C  rW  rX  )r   r   rY  ZEXPERT_WEIGHTS_SCALErV   rJ   r  r(   r(   r)   add_expert_weights_scale  r[  z#GGUFWriter.add_expert_weights_scalec                 C  rW  rX  )r   r   rY  ZEXPERT_WEIGHTS_NORMrV   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 rX  )r   r   rY  ZEXPERT_GATING_FUNCrV   rJ   r+   r  r(   r(   r)   add_expert_gating_func      z!GGUFWriter.add_expert_gating_funcc                 C  rW  rX  )r   r   rY  ZMOE_EVERY_N_LAYERSrV   rJ   r  r(   r(   r)   add_moe_every_n_layers  r[  z!GGUFWriter.add_moe_every_n_layersc                 C  rW  rX  )r   r   rY  Z	SWIN_NORMrV   rJ   r  r(   r(   r)   add_swin_norm  r[  zGGUFWriter.add_swin_normc                 C  rW  rX  )r   r   rY  ZRESCALE_EVERY_N_LAYERSrV   rJ   r|  r(   r(   r)   add_rescale_every_n_layers  r[  z%GGUFWriter.add_rescale_every_n_layersdimc                 C  rW  rX  )r   r   rY  ZTIME_MIX_EXTRA_DIMrV   rJ   rZ   r  r(   r(   r)   add_time_mix_extra_dim  r[  z!GGUFWriter.add_time_mix_extra_dimc                 C  rW  rX  )r   r   rY  ZTIME_DECAY_EXTRA_DIMrV   rJ   r  r(   r(   r)   add_time_decay_extra_dim  r[  z#GGUFWriter.add_time_decay_extra_dimc                 C  rW  rX  )r   r   rY  ZRESIDUAL_SCALErV   rJ   r  r(   r(   r)   add_residual_scale  r[  zGGUFWriter.add_residual_scalec                 C  rW  rX  )r   r   rY  ZEMBEDDING_SCALErV   rJ   r  r(   r(   r)   add_embedding_scale  r[  zGGUFWriter.add_embedding_scalec                 C  rW  rX  )r   r   ZWKVZ	HEAD_SIZErV   rJ   r\  r(   r(   r)   add_wkv_head_size  r[  zGGUFWriter.add_wkv_head_sizec                 C  rW  rX  )r   r   rY  ZTOKEN_SHIFT_COUNTrV   rJ   r|  r(   r(   r)   add_token_shift_count  r[  z GGUFWriter.add_token_shift_countc                 C  rW  rX  )r   r   rY  ZINTERLEAVE_MOE_LAYER_STEPrV   rJ   r  r(   r(   r)   add_interleave_moe_layer_step  r[  z(GGUFWriter.add_interleave_moe_layer_stepc                 C  rW  rX  )r   r   rz  LAYERNORM_EPSrV   rJ   r  r(   r(   r)   add_layer_norm_eps  r[  zGGUFWriter.add_layer_norm_epsc                 C  rW  rX  )r   r   rz  ZLAYERNORM_RMS_EPSrV   rJ   r  r(   r(   r)   add_layer_norm_rms_eps  r[  z!GGUFWriter.add_layer_norm_rms_epsc                 C  rW  rX  )r   r   rz  ZGROUPNORM_EPSrV   rJ   r  r(   r(   r)   add_group_norm_eps   r[  zGGUFWriter.add_group_norm_epsc                 C  rW  rX  )r   r   rz  ZGROUPNORM_GROUPSrV   rJ   r  r(   r(   r)   add_group_norm_groups  r[  z GGUFWriter.add_group_norm_groupsc                 C  rW  rX  )r   r   rz  ZCAUSALrV   rJ   r  r(   r(   r)   add_causal_attention  r[  zGGUFWriter.add_causal_attentionc                 C  rW  rX  )r   r   rz  ZQ_LORA_RANKrV   rJ   r_  r(   r(   r)   add_q_lora_rank	  r[  zGGUFWriter.add_q_lora_rankc                 C  rW  rX  )r   r   rz  ZKV_LORA_RANKrV   rJ   r_  r(   r(   r)   add_kv_lora_rank  r[  zGGUFWriter.add_kv_lora_rankc                 C  rW  rX  )r   r   rz  ZDECAY_LORA_RANKrV   rJ   r_  r(   r(   r)   add_decay_lora_rank  r[  zGGUFWriter.add_decay_lora_rankc                 C  rW  rX  )r   r   rz  ZICLR_LORA_RANKrV   rJ   r_  r(   r(   r)   add_iclr_lora_rank  r[  zGGUFWriter.add_iclr_lora_rankc                 C  rW  rX  )r   r   rz  ZVALUE_RESIDUAL_MIX_LORA_RANKrV   rJ   r_  r(   r(   r)    add_value_residual_mix_lora_rank  r[  z+GGUFWriter.add_value_residual_mix_lora_rankc                 C  rW  rX  )r   r   rz  ZGATE_LORA_RANKrV   rJ   r_  r(   r(   r)   add_gate_lora_rank  r[  zGGUFWriter.add_gate_lora_rankc                 C  rW  rX  )r   r   rz  ZREL_BUCKETS_COUNTrV   rJ   r  r(   r(   r)   add_relative_attn_buckets_count  r[  z*GGUFWriter.add_relative_attn_buckets_countc                 C  rW  rX  )r   r   rz  ZSLIDING_WINDOWrV   rJ   r  r(   r(   r)   add_sliding_window  r[  zGGUFWriter.add_sliding_windowc                 C  rW  rX  )r   r   rz  ZSCALErV   rJ   r  r(   r(   r)   add_attention_scale!  r[  zGGUFWriter.add_attention_scaler   c                 C  r  rX  )r   r   rY  ZPOOLING_TYPErV   rJ   r+   r  r(   r(   r)   add_pooling_type$  r  zGGUFWriter.add_pooling_typec                 C  rW  rX  )r   r   RopeZDIMENSION_COUNTrV   rJ   r|  r(   r(   r)   add_rope_dimension_count'  r[  z#GGUFWriter.add_rope_dimension_countdimsc                 C  rW  rX  )r   r   r  ZDIMENSION_SECTIONSrV   rJ   )rZ   r  r(   r(   r)   add_rope_dimension_sections*  r[  z&GGUFWriter.add_rope_dimension_sectionsc                 C  rW  rX  )r   r   r  Z	FREQ_BASErV   rJ   r  r(   r(   r)   add_rope_freq_base-  r[  zGGUFWriter.add_rope_freq_baser   c                 C  r  rX  )r   r   r  ZSCALING_TYPErV   rJ   r+   r  r(   r(   r)   add_rope_scaling_type0  r  z GGUFWriter.add_rope_scaling_typec                 C  rW  rX  )r   r   r  ZSCALING_FACTORrV   rJ   r  r(   r(   r)   add_rope_scaling_factor3  r[  z"GGUFWriter.add_rope_scaling_factorc                 C  rW  rX  )r   r   r  ZSCALING_ATTN_FACTORrV   rJ   r  r(   r(   r)   add_rope_scaling_attn_factors6  r[  z(GGUFWriter.add_rope_scaling_attn_factorsc                 C  rW  rX  )r   r   r  ZSCALING_ORIG_CTX_LENrV   rJ   r  r(   r(   r)   add_rope_scaling_orig_ctx_len9  r[  z(GGUFWriter.add_rope_scaling_orig_ctx_lenc                 C  rW  rX  )r   r   r  ZSCALING_FINETUNEDrV   rJ   r  r(   r(   r)   add_rope_scaling_finetuned<  r[  z%GGUFWriter.add_rope_scaling_finetunedc                 C  rW  rX  )r   r   r  ZSCALING_YARN_LOG_MULrV   rJ   r  r(   r(   r)   add_rope_scaling_yarn_log_mul?  r[  z(GGUFWriter.add_rope_scaling_yarn_log_mulc                 C  rW  rX  )r   r   SSMZCONV_KERNELrV   rJ   r  r(   r(   r)   add_ssm_conv_kernelB  r[  zGGUFWriter.add_ssm_conv_kernelc                 C  rW  rX  )r   r   r  Z
INNER_SIZErV   rJ   r  r(   r(   r)   add_ssm_inner_sizeE  r[  zGGUFWriter.add_ssm_inner_sizec                 C  rW  rX  )r   r   r  Z
STATE_SIZErV   rJ   r  r(   r(   r)   add_ssm_state_sizeH  r[  zGGUFWriter.add_ssm_state_sizec                 C  rW  rX  )r   r   r  ZTIME_STEP_RANKrV   rJ   r  r(   r(   r)   add_ssm_time_step_rankK  r[  z!GGUFWriter.add_ssm_time_step_rankc                 C  rW  rX  )r   r   r  Z
DT_B_C_RMSrV   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   	TokenizerZMODEL)rZ   r  r(   r(   r)   add_tokenizer_modelQ  r   zGGUFWriter.add_tokenizer_modelprec                 C  r   r|   )r   r   r  ZPRE)rZ   r  r(   r(   r)   add_tokenizer_preT  r   zGGUFWriter.add_tokenizer_pretokens5Sequence[str] | Sequence[bytes] | Sequence[bytearray]c                 C  r   r|   )r   r   r  LIST)rZ   r  r(   r(   r)   add_token_listW  r   zGGUFWriter.add_token_listmergesc                 C  r   r|   )r   r   r  ZMERGES)rZ   r  r(   r(   r)   add_token_mergesZ  r   zGGUFWriter.add_token_mergestypes#Sequence[TokenType] | Sequence[int]c                 C  r   r|   )r   r   r  Z
TOKEN_TYPE)rZ   r  r(   r(   r)   add_token_types]  r   zGGUFWriter.add_token_typesc                 C  r   r|   )r   r   r  Z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   r  ZSCORES)rZ   r  r(   r(   r)   add_token_scoresc  r   zGGUFWriter.add_token_scoresc                 C  r   r|   )r   r   r  ZBOS_IDrw  r(   r(   r)   add_bos_token_idf  r   zGGUFWriter.add_bos_token_idc                 C  r   r|   )r   r   r  ZEOS_IDrw  r(   r(   r)   add_eos_token_idi  r   zGGUFWriter.add_eos_token_idc                 C  r   r|   )r   r   r  ZUNK_IDrw  r(   r(   r)   add_unk_token_idl  r   zGGUFWriter.add_unk_token_idc                 C  r   r|   )r   r   r  ZSEP_IDrw  r(   r(   r)   add_sep_token_ido  r   zGGUFWriter.add_sep_token_idc                 C  r   r|   )r   r   r  ZPAD_IDrw  r(   r(   r)   add_pad_token_idr  r   zGGUFWriter.add_pad_token_idc                 C  r   r|   )r   r   r  ZMASK_IDrw  r(   r(   r)   add_mask_token_idu  r   zGGUFWriter.add_mask_token_idc                 C  r   r|   )r   r   r  ZADD_BOSr  r(   r(   r)   add_add_bos_tokenx  r   zGGUFWriter.add_add_bos_tokenc                 C  r   r|   )r   r   r  ZADD_EOSr  r(   r(   r)   add_add_eos_token{  r   zGGUFWriter.add_add_eos_tokenc                 C  r   r|   )r   r   r  Z
ADD_PREFIXr  r(   r(   r)   add_add_space_prefix~  r   zGGUFWriter.add_add_space_prefixc                 C  r   r|   )r   r   r  ZREMOVE_EXTRA_WSr  r(   r(   r)   add_remove_extra_whitespaces  r   z'GGUFWriter.add_remove_extra_whitespacescharsmapr   c                 C  r   r|   )r   r   r  ZPRECOMPILED_CHARSMAP)rZ   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 )Nrd    templatec                 s  s$    | ]}|t t v r|nd V  qdS )r   Nr   )rm   cr(   r(   r)   r     r   z/GGUFWriter.add_chat_template.<locals>.<genexpr>defaultr   )ro  rK   setgetjoinaddr   r   r  ZCHAT_TEMPLATE_NrV   r   ZCHAT_TEMPLATESlistZCHAT_TEMPLATE)rZ   r+   Ztemplate_defaultZtemplate_nameschoicerd   r  r(   r(   r)   add_chat_template  s&   


zGGUFWriter.add_chat_templatec                 C  r   r|   )r   r   r  ZEOT_IDrw  r(   r(   r)   add_eot_token_id  r   zGGUFWriter.add_eot_token_idc                 C  r   r|   )r   r   r  ZEOM_IDrw  r(   r(   r)   add_eom_token_id  r   zGGUFWriter.add_eom_token_idlabelsc                 C  rW  rX  )r   r   
ClassifierZOUTPUT_LABELSrV   rJ   )rZ   r  r(   r(   r)   add_classifier_output_labels  r[  z'GGUFWriter.add_classifier_output_labelsc                 C  r   r|   )r   r   ClipZ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  Z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  Z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  Z
PATCH_SIZEr  r(   r(   r)   add_vision_patch_size  r   z GGUFWriter.add_vision_patch_sizec                 C  r   r|   )r   r   r  ra  r  r(   r(   r)   add_vision_embedding_length  r   z&GGUFWriter.add_vision_embedding_lengthc                 C  r   r|   )r   r   r  rp  r  r(   r(   r)   add_vision_feed_forward_length  r   z)GGUFWriter.add_vision_feed_forward_lengthc                 C  r   r|   )r   r   r  rf  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  rz  r{  r  r(   r(   r)   add_vision_head_count  r   z GGUFWriter.add_vision_head_countc                 C  r  r|   )r   r   r  rz  r  r  r(   r(   r)   "add_vision_attention_layernorm_eps  r   z-GGUFWriter.add_vision_attention_layernorm_epsc                 C  r   r|   )r   r   r  Z
IMAGE_SIZEr  r(   r(   r)   add_vision_image_size  r   z GGUFWriter.add_vision_image_sizer   c                 C  r   r|   )r   r   r  Z
IMAGE_MEANrZ   r   r(   r(   r)   add_vision_image_mean  r   z GGUFWriter.add_vision_image_meanc                 C  r   r|   )r   r   r  Z	IMAGE_STDr  r(   r(   r)   add_vision_image_std  r   zGGUFWriter.add_vision_image_stdc                 C  r   r|   )r   r   r  Z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  ZUSE_GELUr  r(   r(   r)   add_vision_use_gelu  r   zGGUFWriter.add_vision_use_geluc                 C  r   r|   )r   r   r  ZUSE_SILUr  r(   r(   r)   add_vision_use_silu  r   zGGUFWriter.add_vision_use_siluc                 C  r  r|   )r   r   r  	ProjectorZSCALE_FACTORr  r(   r(   r)   !add_vision_projector_scale_factor  r   z,GGUFWriter.add_vision_projector_scale_factorc                 C  r   r|   )r   r   r  Z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  ra  r  r(   r(   r)   add_audio_embedding_length  r   z%GGUFWriter.add_audio_embedding_lengthc                 C  r   r|   )r   r   r  rp  r  r(   r(   r)   add_audio_feed_forward_length  r   z(GGUFWriter.add_audio_feed_forward_lengthc                 C  r   r|   )r   r   r  rf  r  r(   r(   r)   add_audio_block_count  r   z GGUFWriter.add_audio_block_countc                 C  r  r|   )r   r   r  rz  r{  r  r(   r(   r)   add_audio_head_count  r   zGGUFWriter.add_audio_head_countc                 C  r  r|   )r   r   r  rz  r  r  r(   r(   r)   !add_audio_attention_layernorm_eps  r   z,GGUFWriter.add_audio_attention_layernorm_epsc                 C  r   r|   )r   r   r  Z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  Z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)rZ   r  r+   r   Z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_typerl   Z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   ro  rK   encoderk   r   r   rw   r   r   r  allr   )	rZ   r   r   r   r.   r<   Zpack_fmtZ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  Z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\   rg   r|   )r9   r8   r\   rr   )r\   rg   )r\   rr   )
r   rK   r   r
   r   r   r.   r-   r\   rr   )r   rK   r   r!   r\   rr   )r   rK   r   r   r\   rr   )r   rK   r   rM   r\   rr   )r   rK   r   rK   r\   rr   )r   rK   r   r   r\   rr   )r   r!   r   r!   r\   r!   )rd   rK   r   r   r   r   r   r!   r   r   r\   rr   )NN)
rd   rK   r#   r   r   r   r   r   r\   rr   )r   r   r   r!   r   r   r\   rr   )r#   r   r\   rr   )r   rM   r\   rr   )r   rK   r\   rr   )r   r!   r\   rr   )r   r!   r\   rr   )r   r!   r\   rr   )rd   rK   r\   rr   )r  rK   r\   rr   )r  rK   r\   rr   )r	  rK   r\   rr   )r  rK   r\   rr   )r  rK   r\   rr   )r  rK   r\   rr   )r  rK   r\   rr   )r  rK   r\   rr   )r  rK   r\   rr   )r  rK   r\   rr   )r  rK   r\   rr   )r"  rK   r\   rr   )r&  rK   r\   rr   )r-  r!   r\   rr   )r0  r!   rd   rK   r\   rr   )r0  r!   r  rK   r\   rr   )r0  r!   r  rK   r\   rr   )r0  r!   r	  rK   r\   rr   )r0  r!   r  rK   r\   rr   )r0  r!   r  rK   r\   rr   )r0  r!   r  rK   r\   rr   )r0  r!   r"  rK   r\   rr   )r0  r!   r&  rK   r\   rr   )rQ  rR  r\   rr   )rT  rR  r\   rr   )rV  rK   r\   rr   )re   r!   r\   rr   )r^  r!   r\   rr   )r^  rm  r\   rr   )ru  rM   r\   rr   )r3  r!   r\   rr   )ry  rm  r\   rr   )r  r   r\   rr   )r+   r   r\   rr   )ry  r!   r\   rr   )r+   rM   r\   rr   )r+   r   r\   rr   )r+   r!   r\   rr   )r  r!   r\   rr   )r+   r   r\   rr   )r  r   r\   rr   )r+   r   r\   rr   )r  rK   r\   rr   )r  rK   r\   rr   )r  r  r\   rr   )r  r  r\   rr   )r  r  r\   rr   )r  r  r\   rr   )r  r   r\   rr   )r+   r  r\   rr   )r  rR  r\   rr   )r+   rK   r\   rr   )r   r  r\   rr   )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[   rf   rq   rz   rx   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   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/  r5  r8  r:  r<  r>  r@  rB  rD  rF  rG  rH  rI  rJ  rK  rL  rM  rN  rO  rP  rS  rU  rZ  r]  r`  rb  rc  re  rg  ri  rj  rk  rl  rq  rs  rt  rv  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  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   Zquantsr   	getLoggerr$   rT   ri   r   r*   r/   r6   r(   r(   r(   r)   <module>   s0    4
	