diff --git a/extensions/character_bias/script.py b/extensions/character_bias/script.py index a92d0aef..614d9ce3 100644 --- a/extensions/character_bias/script.py +++ b/extensions/character_bias/script.py @@ -1,8 +1,23 @@ import gradio as gr +import os + +# get the current directory of the script +current_dir = os.path.dirname(os.path.abspath(__file__)) + +# check if the bias_options.txt file exists, if not, create it +bias_file = os.path.join(current_dir, "bias_options.txt") +if not os.path.isfile(bias_file): + with open(bias_file, "w") as f: + f.write("*I am so happy*\n*I am so sad*\n*I am so excited*\n*I am so bored*\n*I am so angry*") + +# read bias options from the text file +with open(bias_file, "r") as f: + bias_options = [line.strip() for line in f.readlines()] params = { "activate": True, "bias string": " *I am so happy*", + "use custom string": False, } @@ -11,7 +26,6 @@ def input_modifier(string): This function is applied to your text inputs before they are fed into the model. """ - return string @@ -19,7 +33,6 @@ def output_modifier(string): """ This function is applied to the model outputs. """ - return string @@ -29,9 +42,11 @@ def bot_prefix_modifier(string): the prefix text for the Bot and can be used to bias its behavior. """ - if params['activate']: - return f'{string} {params["bias string"].strip()} ' + if params['use custom string']: + return f'{string} {params["custom string"].strip()} ' + else: + return f'{string} {params["bias string"].strip()} ' else: return string @@ -39,8 +54,29 @@ def bot_prefix_modifier(string): def ui(): # Gradio elements activate = gr.Checkbox(value=params['activate'], label='Activate character bias') - string = gr.Textbox(value=params["bias string"], label='Character bias') + dropdown_string = gr.Dropdown(choices=bias_options, value=params["bias string"], label='Character bias', info='To edit the options in this dropdown edit the "bias_options.txt" file') + use_custom_string = gr.Checkbox(value=False, label='Use custom bias textbox instead of dropdown') + custom_string = gr.Textbox(value="", placeholder="Enter custom bias string", label="Custom Character Bias", info='To use this textbox activate the checkbox above') # Event functions to update the parameters in the backend - string.change(lambda x: params.update({"bias string": x}), string, None) + def update_bias_string(x): + if x: + params.update({"bias string": x}) + else: + params.update({"bias string": dropdown_string.get()}) + return x + + def update_custom_string(x): + params.update({"custom string": x}) + + dropdown_string.change(update_bias_string, dropdown_string, None) + custom_string.change(update_custom_string, custom_string, None) activate.change(lambda x: params.update({"activate": x}), activate, None) + use_custom_string.change(lambda x: params.update({"use custom string": x}), use_custom_string, None) + + # Group elements together depending on the selected option + def bias_string_group(): + if use_custom_string.value: + return gr.Group([use_custom_string, custom_string]) + else: + return dropdown_string