§
    ÎÐjpm  ã                   ó:  — 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 dl	m
Z
 d dlmZ d dlmZ dZdZe G d	„ d
¦  «        ¦   «         Zd'd„Zdefd„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z d„ Z!d„ Z"d„ Z#dededed ed!ed"efd#„Z$d$„ Z%d%„ Z&d&„ Z'dS )(é    N)Ú	dataclass)ÚCallable)Úmodel_dropdowns)Údeepy_available)Úmodel_unload_guardé   Fc                   ó<  — e Zd ZU ej        ed<   ej        ed<   ej        ed<   dZej        dz  ed<   dZej        dz  ed<   dZ	ej        dz  ed<   dZ
ej        dz  ed<   dZej        dz  ed	<   dZej        dz  ed
<   dZej        dz  ed<   dZej        dz  ed<   dS )ÚModelSelectorToolbarÚsearch_buttonÚrefresh_buttonÚunload_buttonNÚfinetune_buttonÚtool_rowÚ
search_rowÚsearch_queryÚsearch_resultsÚsearch_targetÚsearch_apply_buttonÚsearch_close_button)Ú__name__Ú
__module__Ú__qualname__ÚgrÚButtonÚ__annotations__r   r   ÚRowr   r   ÚTextboxr   ÚHTMLr   r   r   © ó    úLC:\Users\johnn\OneDrive\Documents\AI\shared\gradio\model_selector_toolbar.pyr
   r
      só   € € € € € € à”9ÐÐÑØ”IÐÐÑØ”9ÐÐÑØ(,€O�R”Y Ñ%Ð,Ð,Ñ,Ø"€HˆbŒf�t‰mÐ"Ð"Ñ"Ø $€J�”˜‘Ð$Ð$Ñ$Ø&*€L�"”*˜tÑ#Ð*Ð*Ñ*Ø%)€N�B”G˜d‘NÐ)Ð)Ñ)Ø'+€M�2”: Ñ$Ð+Ð+Ñ+Ø,0Ð˜œ TÑ)Ð0Ð0Ñ0Ø,0Ð˜œ TÑ)Ð0Ð0Ñ0Ð0Ð0r    r
   c           
      óì  — t          j        dddg¬¦  «        5  t          j        dg¬¦  «        5 }t          j        ddd	d
