1717from modules .html_generator import generate_chat_html
1818from modules .models import load_model , load_soft_prompt
1919from modules .text_generation import generate_reply
20+ from modules .LoRA import add_lora_to_model
2021
2122# Loading custom settings
2223settings_file = None
@@ -48,6 +49,9 @@ def get_available_extensions():
4849def get_available_softprompts ():
4950 return ['None' ] + sorted (set (map (lambda x : '.' .join (str (x .name ).split ('.' )[:- 1 ]), Path ('softprompts' ).glob ('*.zip' ))), key = str .lower )
5051
52+ def get_available_loras ():
53+ return ['None' ] + sorted ([item .name for item in list (Path ('loras/' ).glob ('*' )) if not item .name .endswith (('.txt' , '-np' , '.pt' , '.json' ))], key = str .lower )
54+
5155def load_model_wrapper (selected_model ):
5256 if selected_model != shared .model_name :
5357 shared .model_name = selected_model
@@ -59,6 +63,13 @@ def load_model_wrapper(selected_model):
5963
6064 return selected_model
6165
66+ def load_lora_wrapper (selected_lora ):
67+ if not shared .args .cpu :
68+ gc .collect ()
69+ torch .cuda .empty_cache ()
70+ add_lora_to_model (selected_lora )
71+ return selected_lora
72+
6273def load_preset_values (preset_menu , return_dict = False ):
6374 generate_params = {
6475 'do_sample' : True ,
@@ -181,6 +192,7 @@ def set_interface_arguments(interface_mode, extensions, cmd_active):
181192available_presets = get_available_presets ()
182193available_characters = get_available_characters ()
183194available_softprompts = get_available_softprompts ()
195+ available_loras = get_available_loras ()
184196
185197# Default extensions
186198extensions_module .available_extensions = get_available_extensions ()
@@ -401,6 +413,19 @@ def create_interface():
401413 shared .gradio ['Stop' ].click (None , None , None , cancels = gen_events )
402414 shared .gradio ['interface' ].load (None , None , None , _js = f"() => {{{ ui .main_js } }}" )
403415
416+ with gr .Tab ("LoRA" , elem_id = "lora" ):
417+ with gr .Row ():
418+ with gr .Column ():
419+ gr .Markdown ("Load" )
420+ with gr .Row ():
421+ shared .gradio ['lora_menu' ] = gr .Dropdown (choices = available_loras , value = shared .lora_name , label = 'LoRA' )
422+ ui .create_refresh_button (shared .gradio ['lora_menu' ], lambda : None , lambda : {'choices' : get_available_loras ()}, 'refresh-button' )
423+ with gr .Column ():
424+ gr .Markdown ("Train (TODO)" )
425+ gr .Button ("Practice your button clicking skills" )
426+
427+ shared .gradio ['lora_menu' ].change (load_lora_wrapper , [shared .gradio ['lora_menu' ]], [shared .gradio ['lora_menu' ]], show_progress = True )
428+
404429 with gr .Tab ("Interface mode" , elem_id = "interface-mode" ):
405430 modes = ["default" , "notebook" , "chat" , "cai_chat" ]
406431 current_mode = "default"
0 commit comments