o
    [۷i@Z                     @  s  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
 dejvrEeejjjjd  rEejd eeejjj d dlmZmZmZ edZd(ddZd)ddZd)ddZd*ddZd+dd Zd!d" Zd)d#d$Zd,d%d&Ze d'kre  dS dS )-    )annotationsN)Path)AnyNO_LOCAL_GGUFzgguf-py)
GGUFReaderGGUFValueTypeReaderTensorz	gguf-dumpreaderr   returntuple[str, str]c                 C  s6   | j j}| jdkr|dkrdnd}||fS |}||fS )NSLITTLEBIG)	endianessname
byte_order)r	   file_endianhost_endian r   L/home/ubuntu/vllm_env/lib/python3.10/site-packages/gguf/scripts/gguf_dump.pyget_file_host_endian   s   
r   argsargparse.NamespaceNonec                 C  s*  t | \}}td| d| d tdt| j d t| j dD ]\}}|js.d}n(|jd tjkrNt|jd }d	| t	|jd
 j
 d|  }nt	|jd
 j
}d|dd|ddt|jdd|j
 }|jr|jd }	|	tjkr| }
t|
dkr|
d d d }
|dt|
7 }n.|	| jv r|d| 7 }nt|td}
t|jdkr|
d d
 d }
|d|
7 }t| q$|jrd S tdt| j d t| jdD ]5\}}ddd t|jdgdt|j   D }td|dd|jdd| d|jj
dd|j
 
 qd S )Nz
* File is z  endian, script is running on a z endian host.z
* Dumping z key/value pair(s)   N/Ar   []z  5: 10z | 8<   9   z...z = {0}   z, ...]z
 tensor(s), c                 s  s    | ]}d  |V  qdS )z{0:5}N)format).0dr   r   r   	<genexpr>A   s    z dump_metadata.<locals>.<genexpr>   7)r   printlenfields	enumeratevaluestypesr   ARRAYstrr   dataSTRINGcontentsr'   reprgguf_scalar_to_npslice
no_tensorstensorsjoinlistshape
n_elementstensor_type)r	   r   r   r   nfieldpretty_type
nest_countlog_message	curr_typecontenttensor
prettydimsr   r   r   dump_metadata    s@   "*



.6rK   c                 C  s  dd l }t| \}}i }i }|j|||d}t| j D ]C\}}	||	jr+|	jd jnd|	jd}
|
||	j< |	jd d t	j
gkrZdd |	jD dd  |
d< |jsSq|	 |
d	< q|	 |
d	< q|jst| jD ]\}}||j |jj|jjd
||j< qi||tj d S )Nr   )filenameendianmetadatar<   UNKNOWN)indextypeoffsetr   c                 S  s   g | ]}|j qS r   )r   )r(   tr   r   r   
<listcomp>X   s    z&dump_metadata_json.<locals>.<listcomp>array_typesvalue)rP   r?   rQ   rR   )jsonr   modelr0   r/   r1   r2   r   rR   r   r3   
json_arrayr7   r;   r<   r?   tolistrA   rC   dumpsysstdout)r	   r   rW   r   r   rN   r<   resultidxrC   currrI   r   r   r   dump_metadata_jsonE   s:   
ra   
header_maplist[dict[str, str]]r5   list[dict[str, Any]]c                   s
  ddddd	d
i t | D ]%\} t fdd|D ddd }t d d }||kr1|n||< qg }|dfddt | D  |dfddt | D  |D ]|dfddt | D  q^d}|D ]
}|d| d7 }qx|S )Npaddingint	alignMode
str | NonestrValr4   c                 S  sX   |dkr	| | S |dkr|| d d S |dkr#d|| d  S d|| d  S )Ncenterrightr    left)rj   rjustljust)re   rg   ri   r   r   r   strAlignm   s   
z7markdown_table_with_alignment_support.<locals>.strAlignc                 S  sT   |dkrdd| d   d S |dkrd| d  d S |dkr&dd| d   S d|  S )Nrj   :-   rk   r   rm   r   )re   rg   r   r   r   	dashAlignw   s   z8markdown_table_with_alignment_support.<locals>.dashAlignc                   s6   g | ]}|  D ]\}}| d  krtt|qqS )key_name)itemsr.   r4   )r(   r)   kv)columnEntryr   r   rT      s   6 z9markdown_table_with_alignment_support.<locals>.<listcomp>r   defaultrs   header_name|c                 3  s2    | ]\}} | | d t|d V  qdS )alignr|   Ngetr4   r(   rP   ry   )rowsPaddingrp   r   r   r*      s   0 z8markdown_table_with_alignment_support.<locals>.<genexpr>c                 3  s(    | ]\}} | | d V  qdS )r~   N)r   r   )rt   r   r   r   r*      s   & c                 3  s6    | ]\}}| | d t |d  V  qdS )r~   ru   Nr   r   )itemr   rp   r   r   r*      s   4  z|
)re   rf   rg   rh   ri   r4   )re   rf   rg   rh   )r0   maxr.   appendr=   )rb   r5   rP   padCountheaderPadCountrowstableStringrowr   )ry   rt   r   r   rp   r   %markdown_table_with_alignment_supporti   s    


