
    >Ci                       S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKrS SKJ	r	  S SK
JrJrJrJr  S SKrS SKrS SKJrJrJrJrJrJrJrJrJrJrJrJrJrJrJ r J!r!J"r"J#r#J$r$  S SK%J&r&  S\RN                  ;  a  \	" \(5      RR                  RR                  RR                  RR                  S-  RU                  5       (       aF  \RV                  RY                  S \-" \	" \(5      RR                  RR                  RR                  5      5        S SK.r.S S	K.J/r/J0r0J1r1J2r2  S S
K3J4r4J5r5J6r6J7r7  \Rp                  " S5      r9\.Rt                  Rv                  Rx                  \4\.Rt                  Rz                  R|                  \5\.Rt                  R~                  R                  \6\.Rt                  R                  R                  \70rC\.Rt                  Rv                  R                  \.Rt                  Rv                  Rx                  \.Rt                  Rv                  R                  /rF " S S\#5      rG " S S\#5      rH " S S\#5      rI " S S\5      rJSS jrK\LS:X  a  \K" 5         gg)    )annotationsN)Path)AnyOptionalTupleType)QApplicationQMainWindowQWidgetQVBoxLayoutQHBoxLayoutQPushButtonQLabel	QLineEditQFileDialogQTableWidgetQTableWidgetItem	QComboBoxQMessageBox
QTabWidget	QTextEditQFormLayoutQHeaderViewQDialogQDialogButtonBox)QtNO_LOCAL_GGUFzgguf-py)
GGUFReader
GGUFWriterGGUFValueTypeReaderField)	TokenTypeRopeScalingTypePoolingTypeGGMLQuantizationTypezgguf-editor-guic                  b   ^  \ rS rSrSU 4S jjrS rS rS rS rS r	S r
S	 rS
 rS rSrU =r$ )TokenizerEditorDialog2   c                  > [         TU ]  U5        U R                  S5        U R                  SS5        U(       a  UR	                  5       O/ U l        U(       a  UR	                  5       O/ U l        U(       a  UR	                  5       O/ U l        [        [        U R
                  5      [        U R                  5      [        U R                  5      5      n[        U R
                  5      U:  a5  U R
                  R                  S/U[        U R
                  5      -
  -  5        [        U R                  5      U:  a5  U R                  R                  S/U[        U R                  5      -
  -  5        [        U R                  5      U:  a5  U R                  R                  S/U[        U R                  5      -
  -  5        [        U 5      n[        5       nUR                  [        S5      5        [        5       U l        U R                   R#                  S5        U R                   R$                  R'                  U R(                  5        UR                  U R                   5        S	U l        SU l        [        S
[        U R
                  5      U R*                  -   S
-
  U R*                  -  5      U l        [        SU R.                   35      U l        UR                  U R0                  5        [3        S5      nUR4                  R'                  U R6                  5        UR                  U5        [3        S5      n	U	R4                  R'                  U R8                  5        UR                  U	5        UR;                  U5        [=        5       U l        U R>                  RA                  S5        U R>                  RC                  / SQ5        U R>                  RE                  5       RG                  S[H        RJ                  RL                  5        U R>                  RE                  5       RG                  S
[H        RJ                  RN                  5        U R>                  RE                  5       RG                  S[H        RJ                  RL                  5        U R>                  RE                  5       RG                  S[H        RJ                  RL                  5        UR                  U R>                  5        [        5       n
[3        S5      nUR4                  R'                  U RP                  5        U
R                  U5        [3        S5      nUR4                  R'                  U RR                  5        U
R                  U5        U
RU                  5         UR;                  U
5        [W        [V        RX                  RZ                  [V        RX                  R\                  -  5      nUR^                  R'                  U R`                  5        URb                  R'                  U Rd                  5        UR                  U5        [g        [i        [        U R
                  5      5      5      U l5        U Rm                  5         g )NzEdit Tokenizer Datai  iX   r           Filter:zType to filter tokens...d      
Page 1 of PreviousNext   )IndexTokenr   Score      z	Add TokenRemove Selected)7super__init__setWindowTitleresizecopytokenstoken_typesscoresmaxlenextendr   r   	addWidgetr   r   filter_editsetPlaceholderTexttextChangedconnectapply_filter	page_sizecurrent_pagetotal_pages
page_labelr   clickedprevious_page	next_page	addLayoutr   tokens_tablesetColumnCountsetHorizontalHeaderLabelshorizontalHeadersetSectionResizeModer   
ResizeModeResizeToContentsStretch	add_tokenremove_selected
addStretchr   StandardButtonOkCancelacceptedacceptrejectedrejectlistrangefiltered_indices	load_page)selfr>   r?   r@   parentmax_lenlayoutfilter_layout	prev_pagerP   controls_layout
add_buttonremove_buttonbuttons	__class__s                 V/home/james-whalen/.local/lib/python3.13/site-packages/gguf/scripts/gguf_editor_gui.pyr:   TokenizerEditorDialog.__init__3   s    12C'-fkkm21<;++-"'-fkkm2 c$++&D,<,<(=s4;;?OPt{{g%KKtwT[[1A'ABCt 7*##QC7S9I9I5J+J$KLt{{g%KKu#dkk2B(BCDT" $y 12$;++,FG$$,,T->->? 0 01 q3t{{#3dnn#Dq#HT^^"[\ :d.>.>-?!@A0
+	!!$"4"45	*'	!!$..1	*' )N((+334WX**,AA![E[E[ElElm**,AA![E[E[EcEcd**,AA![E[E[ElElm**,AA![E[E[ElElm**+ &- -
""4>>2!!*-#$56%%d&:&:;!!-0""$) ##3#B#B#E#EHXHgHgHnHn#no  -  -! !%U3t{{+;%< = 	    c                z   U R                   R                  5       R                  5       nU(       d-  [        [	        [        U R                  5      5      5      U l        O_/ U l        [        U R                  5       H?  u  p#U[        U5      R                  5       ;   d  M$  U R                  R                  U5        MA     [        S[        U R                  5      U R                  -   S-
  U R                  -  5      U l        SU l        U R                  R!                  SU R                   35        U R#                  5         g)z+Filter the tokens based on the search text.r.   r   r/   N)rE   textlowerrd   re   rB   r>   rf   	enumeratestrappendrA   rJ   rL   rK   rM   setTextrg   )rh   filter_textitokens       rs   rI   "TokenizerEditorDialog.apply_filter   s    &&++-335$(s4;;/?)@$AD! %'D!%dkk2#e*"2"2"44))003 3
 q3t'<'<#=#NQR#RW[WeWe"ef*T-=-=,> ?@ru   c                    U R                   S:  a^  U =R                   S-  sl         U R                  R                  SU R                   S-    SU R                   35        U R	                  5         ggz#Go to the previous page of results.r   r.   Page  of NrK   rM   r|   rL   rg   rh   s    rs   rO   #TokenizerEditorDialog.previous_page   b    q "OO##eD,=,=,A+B$tGWGWFX$YZNN !ru   c                    U R                   U R                  S-
  :  a^  U =R                   S-  sl         U R                  R                  SU R                   S-    SU R                   35        U R	                  5         ggzGo to the next page of results.r.   r   r   NrK   rL   rM   r|   rg   r   s    rs   rP   TokenizerEditorDialog.next_page   m    t//!33"OO##eD,=,=,A+B$tGWGWFX$YZNN 4ru   c                   U R                   R                  S5        U R                  U R                  -  n[	        XR                  -   [        U R                  5      5      nU R                   R                  X!-
  5        [        [        X5      5       GH  u  p4U R                  U   n[        [        U5      5      nUR                  [        R                  R                  U5        UR                  UR!                  5       [        R"                  R$                  ) -  5        U R                   R'                  USU5        [        [        U R(                  U   5      5      nU R                   R'                  USU5        U[        U R*                  5      :  a  U R*                  U   OSn [-        U5      n	U	R.                   SU S3n
[        U
5      nUR                  [        R                  R                  U5        UR                  UR!                  5       [        R"                  R$                  ) -  5        U R                   R'                  USU5        U[        U R4                  5      :  a  U R4                  U   OSn[        [        U5      5      nU R                   R'                  USU5        GM     U R                   R6                  R9                  U R:                  5        g	! [0        [2        4 a
    SU S3n
 GN6f = f)
z(Load the current page of tokenizer data.r   r.    ()	Unknown (r6   r+   r7   N)rR   setRowCountrK   rJ   minrB   rf   ry   re   r   rz   setDatar   ItemDataRoleUserRolesetFlagsflagsItemFlagItemIsEditablesetItemr>   r?   r"   name
ValueErrorKeyErrorr@   cellDoubleClickedrH   handle_cell_double_click)rh   	start_idxend_idxrowr~   orig_idx
index_item
token_item
token_typeenum_valdisplay_text	type_itemscore
score_items                 rs   rg   TokenizerEditorDialog.load_page   si   %%a( %%6	i..0#d6K6K2LM 	%%g&9:i 9:FC,,Q/H *#h-8Jr77B
 0 0 2bkk6P6P5P PQ%%c1j9 *#dkk(.C*DEJ%%c1j9 8@#dFVFVBW7W))(3]^J9$Z0"*--:,a@ )6Iboo66
C y0BKK4N4N3NNO%%c1i8 .6DKK8H-HDKK)cE)#e*5J%%c1j9? ;D 	++33D4Q4QR! ) 9!*:,a89s   %KK98K9c                    US:X  a_  U R                   R                  US5      nU(       a;  UR                  [        R                  R
                  5      nU R                  X5        ggg)zCHandle double-click on a cell, specifically for token type editing.r6   r   N)rR   itemdatar   r   r   edit_token_type)rh   r   column	orig_itemr   s        rs   r   .TokenizerEditorDialog.handle_cell_double_click   sT    Q;))..sA6I$>>"//*B*BC$$S3  ru   c                   U[        U R                  5      :  a  U R                  U   OSn[        U 5      nUR                  S5        [	        U5      n[        5       n[         H9  nUR                  UR                   SUR                   S3UR                  5        M;      [        U[        5      (       a,  [        U5      nUR                  UR                   SU S35        UR                  U5        [!        [         R"                  R$                  [         R"                  R&                  -  5      nUR(                  R+                  UR,                  5        UR.                  R+                  UR0                  5        UR                  U5        UR3                  5       [        R4                  R6                  :X  a  UR9                  5       n	[        U	5      nUR                   SU	 S3n
U R:                  R=                  US5      nU(       a;  UR?                  U
5        URA                  [B        RD                  RF                  U	5        XR                  U'   gg! [        [        4 a     GNf = f)zEEdit a token type using a dialog with a dropdown of all enum options.r   zSelect Token Typer   r   r6   N)$rB   r?   r   r;   r   r   r"   addItemr   value
isinstanceintsetCurrentTextr   r   rD   r   r]   r^   r_   r`   rH   ra   rb   rc   exec
DialogCodeAcceptedcurrentDatarR   r   r|   r   r   r   r   )rh   r   r   current_valuedialogrk   combor   rq   	new_valuer   r   s               rs   r   %TokenizerEditorDialog.edit_token_type   s   6>TEUEUAV6V((2\] 12V$!HMMX]]O2hnn-=Q?P "	---$]3$$bq%IJ 	"#3#B#B#E#EHXHgHgHnHn#no  /  /!;;=G..777))+I +H&mm_Byk;L ))..sA6I!!,/!!"//":":IF *3X& 8 H% 		s    AI I&%I&c                   U R                   R                  S5        U R                  R                  S5        U R                  R                  S5        [	        U R                   5      S-
  nU R
                  R                  5       R                  5       nU(       a  US;   a  U R                  R                  U5        [        S[	        U R                  5      U R                  -   S-
  U R                  -  5      U l        U R                  S-
  U l        U R                  R                  SU R                  S-    SU R                   35        U R                  5         g)z'Add a new token to the end of the list.r*   r   r+   r.   r   r   N)r>   r{   r?   r@   rB   rE   rw   rx   rf   rA   rJ   rL   rK   rM   r|   rg   )rh   r   r}   s      rs   rZ   TokenizerEditorDialog.add_token  s    	2"3t{{#a' &&++-335kR/!!((2 q3t'<'<#=#NQR#RW[WeWe"ef !,,q0%(9(9A(='>d4CSCSBT UV 	ru   c                   / nU R                   R                  5        H+  nUR                  5       nX1;  d  M  UR                  U5        M-     U(       d  g/ nU H`  nU R                   R	                  US5      nU(       d  M(  UR                  UR                  [        R                  R                  5      5        Mb     UR                  SS9  U Hw  nU[        U R                  5      :  a  U R                  U	 U[        U R                  5      :  a  U R                  U	 U[        U R                  5      :  d  Mj  U R                  U	 My     / U l        U R                  R!                  5       R#                  5       n[%        U R                  5       HF  u  pU(       a  U['        U	5      R#                  5       ;   d  M+  U R                  R                  U5        MH     [)        S[        U R                  5      U R*                  -   S-
  U R*                  -  5      U l        [/        U R0                  U R,                  S-
  5      U l        U R2                  R5                  SU R0                  S-    SU R,                   35        U R7                  5         g)z'Remove selected tokens from all arrays.Nr   Treverser.   r   r   )rR   selectedItemsr   r{   r   r   r   r   r   sortrB   r>   r?   r@   rf   rE   rw   rx   ry   rz   rA   rJ   rL   r   rK   rM   r|   rg   )
rh   selected_rowsr   r   orig_indicesr   idxr}   r~   r   s
             rs   r[   %TokenizerEditorDialog.remove_selected#  s   %%335D((*C'$$S) 6
   C))..sA6Iy##INN2??3K3K$LM ! 	$'  CS%%KK$S))**$$S)S%%KK$   !#&&++-335!$++.HA+U1A1A1C"C%%,,Q/ /
 q3t'<'<#=#NQR#RW[WeWe"ef 1 143C3Ca3GH%(9(9A(='>d4CSCSBT UV 	ru   c                H    U R                   U R                  U R                  4$ )z!Return the edited tokenizer data.)r>   r?   r@   r   s    rs   get_dataTokenizerEditorDialog.get_dataO  s    {{D,,dkk99ru   )
rK   rE   rf   rM   rJ   r@   r?   r>   rR   rL   N)__name__
__module____qualname____firstlineno__r:   rI   rO   rP   rg   r   r   rZ   r[   r   __static_attributes____classcell__rr   s   @rs   r'   r'   2   s@    Rh(-S^4)3V0*X: :ru   r'   c                  l   ^  \ rS rSrSU 4S jjrS rS rS rS rS r	S r
S	 rS
 rSS jrS rSrU =r$ )ArrayEditorDialogiT  c                  > [         TU ]  U5        U R                  S5        U R                  SS5        Xl        X l        X0l        S U l        U[        ;   a"  U[        R                  :X  a  [        U   U l        [        U 5      nU R                  b  [        5       n[        SU R                  R                   S35      nUR                  U5        SR!                  U R                   Vs/ s H  oR"                   SUR$                   3PM     sn5      n	[        SU	 35      n
U
R'                  S	5        UR                  U
S
5        UR)                  U5        [        5       nUR                  [        S5      5        [+        5       U l        U R,                  R/                  S5        U R,                  R0                  R3                  U R4                  5        UR                  U R,                  5        SU l        SU l        [;        S
[=        U5      U R6                  -   S
-
  U R6                  -  5      U l        [        SU R>                   35      U l         UR                  U R@                  5        [C        S5      nURD                  R3                  U RF                  5        UR                  U5        [C        S5      nURD                  R3                  U RH                  5        UR                  U5        UR)                  U5        [K        5       U l&        U R                  b  U RL                  RO                  S5        U RL                  RQ                  / SQ5        U RL                  RS                  5       RU                  S[V        RX                  RZ                  5        U RL                  RS                  5       RU                  S
[V        RX                  R\                  5        U RL                  RS                  5       RU                  S[V        RX                  RZ                  5        OU RL                  RO                  S5        U RL                  RQ                  SS/5        U RL                  RS                  5       RU                  S[V        RX                  RZ                  5        U RL                  RS                  5       RU                  S
[V        RX                  R\                  5        UR                  U RL                  5        [        5       n[C        S5      nURD                  R3                  U R^                  5        UR                  U5        [C        S5      nURD                  R3                  U R`                  5        UR                  U5        U R                  bA  [C        S5      nURD                  R3                  U Rb                  5        UR                  U5        URe                  5         UR)                  U5        [g        [f        Rh                  Rj                  [f        Rh                  Rl                  -  5      nURn                  R3                  U Rp                  5        URr                  R3                  U Rt                  5        UR                  U5        [w        [y        [=        U R                  5      5      5      U l=        U R}                  5         g s  snf )NzEdit Array Valuesi  i  zEditing z values:, =zAvailable values: Tr.   r,   zType to filter values...r-   r   r/   r0   r1   r7   )r3   ValueActionsr6   r3   r   zAdd Itemr8   zBulk Edit Selected)?r9   r:   r;   r<   array_valueselement_typekey	enum_typeKEY_TO_ENUM_TYPEr    INT32r   r   r   r   rD   joinr   r   setWordWraprQ   r   rE   rF   rG   rH   rI   rJ   rK   rA   rB   rL   rM   r   rN   rO   rP   r   items_tablerS   rT   rU   rV   r   rW   rX   rY   add_itemr[   bulk_edit_selectedr\   r   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   )rh   r   r   r   ri   rk   enum_info_layout
enum_labeleenum_valuesenum_values_labelrl   rm   rP   rn   ro   rp   bulk_edit_buttonrq   rr   s                      rs   r:   ArrayEditorDialog.__init__U  s*    /0C(( ""|}7J7J'J-c2DNT" >>%*}(4>>+B+B*C8 LMJ&&z2 ))DNN$SNqxq	%:N$STK &);K='I J))$/&&'8!<-. $y 12$;++,FG$$,,T->->? 0 01 q3|#4t~~#E#Idnn"\] :d.>.>-?!@A0
+	!!$"4"45	*'	!!$..1	*' (> >>%++A.667TU--/DDQH^H^HoHop--/DDQH^H^HfHfg--/DDQH^H^HoHop++A.667IJ--/DDQH^H^HoHop--/DDQH^H^HfHfg))* &- ,
""4==1!!*-#$56%%d&:&:;!!-0 >>%*+?@$$,,T-D-DE%%&67""$) ##3#B#B#E#EHXHgHgHnHn#no  -  -! !%U3t/@/@+A%B C 	e %Ts   ($[ c                   U R                   R                  5       R                  5       nU(       d-  [        [	        [        U R                  5      5      5      U l        O/ U l        [        U R                  5       H  u  p#U R                  bk  [        U[        5      (       aV   U R                  U5      nUR                   SU S3R                  5       nX;   a  U R                  R                  U5        M{  M}  U[!        U5      R                  5       ;   d  M  U R                  R                  U5        M     [#        S[        U R                  5      U R$                  -   S-
  U R$                  -  5      U l        SU l        U R*                  R-                  SU R&                   35        U R/                  5         g! [        [        4 aA    U[!        U5      R                  5       ;   a  U R                  R                  U5         GM   GM  f = f)z1Filter the array values based on the search text.Nr   r   r.   r   r/   )rE   rw   rx   rd   re   rB   r   rf   ry   r   r   r   r   r{   r   r   rz   rA   rJ   rL   rK   rM   r|   rg   )rh   r}   r~   r   r   r   s         rs   rI   ArrayEditorDialog.apply_filter  s   &&++-335$(s43D3D/E)F$GD! %'D!%d&7&78>>-*UC2H2H<#'>>%#8*2--5''C'I'I'K&6 1188; 7 #c%j&6&6&88--44Q7 9$ q3t'<'<#=#NQR#RW[WeWe"ef*T-=-=,> ?@ '1 <&#e**:*:*<< 1188;; =<s   !AF55AHHc                    U R                   S:  a^  U =R                   S-  sl         U R                  R                  SU R                   S-    SU R                   35        U R	                  5         ggr   r   r   s    rs   rO   ArrayEditorDialog.previous_page  r   ru   c                    U R                   U R                  S-
  :  a^  U =R                   S-  sl         U R                  R                  SU R                   S-    SU R                   35        U R	                  5         ggr   r   r   s    rs   rP   ArrayEditorDialog.next_page  r   ru   c                x   U R                   R                  S5        U R                  U R                  -  n[	        XR                  -   [        U R                  5      5      nU R                   R                  X!-
  5        [        [        X5      5       GH  u  p4U R                  U   nU R                  U   n[        [        U5      5      nUR                  [        R                  R                  U5        UR!                  UR#                  5       [        R$                  R&                  ) -  5        U R                   R)                  USU5        U R*                  Gb   [-        U[.        [0        R2                  45      (       a$  U R+                  U5      nUR4                   SU S3n	O[        U5      n	 [        U	5      n
U
R                  [        R                  R                  U5        U
R!                  U
R#                  5       [        R$                  R&                  ) -  5        U R                   R)                  USU
5        [;        S5      nUR=                  SU5        UR>                  RA                  U RB                  5        [E        5       n[G        U5      nURI                  S	S	S	S	5        URK                  U5        URM                  5         U R                   RO                  US	U5        GMW  [        [        U5      5      n
U R                   R)                  USU
5        GM     g! [6        [8        4 a
    SU S3n	 GNf = f)
z&Load the current page of array values.r   Nr   r   r   r.   Editr   r6   )(r   r   rK   rJ   r   rB   rf   ry   re   r   r   rz   r   r   r   r   r   r   r   r   r   r   r   r   numpysignedintegerr   r   r   r   setPropertyrN   rH   edit_array_enum_valuer   r   setContentsMarginsrD   r\   setCellWidget)rh   r   r   r   r~   r   r   r   r   r   
value_itemedit_buttonbutton_widgetbutton_layouts                 rs   rg   ArrayEditorDialog.load_page  s   $$Q' %%6	i..0#d6K6K2LM 	$$W%89i 9:FC,,Q/H%%h/E *#h-8Jr77B
 0 0 2bkk6P6P5P PQ$$S!Z8 ~~)8!%#u/B/B)CDD#'>>%#8*2--5''C'*5z
 .l;
""2??#;#;UC##J$4$4$6"++:T:T9T$TU  ((a< *&1''s3##++D,F,FG !(	 +M :00Aq!<''4((*  ..sA}E-c%j9
  ((a<W ;& #H- 8%.ugQ#7L8s   AL#LL98L9c                H   U R                  5       nUR                  S5      nU R                  R                  US5      nU R                  R                  US5      nU(       a  U(       a  U R                  (       a  U R                  X R                  5      (       a  UR                  [        R                  R                  5      nUR                  [        R                  R                  5      n[        U[        [        [        [        45      (       a  X`R                  U'   gggggg)z1Handle editing an enum value in the array editor.r   r   r.   N)senderpropertyr   r   r   edit_enum_valuer   r   r   r   r   r   floatrz   boolr   )rh   buttonr   r   new_itemr   r   s          rs   r   'ArrayEditorDialog.edit_array_enum_value'  s    ooe$ $$))#q1	##((a0dnn9M9McSaSa9b9b ~~boo&>&>?H boo&>&>?I)c5#t%<==.7!!(+ >	 :cn9ru   c                   U R                   (       d  g[        5       nU R                  R                  5        H"  nUR	                  UR                  5       5        M$     U(       d  [        R                  " U SS5        g[        U 5      nUR                  SU R                   R                   S35        [        U5      nUR                  [        S[        U5       S35      5        [        5       nU R                    H9  nUR!                  UR"                   SUR$                   S	3UR$                  5        M;     UR                  U5        ['        [&        R(                  R*                  [&        R(                  R,                  -  5      nUR.                  R1                  UR2                  5        UR4                  R1                  UR6                  5        UR                  U5        UR9                  5       [        R:                  R<                  :X  a  UR?                  5       nU R                  U5      nUR"                   SU S	3n	U H  n
U R                  RA                  U
S
5      nU R                  RA                  U
S5      nU(       d  MD  U(       d  MM  URC                  [D        RF                  RH                  5      nXRJ                  U'   URM                  U	5        URO                  [D        RF                  RH                  U5        M     gg)z"Edit multiple enum values at once.NzNo Selectionz'Please select at least one row to edit.z
Bulk Edit z ValueszSet z selected items to:r   r   r   r.   )(r   setr   r   addr   r   informationr   r;   r   r   rD   r   rB   r   r   r   r   r   r]   r^   r_   r`   rH   ra   rb   rc   r   r   r   r   r   r   r   r   r   r   r|   r   )rh   r   r   r   rk   r   r   rq   r   r   r   r   r  r   s                 rs   r   $ArrayEditorDialog.bulk_edit_selected6  sO   ~~$$224Ddhhj) 5 ##D.:cd 
4>>+B+B*C7KLV$$s='9&::M NOPHMMX]]O2hnn-=Q?P ' 	"#3#B#B#E#EHXHgHgHnHn#no  /  /!;;=G..777))+I~~i0H&mm_Byk;L % ,,11#q9	++00a89(~~boo.F.FGH2;%%h/ $$\2$$R__%=%=yI % 8ru   c                   [        U R                  5      nU R                  b>  [        U R                  5      S   R                  nU R                  R                  U5        OUU R                  [        R                  :X  a  U R                  R                  S5        OU R                  R                  S5        U R                  R                  U5        [        S[        U R                  5      U R                  -   S-
  U R                  -  5      U l        U R                  S-
  U l        U R                  R                  SU R                  S-    SU R                   35        U R!                  5         g )Nr   r*   r.   r   r   )rB   r   r   rd   r   r{   r   r    STRINGrf   rA   rJ   rL   rK   rM   r|   rg   )rh   r   default_values      rs   r   ArrayEditorDialog.add_itemg  s'   t(() >>% 0399M$$]3  M$8$88!!((,!!((+ 	$$X. q3t'<'<#=#NQR#RW[WeWe"ef !,,q0%(9(9A(='>d4CSCSBT UV 	ru   c                $   / nU R                   R                  5        H+  nUR                  5       nX1;  d  M  UR                  U5        M-     U(       d  g [	        5       nU H`  nU R                   R                  US5      nU(       d  M(  UR                  UR                  [        R                  R                  5      5        Mb     UR                  SS9  U H  nU R                  U	 M     / U l        U R                  R                  5       R                  5       n[!        U R                  5       H  u  pU(       d  U R                  R                  U5        M)  U R"                  bk  [%        U	[&        5      (       aV   U R#                  U	5      n
U
R(                   SU	 S3R                  5       nX{;   a  U R                  R                  U5        M  M  U[/        U	5      R                  5       ;   d  M  U R                  R                  U5        M     [1        S[3        U R                  5      U R4                  -   S-
  U R4                  -  5      U l        [9        U R:                  U R6                  S-
  5      U l        U R<                  R?                  SU R:                  S-    SU R6                   35        U RA                  5         g ! [*        [,        4 aA    U[/        U	5      R                  5       ;   a  U R                  R                  U5         GM   GM  f = f)	Nr   Tr   r   r   r.   r   r   )!r   r   r   r{   rd   r   r   r   r   r   r   r   rf   rE   rw   rx   ry   r   r   r   r   r   r   rz   rA   rB   rJ   rL   r   rK   rM   r|   rg   )rh   r   r   r   r   r   r   r}   r~   r   r   r   s               rs   r[   !ArrayEditorDialog.remove_selected  s   $$224D((*C'$$S) 5
  v C((--c15Iy##INN2??3K3K$LM ! 	$'  C!!#&   !#&&++-335!$"3"34HA%%,,Q/ >>-*UC2H2H<#'>>%#8*2--5''C'I'I'K&6 1188; 7 #c%j&6&6&88--44Q7! 5& q3t'<'<#=#NQR#RW[WeWe"ef 1 143C3Ca3GH%(9(9A(='>d4CSCSBT UV 	 '1 <&#e**:*:*<< 1188;; =<s   9AJ>>ALLc                   U R                   R                  US5      nU(       a*  UR                  [        R                  R
                  5      nOgU R                  U   n[        U 5      nUR                  SUR                   S35        [        U5      n[        SUR                   S35      nUR                  U5        [        5       n	U H9  n
U	R                  U
R                   SU
R                    S3U
R                   5        M;      [#        U[$        5      (       a)  U" U5      n
U	R'                  U
R                   SU S35        UR                  U	5        [-        [,        R.                  R0                  [,        R.                  R2                  -  5      nUR4                  R7                  UR8                  5        UR:                  R7                  UR<                  5        UR                  U5        UR?                  5       [        R@                  RB                  :X  a  U	RE                  5       nU" U5      n
U
R                   SU S3nU R                   R                  US	5      nU(       a;  URG                  U5        URI                  [        R                  R
                  U5        XR                  U'   g
g! [(        [*        4 a     GNf = f)zFEdit an enum value using a dialog with a dropdown of all enum options.r   NSelect  Valuez	Select a z value:r   r   r.   TF)%r   r   r   r   r   r   r   r   r;   r   r   r   rD   r   r   r   r   r   r   r   r   r   r   r]   r^   r_   r`   rH   ra   rb   rc   r   r   r   r   r|   r   )rh   r   r   r   r   r   r   rk   descriptionr   r   rq   r   r   r  s                  rs   r	  !ArrayEditorDialog.edit_enum_value  sN    $$))#q1	 ~~boo&>&>?H))(3 	(:(:';6BCV$ y););(<GDE% !HMMX]]O2hnn-=Q?P "	---$]3$$bq%IJ 	"#3#B#B#E#EHXHgHgHnHn#no  /  /!;;=G..777))+I +H&mm_Byk;L'',,S!4H  .  !9!99E +4h'1 H% 		s   >J3 3KKc                    U R                   $ r   )r   r   s    rs   get_array_values"ArrayEditorDialog.get_array_values  s       ru   )r   rK   r   r   rE   rf   r   r   rM   rJ   rL   )NN)r   r   r   Type[enum.Enum])r   r   r   r   r:   rI   rO   rP   rg   r   r   r   r[   r	  r   r   r   r   s   @rs   r   r   T  sG    iVB6=p8/Jb82h5n! !ru   r   c                  6   ^  \ rS rSrSU 4S jjrSS jrSrU =r$ )AddMetadataDialogi  c                |  > [         TU ]  U5        U R                  S5        U R                  SS5        [	        U 5      n[        5       n[        5       U l        UR                  SU R                  5        [        5       U l
        [         H?  nU[        R                  :w  d  M  U R                  R                  UR                  U5        MA     UR                  SU R                  5        [        5       U l        UR                  SU R                   5        UR#                  U5        [%        [$        R&                  R(                  [$        R&                  R*                  -  5      nUR,                  R/                  U R0                  5        UR2                  R/                  U R4                  5        UR7                  U5        g )NAdd Metadatai     zKey:zType:zValue:)r9   r:   r;   r<   r   r   r   key_editaddRowr   
type_combor    ARRAYr   r   r   
value_editrQ   r   r]   r^   r_   r`   rH   ra   rb   rc   rD   )rh   ri   rk   form_layout
value_typerq   rr   s         rs   r:   AddMetadataDialog.__init__  s;    N+CT"!m!64==1#+'J]000''
D ( 	7DOO4#+8T__5%"#3#B#B#E#EHXHgHgHnHn#no  -  -!ru   c                   U R                   R                  5       nU R                  R                  5       nU R                  R                  5       nU[        R                  :X  a!  [        R                  " [        U5      5      nGO{U[        R                  :X  a!  [        R                  " [        U5      5      nGOFU[        R                  :X  a!  [        R                  " [        U5      5      nGOU[        R                  :X  a   [        R                   " [        U5      5      nOU[        R"                  :X  a   [        R$                  " [        U5      5      nOU[        R&                  :X  a   [        R(                  " [        U5      5      nOuU[        R*                  :X  a   [        R,                  " [/        U5      5      nOAU[        R0                  :X  a  UR3                  5       S;   nOU[        R4                  :X  a  UnOUnXU4$ )Ntrueyes1)r(  rw   r*  r   r,  toPlainTextr    UINT8npuint8r   INT8int8UINT16uint16INT16int16UINT32uint32r   int32FLOAT32float32r
  BOOLrx   r  )rh   r   r.  
value_textr   s        rs   r   AddMetadataDialog.get_data  s`   mm  "__002
__002
 ,,,HHS_-E=---GGC
O,E=///IIc*o.E=...HHS_-E=///IIc*o.E=...HHS_-E=000JJuZ01E=---$$&*>>E=///EE%%ru   )r(  r*  r,  r   )returnzTuple[str, GGUFValueType, Any])r   r   r   r   r:   r   r   r   r   s   @rs   r$  r$    s    "8& &ru   r$  c                     ^  \ rS rSrU 4S jrS rS rS rS rSS jr	SS jr
SS	 jrSS
 jrS rS rS rS rS rS rS rS rS rSrU =r$ )GGUFEditorWindowi.  c                   > [         TU ]  5         U R                  S5        U R                  SS5        S U l        S U l        SU l        0 U l        [        5       U l	        SU l
        U R                  5         g )NzGGUF Editori  i   F)r9   r:   r;   r<   current_filereadermodifiedmetadata_changesr  metadata_to_remove on_metadata_changed_is_connectedsetup_ui)rh   rr   s    rs   r:   GGUFEditorWindow.__init__/  sc    M*D#  ""%%05-ru   c                
   [        5       nU R                  U5        [        U5      n[        5       n[	        5       U l        U R
                  R                  S5        UR                  U R
                  5        [        S5      nUR                  R                  U R                  5        UR                  U5        [        S5      nUR                  R                  U R                  5        UR                  U5        UR                  U5        [        5       U l        [        5       U l        [        U R                   5      n[#        5       U l        U R$                  R'                  S5        U R$                  R)                  / SQ5        U R$                  R+                  5       R-                  S[.        R0                  R2                  5        U R$                  R+                  5       R-                  S[.        R0                  R4                  5        U R$                  R+                  5       R-                  S[.        R0                  R2                  5        U R$                  R+                  5       R-                  S	[.        R0                  R4                  5        UR                  U R$                  5        [        5       n[        S
5      nUR                  R                  U R6                  5        UR                  U5        UR9                  5         UR                  U5        [        5       U l        [        U R:                  5      n	[#        5       U l        U R<                  R'                  S5        U R<                  R)                  / SQ5        U R<                  R+                  5       R-                  S[.        R0                  R2                  5        U R<                  R+                  5       R-                  S[.        R0                  R4                  5        U R<                  R+                  5       R-                  S[.        R0                  R4                  5        U R<                  R+                  5       R-                  S	[.        R0                  R4                  5        U R<                  R+                  5       R-                  S[.        R0                  R4                  5        U	R                  U R<                  5        U R                  R?                  U R                   S5        U R                  R?                  U R:                  S5        UR                  U R                  5        U RA                  5       RC                  S5        g )NTz	Open GGUFz
Save As...r2   )Keyr   r   r   r   r.   r6   r7   r&     )Namer   ShapeElementszSize (bytes)MetadataTensorsReady)"r   setCentralWidgetr   r   r   file_path_editsetReadOnlyrD   r   rN   rH   	open_file	save_filerQ   r   tabsmetadata_tabr   metadata_tablerS   rT   rU   rV   r   rW   rY   rX   add_metadatar\   tensors_tabtensors_tableaddTab	statusBarshowMessage)
rh   central_widgetmain_layoutfile_layoutopen_buttonsave_buttonmetadata_layoutmetadata_controlsadd_metadata_buttontensors_layouts
             rs   rQ  GGUFEditorWindow.setup_ui>  s    n-!.1 "m'k''-d112!+.##DNN3k*!,/##DNN3k*k* L	 $I%d&7&78 +n**1-556YZ,,.CCA{G]G]GeGef,,.CCA{G]G]GnGno,,.CCA{G]G]GeGef,,.CCA{G]G]GnGno!!$"5"56 (M).9##++D,=,=>##$78$$&!!"34 #9$T%5%56)^))!,445jk++-BB1kF\F\FdFde++-BB1kF\F\FmFmn++-BB1kF\F\FmFmn++-BB1kF\F\FmFmn++-BB1kF\F\FmFmn  !3!34 			**J7		))95dii( 	$$W-ru   c           	     L    U R                  5       R                  SU S35        [        R                  " 5         [	        US5      U l        Xl        U R                  R                  U5        U R                  5         U R                  5         0 U l        [        5       U l        SU l        U R                  5       R                  SU 35        g! [         aM  n[         R"                  " U SS[%        U5       35        U R                  5       R                  S	5         S
nAgS
nAff = f)zLoad a GGUF file by pathzLoading ...rFzLoaded TErrorzFailed to open file: zError loading fileN)rh  ri  r	   processEventsr   rL  rK  r]  r|   load_metadataload_tensorsrN  r  rO  rM  	Exceptionr   criticalrz   )rh   	file_pathr   s      rs   	load_fileGGUFEditorWindow.load_file  s    	NN((8I;c)BC&&($Y4DK )''	2 $&D!&)eD#!DMNN((79+)>? 	  w2GAx0PQNN(()=>	s   C	C 
D#ADD#c                l    [         R                  " U SSS5      u  pU(       d  g U R                  U5        g )NzOpen GGUF Filer*   "GGUF Files (*.gguf);;All Files (*))r   getOpenFileNamer~  )rh   r}  _s      rs   r_  GGUFEditorWindow.open_file  s3    "22"B(L
	 y!ru   c                    U R                   R                  S5        U R                  (       d  g U R                  (       aj  [        R
                  " 5          [        R                  " S5        U R                   R                  R                  U R                  5        S S S 5        SU l        [        U R                  R                  R                  5       5       GH  u  nu  p#U R                   R                  U5        [        U5      nUR                  UR!                  5       ["        R$                  R&                  ) -  5        U R                   R)                  USU5        UR*                  (       d  SnGOUR*                  S   [,        R.                  :X  a  [1        UR*                  5      S-
  nUR*                  S   R2                  nU R5                  U5      nUb-  UR*                  S   [,        R6                  :X  a  UR8                  nSU-  U-   SU-  -   nOc[;        UR*                  S   R2                  5      nU R5                  U5      nUb-  UR*                  S   [,        R6                  :X  a  UR8                  n[        U5      n	U	R                  U	R!                  5       ["        R$                  R&                  ) -  5        U R                   R)                  USU	5        U R=                  U5      n
[        U
5      n[1        UR*                  5      S:X  a\  UR*                  S   [,        R.                  :w  a;  UR                  UR!                  5       ["        R$                  R&                  -  5        O;UR                  UR!                  5       ["        R$                  R&                  ) -  5        U R                   R)                  US	U5        [?        5       n[A        U5      nURC                  S	S	S	S	5        UR*                  (       a  UR*                  S   [,        R.                  :X  a  [E        S
5      nURG                  SU5        URG                  SU5        URH                  RK                  U RL                  5        URO                  U5        U[P        ;   a"  URS                  S5        URU                  S5        O[1        UR*                  5      S:X  aw  U R5                  U5      be  [E        S
5      nURG                  SU5        URG                  SU5        URH                  RK                  U RV                  5        URO                  U5        [E        S5      nURG                  SU5        URG                  SU5        URH                  RK                  U RX                  5        URO                  U5        U R                   R[                  USU5        GM     U R                   R                  RK                  U R                  5        SU l        g ! , (       d  f       GNk= f)Nr   ignoreFN/Ar.   []r6   r   r   r   zEdit Tokenizerz Edit all tokenizer data togetherRemover7   T).rc  r   rL  rP  warningscatch_warningsfilterwarningsitemChanged
disconnecton_metadata_changedry   fieldsitems	insertRowr   r   r   r   r   r   r   typesr    r+  rB   r   get_enum_for_keyr   r   rz   format_field_valuer   r   r   r   r   rN   rH   edit_array_metadatarD   TOKENIZER_LINKED_KEYSr|   
setToolTipedit_metadata_enumremove_metadatar   )rh   r~   r   fieldkey_itemtype_str
nest_countr   r   r   	value_strr  actions_widgetactions_layoutr  rp   s                   rs   ry  GGUFEditorWindow.load_metadata  s   ''*{{ 00((*''1##//::4;S;ST + 5:D1(););)A)A)CDOA|))!, (,Hhnn."++2L2L1LLM''1h7 ;; Q=#6#66 -1
${{233 11#6	(U[[_@S@S-S#,#5#5L+l:S:=MMu{{1~223 11#6	(U[[^}?R?R-R(11H(2Iy0BKK4N4N3NNO''1i8 //6I))4J 5;;1$Q=;N;N)N##J$4$4$69S9S$ST##J$4$4$6"++:T:T9T$TU''1j9 %YN(8N--aAq9 {{u{{1~1D1DD)&1''q1''s3##++D,D,DE((5 //''(89**+MNU[[!Q&4+@+@+E+Q)&1''q1''s3##++D,C,CD((5'1M%%eQ/%%eS1!!))$*>*>?$$]3--aNCQ  EV 	''//0H0HI04-c +*s   AW>>
Xc           	     L   UR                   (       a!  UR                   S   [        R                  :w  a  / $ UR                   S   n/ n[        UR                  5      nU[        R
                  :X  aP  [        U5       H?  n[        [        UR                  SXE-
  S-
  S-  -
     5      SS9nUR                  U5        MA     U$ U R                  (       aT  X R                  R                  ;   a;  [        U5       H,  nUR                  UR                  SXE-
  S-
  -
     S   5        M.     U$ )z'Extract all values from an array field.r   r.   r  r6   utf-8encoding)r  r    r+  rB   r   r  re   rz   bytespartsr{   rL  gguf_scalar_to_np)rh   r  	curr_typer   total_elementselement_posvalue_strings          rs   extract_array_values%GGUFEditorWindow.extract_array_values  s    {{ekk!n0C0CCIKKN	UZZ,,,$^4"5R>;WZ[;[_`:`5`)a#bmtu##L1  5 	 [[Y++*G*GG$^4##EKKn6RUV6V0W$XYZ$[\  5 ru   c                ,    [         R                  U5      $ )z/Get the enum type for a given key if it exists.)r   get)rh   r   s     rs   r  !GGUFEditorWindow.get_enum_for_key  s    ##C((ru   c                     [        U[        [        45      (       a  U" U5      nUR                   SU S3$  [        U5      $ ! [        [
        4 a     Nf = f)z&Format a value as an enum if possible.r   r   )r   r   rz   r   r   r   )rh   r   r   
enum_values       rs   format_enum_value"GGUFEditorWindow.format_enum_value  sd    	%#s,,&u-
$//*"UG155 -
 5z H% 		s   4A AAc                   UR                   (       d  g[        UR                   5      S:X  a  UR                   S   nU[        R                  :X  a   [	        [        UR                  S   5      SS9$ U R                  (       ae  X R                  R                  ;   aL  UR                  S   S   nU R                  UR                  5      nUb  U R                  X45      $ [	        U5      $ UR                   S   [        R                  :X  a  U R                  U5      n[        S[        U5      5      nU R                  UR                  5      nUb8  / n[        U5       H&  nUR!                  U R                  XX   U5      5        M(     O&[        U5       Vs/ s H  n[	        XX   5      PM     nnSS	R#                  U5      R%                  5        [        U5      [        U5      :  a  S
 S3$ S S3$ gs  snf )Nr  r.   r   r  r  r  rU  [ r   , ...r*    ]zComplex value)r  rB   r    r  rz   r  r  rL  r  r  r   r  r+  r  r   re   r{   r   strip)	rh   r  r  r   r   r   render_elementarray_elementsr~   s	            rs   r  #GGUFEditorWindow.format_field_value&  s   {{u{{q AIM0005R1GDDkk.K.K!KB* 11%**=	(11%CC5z!;;q>]00044U;L C$56N --ejj9I$!#~.A"))$*@*@R[*\] / AFn@U!V@U1#lo"6@U!V		.1779:c,FWZ]^lZmFm7:vvxyysu:vvxyy	 "Ws   G+c                   U R                   R                  S5        U R                  (       d  g [        U R                  R                  5       GHo  u  pU R                   R                  U5        [        UR                  5      nUR                  UR                  5       [        R                  R                  ) -  5        U R                   R                  USU5        [        UR                  R                  5      nUR                  UR                  5       [        R                  R                  ) -  5        U R                   R                  USU5        SR                  S UR                    5       5      n[        U5      nUR                  UR                  5       [        R                  R                  ) -  5        U R                   R                  USU5        [        [#        UR$                  5      5      nUR                  UR                  5       [        R                  R                  ) -  5        U R                   R                  USU5        [        UR&                  S 5      nUR                  UR                  5       [        R                  R                  ) -  5        U R                   R                  USU5        GMr     g )	Nr   r.   u    × c              3  8   #    U  H  n[        U5      v   M     g 7fr   rz   ).0ds     rs   	<genexpr>0GGUFEditorWindow.load_tensors.<locals>.<genexpr>\  s     #ALqCFFL   r6   r7   ,r2   )rf  r   rL  ry   tensorsr  r   r   r   r   r   r   r   r   tensor_typer   shaperz   
n_elementsn_bytes)	rh   r~   tensor	name_itemr   	shape_str
shape_itemelements_item	size_items	            rs   rz  GGUFEditorWindow.load_tensorsH  s   &&q){{"4;;#6#67IA((+ )5Iy0BKK4N4N3NNO&&q!Y7 )););)@)@AIy0BKK4N4N3NNO&&q!Y7 #AFLL#AAI))4J
 0 0 2bkk6P6P5P PQ&&q!Z8 -S1B1B-CDM""=#6#6#8BKK<V<V;V#VW&&q!]; )FNN1+=?Iy0BKK4N4N3NNO&&q!Y77 8ru   c                V	   UR                  5       S:w  a  g UR                  5       nU R                  R                  US5      nS nU(       a  UR	                  5       nUR	                  5       nS nU R
                  (       a"  U(       a  U R
                  R                  U5      nU(       a  UR                  (       a  U(       d  g UR                  S   nU R                  U5      nUb  U[        R                  :X  ay    X   n	U	R                  n
U" U
5        Xz4U R"                  U'   SU l        U R'                  X5      nUR)                  U5        U R+                  5       R-                  SU SU 35        g  U[        R:                  :X  a!  [<        R>                  " [!        U5      5      n
GOzU[        R@                  :X  a!  [<        RB                  " [!        U5      5      n
GOEU[        RD                  :X  a!  [<        RF                  " [!        U5      5      n
GOU[        RH                  :X  a   [<        RJ                  " [!        U5      5      n
OU[        RL                  :X  a   [<        RN                  " [!        U5      5      n
OU[        R                  :X  a   [<        RP                  " [!        U5      5      n
OtU[        RR                  :X  a   [<        RT                  " [W        U5      5      n
O@U[        RX                  :X  a  UR[                  5       S;   n
OU[        R\                  :X  a  Un
Og Xz4U R"                  U'   SU l        U R+                  5       R-                  SU SU 35        g ! [        [        4 a]    SU;   aH  SU;   aB  UR                  S5      S   R                  S5      S   R                  5       n[!        U5      n
 GN[!        U5      n
 GNf = f! [.        [        4 aq  n[0        R2                  " U S	U S3S
U SUR4                   SSR7                  S U 5       5       35        U R9                  U5      nUR)                  U5         S nAg S nAff = f! [.         aM    [0        R2                  " U SSU SUR^                   35        U R9                  U5      nUR)                  U5         g f = f)Nr6   r   (r   r.   TChanged  to zInvalid Enum Value ('z' is not a valid z value.
Valid values are: r   c              3  8   #    U  H  oR                   v   M     g 7fr   )r   r  vs     rs   r  7GGUFEditorWindow.on_metadata_changed.<locals>.<genexpr>  s     2M9a669r  r1  zInvalid ValuezThe value 'z' is not valid for type )0r   r   rc  r   rw   rL  	get_fieldr  r  r    r   r   r   AttributeErrorsplitr  r   rN  rM  r  r|   rh  ri  r   r   warningr   r   r  r6  r7  r8  r9  r:  r;  r<  r=  r>  r?  r@  rA  rB  rC  r
  rD  rx   r  r   )rh   r   r   r   r   r   r  r.  r   r   converted_value
value_partformatted_valuer   original_values                  rs   r  $GGUFEditorWindow.on_metadata_changedk  s   ;;=Ahhj'',,S!4	.."CIIK	;;3KK))#.EEKKs[[^
 ))#.	 Z=3F3F%F&9(3H&.nnO /* /9-J%%c* $ #'"8"8"T_- ,,xuD@Q-RS"	)]000"$((3y>":}111"$''#i."9}333"$))C	N";}222"$((3y>":}333"$))C	N";}222"$((3y>":}444"$**U9-=">}111"+//"37K"K}333"+  +5)FD!!#& DMNN((8C5YK)HI !.1 9i'C9,<%.__S%9!%<%B%B3%G%J%P%P%R
*-j/ +.i.9. ) 
##*1#Q/	{"3I4F4F3G H))-2M92M)M(NPQ "&!8!8!?^,
R  	)oYKOghrhwhwgx7yz "44U;NLL(	)s_   9M 	A&O 1F.Q  <Q AO
8O ;O
O 	O

O QA'Q		QAR('R(c                p   U R                  5       nUR                  S5      nUR                  S5      n[        R                  " U SSU S3[        R                  R
                  [        R                  R                  -  [        R                  R                  5      nU[        R                  R
                  :X  a}  U R                  R                  U5        U R                  R                  U5        X R                  ;   a  U R                  U	 SU l        U R                  5       R                  SU S35        g g )	Nr   r   zConfirm Removalz2Are you sure you want to remove the metadata key 'z'?TzMarked z for removal)r  r  r   questionr]   YesNorc  	removeRowrO  r  rN  rM  rh  ri  )rh   r  r   r   replys        rs   r   GGUFEditorWindow.remove_metadata  s    ooe$ooe$$$#@RH&&**[-G-G-J-JJKLfLfLiLi
 K..222))#.##'', +++))#. DMNN((73%|)DE 3ru   c                   U R                  5       nUR                  S5      nUR                  S5      nSnU R                  (       a  U R                  R                  U5      nU(       a  UR                  (       d  gU R                  U5      nUc  gUR                  5       n[        U 5      nUR                  SUR                   S35        [        U5      n[        5       n	U H9  n
U	R                  U
R                   SU
R                   S3U
R                  5        M;      [        U[         ["        45      (       a)  U" U5      n
U	R%                  U
R                   SU S35        UR+                  U	5        [-        [,        R.                  R0                  [,        R.                  R2                  -  5      nUR4                  R7                  UR8                  5        UR:                  R7                  UR<                  5        UR+                  U5        UR?                  5       [        R@                  RB                  :X  a  U	RE                  5       nU" U5      n
UR                  S   U4U RF                  U'   S	U l$        U
R                   SU S3nU RJ                  RM                  US
5      nU(       a  URO                  U5        U RQ                  5       RS                  SU SU 35        gg! [&        [(        4 a     GNf = f)zEdit an enum metadata field.r   r   Nr  r  r   r   r   Tr6   r  r  )*r  r  rL  r  r  r  contentsr   r;   r   r   r   r   r   r   r   r   rz   r   r   r   rD   r   r]   r^   r_   r`   rH   ra   rb   rc   r   r   r   r   rN  rM  rc  r   r|   rh  ri  )rh   r  r   r   r  r   r   r   rk   r   r   rq   r   r   target_items                  rs   r  #GGUFEditorWindow.edit_metadata_enum  sw   ooe$ooe$;;KK))#.EEKK))#.	 ( 	(:(:';6BCV$!HMMX]]O2hnn-=Q?P "	-#s44$]3$$bq%IJ 	"#3#B#B#E#EHXHgHgHnHn#no  /  /!;;=G..777))+I +H +0++a.))DD!!#& DM 'mm_Byk;L--223:K##L1NN((8C5\N)KL 8 H% 		s   AK" "K65K6c                f  ^ ^ T R                  5       nUR                  S5      nUR                  S5      nU[        ;   a  T R                  U5        g S nT R                  (       a  T R                  R                  U5      nU(       a2  UR                  (       a!  UR                  S   [        R                  :w  a  g UR                  S   nT R                  U5      n[        XeUT 5      nUR                  5       [        R                  R                  :X  Ga  UR                  5       n[        R                  XX44T R                   U'   ST l        T R%                  U5      mTbK  U[        R&                  :X  a7  SSR)                  UU 4S jUS S	  5       5       [+        U5      S	:  a  S
OS S3n	O2SSR)                  S US S	  5       5       [+        U5      S	:  a  S
OS S3n	T R,                  R/                  US5      n
U
(       a  U
R1                  U	5        T R3                  5       R5                  SU 35        g g )Nr   r   r   r.   Tr  r   c              3  H   >#    U  H  nTR                  UT5      v   M     g 7fr   )r  )r  r  r   rh   s     rs   r  7GGUFEditorWindow.edit_array_metadata.<locals>.<genexpr>B  s$     *hYgTU4+A+A!Y+O+OYgs   "rU  r  r*   r  c              3  8   #    U  H  n[        U5      v   M     g 7fr   r  r  s     rs   r  r  D  s     *J>a3q66>r  r6   zUpdated array values for )r  r  r  edit_tokenizer_metadatarL  r  r  r    r+  r  r   r   r   r   r   r   rN  rM  r  r   r   rB   rc  r   r|   rh  ri  )rh   r  r   r   r  r   r   r   
new_valuesr  r  r   s   `          @rs   r  $GGUFEditorWindow.edit_array_metadata   s   ooe$ooe$ ''((-;;KK))#.EEKK5;;q>]=P=P+P {{1~ 007 #<sDI;;=G..777002J +8*=*=?Y)ZD!!#& DM --c2I$9L9L)L *hYcdfefYg*h!h iux  zD  vE  HI  vIjq  OQ  jR  RT  U	 *J:bq>*J!J KWZ[eWfijWjGprKssuv	--223:K##I.NN((+DSE)JK# 8ru   c                   U R                   (       d  gU R                   R                  [        R                  R                  R
                  5      nU R                   R                  [        R                  R                  R                  5      nU R                   R                  [        R                  R                  R                  5      nU(       a  U R                  U5      O/ nU(       a  U R                  U5      O/ nU(       a  U R                  U5      O/ n[        R                  R                  R
                  U R                  ;   a6  U R                  [        R                  R                  R
                     u  nu  p[        R                  R                  R                  U R                  ;   a6  U R                  [        R                  R                  R                     u  nu  p[        R                  R                  R                  U R                  ;   a6  U R                  [        R                  R                  R                     u  nu  p[        XVXp5      n	U	R                  5       [        R                  R                  :X  Ga  U	R                  5       u  pnU(       aP  [         R"                  UR$                  S   U
44U R                  [        R                  R                  R
                  '   U(       aP  [         R"                  UR$                  S   U44U R                  [        R                  R                  R                  '   U(       aP  [         R"                  UR$                  S   U44U R                  [        R                  R                  R                  '   SU l        U R)                  [        R                  R                  R
                  U
5        U R)                  [        R                  R                  R                  U5        U R)                  [        R                  R                  R                  U5        U R+                  5       R-                  S5        gg)z3Edit the linked tokenizer metadata arrays together.Nr.   TzUpdated tokenizer data)rL  r  ggufKeys	TokenizerLIST
TOKEN_TYPESCORESr  rN  r'   r   r   r   r   r   r    r+  r  rM  update_tokenizer_displayrh  ri  )rh   trigger_keytokens_fieldtoken_types_fieldscores_fieldr>   r?   r@   r  r   
new_tokensnew_token_types
new_scoress                rs   r  (GGUFEditorWindow.edit_tokenizer_metadataK  s   {{ {{,,TYY-@-@-E-EF KK11$))2E2E2P2PQ{{,,TYY-@-@-G-GH =I**<8bFWd//0AB]_<H**<8b 99##t'<'<<!224993F3F3K3KLNA{99))T-B-BB"&"7"7		8K8K8V8V"WA99%%)>)>>!224993F3F3M3MNNA{ 'vFI;;=G..7776<oo6G3J !''!''*J7C%%dii&9&9&>&>?
 !!''&,,Q/AI%%dii&9&9&D&DE
 !''!''*J7E%%dii&9&9&@&@A
 !DM ))$))*=*=*B*BJO))$))*=*=*H*H/Z))$))*=*=*D*DjQNN(()AB; 8ru   c                   [        U R                  R                  5       5       H  nU R                  R                  US5      nU(       d  M(  UR	                  5       U:X  d  M>  SSR                  S USS  5       5       [        U5      S:  a  SOS S	3nU R                  R                  US
5      nU(       a  UR                  U5          g   g)z>Update the display of a tokenizer field in the metadata table.r   r  r   c              3  8   #    U  H  n[        U5      v   M     g 7fr   r  r  s     rs   r  <GGUFEditorWindow.update_tokenizer_display.<locals>.<genexpr>  s     *F:a3q66:r  NrU  r  r*   r  r6   )re   rc  rowCountr   rw   r   rB   r|   )rh   r   valuesr   r  r  r  s          rs   r  )GGUFEditorWindow.update_tokenizer_display  s    ,,5578C**//Q7HxHMMOs2 *F6"1:*F!F GSVW]S^abSbhjGkkmn	!0055c1=
&&y1 9ru   c                   [        U 5      nUR                  5       [        R                  R                  :X  Ga	  UR                  5       u  p#nU(       d  [        R                  " U SS5        g [        U R                  R                  5       5       HZ  nU R                  R                  US5      nU(       d  M(  UR                  5       U:X  d  M>  [        R                  " U SSU S35          g    U R                  R                  5       nU R                  R                  U5        [        U5      nUR                  UR!                  5       ["        R$                  R&                  ) -  5        U R                  R)                  USU5        [        UR*                  5      nUR                  UR!                  5       ["        R$                  R&                  ) -  5        U R                  R)                  USU5        [        [-        U5      5      n	U	R                  U	R!                  5       ["        R$                  R&                  -  5        U R                  R)                  USU	5        [/        5       n
[1        U
5      nUR3                  SSSS5        [5        S	5      nUR7                  S
U5        UR7                  SU5        UR8                  R;                  U R<                  5        UR?                  U5        U R                  RA                  USU
5        X44U RB                  U'   SU l"        U RG                  5       RI                  SU 35        g g )NzInvalid KeyzKey cannot be emptyr   zDuplicate KeyzKey 'z' already existsr.   r6   r  r   r   r7   TzAdded new metadata key )%r$  r   r   r   r   r   r   r  re   rc  r  r   rw   r  r   r   r   r   r   r   r   r   rz   r   r   r   r   r   rN   rH   r  rD   r   rN  rM  rh  ri  )rh   r   r   r.  r   r   r   r  r   r  r  r  rp   s                rs   rd  GGUFEditorWindow.add_metadata  s   "4(;;=G..777%+__%6"CU##D-9NO T0099;< //44S!<	9!1S!8''oseK[?\]	 = %%..0C))#. (,Hhnn."++2L2L1LLM''Q9 )9Iy0BKK4N4N3NNO''Q	: *#e*5J
 0 0 2R[[5O5O OP''Q
; %YN(8N--aAq9'1M%%eS1%%eS1!!))$*>*>?$$]3--c1nE +5)<D!!#& DMNN((+B3%)HIe 8ru   c           	        U R                   (       d  [        R                  " U SS5        g U R                  (       d;  U R                  (       d*  U R
                  (       d  [        R                  " U SS5        g [        R                  " U SSS5      u  pU(       d  g  U R                  5       R                  SU S	35        [        R                  " 5         S
nU R                   R                  [        R                  R                   R"                  5      nU(       a  UR%                  5       n['        XU R                   R(                  S9nS nU R                   R                  [        R                  R                   R*                  5      nU(       a  UR%                  5       nUb  Xel        U R                   R.                  R1                  5        GH'  nUR2                  [        R                  R                   R"                  :X  d   UR2                  R5                  S5      (       a  MX  UR2                  U R
                  ;   a  Mt  S nUR2                  U R                  ;   a4  U R                  UR2                     u  pU[6        R8                  :X  a  U	u  pyOBUR%                  5       n	UR:                  S   nU[6        R8                  :X  a  UR:                  S   nU	c  GM  UR=                  UR2                  XUS9  GM*     U R                  R?                  5        HP  u  n
u  pU R                   R                  U
5      b  M&  S nU[6        R8                  :X  a  U	u  pyUR=                  XXS9  MR     U R                   R@                   HG  nURC                  UR2                  URD                  URD                  RF                  URH                  S9  MI     URK                  [M        U5      5        URO                  5         URQ                  5         URS                  SS9  URU                  5         U R                  5       R                  SU 35        [        RV                  " U SS[        RX                  RZ                  [        RX                  R\                  -  [        RX                  RZ                  5      nU[        RX                  RZ                  :X  ap  [_        US5      U l         Xl0        U Rb                  Re                  U5        U Rg                  5         U Ri                  5         0 U l        [k        5       U l        SU l        g g ! [l         aM  n[        Rn                  " U SS[q        U5       35        U R                  5       R                  S5         S nAg S nAff = f)NzNo File OpenzPlease open a GGUF file firstz
No ChangeszNo changes to savezSave GGUF File Asr*   r  z
Saving to ru  unknown)arch	endianesszGGUF.r   r  )sub_type)	raw_shape	raw_dtypeF)progressz	Saved to zOpen Saved Filez,Would you like to open the newly saved file?rv  rw  zFailed to save file: zError saving file)9rL  r   r  rM  rN  rO  r  r   getSaveFileNamerh  ri  r	   rx  r  r  r  GeneralARCHITECTUREr  r   r  	ALIGNMENTdata_alignmentr  r  r   
startswithr    r+  r  add_key_valuer  r  
add_tensorr   r  r  open_output_filer   write_header_to_filewrite_kv_data_to_filewrite_tensors_to_filecloser  r]   r  r  r   rK  r]  r|   ry  rz  r  r{  r|  rz   )rh   r}  r  r  r  writer	alignmentr  r.  r   r   r  r  r   s                 rs   r`  GGUFEditorWindow.save_file  sY   {{n6UV}}T%:%:4CZCZ##D,8LM"22%r+O
	 b	>NN((:i[)DE&&( DKK))$))*;*;*H*HIE~~'  	@U@UVF IKK))$))*;*;*E*EFE!NN,	(,5) ++224::!2!2!?!??5::CXCXY`CaCa ::!8!88  ::!6!66(,(=(=ejj(I%J!]%8%88*/ "NN,E!&QJ!]%8%88#(;;r?$((UQY(Z1 56 -1,A,A,G,G,I((j;;((-9!4!44&+OH$$S$O -J ++--!!&++v{{fkkFWFWcicucu!v . ##DO4'')((* ((%(8LLNNN((9YK)@A  (('>**..1K1K1N1NNP[PjPjPnPnE 22666(C8$-!##++I6""$!!#(*%*-%' % 7  	>  w2GAx0PQNN(()<==	>s!   H6T4 IT4 4
V>AVV)rK  r]  rN  rb  rc  rO  rM  rP  rL  ra  re  rf  )r  r!   rG  rd   )r   rz   rG  zOptional[Type[enum.Enum]])r   r   r   r"  rG  rz   )r  r!   rG  rz   )r   r   r   r   r:   rQ  r~  r_  ry  r  r  r  r  rz  r  r  r  r  r  r  rd  r`  r   r   r   s   @rs   rI  rI  .  su    H.T0"Y5v&) D!8Fa)FF,:Mx)LV6Cp	4Jlr> r>ru   rI  c                 H   [         R                  " SS9n U R                  SSSS9  U R                  SSS	S
9  U R                  5       n[        R
                  " UR                  (       a  [        R                  O[        R                  S9  [        [        R                  5      n[        5       nUR                  5         UR                  (       a  [        R                   R#                  UR                  5      (       a<  UR                  R%                  S5      (       a  UR'                  UR                  5        OG[(        R+                  SUR                   35        [,        R.                  " USSUR                   35        [        R0                  " UR3                  5       5        g )NzGUI GGUF Editor)r  
model_path?z*path to GGUF model file to load at startup)nargshelpz	--verbose
store_truezincrease output verbosity)actionr.  )levelz.ggufzInvalid model path: zInvalid Model Pathz9The specified file does not exist or is not a GGUF file: )argparseArgumentParseradd_argument
parse_argsloggingbasicConfigverboseDEBUGINFOr	   sysargvrI  showr+  ospathisfileendswithr~  loggererrorr   r  exitr   )parserargsappwindows       rs   mainrI  9  s!   $$1BCF
C6bc
L?Z[Dt||gmmN
sxx
 CF
KKM 77>>$//**t/G/G/P/PT__-LL//@AB$KDOOK\]_
 HHSXXZru   __main__)rG  None)M
__future__r   r6  r2  r>  r;  r   enumpathlibr   typingr   r   r   r   r  r7  PySide6.QtWidgetsr	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   PySide6.QtCorer   environ__file__ri   existsr?  insertrz   r  r   r   r    r!   gguf.constantsr"   r#   r$   r%   	getLoggerrB  r  r  r  RopeSCALING_TYPELLMPOOLING_TYPEr  	FILE_TYPEr   r  r   r  r'   r   r$  rI  rI  r    ru   rs   <module>r^     s   "   	 
    - -         "**$$x.*?*?*F*F*M*M*T*TW`*`)h)h)j)jHHOOAs4>0077>>?@  C C X X			,	- 	II""IIINNIIMMII!5	  	IIII""II _:G _:D	\! \!~8& 8&vH>{ H>V6 zF ru   