Spaces:
Sleeping
Sleeping
| """ | |
| Form parser configuration and utilities for handling Gradio form inputs. | |
| This module provides a centralized way to manage form structure and parsing. | |
| """ | |
| from dataclasses import dataclass | |
| from typing import List, Any, Tuple | |
| class FormSection: | |
| """Represents a section of the form with its field count.""" | |
| name: str | |
| field_count: int | |
| fields: List[str] = None | |
| class DynamicSection: | |
| """Represents a dynamic section with multiple rows and fields.""" | |
| name: str | |
| fields: List[str] | |
| max_rows: int = 5 | |
| def total_components(self) -> int: | |
| return len(self.fields) * self.max_rows | |
| # Form structure configuration | |
| FORM_STRUCTURE = [ | |
| FormSection("header", 11, [ | |
| "licensing", "formatVersion", "formatVersionSpecificationUri", "reportId", | |
| "reportDatetime", "reportStatus", "publisher_name", "publisher_division", | |
| "publisher_projectName", "publisher_confidentialityLevel", "publisher_publicKey" | |
| ]), | |
| FormSection("task_simple", 3, [ | |
| "taskFamily", "taskStage", "nbRequest" | |
| ]), | |
| DynamicSection("algorithms", [ | |
| "trainingType", "algorithmType", "algorithmName", "algorithmUri", | |
| "foundationModelName", "foundationModelUri", "parametersNumber", "framework", | |
| "frameworkVersion", "classPath", "layersNumber", "epochsNumber", "optimizer", "quantization" | |
| ]), | |
| DynamicSection("dataset", [ | |
| "dataUsage", "dataType", "dataFormat", "dataSize", "dataQuantity", | |
| "shape", "source", "sourceUri", "owner" | |
| ]), | |
| FormSection("task_final", 3, [ | |
| "measuredAccuracy", "estimatedAccuracy", "taskDescription" | |
| ]), | |
| DynamicSection("measures", [ | |
| "measurementMethod", "manufacturer", "version", "cpuTrackingMode", "gpuTrackingMode", | |
| "averageUtilizationCpu", "averageUtilizationGpu", "powerCalibrationMeasurement", | |
| "durationCalibrationMeasurement", "powerConsumption", "measurementDuration", "measurementDateTime" | |
| ]), | |
| FormSection("system", 3, [ | |
| "osystem", "distribution", "distributionVersion" | |
| ]), | |
| FormSection("software", 2, [ | |
| "language", "version_software" | |
| ]), | |
| FormSection("infrastructure_simple", 4, [ | |
| "infraType", "cloudProvider", "cloudInstance", "cloudService" | |
| ]), | |
| DynamicSection("infrastructure_components", [ | |
| "componentName", "componentType", "nbComponent", "memorySize", | |
| "manufacturer_infra", "family", "series", "share" | |
| ]), | |
| FormSection("environment", 7, [ | |
| "country", "latitude", "longitude", "location", | |
| "powerSupplierType", "powerSource", "powerSourceCarbonIntensity" | |
| ]), | |
| FormSection("quality", 1, ["quality"]) | |
| ] | |
| class FormParser: | |
| """Utility class for parsing form inputs based on the form structure.""" | |
| def __init__(self): | |
| self.structure = FORM_STRUCTURE | |
| def parse_inputs(self, inputs: Tuple[Any, ...]) -> dict: | |
| """ | |
| Parse form inputs into a structured dictionary. | |
| Args: | |
| inputs: Tuple of all form input values | |
| Returns: | |
| dict: Parsed form data organized by sections | |
| """ | |
| parsed_data = {} | |
| idx = 0 | |
| for section in self.structure: | |
| if isinstance(section, FormSection): | |
| # Simple section - extract values directly | |
| section_data = inputs[idx:idx + section.field_count] | |
| if section.fields: | |
| parsed_data[section.name] = dict( | |
| zip(section.fields, section_data)) | |
| else: | |
| parsed_data[section.name] = section_data | |
| idx += section.field_count | |
| elif isinstance(section, DynamicSection): | |
| # Dynamic section - extract and reshape data | |
| flat_data = inputs[idx:idx + section.total_components] | |
| idx += section.total_components | |
| # Reshape flat data into field-organized lists | |
| section_data = {} | |
| for field_idx, field_name in enumerate(section.fields): | |
| start_pos = field_idx * section.max_rows | |
| end_pos = start_pos + section.max_rows | |
| section_data[field_name] = flat_data[start_pos:end_pos] | |
| parsed_data[section.name] = section_data | |
| return parsed_data | |
| def get_total_input_count(self) -> int: | |
| """Get the total number of expected inputs.""" | |
| total = 0 | |
| for section in self.structure: | |
| if isinstance(section, FormSection): | |
| total += section.field_count | |
| elif isinstance(section, DynamicSection): | |
| total += section.total_components | |
| return total | |
| # Global parser instance | |
| form_parser = FormParser() | |