gdd¬¦  «        }t          j        | rdnddd	dgdd¬¦  «        }t          j        ddd	dgdd¬¦  «        }t          j        ddd	dgdd¬¦  «        }d d d ¦  «         n# 1 swxY w Y   t          j        ddg¬¦  «        5 }t          j        dddg¬¦  «        5  t          j        ddddd g¬!¦  «        }t          j        ddd"¬#¦  «        }d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         n# 1 swxY w Y   t          ||||||||¬$¦  «        S )%Né   éÒ   zwangp-model-selector-tools)ÚscaleÚ	min_widthÚelem_classeszwangp-model-selector-tool-row)r'   u   âŒ•Úwangp_model_tool_searchzwangp-model-selector-toolz wangp-model-selector-tool-searchÚsmr   )Úelem_idr'   Úsizer%   u   âœŽú+Úwangp_model_tool_finetunez"wangp-model-selector-tool-finetuneu   â†»Úwangp_model_tool_refreshz!wangp-model-selector-tool-refreshzUnload models and extensionsÚwangp_model_tool_unloadz wangp-model-selector-tool-unloadFzwangp-model-selector-search-row©Úvisibler'   é   zwangp-model-selector-search-boxÚ zSearch modelsÚwangp_model_search_queryz!wangp-model-selector-search-input)ÚvalueÚ
show_labelÚplaceholderr*   r'   Úwangp_model_search_results)r5   r1   r*   )r   r   r   r   r   )r   ÚColumnr   r   r   r   r
   )	Úis_finetune_editorr   r   r   r   r   r   r   r   s	            r!   Úcreate_toolbarr;   "   s�  € Ý	Œ˜ cÐ9UÐ8VÐ	WÑ	WÔ	Wð 	hð 	hÝŒVÐ"AÐ!BÐCÑCÔCð 	MÀxÝœI eÐ5NÐ^yð  |^ð  ^_ð  fjð  rsð  tñ  tô  tˆMÝ œiÐ1CÐ(L¨¨ÈÐVqð  B]ð  _Cð  ADð  KOð  WXð  Yñ  Yô  YˆOÝœY uÐ6PÐ`{ð  ~að  `bð  imð  uvð  wñ  wô  wˆNÝœIÐ&DÐNgð  xSð  Uwð  wxð  Cð  KLð  Mñ  Mô  MˆMð		Mð 	Mð 	Mñ 	Mô 	Mð 	Mð 	Mð 	Mð 	Mð 	Mð 	Møøøð 	Mð 	Mð 	Mð 	Mõ
 ŒV˜EÐ1RÐ0SÐTÑTÔTð 	hÐXbÝ” ¨aÐ?`Ð>aÐbÑbÔbð hð hÝ!œz°¸uÐRað  lFð  Vyð  Uzð   {ñ   {ô   {�Ý!#¤¨r¸5ÐJfÐ!gÑ!gÔ!g�ðhð hð hñ hô hð hð hð hð hð hð høøøð hð hð hð hð	hð 	hð 	hñ 	hô 	hð 	hð 	hð 	hð 	hð 	hð 	høøøð 	hð 	hð 	hð 	hð	hð 	hð 	hñ 	hô 	hð 	hð 	hð 	hð 	hð 	hð 	høøøð 	hð 	hð 	hð 	hõ   ¨~¸}Ð^mð  yAð  NXð  gsð  DRð  Sñ  Sô  Sð  Ss}   ™E°A1B-Â!EÂ-B1	Â1EÂ4B1	Â5EÃD=Ã(2D&ÄD=Ä&D*Ä*D=Ä-D*Ä.D=Ä1EÄ=E	ÅEÅE	ÅEÅEÅEÚtoolbarc                 ó  — t          j        ddg¬¦  «        5  t          j        ddd¬¦  «        | _        t          j        dd¬	¦  «        | _        t          j        d
d¬	¦  «        | _        d d d ¦  «         n# 1 swxY w Y   | S )NFz$wangp-model-selector-hidden-controlsr0   r3   Úwangp_model_search_target)r5   r6   r*   zApply model searchÚwangp_model_search_apply)r*   zClose model searchÚwangp_model_search_close)r   r   r   r   r   r   r   )r<   s    r!   Úcreate_search_panelrA   0   sÔ   € Ý	Œ˜Ð-SÐ,TÐ	UÑ	UÔ	Uð jð jÝ "¤
°ÀÐOjÐ kÑ kÔ kˆÔÝ&(¤iÐ0DÐNhÐ&iÑ&iÔ&iˆÔ#Ý&(¤iÐ0DÐNhÐ&iÑ&iÔ&iˆÔ#ðjð jð jñ jô jð jð jð jð jð jð jøøøð jð jð jð jð €Ns   ˜AA7Á7A;Á>A;c                  ó¨   — t          j        d¬¦  «        t          j        d¬¦  «        t          j        d¬¦  «        t          j        dd¬¦  «        fS )NF©r1   Tr3   ©r5   ©r5   r1   ©r   Úupdater   r    r!   Úshow_search_panelrH   8   sK   € ÝŒ9˜UÐ#Ñ#Ô#¥R¤Y°tÐ%<Ñ%<Ô%<½b¼iÈbÐ>QÑ>QÔ>QÕSUÔS\ÐceÐotÐSuÑSuÔSuÐuÐur    c                  ó¨   — t          j        d¬¦  «        t          j        d¬¦  «        t          j        d¬¦  «        t          j        dd¬¦  «        fS )NTrC   Fr3   rD   rE   rF   r   r    r!   Úclear_search_panelrJ   <   sK   € ÝŒ9˜TÐ"Ñ"Ô"¥B¤I°eÐ$<Ñ$<Ô$<½b¼iÈbÐ>QÑ>QÔ>QÕSUÔS\ÐceÐotÐSuÑSuÔSuÐuÐur    c                 óp   — t          j        ddt          | pd¦  «                             ¦   «         ¦  «        S )Nz
[^a-z0-9]+r3   )ÚreÚsubÚstrÚcasefoldrD   s    r!   Ú_normalize_search_textrP   @   s.   € ÝŒ6�- ¥S¨¨°"Ñ%5Ô%5×%>Ò%>Ñ%@Ô%@ÑAÔAÐAr    c                  ó�   — d                      d„ | D ¦   «         ¦  «        }t          j        dd|¦  «                             ¦   «         S )Nú c              3   ó¢   K  — | ]J}t          |pd ¦  «                             ¦   «         ¯%t          |pd ¦  «                             ¦   «         V — ŒKdS )r3   N)rN   Ústrip)Ú.0Úparts     r!   ú	<genexpr>z _display_join.<locals>.<genexpr>E   sS   è è € ÐYÐY°ÅÀTÀZÈRÁÄ×AVÒAVÑAXÔAXÐY•C˜˜
 ‘O”O×)Ò)Ñ+Ô+ÐYÐYÐYÐYÐYÐYr    z\s+)ÚjoinrL   rM   rT   )ÚpartsÚtexts     r!   Ú_display_joinr[   D   sB   € Ø�8Š8ÐYÐY¸ÐYÑYÔYÑYÔY€DÝŒ6�&˜#˜tÑ$Ô$×*Ò*Ñ,Ô,Ð,r    c                 ó$   ‡ ‡— ˆ ˆfd„|D ¦   «         S )Nc                 óJ   •— g | ]}‰                      |d ¬¦  «        ‰k    ¯|‘Œ S ©T)Úfor_ui©Úget_model_family)rU   Ú
model_typeÚdepsÚfamilys     €€r!   ú
<listcomp>z'_family_model_types.<locals>.<listcomp>J   s9   ø€ ÐtÐtÐt˜:¸4×;PÒ;PÐQ[ÐdhÐ;PÑ;iÔ;iÐmsÒ;sÐ;sˆJÐ;sÐ;sÐ;sr    r   )rc   Údropdown_typesrd   s   ` `r!   Ú_family_model_typesrg   I   s!   øø€ ØtÐtÐtÐtÐt¨ÐtÑtÔtÐtr    c                 ó  ‡ ‡— ‰ j         |         d         Št          ˆ ˆfd„t          ‰ ||¦  «        D ¦   «         d„ ¬¦  «        }d„ |D ¦   «         }|pi                      di ¦  «                             |d¦  «        }||v r|n|r|d         ndS )	Nr2   c                 ód   •— g | ],}t          j        ‰‰                     |¦  «        ¦  «        |f‘Œ-S r   )r   Úcompact_nameÚget_model_name©rU   rb   rc   Úfamily_names     €€r!   re   z-_default_model_for_family.<locals>.<listcomp>O   sN   ø€ ð  qð  qð  qÐpz•OÔ0°¸d×>QÒ>QÐR\Ñ>]Ô>]Ñ^Ô^Ð`jÐkð  qð  qð  qr    c                 ó6   — | d                               ¦   «         S ©Nr   ©rO   ©Úrows    r!   ú<lambda>z+_default_model_for_family.<locals>.<lambda>O   s5   € ð  CFð  GHô  CI÷  CRò  CRñ  CTô  CT€ r    ©Úkeyc                 ó   — g | ]\  }}|‘ŒS r   r   ©rU   Ú_labelrb   s      r!   re   z-_default_model_for_family.<locals>.<listcomp>P   s   € Ð8Ð8Ð8Ñ/˜V ZˆjÐ8Ð8Ð8r    Úlast_model_per_familyr3   r   )Úfamilies_infosÚsortedrg   Úget)rc   Ústaterf   rd   ÚrowsÚvaluesrb   rm   s   `      @r!   Ú_default_model_for_familyr€   M   só   øø€ ØÔ% fÔ-¨aÔ0€KÝð  qð  qð  qð  qð  qõ  Rð  SWð  Ygð  ioñ  pô  pð  qñ  qô  qð  wTð  wTð  Uñ  Uô  U€DØ8Ð8°4Ð8Ñ8Ô8€FØ�+˜2×"Ò"Ð#:¸BÑ?Ô?×CÒCÀFÈBÑOÔO€JØ# vÐ-Ð-ˆ:ˆ:ÀÐ4O°F¸1´I°IÈRÐPr    c                 ó¾   ‡ ‡— ‰ j         |         d         Šˆ ˆfd„t          ‰ ||¦  «        D ¦   «         }|                     d„ ¬¦  «         t          j        |¦  «        S )Nr2   c                 óŒ   •— g | ]@}t          j        ‰‰                     |¦  «        ¦  «        |‰                     |¦  «        f‘ŒAS r   )r   rj   rk   Úget_parent_model_typerl   s     €€r!   re   z%_family_hierarchy.<locals>.<listcomp>W   sk   ø€ ð ð ð àõ 
Ô	% k°4×3FÒ3FÀzÑ3RÔ3RÑ	SÔ	SÐU_Ðae×a{Òa{ð  }Gñ  bHô  bHð  	Iðð ð r    c                 ó6   — | d                               ¦   «         S ro   rp   rq   s    r!   rs   z#_family_hierarchy.<locals>.<lambda>[   s   € ˜c !œfŸošoÑ/Ô/€ r    rt   )rz   rg   Úsortr   Úcreate_models_hierarchy)rc   rf   rd   r~   rm   s   `   @r!   Ú_family_hierarchyr‡   U   sz   øø€ ØÔ% fÔ-¨aÔ0€Kðð ð ð ð å-¨d°NÀFÑKÔKðñ ô €Dð 	‡I‚IÐ/Ð/€IÑ0Ô0Ð0ÝÔ2°4Ñ8Ô8Ð8r    c                 óÂ   — |                      |g ¦  «        }d„ |D ¦   «         }|pi                       di ¦  «                              |d¦  «        }||v r|n|r|d         ndS )Nc                 ó   — g | ]\  }}|‘ŒS r   r   rw   s      r!   re   z-_default_model_for_parent.<locals>.<listcomp>a   s   € Ð<Ð<Ð<Ñ/˜V ZˆjÐ<Ð<Ð<r    Úlast_model_per_typer3   r   )r|   )rc   r}   Úchildren_by_parentÚparent_model_typeÚchildrenr   rb   s          r!   Ú_default_model_for_parentrŽ   _   sx   € Ø!×%Ò%Ð&7¸Ñ<Ô<€HØ<Ð<°8Ð<Ñ<Ô<€FØ�+˜2×"Ò"Ð#8¸"Ñ=Ô=×AÒAÐBSÐUWÑXÔX€JØ# vÐ-Ð-ˆ:ˆ:ÀÐ4O°F¸1´I°IÈRÐPr    c                 ót   — |r||v rd S |                      |¦  «         |                      ||||dœ¦  «         d S )N)ÚscopeÚlabelrb   Úpath)ÚaddÚappend)ÚresultsÚseen_targetsr�   r‘   rb   r’   s         r!   Ú_append_resultr—   f   sR   € Øð ˜ |Ð3Ð3ØˆØ×Ò�ZÑ Ô Ð Ø‡N‚N˜U¨UÀ*ÐVZÐ[Ð[Ñ\Ô\Ð\Ð\Ð\r    c                 ó  ‡ — t          |¦  «        }t          |¦  «        dk    rg S t          j        ‰ ¦  «        }t	          ˆ fd„|D ¦   «         ˆ fd„¬¦  «        }g t          ¦   «         }}|D �]–}|‰ j        vrŒ‰ j        |         d         }	|t          |	¦  «        v r%t          ||d|	t          ‰ |||¦  «        |	¦  «         ŒVt          ‰ ||¦  «        \  }
}|
D �](\  }}t          |	|¦  «        }|t          |¦  «        v s$|t          ‰                      |¦  «        ¦  «        v r%t          ||d|t          ‰ |||¦  «        |	¦  «         Œp|                     |g ¦  «        D ]¡\  }}‰                      |¦  «        }|t          |¦  «        v r|nt          ||¦  «        }|t          |¦  «        v s|t          |¦  «        v rBt          ||d||t          |	|¦  «        ¦  «         t          |¦  «        t          k    r|c c c S Œ¢�Œ*�Œ˜|S )	Nr   c                 ó>   •— h | ]}‰                      |d ¬¦  «        ’ŒS r^   r`   ©rU   rb   rc   s     €r!   ú	<setcomp>z"_search_results.<locals>.<setcomp>r   s,   ø€ ÐiÐiÐiÈJ˜×.Ò.¨zÀ$Ð.ÑGÔGÐiÐiÐir    c                 óJ   •— ‰j                              | d| f¦  «        d         S )Niç  r   )rz   r|   )rd   rc   s    €r!   rs   z!_search_results.<locals>.<lambda>r   sY   ø€ ð  Cô  R÷  Vò  Vð  W]ð  `cð  ekð  _lñ  mô  mð  noô  p€ r    rt   r2   ÚFamilyÚModelÚFinetune)rP   Úlenr   Úget_dropdown_model_typesr{   Úsetrz   r—   r€   r‡   r[   rk   rŽ   r|   ÚMAX_SEARCH_RESULTS)rc   r}   ÚqueryÚneedlerf   Ú
family_idsr•   r–   rd   rm   Úparent_choicesr‹   Úparent_namerŒ   Úparent_labelÚ
child_nameÚchild_model_typeÚ	full_nameÚchild_labels   `                  r!   Ú_search_resultsr®   m   sÿ  ø€ Ý# EÑ*Ô*€FÝ
ˆ6�{„{�aÒÐØˆ	Ý$Ô=¸dÑCÔC€NÝÐiÐiÐiÐiÐZhÐiÑiÔið  ppð  ppð  ppð  ppð  qñ  qô  q€JØ¥¡¤ˆ\€GØð 'ñ 'ˆØ˜Ô,Ð,Ð,ØØÔ)¨&Ô1°!Ô4ˆØÕ+¨KÑ8Ô8Ð8Ð8Ý˜7 L°(¸KÕIbÐcgÐinÐp~ð  AGñ  JHô  JHð  JUñ  Vô  Vð  VØÝ->¸tÀ^ÐU[Ñ-\Ô-\Ñ*ˆÐ*Ø.<ð 	'ñ 	'Ñ*ˆKÐ*Ý(¨°kÑBÔBˆLØÕ/°Ñ=Ô=Ð=Ð=ÀÕKaÐbf×buÒbuð  wHñ  cIô  cIñ  LJô  LJð  BJð  BJÝ˜w¨°g¸|ÕMfÐgkÐmrð  uGð  IZñ  N[ô  N[ð  ]hñ  iô  ið  iØØ0B×0FÒ0FÐGXÐZ\Ñ0]Ô0]ð 'ð 'Ñ,�
Ð,Ø ×/Ò/Ð0@ÑAÔA�	Ø+1Õ5KÈIÑ5VÔ5VÐ+VÐ+V˜i˜iÕ\iÐjvð  yCñ  ]Dô  ]D�ØÕ3°KÑ@Ô@Ð@Ð@ÀFÕNdÐenÑNoÔNoÐDoÐDoÝ" 7¨L¸*ÀkÐScÕerÐs~ð  ALñ  fMô  fMñ  Nô  Nð  NÝ˜7‘|”|Õ'9Ò9Ð9Ø&˜˜˜˜˜˜˜øñ'ñ	'ð €Nr    c           
      óô  — t          |pd¦  «        }t          |                     ¦   «         ¦  «        dk    rt          j        dd¬¦  «        S t          | ||¦  «        }t          |¦  «        dk    rt          j        dd¬¦  «        S g }t          |¦  «        D ]²\  }}t          rGd                     t          j
        |d         ¦  «        t          j
        |d	         ¦  «        ¬
¦  «        nd}|                     d                     t          j
        |d         d¬¦  «        t          j
        |d         ¦  «        |¬¦  «        ¦  «         Œ³t          j        dd                     |¦  «        z   dz   d¬¦  «        S )Nr3   r   FrE   zj<div class='wangp-model-search-popup'><div class='wangp-model-search-empty'>No matching models</div></div>TuE   <span class='wangp-model-search-result-meta'>{scope} Â· {path}</span>r�   r’   )r�   r’   zµ<button type='button' class='wangp-model-search-result' data-model-type='{model_type}' role='option'><span class='wangp-model-search-result-title'>{label}</span>{type_line}</button>rb   )Úquoter‘   )rb   r‘   Ú	type_linez5<div class='wangp-model-search-popup' role='listbox'>z</div>)rN   r    rT   r   rG   r®   Ú	enumerateÚSHOW_SEARCH_RESULT_TYPE_LINEÚformatÚhtmlÚescaper”   rX   )rc   r}   r¤   r•   ÚitemsÚindexÚresultr±   s           r!   Úrender_search_resultsrº   ‹   sÎ  € Ý��˜ÑÔ€EÝ
ˆ5�;Š;‰=Œ=ÑÔ˜QÒÐÝŒy˜r¨5Ð1Ñ1Ô1Ð1Ý˜d E¨5Ñ1Ô1€GÝ
ˆ7�|„|�qÒÐÝŒyð   Lð  VZð  [ñ  [ô  [ð  	[Ø€EÝ" 7Ñ+Ô+ð 
ð 
‰ˆˆvõ mIð  QÐ[×bÒbÕimÔitÐu{ð  }Dô  vEñ  jFô  jFõ  MQô  MXð  Y_ð  `fô  Ygñ  Mhô  MhÐbñ  iô  ið  ið  OQˆ	Ø�Šð÷ šÝœ; v¨lÔ';À4ÐHÑHÔHÝ”k &¨¤/Ñ2Ô2Ø#ð ñ ô ñ			
ô 		
ð 		
ð 		
õ Œ9ÐRÐUW×U\ÒU\Ð]bÑUcÔUcÑcÐfnÑnÐx|Ð}Ñ}Ô}Ð}r    c                 óÂ   — t          | pd¦  «                             ¦   «         } | r| › dt          j        ¦   «         › �nt          j        ¦   «         gt          ¦   «         ¢R S )Nr3   ú|)rN   rT   Útimer   rG   rJ   )rb   s    r!   Úapply_search_selectionr¾   ¢   s\   € Ý�ZÐ% 2Ñ&Ô&×,Ò,Ñ.Ô.€JØ-7ÐHˆzÐ)Ð)�DœI™KœKÐ)Ð)Ð)½R¼Y¹[¼[Ð`ÕL^ÑL`ÔL`Ð`Ð`Ð`r    c                 óÒ   ‡— | pi                       dd ¦  «        }t          |t          ¦  «        sdS ˆfd„|D ¦   «         }|D ]}|                     |d ¦  «         Œt	          |¦  «        S )NÚall_settingsr   c                 ó>   •— g | ]}‰                      |¦  «        ­|‘ŒS ©N)Úget_model_defrš   s     €r!   re   z0_prune_orphan_model_settings.<locals>.<listcomp>«   s-   ø€ ÐnÐnÐn¨Àt×GYÒGYÐZdÑGeÔGeÐGm˜*ÐGmÐGmÐGmr    )r|   Ú
isinstanceÚdictÚpopr    )r}   rc   rÀ   Úorphan_model_typesrb   s    `   r!   Ú_prune_orphan_model_settingsrÈ   §   s„   ø€ Ø�K˜R×$Ò$ ^°TÑ:Ô:€LÝ�l¥DÑ)Ô)ð ØˆqØnÐnÐnÐn°|ÐnÑnÔnÐØ(ð +ð +ˆ
Ø×Ò˜ TÑ*Ô*Ð*Ð*ÝÐ!Ñ"Ô"Ð"r    c                 óž  — 	  | ¦   «         pg }n9# t           $ r,}t          j        d|› �¦  «          ||¦  «        cY d }~S d }~ww xY wt          | |¦   «         ¦  «        }|dk    rd|› d|dk    rdnd› d�nd}t	          |¦  «        dk    r!t          j        d	|d         z   |z   ¦  «         nt          j        d
|z   ¦  «          ||¦  «        S )NzUnable to refresh model list: r   z	 Removed z orphan model settingr2   Úsr3   ú.z5Model list refreshed, but parsing errors were found: zModel list refreshed.)Ú	Exceptionr   ÚInforÈ   r    )Úrefresh_model_defsÚrefresh_model_dropdownsr}   Údeps_factoryÚparse_errorsÚeÚpruned_countÚ
prune_texts           r!   Úrefresh_models_with_inforÕ   ±   s#  € ð.Ø)Ð)Ñ+Ô+Ð1¨rˆˆøÝð .ð .ð .Ý
ŒÐ4°Ð4Ð4Ñ5Ô5Ð5Ø&Ð& uÑ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-øøøøð.øøøõ 0°°|°|±~´~ÑFÔF€LØfrÐuvÒfvÐfvÐb˜\ÐbÐbÀ|ÐVWÒGWÐGWÀÀÐ]_ÐbÐbÐbÐbÐ|~€JÝ
ˆ<ÑÔ˜1ÒÐÝ
ŒÐGÈ,ÐWXÌ/ÑYÐ\fÑfÑgÔgÐgÐgå
ŒÐ'¨*Ñ4Ñ5Ô5Ð5Ø"Ð" 5Ñ)Ô)Ð)s   ‚ �
A™!A ºAÁ Ac                ó”  — t          ¦   «         5  t          |¦  «        } || d¦  «        r&t          j        d|› d�¦  «         	 d d d ¦  «         d S t	          |¦  «        r || dd¬¦  «         d|v r |¦   «           |¦   «           |¦   «           |¦   «          d d d ¦  «         n# 1 swxY w Y   t          j        |› d�¦  «         d S )	NÚconfigurationzUnable to unload z# while GPU resources are allocated.FT)Úclear_session_stateÚdiscard_runtime_snapshotúPrompt Enhancerz unloaded from RAM.)r   Ú_unload_targets_textr   rÍ   r   )	r}   Úserver_configÚany_GPU_process_runningÚrelease_deepy_vramÚreset_prompt_enhancerÚ"reset_prompt_enhancer_if_requestedÚrelease_extensionsÚrelease_modelÚunload_targetss	            r!   Úunload_models_from_ramrä   À   s\  € Ý	Ñ	Ô	ð ð Ý-¨mÑ<Ô<ˆØ"Ð" 5¨/Ñ:Ô:ð 	ÝŒGÐ[¨Ð[Ð[Ð[Ñ\Ô\Ð\Øð	ð ð ñ ô ð ð ð õ
 ˜=Ñ)Ô)ð 	`ØÐ˜u¸%ÐZ^Ð_Ñ_Ô_Ð_Ø Ð.Ð.Ø!Ð!Ñ#Ô#Ð#Ø.Ð.Ñ0Ô0Ð0ØÐÑÔÐØˆ‰Œˆðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð õ „Gˆ~Ð2Ð2Ð2Ñ3Ô3Ð3Ð3Ð3s   �5B&ÁA	B&Â&B*Â-B*c                 ó  — ddl m} dg}	 t          |                      dd¦  «        pd¦  «        dk    }n# t          $ r d}Y nw xY w|r|                     d¦  «         |                      |¦   «         ¦  «         t          | ¦  «        r|                     d¦  «         t          |¦  «        dk    r|d         S t          |¦  «        d	k    r)d
 	                    |d d…         ¦  «        d|d         › �z   nd 	                    |¦  «        S )Nr   )Úregistered_namesÚModelsÚenhancer_enabledFrÚ   ÚDeepyr2   r#   z, éÿÿÿÿz, and z and )