$$(r   countrf   r4   c                 C  s   | dkr| d }d}n0| dkr| d }d}n%| dkr!| d }d	}n| d
kr,| d }d}n| dkr7| d }d}n| }d}| dkrAdnd t | | S )Ng  4&kCgV瞯<Qg   mBg-q=Tg    eAg&.>Bg    .Agư>Mg     @@gMbP?Kr   ~)round)r   scaled_amountscale_suffixr   r   r   element_count_rounded_notation   s$    r   c                 C  s   |  d}i dddddddd	d
ddddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/}g }|D ]}|  }||v rc|||   qM||  qMd0|S )1N.
token_embdzToken embeddingpos_embdzPosition embeddingoutput_normzOutput normalizationoutputOutput	attn_normzAttention normalizationattn_norm_2attn_qkvzAttention query-key-valueattn_qzAttention queryattn_kzAttention keyattn_vzAttention valueattn_outputzAttention outputffn_normz"Feed-forward network normalizationffn_upzFeed-forward network "up"ffn_gatezFeed-forward network "gate"ffn_downzFeed-forward network "down"ffn_gate_inpzMExpert-routing layer for the Feed-forward network in Mixture of Expert modelsffn_gate_expzHFeed-forward network "gate" layer per expert in Mixture of Expert modelszHFeed-forward network "down" layer per expert in Mixture of Expert modelszFFeed-forward network "up" layer per expert in Mixture of Expert modelsz#State space model input projectionszState space model rolling/shiftz+State space model selective parametrizationz#State space model state compressionz!State space model skip connectionzState space model time stepz#State space model output projectionBlockEncoderDecoder)ffn_down_exp
ffn_up_expssm_in
ssm_conv1dssm_xssm_assm_dssm_dtssm_outblkencdecrl   )splitstriplowerr   titler=   )r   wordsabbreviation_dictionaryexpanded_wordsword	word_normr   r   r   translate_tensor_name   sp   
	
 
r   c           7        s  t | \}}d}|d|j d7 }|d| d7 }|d7 }|d7 }|dt| j d	7 }|d7 }d
}d
}g }t| j dD ]>\}}	|	jsId}
n(|	jd
 tjkrit|	jd }d| t	|	jd j
 d|  }
nt	|	jd j
}
dd }t|	j}d}t|	jdkr|	jd
 }|tjkrd}t	t|	jd dd}t||kr||d |d  }||| d d  }dj||d}n||}n|| jv rt	|	jd d
 }n|	jd
 tjkrq|	jd }g }|tjkr6td|}t|D ]D}d}t	t|	jd|| d d   dd}t||kr+||d |d  }||| d d  }dj||d}n||}|| qn%|| jv r[td|}t|D ]}|t	|	jd|| d   d
  qEdd|  |t|krldnd d}|||
||	j
|d q>d d!d"d#d$d%d&d#d'd(d"d#d)d*d&d#d+d,d&d#g}|t||7 }|d7 }|js+g }i }i }td-d. | jD }t| jD ]e\}}|j
d/}d0}|d
 d1kr|d
  d/|d  }n+|d
 d2v r|d d1kr|d
  d/|d  d/|d  }n|d
 d2v r|d
  }||vrg ||< || || | |||j
< q|d3t| d47 }|d5| d67 }|d7 }|D ]&}|| } td7d. | D }!|d8t| d9t|! d:|d/d; d<7 }q;|d7 }|d=7 }|d7 }|d>7 }|d7 }g }"t| jD ]\}}d?|j}#d?|j}$|"||j
|#|$d@ q}dAdBd"d#dCdDd&d#dEdFd"d#dGdHd"d#g}%|t|%|"7 }|d7 }|D ]l}|| } tdId. | D }!|!| dJ }&d
}'d
}(|dK|d/d; dLt| dMt|! dN7 }d})d}*i  | D ]?}t |)tt	t|j!})t |*tt	|j!}*tt"|j#dgdOt|j#   D ]\}+},t  $|+dtt	|, |+< qqg }-| D ]y}t|j
dPdQdRdS}.dT fdUd.tt"|j#dgdOt|j#   D }/dVt|j!dW|) dX}0|0 dY|j!dW|* }1|j%j
 }2|j!d
kr|jdZ |j! }3nt&d[}3|-||j
 |j
|.|1|/|2|3d\d] |'|j7 }'|(|j!7 }(q9dAdBd"d#dCdDd&d#d^d_d&d#d`dad&d#dbdcd&d#ddded&d#dfdgd"d#g}4|t|4|-7 }|d7 }|dh| dit|!djdk|! d7 }|dl|&dmdn7 }|(d
kr|'dZ |( }5|do| dp|5d\dq7 }n|do| dr7 }|ds7 }||'7 }||(7 }q|d
krH|dZ | }6|dtt'j()|j dp|6d\du7 }n|dtt'j()|j dv7 }t*| d S )wNr   z# z - GGUF Internal File Dump

z
- Endian: z endian

z## Key Value Metadata Store

