import gradio as gr # Function to dynamically add new text fields def add_text_field(inputs): inputs.append("") return gr.update(visible=True), inputs # Function to aggregate all inputs into a list def process_ingredients(*ingredients): return [ingredient for ingredient in ingredients if ingredient] def app(): with gr.Blocks() as demo: inputs = [] # Shared list to store ingredients # Container to hold text fields ingredient_fields = gr.Row(visible=True) # Buttons for adding and submitting with gr.Row(): add_button = gr.Button("+ Add Ingredient") submit_button = gr.Button("Submit") # Output field for displaying the list output = gr.Textbox(label="Ingredients List", interactive=False) # Function to add a new ingredient field def add_field(): inputs.append("") # Add a new placeholder for the new input with ingredient_fields: for i, ingredient in enumerate(inputs): inputs[i] = gr.Textbox( value=inputs[i], label=f"Ingredient {i + 1}" ).value # Function to submit def submit_list(): return process_ingredients(*inputs) # Click logic for the buttons add_button.click(fn=add_field) submit_button.click(fn=submit_list, outputs=output) return demo demo = app() demo.launch()