o
    [۷iR                  
   @  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mZ d dlmZ d dl	Z
dejvrEeejjjjd  rEejd eeejjj d dlZedZdd	 Zd
d Zdd Zdd Zdd ZejjeejjeejjeejjeejjeiZ dddZ!dddZ"e#dkre"  dS dS )    )annotationsN)tqdm)PathNO_LOCAL_GGUFzgguf-pyzgguf-convert-endianc                 C  s   d S )N )tensor
block_offsr   r   V/home/ubuntu/vllm_env/lib/python3.10/site-packages/gguf/scripts/gguf_convert_endian.pybyteswap_noop   s   r
   c                 C  ,   | j ||d  jtjd}|jdd d S N   dtypeTinplacedataviewnpuint16byteswapr   r   deltar   r   r	   byteswap_q4_0      r   c                 C  r   r   r   r   r   r   r	   byteswap_q8_0#   r   r   c                 C  sX   | j ||d  jtjd}|jdd | j |d |d  jtjd}|jdd d S )Nr   r   Tr      r   r   r   r   r	   byteswap_q4_k+   s    r   c                 C  s0   | j |d |d  jtjd}|jdd d S )N      r   Tr   r   r   r   r   r	   byteswap_q6_k6   s    r!   readergguf.GGUFReaderargsargparse.NamespacereturnNonec              
   C  sZ  | j j}| jdkr|dkrdnd}n|}|jdkr|n|j }td| d| d ||kr>td| d	 td
 td | j	D ]$}|j
tvrj|j
tjjtjjtjjfvrjtd|j
j dt|j qFtd| d|  |jr{d S td td ||krtd td td td}|dkrtd td
 tdt| j d t| j D ]%\}}td|ddt|j dt|j  |jD ]}	|	jdd qqtd t| j	 d tt| j	d!d" }
D ]\}}d#t|j d$|j
j d%|j d&}|jjD ]	}	|	jdd q|j
tv r|jj }d'}|jj D ]}||9 }q.|j!| tj"j#|j
 d' }t|j
 }t|j| }tt$|d(d)d* }D ] }|| }||| |d+ d
kr{|%d,|| |  d- q\|j!| n|j
tjjkr|jj&t'j(d.jdd n|jjdd |
%| qtd/ d S )0NSLITTLEBIGnativez
* Host is z endian, GGUF file seems to be z endianz* File is already z endian. Nothing to do.r   z/* Checking tensors for conversion compatibilityzCannot handle type z for tensor z* Preparing to convert from z to z&*** Warning *** Warning *** Warning **zH* This conversion process may damage the file. Ensure you have a backup.z]* Requested endian differs from host, you will not be able to load the model on this machine.zQ* The file will be modified immediately, so if conversion fails or is interruptedzX* the file will be corrupted. Enter exactly YES if you are positive you want to proceed:zYES, I am sure> YESz(You didn't enter YES. Okay then, see ya!z* Converting fields ()z- 4z: Converting field z, part count: Tr   z* Converting tensors (zConverting tensor)desczConverting tensor z, type=z, elements=    zByte-swapping BlocksF)r/   leavei zByte-swapping Blocks []r   z* Completion))	endianessname
byte_orderorderupperloggerinfosysexittensorstensor_typebyteswap_tensorsggufGGMLQuantizationTypeF32F16BF16
ValueErrorreprdry_runwarninginputlenfields	enumeratevaluespartsr   r   
n_elementsfieldr   shaperesize	constantsGGML_QUANT_SIZESrangeset_descriptionr   r   r   )r"   r$   file_endianhost_endianr7   r   responseidxrP   partpbarlog_messageoldshapenewshapei
block_sizebyteswap_funcn_blocks
inner_pbar	block_numr   r   r   r	   convert_byteorderG   s   











*


rf   c                  C  s   t jdd} | jdtdd | jdtg ddd	 | jd
ddd | jdddd | ttjdkr4d ndg}tj	|j
r@tjntjd td|j  t|j|jrWdnd}t|| d S )NzConvert GGUF file byte order)descriptionmodelzGGUF format model filename)typehelpr7   )biglittler+   zRequested byte order)ri   choicesrj   z	--dry-run
store_truezDon't actually change anything)actionrj   z	--verbosezincrease output verbosityr1   z--help)levelz* Loading: rzr+)argparseArgumentParseradd_argumentstr
parse_argsrJ   r;   argvloggingbasicConfigverboseDEBUGINFOr9   r:   rh   r@   
GGUFReaderrG   rf   )parserr$   r"   r   r   r	   main   s&   
r   __main__)r"   r#   r$   r%   r&   r'   )r&   r'   )$
__future__r   rx   rr   osr;   r   pathlibr   numpyr   environ__file__parentexistspathinsertru   r@   	getLoggerr9   r
   r   r   r   r!   rA   Q4_0Q8_0Q4_KQ6_KMXFP4r?   rf   r   __name__r   r   r   r	   <module>   s8   "
	
	
Y