z
There are z key-value pairs in this file
r   r   r   r   r   r   c                 S  sZ   t dd td| D dd}d|d  }| ds| dr%d|  d} | |  | S )	Nc                 s  s    | ]
}t |d V  qdS )r   N)r.   group)r(   matchr   r   r   r*      s    zNdump_markdown_metadata.<locals>.escape_markdown_inline_code.<locals>.<genexpr>z`+r   rz   `r   rl   )r   refinditer
startswithendswith)value_stringmax_backticksinline_code_markerr   r   r   escape_markdown_inline_code   s
   z;dump_markdown_metadata.<locals>.escape_markdown_inline_coder#   zutf-8)encodingrs   z{head}...{tail})headtail         z[ r&   z, ...z ])rB   rD   total_elements
field_namerV   rB   POSrk   )ru   r|   r~   rD   TYPErm   r   Countr   KeyrV   Valuec                 s      | ]}|j V  qd S Nr@   r(   rI   r   r   r   r*   A      z)dump_markdown_metadata.<locals>.<genexpr>r   baser   )r   r   z## Tensors Overview z Elements

z)Total number of elements in all tensors: z
 Elements
c                 s  r   r   r   r   r   r   r   r*   `  r   z- [z Tensor Group - z Elements](#_z)
z### Tensor Data Offset
zJThis table contains the offset and data segment relative to start of file
z{0:#16x})t_id
layer_namedata_offset	data_sizer   T_IDr   zTensor Layer Namer   zData Offset (B)r   zData Size (B)c                 s  r   r   r   r   r   r   r   r*   |  r   d   z### <a name="z">z Tensor Group : z Elements</a>

r+   z.weightz.(W)z.biasz.(B)z x c                 3  s*    | ]\}}t |d  |  V  qdS )>N)r4   )r(   ir)   prettify_dimension_max_widthsr   r   r*     s   ( (r   )rl      nanz.4f)r   r   human_layer_nameelement_countpretty_dimensionrA   bpwr   z Human Friendly Tensor Layer Namer   Elementsr   ShaperA   Typer   BPWz- Total elements in z: (z>4z) z - Percentage of total elements: z.2fz%
z- Bits per Weight (BPW) for r    z bits
z: undefined (no elements)
z

zTotal BPW for z bitsz: undefined (no elements))+r   rX   r.   r/   r0   r1   r2   r   r3   r4   r   r5   r6   bytespartsr'   r9   minranger   r=   r   r   r;   sumr<   r   r   r   replacer   n_bytesr   r@   r>   r?   r   rA   floatospathbasenamer-   )7r	   r   r   r   markdown_contenttotal_model_bytestotal_model_elementskv_dump_tablerB   rC   rD   rE   r   r   rV   rG   truncate_lengthr   r   r   array_elementsrender_elementelement_poskv_dump_table_header_maptensor_prefix_ordertensor_name_to_keytensor_groupskeyrI   tensor_componentstensor_group_namer   r<   group_elementstensor_mapping_tabledata_offset_prettydata_size_pretty tensors_mapping_table_header_mapgroup_percentagetotal_group_bytestotal_group_elementsprettify_element_est_count_sizeprettify_element_count_sizer   dimension_sizetensor_dump_tablehuman_friendly_namer   element_count_estelement_count_stringtype_name_stringr   tensor_dump_table_header_maptotal_group_bpwtotal_model_bpwr   r   r   dump_markdown_metadata   s>  "






&
(,




"


0




,*"6
&








"

$r'  c                  C  sX  t jdd} | jdtdd | jdddd	 | jd
ddd	 | jdddd	 | jdddd	 | jdddd	 | jdddd	 | jdddd	 | ttjdkrQd ndg}tj	|j
r]tjntjd |jsw|jsw|jsw|jswtd|j  t|jd}|jrt|| d S |jrt|| d S |jrt|j d S |jrt|j d S t|| d S )NzDump GGUF file metadata)descriptionrX   zGGUF format model filename)rQ   helpz--no-tensors
store_truezDon't dump tensor metadata)actionr)  z--jsonzProduce JSON outputz--json-arrayz/Include full array values in JSON output (long)z--data-offsetzStart of data offsetz--data-alignmentz-Data alignment applied globally to data fieldz
--markdownzProduce markdown outputz	--verbosezincrease output verbosityr   z--help)levelz* Loading: r)argparseArgumentParseradd_argumentr4   
parse_argsr.   r\   argvloggingbasicConfigverboseDEBUGINFOrW   markdownr   data_alignmentloggerinforX   r   ra   r'  r-   	alignmentrK   )parserr   r	   r   r   r   main  s.   r>  __main__)r	   r   r
   r   )r	   r   r   r   r
   r   )rb   rc   r5   rd   )r   rf   r
   r4   )r
   r   )!
__future__r   r3  r.  r  r   r\   pathlibr   typingr   environ__file__parentexistsr  insertr4   ggufr   r   r   	getLoggerr:  r   rK   ra   r   r   r   r'  r>  __name__r   r   r   r   <module>   s0   "



%
$
0
/ 
Y 
