o
    հi                     @  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dZdddZedkrae  dS dS )    )annotationsN)tqdm)PathNO_LOCAL_GGUFzgguf-pyzgguf-convert-endianreadergguf.GGUFReaderargsargparse.NamespacereturnNonec              
   C  s  | 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jjtjjtjjtjjtjjfvrkt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 ]W\}}d#t|j d$|j
j d%|j d&}|jjD ]	}	|	jdd q|j
tjjkrmd'}t|j | }tt!|d(d)d* }D ]/}|| }|j ||d+  j"t#j$d,}|jdd |d- d
krj|%d.|| |  d/ q<n|j
tjjkrd0}|j j&D ]}||9 }q{|j '| d1}t|j | }tt!|d(d)d* }D ]E}|| }|j ||d+  j"t#j$d,}|jdd |j |d+ |d2  j"t#j$d,}|jdd |d- d
kr|%d.|| |  d/ qnj|j
tjjkrGd0}|j j&D ]}||9 }q|j '| d3}t|j | }tt!|d(d)d* }D ]1}|| }|j |d4 |d3  j"t#j$d,}|jdd |d- d
krD|%d.|| |  d/ qn|j jdd |
%| qtd5 d S )6N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: T)inplacez* Converting tensors (zConverting tensor)desczConverting tensor z, type=z, elements= "   zByte-swapping BlocksF)r   leave   )dtypei zByte-swapping Blocks []               z* Completion)(	endianessname
byte_orderorderupperloggerinfosysexittensorstensor_typeggufGGMLQuantizationTypeF32F16Q8_0Q4_KQ6_K
ValueErrorreprdry_runwarninginputlenfields	enumeratevaluespartsbyteswapr   
n_elementsfielddatarangeviewnpuint16set_descriptionshaperesize)r   r   file_endianhost_endianr#   tensorresponseidxr>   partpbarlog_message
block_sizen_blocks
inner_pbar	block_num
block_offsdeltanewshapei rW   T/home/ubuntu/.local/lib/python3.10/site-packages/gguf/scripts/gguf_convert_endian.pyconvert_byteorder   s   










*
   rY   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helpr#   )biglittler   zRequested byte order)r\   choicesr]   z	--dry-run
store_truezDon't actually change anything)actionr]   z	--verbosezincrease output verbosityr   z--help)levelz* Loading: rzr+)argparseArgumentParseradd_argumentstr
parse_argsr7   r'   argvloggingbasicConfigverboseDEBUGINFOr%   r&   r[   r+   
GGUFReaderr4   rY   )parserr   r   rW   rW   rX   main   s&   
rr   __main__)r   r   r   r	   r
   r   )r
   r   )
__future__r   rk   re   osr'   r   pathlibr   numpyrB   environ__file__parentexistspathinsertrh   r+   	getLoggerr%   rY   rr   __name__rW   rW   rW   rX   <module>   s$   "

 

