import gradio as gr from os import path from src.services.huggingface import init_huggingface, update_dataset from src.services.json_generator import generate_json from src.ui.form_components import ( create_header_tab, create_task_tab, create_measures_tab, create_system_tab, create_software_tab, create_infrastructure_tab, create_environment_tab, create_quality_tab ) css_path = path.join(path.dirname(__file__), "./assets/styles/app.css") # Initialize Hugging Face init_huggingface() def handle_submit(*inputs): message, file_output, json_output = generate_json(*inputs) # Check if the message indicates validation failure if message.startswith("The following fields are required"): return message, file_output, json_output publish_button = gr.Button( "Share your data to the public repository", interactive=True, elem_classes="pubbutton") return "Report sucessefully created", file_output, json_output, publish_button def handle_publi(json_output): # If validation passed, proceed to update_dataset update_output = update_dataset(json_output) return update_output # Create Gradio interface with gr.Blocks(css_paths=css_path) as app: gr.Markdown("## Data Collection Form") gr.Markdown("Welcome to this Huggingface space, where you can create a report on the energy consumption of an AI task in BoAmps format, by filling in a form.
" "Parts/fields in bold red are mandatory.") # Create form tabs header_components = create_header_tab() task_components = create_task_tab() measures_components = create_measures_tab() system_components = create_system_tab() software_components = create_software_tab() infrastructure_components = create_infrastructure_tab() environment_components = create_environment_tab() quality_components = create_quality_tab() # Submit and Download Buttons submit_button = gr.Button("Submit", elem_classes="subbutton") output = gr.Textbox(label="Output", lines=1) json_output = gr.Textbox(visible=False) file_output = gr.File(label="Downloadable JSON") publish_button = gr.Button( "Share your data to the public repository", interactive=False, elem_classes="pubbutton") # Event Handlers submit_button.click( handle_submit, inputs=[ *header_components, *task_components, *measures_components, *system_components, *software_components, *infrastructure_components, *environment_components, *quality_components, ], outputs=[output, file_output, json_output, publish_button] ) # Event Handlers publish_button.click( handle_publi, inputs=[ json_output ], outputs=[output] ) if __name__ == "__main__": app.launch()