a
    Ad                     @   sn   d dl Z d dlZd dlZd dlZd dlZd dlmZ dd Ze	dZ
e	dZdd ZG d	d
 d
ejZdS )    N)ui_extra_networks_user_metadatac                 C   s&   t dd |  D t|  }|dkS )Nc                 s   s   | ]}t |V  qd S N)len.0x r   U/var/www/html/stable-diffusion-webui/extensions-builtin/Lora/ui_edit_user_metadata.py	<genexpr>       z&is_non_comma_tagset.<locals>.<genexpr>   )sumkeysr   )tagsZaverage_tag_lengthr   r   r	   is_non_comma_tagset   s    r   z[-_\w']+z *, *c           
         s   i  |  di  D ]:\}}| D ](\}}| }  |dt|  |< q$q rt ri }  D ]<\}}tt|D ]&}t|dk rq|| |d| ||< q|qh| t	 
  j dd}	 fdd|	D S )Nss_tag_frequencyr      Tkeyreversec                    s   g | ]}| | fqS r   r   )r   tagr   r   r	   
<listcomp>+   r   zbuild_tags.<locals>.<listcomp>)getitemsstripintr   refindallre_wordr   sortedr   )
metadata_Z	tags_dictr   	tag_countZnew_tagstextZ
text_countwordZordered_tagsr   r   r	   
build_tags   s    r&   c                       s\   e Zd Z fddZdd Z fddZ fddZd	d
 Zdd Zdd Z	dd Z
  ZS )LoraUserMetadataEditorc                    s2   t  ||| d | _d | _d | _d | _d | _d S r   )super__init__select_sd_versiontaginfoedit_activation_textslider_preferred_weight
edit_notes)selfuitabnamepage	__class__r   r	   r)   /   s    zLoraUserMetadataEditor.__init__c                 C   sB   |  |}||d< ||d< ||d< ||d< ||d< | || d S )Ndescriptionz
sd versionactivation textpreferred weightnotes)get_user_metadatawrite_user_metadata)r/   namedesc
sd_versionactivation_textpreferred_weightr8   user_metadatar   r   r	   save_lora_user_metadata9   s    
z.LoraUserMetadataEditor.save_lora_user_metadatac                    s  t  |}| jj|i }|dp(i }ddddd}| D ]<\}}||d }|d ur@t|dkr@||t|f q@|d}	|	r|d	t	j	
t|	d
f |d}
|
rd|
v ri }|
d  D ]B\}}|d }|d  d|d  }||dt|d  ||< qt| |jdd}td|dd }t|dkrz|d7 }dtd| d| d}|t|dkrdnd|f d}|di  D ]\}}|t|dd7 }q|r|d|f |S )Nr!   zOutput name:zModel:z
Clip skip:zKohya module:)ss_output_namess_sd_model_namess_clip_skipZss_network_moduleNoness_training_started_atzDate trained:z%Y-%m-%d %H:%Mss_bucket_infobuckets
resolution   r   r   countTr   ,    z, ...z<span title='z'>z</span>zResolutions:zResolution:Zss_dataset_dirsZ	img_countzDataset size:)r(   get_metadata_tabler2   r   r   strappendhtmlescapedatetimeutcfromtimestampfloatstrftimer   r    r   joinr   )r/   r;   tableitemr!   r   r   labelvaluerF   rG   Zresolutionsr"   bucketrI   Zresolutions_listZresolutions_textZimage_countparamsr3   r   r	   rN   C   sD    
 
 z)LoraUserMetadataEditor.get_metadata_tablec                    s   |  |}t |}| jj|i }|dp2i }t|}dd |dd D }g |dd |ddtjj	||r|d	nd
d|ddt
|ddtj	|rd	nd
dtj	| ||rd	nd
dS )Nr!   c                 S   s   g | ]\}}|t |fqS r   )rO   )r   r   rK   r   r   r	   r   z   r   zELoraUserMetadataEditor.put_values_into_components.<locals>.<listcomp>r         r=   UnknownTF)r[   visibler6    r7           ra   )r9   r(   put_values_into_componentsr2   r   r   r&   grHighlightedTextupdaterU    generate_random_prompt_from_tags)r/   r;   r@   valuesrY   r!   r   Zgradio_tagsr3   r   r	   re   r   s*    



z1LoraUserMetadataEditor.put_values_into_componentsc                 C   s0   | j j|i }|dpi }t|}| |S )Nr!   )r2   r   r   r&   ri   )r/   r;   rY   r!   r   r   r   r	   generate_random_prompt   s    z-LoraUserMetadataEditor.generate_random_promptc                 C   sJ   d }g }|D ].\}}|s|}t   | }||kr|| qdt|S )NrL   )randomrP   rW   r    )r/   r   	max_countresr   rK   vr   r   r	   ri      s    z7LoraUserMetadataEditor.generate_random_prompt_from_tagsc                 C   s   t jg ddddd| _d S )N)SD1SD2SDXLr`   r`   zStable Diffusion versionT)r[   rZ   interactive)rf   Dropdownr*   )r/   r   r   r	   )create_extra_default_items_in_left_column   s    z@LoraUserMetadataEditor.create_extra_default_items_in_left_columnc                 C   s  |    tjdd| _tjddd| _tjdddd	d
d| _t }tj	dd" tj
ddddd}W d    n1 sz0    Y  tj	ddd  tjdddd}W d    n1 s0    Y  W d    n1 s0    Y  tjddd| _|j| j| jg|gdd tjddd}| jj|| jg| jgdd |   | j| j| j| j| j| j| j| j| j||g}| jj| j| jg|djdd  g | jgd | j| j| j| j| jg}| | j| j| d S )!NzTraining dataset tags)rZ   zActivation textz'Will be added to prompt along with Lora)rZ   infozPreferred weightzSet to 0 to disablerc   g       @g{Gz?)rZ   rv   minimummaximumstep   )scalezRandom promptrM   F)rZ   lines	max_linesrs   rJ   x   )r{   	min_widthGeneratelg)sizer{   Notes)rZ   r|   )fninputsoutputsshow_progress)evtc                    sN   |j d  tt| } |v r: fdd|D }d|S | rJ| d   S  S )Nr   c                    s    g | ]}| kr|  r|qS r   )r   r   r   r   r	   r      r   zLLoraUserMetadataEditor.create_editor.<locals>.select_tag.<locals>.<listcomp>rL   )r[   r   splitre_commarW   )r>   r   wordsr   r   r	   
select_tag   s    

z8LoraUserMetadataEditor.create_editor.<locals>.select_tag)r   r   r   c                   S   s   t jddS )NTrd   )rf   rh   r   r   r   r	   <lambda>   r   z6LoraUserMetadataEditor.create_editor.<locals>.<lambda>) create_default_editor_elemsrf   rg   r+   Textr,   Sliderr-   RowColumnTextboxButtonTextArear.   clickrk   edit_name_input
SelectDataselectcreate_default_buttons	edit_nameedit_descriptionhtml_filedatahtml_previewr*   button_editre   thenboxsetup_save_handlerbutton_saverA   )r/   Zrow_random_promptZrandom_promptrk   r   Zviewed_componentsZedited_componentsr   r   r	   create_editor   sL    
0L
z$LoraUserMetadataEditor.create_editor)__name__
__module____qualname__r)   rA   rN   re   rk   ri   ru   r   __classcell__r   r   r3   r	   r'   .   s   

/r'   )rS   rQ   rl   gradiorf   r   modulesr   r   compiler   r   r&   UserMetadataEditorr'   r   r   r   r	   <module>   s   

