2023-08-06 20:49:27 -04:00
import gradio as gr
from modules import shared , ui , utils
from modules . github import clone_or_pull_repository
from modules . utils import gradio
def create_ui ( ) :
2023-09-26 08:44:04 -04:00
mu = shared . args . multi_user
2023-08-06 20:49:27 -04:00
with gr . Tab ( " Session " , elem_id = " session-tab " ) :
with gr . Row ( ) :
with gr . Column ( ) :
2023-09-26 08:44:04 -04:00
shared . gradio [ ' reset_interface ' ] = gr . Button ( " Apply flags/extensions and restart " , interactive = not mu )
2023-08-14 10:46:07 -04:00
with gr . Row ( ) :
shared . gradio [ ' toggle_dark_mode ' ] = gr . Button ( ' Toggle 💡 ' )
2023-09-26 08:44:04 -04:00
shared . gradio [ ' save_settings ' ] = gr . Button ( ' Save UI defaults to settings.yaml ' , interactive = not mu )
2023-08-06 20:49:27 -04:00
with gr . Row ( ) :
with gr . Column ( ) :
shared . gradio [ ' extensions_menu ' ] = gr . CheckboxGroup ( choices = utils . get_available_extensions ( ) , value = shared . args . extensions , label = " Available extensions " , info = ' Note that some of these extensions may require manually installing Python requirements through the command: pip install -r extensions/extension_name/requirements.txt ' , elem_classes = ' checkboxgroup-table ' )
with gr . Column ( ) :
2023-08-13 00:12:15 -04:00
shared . gradio [ ' bool_menu ' ] = gr . CheckboxGroup ( choices = get_boolean_arguments ( ) , value = get_boolean_arguments ( active = True ) , label = " Boolean command-line flags " , elem_classes = ' checkboxgroup-table ' )
2023-08-06 20:49:27 -04:00
with gr . Column ( ) :
2023-09-26 08:44:04 -04:00
extension_name = gr . Textbox ( lines = 1 , label = ' Install or update an extension ' , info = ' Enter the GitHub URL below and press Enter. For a list of extensions, see: https://github.com/oobabooga/text-generation-webui-extensions ⚠️ WARNING ⚠️ : extensions can execute arbitrary code. Make sure to inspect their source code before activating them. ' , interactive = not mu )
2023-08-06 20:49:27 -04:00
extension_status = gr . Markdown ( )
2024-01-09 07:20:10 -05:00
shared . gradio [ ' theme_state ' ] = gr . Textbox ( visible = False , value = ' dark ' if shared . settings [ ' dark_theme ' ] else ' light ' )
2023-09-25 23:27:06 -04:00
extension_name . submit ( clone_or_pull_repository , extension_name , extension_status , show_progress = False )
2023-08-06 20:49:27 -04:00
# Reset interface event
shared . gradio [ ' reset_interface ' ] . click (
2023-08-13 00:12:15 -04:00
set_interface_arguments , gradio ( ' extensions_menu ' , ' bool_menu ' ) , None ) . then (
2024-06-12 23:52:42 -04:00
None , None , None , js = ' () => { document.body.innerHTML= \' <h1 style= " font-family:monospace;padding-top:20 % ;margin:0;height:100vh;color:lightgray;text-align:center;background:var(--body-background-fill) " >Reloading...</h1> \' ; setTimeout(function() { location.reload()},2500); return []} ' )
2023-08-06 20:49:27 -04:00
2024-01-09 07:20:10 -05:00
shared . gradio [ ' toggle_dark_mode ' ] . click (
2024-07-20 23:01:42 -04:00
lambda x : ' dark ' if x == ' light ' else ' light ' , gradio ( ' theme_state ' ) , gradio ( ' theme_state ' ) ) . then (
2024-07-20 23:32:57 -04:00
None , None , None , js = f ' () => {{ { ui . dark_theme_js } ; toggleDarkMode() }} ' )
2024-01-09 07:20:10 -05:00
2023-08-14 10:46:07 -04:00
shared . gradio [ ' save_settings ' ] . click (
ui . gather_interface_values , gradio ( shared . input_elements ) , gradio ( ' interface_state ' ) ) . then (
2024-07-20 23:01:42 -04:00
handle_save_settings , gradio ( ' interface_state ' , ' preset_menu ' , ' extensions_menu ' , ' show_controls ' , ' theme_state ' ) , gradio ( ' save_contents ' , ' save_filename ' , ' save_root ' , ' file_saver ' ) , show_progress = False )
def handle_save_settings ( state , preset , extensions , show_controls , theme ) :
contents = ui . save_settings ( state , preset , extensions , show_controls , theme )
return [
contents ,
" settings.yaml " ,
" ./ " ,
gr . update ( visible = True )
]
2023-08-06 20:49:27 -04:00
2023-08-13 00:12:15 -04:00
def set_interface_arguments ( extensions , bool_active ) :
2023-08-06 20:49:27 -04:00
shared . args . extensions = extensions
2023-08-13 00:12:15 -04:00
bool_list = get_boolean_arguments ( )
2023-08-06 20:49:27 -04:00
for k in bool_list :
setattr ( shared . args , k , False )
for k in bool_active :
setattr ( shared . args , k , True )
2023-11-15 19:35:47 -05:00
if k == ' api ' :
shared . add_extension ( ' openai ' , last = True )
2023-08-06 20:49:27 -04:00
shared . need_restart = True
2023-08-13 00:12:15 -04:00
def get_boolean_arguments ( active = False ) :
2023-11-21 18:15:16 -05:00
exclude = shared . deprecated_args
2023-08-13 00:12:15 -04:00
cmd_list = vars ( shared . args )
bool_list = sorted ( [ k for k in cmd_list if type ( cmd_list [ k ] ) is bool and k not in exclude + ui . list_model_elements ( ) ] )
bool_active = [ k for k in bool_list if vars ( shared . args ) [ k ] ]
if active :
return bool_active
else :
return bool_list