Spaces:
Build error
Build error
| import gradio as gr | |
| from config import ( | |
| REPORT_STATUS_OPTIONS, CONFIDENTIALITY_LEVELS, DATA_TYPES, | |
| ACCURACY_LEVELS, MEASUREMENT_UNITS, INFRA_TYPES, | |
| POWER_SUPPLIER_TYPES, POWER_SOURCES, QUALITY_LEVELS, | |
| HASH_ALGORITHMS, CRYPTO_ALGORITHMS, CACHE_OPTIONS | |
| ) | |
| def create_dynamic_section(section_name, fields_config, initial_count = 1, layout="row"): | |
| # State management | |
| count_state = gr.State(value=initial_count+1) | |
| field_states = [gr.State([]) for _ in fields_config] | |
| all_components = [] | |
| def update_fields(*states_and_values): | |
| """Generic update function for multiple fields""" | |
| # Split states and current values | |
| states = list(states_and_values[:len(fields_config)]) | |
| current_values = states_and_values[len(fields_config):-1] | |
| index = states_and_values[-1] | |
| # Update each field's state | |
| for field_idx, (state, value) in enumerate(zip(states, current_values)): | |
| # Ensure state list is long enough | |
| while len(state) <= index: | |
| state.append("") | |
| # Update the value at the correct index | |
| state[index] = value if value is not None else "" | |
| return tuple(states) | |
| def render_dynamic_section(count): | |
| nonlocal all_components | |
| all_components = [] | |
| for i in range(count): | |
| with (gr.Row() if layout == "row" else gr.Column()): | |
| row_components = [] | |
| field_refs = [] # To store references to current row's components | |
| for field_idx, config in enumerate(fields_config): | |
| component = config["type"]( | |
| label=f"{config['label']} {i + 1}", | |
| info=config.get("info", ""), | |
| **config.get("kwargs", {}) | |
| ) | |
| row_components.append(component) | |
| field_refs.append(component) | |
| # Create change event with ALL current field values | |
| component.change( | |
| fn=update_fields, | |
| inputs=[*field_states, *field_refs, gr.State(i)], | |
| outputs=field_states | |
| ) | |
| # Remove button | |
| remove_btn = gr.Button("❌", variant="secondary") | |
| remove_btn.click( | |
| lambda x, idx=i, fs=field_states: ( | |
| max(0, x-1), | |
| *[fs[i].value[:idx] + fs[i].value[idx+1:] for i in range(len(fs))] | |
| ), | |
| inputs=count_state, | |
| outputs=[count_state, *field_states] | |
| ) | |
| row_components.append(remove_btn) | |
| all_components.extend(row_components) | |
| return all_components | |
| # Initialize with initial count | |
| render_dynamic_section(count=initial_count) | |
| add_btn = gr.Button(f"Add {section_name}") | |
| add_btn.click(lambda x: x + 1, count_state, count_state) | |
| return (count_state, *field_states, add_btn) | |
| def create_header_tab(): | |
| """Create the header tab components.""" | |
| with gr.Tab("Header"): | |
| licensing = gr.Textbox(label="Licensing", info="(the type of licensing applicable for the sharing of the report)") | |
| formatVersion = gr.Textbox(label="Format Version", info="Required field<br>(the version of the specification of this set of schemas defining the report's fields)") | |
| formatVersionSpecificationUri = gr.Textbox(label="Format Version Specification URI", info="(the URI of the present specification of this set of schemas)") | |
| reportId = gr.Textbox(label="Report ID", info="Required field<br>(the unique identifier of this report, preferably as a uuid4 string)") | |
| reportDatetime = gr.Textbox(label="Report Datetime", info="(the publishing date of this report in format YYYY-MM-DD HH:MM:SS)") | |
| reportStatus = gr.Dropdown(value=None, | |
| label="Report Status", | |
| choices=REPORT_STATUS_OPTIONS, | |
| info="Required field<br>(the status of this report)" | |
| ) | |
| with gr.Accordion("Publisher"): | |
| publisher_name = gr.Textbox(label="Name", info="(name of the organization)") | |
| publisher_division = gr.Textbox(label="Division", info="(name of the publishing department within the organization)") | |
| publisher_projectName = gr.Textbox(label="Project Name", info="(name of the publishing project within the organization)") | |
| publisher_confidentialityLevel = gr.Dropdown(value=None, | |
| label="Confidentiality Level", | |
| choices=CONFIDENTIALITY_LEVELS, | |
| info="Required field<br>(the confidentiality of the report)" | |
| ) | |
| publisher_publicKey = gr.Textbox(label="Public Key", info="(the cryptographic public key to check the identity of the publishing organization)") | |
| return [ | |
| licensing, formatVersion, formatVersionSpecificationUri, reportId, | |
| reportDatetime, reportStatus, publisher_name, publisher_division, | |
| publisher_projectName, publisher_confidentialityLevel, publisher_publicKey | |
| ] | |
| def create_task_tab(): | |
| """Create the task tab components.""" | |
| with gr.Tab("Task"): | |
| taskType = gr.Textbox(label="Task Type", info="Required field<br>(type of the computing task of machine learning, example : datacreation, preprocessing, supervisedLearning, unsupervisedLearning, semiSupervisedLearning ...)") | |
| taskFamily = gr.Textbox(label="Task Family", info="Required field<br>(the family of task performed, example : classification, regression, chatbot, summarization, keyword extraction, image recognition...)") | |
| taskStage = gr.Textbox(label="Task Stage", info="Required field<br>(stage of the task, example: training, finetuning, reinforcement, inference, rag...)") | |
| with gr.Accordion("Algorithms"): | |
| algorithmName = gr.Textbox(label="Algorithm Name", info="Required field<br>(the case-sensitive common name of the algorithm, example: randomForest, svm, xgboost...)") | |
| framework = gr.Textbox(label="Framework", info="(the common name of the software framework implementing the algorithm)") | |
| frameworkVersion = gr.Textbox(label="Framework Version", info="(the version of the software framework)") | |
| classPath = gr.Textbox(label="Class Path", info="(the full class path of the algorithm within the framework)") | |
| tuning_method = gr.Textbox(label="Tuning Method", info="(the method of hyperparameters tuning used (if any), example: gridSearch, randomizedSearch...)") | |
| with gr.Accordion("Hyperparameters"): | |
| _, hyperparameter_names, hyperparameter_values, add_btn = create_dynamic_section( | |
| section_name="Hyperparameter", | |
| fields_config=[ | |
| { | |
| "type": gr.Textbox, | |
| "label": "Hyperparameter Name", | |
| "info": "(name of the hyperparameter)", | |
| "kwargs": {"interactive": True} | |
| }, | |
| { | |
| "type": gr.Textbox, | |
| "label": "Hyperparameter Value", | |
| "info": "(value of the hyperparameter)", | |
| "kwargs": {"placeholder": "Enter value..."} | |
| } | |
| ], | |
| initial_count=0, | |
| ) | |
| quantization = gr.Textbox(label="Quantization", info="(the data weights (in bits) obtained thanks to the quantization, example: 2, 8, 16...)") | |
| with gr.Accordion("Dataset"): | |
| dataType = gr.Dropdown(value=None, | |
| label="Data Type", | |
| choices=DATA_TYPES, | |
| info="Required field<br>(the nature of the data)" | |
| ) | |
| fileType = gr.Textbox(label="File Type", info="(the file type of the dataset)") | |
| volume = gr.Textbox(label="Volume", info="Required field<br>(the size of the dataset)") | |
| volumeUnit = gr.Textbox(label="Volume Unit", info="Required field<br>(the unit of the size)") | |
| items = gr.Textbox(label="Items", info="(the number of items in the dataset)") | |
| shape_item = gr.Textbox(label="Shape Item", info="(the shape of each dataset item)") | |
| with gr.Accordion("Inference Properties"): | |
| _, nbRequest, nbTokensInput, nbWordsInput, nbTokensOutput, nbWordsOutput, contextWindowSize, cache, add_inference_btn = create_dynamic_section( | |
| section_name="Inference Property", | |
| fields_config=[ | |
| { | |
| "type": gr.Textbox, | |
| "label": "Number of Requests", | |
| "info": "Required field<br>(the number of requests the measure corresponds to)", | |
| }, | |
| { | |
| "type": gr.Textbox, | |
| "label": "Number of Tokens Input", | |
| "info": "(the number of tokens in the input)", | |
| }, | |
| { | |
| "type": gr.Textbox, | |
| "label": "Number of Words Input", | |
| "info": "(the number of words in the input)", | |
| }, | |
| { | |
| "type": gr.Textbox, | |
| "label": "Number of Tokens Output", | |
| "info": "(the number of tokens in the output)", | |
| }, | |
| { | |
| "type": gr.Textbox, | |
| "label": "Number of Words Output", | |
| "info": "(the number of words in the output)", | |
| }, | |
| { | |
| "type": gr.Textbox, | |
| "label": "Context Window Size", | |
| "info": "(the number of tokens kept in memory)", | |
| }, | |
| { | |
| "type": gr.Dropdown, | |
| "label": "Cache", | |
| "info": "(the presence of a cache function)", | |
| "kwargs": {"choices": CACHE_OPTIONS, "value": None} | |
| } | |
| ], | |
| initial_count=0, | |
| layout="column" | |
| ) | |
| source = gr.Textbox(label="Source", info="(the kind of source of the dataset)") | |
| sourceUri = gr.Textbox(label="Source URI", info="(the URI of the dataset)") | |
| owner = gr.Textbox(label="Owner", info="(the owner of the dataset)") | |
| with gr.Row(): | |
| measuredAccuracy = gr.Textbox(label="Measured Accuracy", info="(the measured accuracy of your model (between 0 and 1))") | |
| estimatedAccuracy = gr.Dropdown(value=None, | |
| label="Estimated Accuracy", | |
| choices=ACCURACY_LEVELS, | |
| info="(estimated accuracy assessment)" | |
| ) | |
| return [ | |
| taskType, taskFamily, taskStage, algorithmName, framework, | |
| frameworkVersion, classPath, tuning_method, hyperparameter_names, hyperparameter_values, | |
| quantization, dataType, fileType, volume, | |
| volumeUnit, items, shape_item, nbRequest, nbTokensInput, | |
| nbWordsInput, nbTokensOutput, nbWordsOutput, contextWindowSize, | |
| cache, source, sourceUri, owner, measuredAccuracy, estimatedAccuracy | |
| ] | |
| def create_measures_tab(): | |
| """Create the measures tab components.""" | |
| with gr.Tab("Measures"): | |
| measurementMethod = gr.Textbox(label="Measurement Method", info="Required field<br>(the method used to perform the energy or FLOPS measure)") | |
| manufacturer = gr.Textbox(label="Manufacturer", info="(the builder of the measuring tool)") | |
| version = gr.Textbox(label="Version", info="(the version of the measuring tool)") | |
| cpuTrackingMode = gr.Textbox(label="CPU Tracking Mode", info="(the method used to track CPU consumption)") | |
| gpuTrackingMode = gr.Textbox(label="GPU Tracking Mode", info="(the method used to track GPU consumption)") | |
| averageUtilizationCpu = gr.Textbox(label="Average Utilization CPU", info="(the average percentage of CPU use)") | |
| averageUtilizationGpu = gr.Textbox(label="Average Utilization GPU", info="(the average percentage of GPU use)") | |
| serverSideInference = gr.Textbox(label="Server Side Inference", info="(inference server consumption estimation)") | |
| unit = gr.Dropdown(value=None, | |
| label="Unit", | |
| choices=MEASUREMENT_UNITS, | |
| info="Required field<br>(the unit of power consumption measure)" | |
| ) | |
| powerCalibrationMeasurement = gr.Textbox(label="Power Calibration Measurement", info="(power consumed during calibration)") | |
| durationCalibrationMeasurement = gr.Textbox(label="Duration Calibration Measurement", info="(duration of calibration in seconds)") | |
| powerConsumption = gr.Textbox(label="Power Consumption", info="Required field<br>(the power consumption measure)") | |
| measurementDuration = gr.Textbox(label="Measurement Duration", info="(the duration of measurement in seconds)") | |
| measurementDateTime = gr.Textbox(label="Measurement DateTime", info="(when measurement began)") | |
| return [ | |
| measurementMethod, manufacturer, version, cpuTrackingMode, | |
| gpuTrackingMode, averageUtilizationCpu, averageUtilizationGpu, | |
| serverSideInference, unit, powerCalibrationMeasurement, | |
| durationCalibrationMeasurement, powerConsumption, | |
| measurementDuration, measurementDateTime | |
| ] | |
| def create_system_tab(): | |
| """Create the system tab components.""" | |
| with gr.Tab("System"): | |
| os = gr.Textbox(label="OS", info="Required field<br>(name of the operating system)") | |
| distribution = gr.Textbox(label="Distribution", info="(distribution of the operating system)") | |
| distributionVersion = gr.Textbox(label="Distribution Version", info="(distribution version)") | |
| return [os, distribution, distributionVersion] | |
| def create_software_tab(): | |
| """Create the software tab components.""" | |
| with gr.Tab("Software"): | |
| language = gr.Textbox(label="Language", info="Required field<br>(programming language information)") | |
| version_software = gr.Textbox(label="Version", info="(version of the programming language)") | |
| return [language, version_software] | |
| def create_infrastructure_tab(): | |
| """Create the infrastructure tab components.""" | |
| with gr.Tab("Infrastructure"): | |
| infraType = gr.Dropdown( | |
| value=INFRA_TYPES[2], # Default to "onPremise" | |
| label="Infrastructure Type", | |
| choices=INFRA_TYPES, | |
| info="Required field<br>(the type of infrastructure used)" | |
| ) | |
| cloudProvider = gr.Textbox(label="Cloud Provider", info="(name of your cloud provider)") | |
| cloudInstance = gr.Textbox(label="Cloud Instance", info="(name of your cloud instance)") | |
| with gr.Accordion("Components"): | |
| _, componentName, nbComponent, memorySize, manufacturer_infra, family, series, share, add_component_btn = create_dynamic_section( | |
| section_name="Component", | |
| fields_config=[ | |
| { | |
| "type": gr.Textbox, | |
| "label": "Component Name", | |
| "info": "Required field<br>(type of subsystem part)", | |
| }, | |
| { | |
| "type": gr.Textbox, | |
| "label": "Number of Components", | |
| "info": "Required field<br>(number of items of this component)", | |
| }, | |
| { | |
| "type": gr.Textbox, | |
| "label": "Memory Size", | |
| "info": "(size of memory in Gbytes)", | |
| }, | |
| { | |
| "type": gr.Textbox, | |
| "label": "Manufacturer", | |
| "info": "(name of the manufacturer)", | |
| }, | |
| { | |
| "type": gr.Textbox, | |
| "label": "Family", | |
| "info": "(family of this component)", | |
| }, | |
| { | |
| "type": gr.Textbox, | |
| "label": "Series", | |
| "info": "(series of this component)", | |
| }, | |
| { | |
| "type": gr.Textbox, | |
| "label": "Share", | |
| "info": "(percentage of equipment used)", | |
| } | |
| ], | |
| initial_count=0, | |
| layout="column" | |
| ) | |
| return [ | |
| infraType, cloudProvider, cloudInstance, componentName, | |
| nbComponent, memorySize, manufacturer_infra, family, | |
| series, share | |
| ] | |
| def create_environment_tab(): | |
| """Create the environment tab components.""" | |
| with gr.Tab("Environment"): | |
| country = gr.Textbox(label="Country", info="Required field") | |
| latitude = gr.Textbox(label="Latitude") | |
| longitude = gr.Textbox(label="Longitude") | |
| location = gr.Textbox(label="Location") | |
| powerSupplierType = gr.Dropdown(value=None, | |
| label="Power Supplier Type", | |
| choices=POWER_SUPPLIER_TYPES, | |
| info="(the type of power supplier)" | |
| ) | |
| powerSource = gr.Dropdown(value=None, | |
| label="Power Source", | |
| choices=POWER_SOURCES, | |
| info="(the source of power)" | |
| ) | |
| powerSourceCarbonIntensity = gr.Textbox(label="Power Source Carbon Intensity") | |
| return [ | |
| country, latitude, longitude, location, | |
| powerSupplierType, powerSource, powerSourceCarbonIntensity | |
| ] | |
| def create_quality_tab(): | |
| """Create the quality tab components.""" | |
| with gr.Tab("Quality"): | |
| quality = gr.Dropdown(value=None, | |
| label="Quality", | |
| choices=QUALITY_LEVELS, | |
| info="(the quality of the information provided)" | |
| ) | |
| return [quality] | |
| def create_hash_tab(): | |
| """Create the hash tab components.""" | |
| with gr.Tab("Hash"): | |
| hashAlgorithm = gr.Dropdown(value=None, | |
| label="Hash Algorithm", | |
| choices=HASH_ALGORITHMS, | |
| info="Required field<br>(the hash function to apply)" | |
| ) | |
| cryptographicAlgorithm = gr.Dropdown(value=None, | |
| label="Cryptographic Algorithm", | |
| choices=CRYPTO_ALGORITHMS, | |
| info="Required field<br>(the public key function to apply)" | |
| ) | |
| value_hash = gr.Textbox(label="Value", info="Required field<br>(encrypted value of the hash)") | |
| return [hashAlgorithm, cryptographicAlgorithm, value_hash] |