Úshared.utils.offload_registryræ   Úintr|   rÌ   r”   Úextendr   r    rX   )rÜ   ræ   Útargetsrè   s       r!   rÛ   rÛ   Ð   s9  € Ø>Ð>Ð>Ð>Ð>Ð>àˆj€Gð!Ý˜}×0Ò0Ð1CÀQÑGÔGÐLÈ1ÑMÔMÐPQÒQÐÐøÝð !ð !ð !Ø ÐÐÐð!øøøàð *Ø�ŠÐ(Ñ)Ô)Ð)Ø‡N‚NÐ#Ð#Ñ%Ô%Ñ&Ô&Ð&Ý�}Ñ%Ô%ð  Ø�Š�wÑÔÐÝ
ˆ7�|„|�qÒÐØ�qŒzÐÝ?BÀ7¹|¼|ÈaÒ?OÐ?Oˆ4�9Š9�W˜S˜b˜S”\Ñ"Ô"Ð%;¨g°b¬kÐ%;Ð%;Ñ;Ð;ÐU\×UaÒUaÐbiÑUjÔUjÐjs   ‹)5 µAÁArÐ   rÎ   rÏ   Úrefresh_lora_listÚunload_handlerc          	      óà  ‡‡
‡— | j                              t          | j        | j        | j        | j        gd¬¦  «                             d t          ¦   «         d d ¬¦  «         | j         	                    ˆfd„|| j        g| j        gd¬¦  «         | j
                             t          | j        g|| j        | j        | j        | j        gd¬¦  «         | j                             t          | j        | j        | j        | j        gd¬¦  «         | j                             ˆˆ
ˆfd„|g||||gd¬¦  «                             ||||	g||	gd¬¦  «         | j                             ||gd d¬¦  «         d S )NÚhidden)ÚfnÚoutputsÚshow_progress)ró   ÚjsÚinputsrô   c                 ó6   •— t           ‰¦   «         | |¦  «        S rÂ   )rº   )Ústate_valuer¤   rÐ   s     €r!   rs   zbind_toolbar.<locals>.<lambda>é   s   ø€ Õ&;¸L¸L¹N¼NÈKÐY^Ñ&_Ô&_€ r    )ró   r÷   rô   rõ   c                 ó(   •— t          ‰‰| ‰¦  «        S rÂ   )rÕ   )rù   rÐ   rÎ   rÏ   s    €€€r!   rs   zbind_toolbar.<locals>.<lambda>ú   s   ø€ Õ7Ð8JÐLcÐepÐr~ÑÔ€ r    )r   ÚclickrH   r   r   r   r   ÚthenÚfocus_search_javascriptÚinputr   r¾   r   r   rJ   r   r   )r<   rÐ   r}   Úmodel_familyÚmodel_base_type_choiceÚmodel_choiceÚmodel_choice_targetÚrefresh_form_triggerÚ	lset_nameÚloras_choicesrÎ   rÏ   rï   rð   s    `        ``  r!   Úbind_toolbarr  â   sÑ  øøø€ ØÔ×ÒÝØÔ! 7Ô#5°wÔ7KÈWÔMcÐdØð  ñ ô ÷ ‚dˆdÕ.Ñ0Ô0¸Àt€dÑLÔLÐLØÔ×ÒØ_Ð_Ð_Ð_Ø�wÔ+Ð,ØÔ'Ð(Øð	 ñ ô ð ð Ô×%Ò%Ý!ØÔ%Ð&Ø$ gÔ&6¸Ô8JÈGÔL`ÐbiÔbxÐyØð	 &ñ ô ð ð Ô×%Ò%ÝØÔ! 7Ô#5°wÔ7KÈWÔMcÐdØð &ñ ô ð ð
 Ô× Ò ØÐÐÐÐÐØˆwØÐ5°|ÐEYÐZØð	 !ñ ô ÷
 ‚dØØ�y -Ð0Ø˜MÐ*Øð	 ñ ô ð ð Ô×Ò >¸5¸'È4Ð_gÐÑhÔhÐhÐhÐhr    c                  ó   — dS )NaZ  
    () => {
        const root = window.gradioApp ? window.gradioApp() : (document.querySelector("gradio-app")?.shadowRoot || document);
        setTimeout(() => {
            const input = root.querySelector("#wangp_model_search_query textarea, #wangp_model_search_query input");
            if (input) input.focus();
        }, 50);
    }
    r   r   r    r!   rý   rý     s   € ðð r    c                  ó   — dS )Nu¯  
    (function () {
        let searchResultPointerDown = false;
        let activeSearchIndex = -1;

        function root() {
            if (window.gradioApp) return window.gradioApp();
            const app = document.querySelector("gradio-app");
            return app ? (app.shadowRoot || app) : document;
        }

        function queryInput() {
            return root().querySelector("#wangp_model_search_query textarea, #wangp_model_search_query input");
        }

        function targetInput() {
            return root().querySelector("#wangp_model_search_target textarea, #wangp_model_search_target input");
        }

        function applyButton() {
            const el = root().querySelector("#wangp_model_search_apply");
            return el?.matches("button") ? el : el?.querySelector("button");
        }

        function closeButton() {
            const el = root().querySelector("#wangp_model_search_close");
            return el?.matches("button") ? el : el?.querySelector("button");
        }

        function toolButton(id) {
            const el = root().querySelector(id);
            return el?.matches("button") ? el : el?.querySelector("button");
        }

        function updateFinetuneTooltip() {
            const button = toolButton("#wangp_model_tool_finetune");
            if (!button) return;
            const text = (button.textContent || "").trim();
            button.dataset.wangpTooltip = text.includes("âœŽ") ? "Edit finetune [Alt+F]" : "Create finetune [Alt+F]";
        }

        function resultItems() {
            return Array.from(root().querySelectorAll("#wangp_model_search_results [data-model-type]"));
        }

        function setActive(index) {
            const items = resultItems();
            if (!items.length) return;
            const bounded = Math.max(0, Math.min(index, items.length - 1));
            activeSearchIndex = bounded;
            items.forEach((item, itemIndex) => item.classList.toggle("wangp-model-search-result-active", itemIndex === bounded));
            items[bounded].scrollIntoView({ block: "nearest" });
        }

        function activeIndex() {
            const items = resultItems();
            if (activeSearchIndex >= 0 && activeSearchIndex < items.length) return activeSearchIndex;
            const index = items.findIndex((item) => item.classList.contains("wangp-model-search-result-active"));
            return index;
        }

        function selectModel(modelType) {
            const target = targetInput();
            const button = applyButton();
            if (!target || !button || !modelType) return;
            target.value = modelType;
            target.dispatchEvent(new Event("input", { bubbles: true }));
            button.click();
        }

        function eventSearchItem(event) {
            const path = event.composedPath ? event.composedPath() : [];
            for (const node of path) {
                if (node?.matches?.("#wangp_model_search_results [data-model-type]")) return node;
                const closest = node?.closest?.("#wangp_model_search_results [data-model-type]");
                if (closest) return closest;
            }
            return event.target?.closest?.("#wangp_model_search_results [data-model-type]");
        }

        document.addEventListener("click", (event) => {
            const item = eventSearchItem(event);
            if (!item) return;
            event.preventDefault();
            selectModel(item.dataset.modelType || "");
        });

        document.addEventListener("pointerdown", (event) => {
            if (!eventSearchItem(event)) return;
            searchResultPointerDown = true;
            setTimeout(() => searchResultPointerDown = false, 250);
        });

        function bindSearchKeyboard() {
            const input = queryInput();
            if (!input || input.dataset.wangpModelSearchBound === "1") return;
            input.dataset.wangpModelSearchBound = "1";
            input.addEventListener("input", () => activeSearchIndex = -1);
            input.addEventListener("keydown", (event) => {
                if (event.key === "Escape") {
                    event.preventDefault();
                    closeButton()?.click();
                    return;
                }
                const items = resultItems();
                if (!items.length) return;
                if (event.key === "ArrowDown" || event.key === "Down") {
                    event.preventDefault();
                    const index = activeIndex();
                    setActive(index < 0 ? 0 : index + 1);
                } else if (event.key === "ArrowUp" || event.key === "Up") {
                    event.preventDefault();
                    const index = activeIndex();
                    setActive(index < 0 ? items.length - 1 : index - 1);
                } else if (event.key === "Enter") {
                    event.preventDefault();
                    const index = activeIndex();
                    const item = items[index >= 0 ? index : 0] || items[0];
                    selectModel(item?.dataset?.modelType || "");
                }
            });
            input.addEventListener("blur", () => {
                setTimeout(() => {
                    if (searchResultPointerDown) return;
                    const active = root().activeElement || document.activeElement;
                    if (active === queryInput()) return;
                    closeButton()?.click();
                }, 120);
            });
        }

        document.addEventListener("keydown", (event) => {
            if (!event.altKey || event.ctrlKey || event.metaKey || event.shiftKey || event.repeat) return;
            const key = event.key.toLowerCase();
            const target = key === "s" ? "#wangp_model_tool_search" : key === "r" ? "#wangp_model_tool_refresh" : key === "u" ? "#wangp_model_tool_unload" : "";
            if (key === "f") {
                event.preventDefault();
                toolButton("#wangp_model_tool_finetune")?.click();
                return;
            }
            if (!target) return;
            event.preventDefault();
            toolButton(target)?.click();
        });

        document.addEventListener("focusin", () => { bindSearchKeyboard(); updateFinetuneTooltip(); });
        document.addEventListener("pointerover", (event) => {
            if (event.target.closest?.("#wangp_model_tool_finetune")) updateFinetuneTooltip();
        });
        bindSearchKeyboard();
        updateFinetuneTooltip();
    })();
    r   r   r    r!   Úget_javascriptr	    s   € ðXð Xr    c                  ó$   — dt           rdndz   dz   S )NuN  
    .wangp-model-selector-tools {
        position: relative;
        align-self: center;
        background: transparent !important;
        border: 0 !important;
        box-shadow: none !important;
        padding: 0 !important;
    }
    .wangp-model-selector-tool-row {
        position: relative;
        z-index: 2;
        width: max-content;
        margin: 0 auto !important;
        gap: 6px !important;
        padding: 0 4px;
        background: var(--body-background-fill);
    }
    .wangp-model-selector-tool {
        position: relative;
        display: flex !important;
        align-items: center !important;
        justify-content: center !important;
        min-width: 42px !important;
        width: 42px !important;
        max-width: 42px !important;
        height: 32px !important;
        padding: 0 !important;
        font-size: 0 !important;
        line-height: 1 !important;
        border-radius: 6px !important;
        color: var(--button-secondary-text-color, var(--body-text-color)) !important;
    }
    .wangp-model-selector-tool::before {
        position: absolute;
        inset: 0;
        display: flex;
        align-items: center;
        justify-content: center;
        color: var(--button-secondary-text-color, var(--body-text-color));
        font-family: "Segoe UI Symbol", "Arial Unicode MS", sans-serif;
        font-size: 32px;
        line-height: 1;
    }
    .wangp-model-selector-tool-search::before {
        content: "âŒ•";
        font-size: 22px;
        transform: translateY(-1px);
    }
    .wangp-model-selector-tool-refresh::before {
        content: "â†»";
        font-size: 23px;
        transform: translateY(-1px);
    }
    .wangp-model-selector-tool-unload::before {
        content: "";
        inset: 0;
        margin: auto;
        width: 22px;
        height: 22px;
        background: currentColor;
        mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 3 3 15h18L12 3ZM3 18h18v3H3z'/%3E%3C/svg%3E") center / contain no-repeat;
    }
    .wangp-model-selector-tool-finetune {
        font-size: 24px !important;
        font-family: "Segoe UI Symbol", "Arial Unicode MS", sans-serif !important;
        transform: translateY(-1px);
    }
    .wangp-model-selector-tool-finetune::before {
        content: "";
    }
    .wangp-model-selector-tool::after {
        position: absolute;
        left: 50%;
        bottom: calc(100% + 8px);
        transform: translateX(-50%);
        white-space: nowrap;
        padding: 4px 7px;
        border-radius: 4px;
        background: var(--body-text-color);
        color: var(--body-background-fill);
        font-size: 12px;
        line-height: 1.2;
        opacity: 0;
        pointer-events: none;
        transition: opacity 120ms ease;
        transition-delay: 0s;
        z-index: 50;
    }
    .wangp-model-selector-tool:hover::after {
        opacity: 1;
        transition-delay: 500ms;
    }
    .wangp-model-selector-tool-search::after { content: "Search models [Alt+S]"; }
    .wangp-model-selector-tool-refresh::after { content: "Refresh model list [Alt+R]"; }
    .wangp-model-selector-tool-finetune::after { content: attr(data-wangp-tooltip); }
    .wangp-model-selector-tool-unload::after { content: "Unload models and extensions [Alt+U]"; }
    .wangp-model-selector-search-row {
        --wangp-model-selector-gap: calc(16px * var(--wangp-ui-scale, 0.9));
        --wangp-model-selector-search-margin: 8px;
        position: relative;
        z-index: 3;
        box-sizing: border-box;
        width: calc(100% + var(--wangp-model-selector-gap) - var(--wangp-model-selector-search-margin));
        margin: 0 0 0 calc(var(--wangp-model-selector-search-margin) - var(--wangp-model-selector-gap)) !important;
        padding: 0;
        background: var(--body-background-fill);
    }
    .wangp-model-selector-search-box {
        position: relative;
        width: 100%;
        min-width: 0 !important;
    }
    .wangp-model-selector-search-input textarea,
    .wangp-model-selector-search-input input {
        text-align: left;
        min-height: 27px !important;
        height: 27px !important;
        padding: 2px 7px !important;
        font-size: 13px !important;
        border: 0 !important;
        box-shadow: none !important;
    }
    .wangp-model-selector-search-input {
        border: 1px solid var(--border-color-primary) !important;
        border-radius: 5px !important;
        background: var(--input-background-fill, var(--body-background-fill)) !important;
        box-sizing: border-box;
        width: 100%;
        padding: 1px !important;
        margin: 0 !important;
    }
    .wangp-model-selector-search-input label,
    .wangp-model-selector-search-input > div {
        margin: 0 !important;
        padding: 0 !important;
    }
    #wangp_model_search_results {
        position: absolute !important;
        left: auto;
        right: 0;
        top: calc(100% - 1px);
        width: min(560px, 90vw);
        z-index: 1000;
    }
    .wangp-model-search-popup {
        margin-top: 0;
        border: 1px solid var(--border-color-primary);
        border-radius: 0 0 6px 6px;
        background: var(--body-background-fill);
        overflow: hidden;
        max-height: 280px;
        overflow-y: auto;
    }
    .wangp-model-search-result {
        width: 100%;
        border: 0;
        border-bottom: z%1px solid var(--border-color-primary)Ú0ap  ;
        background: transparent;
        color: var(--body-text-color);
        display: block;
        text-align: left;
        padding: 8px 10px;
        cursor: pointer;
    }
    .wangp-model-search-result:last-child { border-bottom: 0; }
    .wangp-model-search-result:hover,
    .wangp-model-search-result-active {
        background: var(--background-fill-secondary);
        background: color-mix(in srgb, var(--button-primary-background-fill) 18%, var(--body-background-fill));
        box-shadow: inset 3px 0 0 var(--button-primary-background-fill);
        color: var(--body-text-color);
    }
    .wangp-model-search-result:hover .wangp-model-search-result-title,
    .wangp-model-search-result-active .wangp-model-search-result-title {
        font-weight: 700;
    }
    .wangp-model-search-result-title,
    .wangp-model-search-result-meta {
        display: block;
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
    }
    .wangp-model-search-result-title {
        font-weight: 600;
        font-size: 13px;
    }
    .wangp-model-search-result-meta {
        opacity: 0.75;
        font-size: 11px;
        margin-top: 2px;
    }
    .wangp-model-search-empty {
        padding: 8px 10px;
        font-size: 12px;
        opacity: 0.75;
    }
    .wangp-model-selector-hidden-controls {
        display: none !important;
    }
    )r³   r   r    r!   Úget_cssr  ¯  s8   € ð]õz JfÐnÐEÐEÐknñ{]pðz,sñ{Ið Ir    )F)(rµ   rL   r½   Údataclassesr   Útypingr   Úgradior   Úsharedr   Úshared.deepy.configr   Úshared.utils.model_unloadr   r£   r³   r
   r;   rA   rH   rJ   rP   r[   rg   r€   r‡   rŽ   r—   r®   rº   r¾   rÈ   rÕ   rä   rÛ   r  rý   r	  r  r   r    r!   ú<module>r     s¨  ðà €€€Ø 	€	€	€	Ø €€€Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð à Ð Ð Ð à "Ð "Ð "Ð "Ð "Ð "Ø /Ð /Ð /Ð /Ð /Ð /Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8ð Ð Ø$Ð ð ð1ð 1ð 1ð 1ð 1ñ 1ô 1ñ „ð1ðSð Sð Sð SðÐ!5ð ð ð ð ðvð vð vðvð vð vðBð Bð Bð-ð -ð -ð
uð uð uðQð Qð Qð9ð 9ð 9ðQð Qð Qð]ð ]ð ]ðð ð ð<~ð ~ð ~ð.að að að
#ð #ð #ð*ð *ð *ð4ð 4ð 4ð kð kð kð$"iÐ.ð "iÀð "ið  `hð "ið  CKð "ið  `hð "ið  zBð "ið "ið "ið "iðJ	ð 	ð 	ðYð Yð YðxJð Jð Jð Jð Jr    