# from evaluate.utils import launch_gradio_widget from tests import test_cases from evaluate.utils.logging import get_logger from evaluate.utils import ( infer_gradio_input_types, parse_gradio_data, json_to_string_type, parse_readme, parse_test_cases, ) from pathlib import Path import evaluate import sys import evaluate logger = get_logger(__name__) def launch_gradio_widget(metric, test_cases): """Launches `metric` widget with Gradio.""" try: import gradio as gr except ImportError as error: logger.error( "To create a metric widget with Gradio make sure gradio is installed." ) raise error local_path = Path(sys.path[0]) # if there are several input types, use first as default. if isinstance(metric.features, list): (feature_names, feature_types) = zip(*metric.features[0].items()) else: (feature_names, feature_types) = zip(*metric.features.items()) gradio_input_types = infer_gradio_input_types(feature_types) parsed_test_cases = parse_test_cases(test_cases, feature_names, gradio_input_types) def compute(data): return metric.compute(**parse_gradio_data(data, gradio_input_types)) demo = gr.Interface( fn=compute, inputs=gr.Dataframe( value=parsed_test_cases[0], headers=feature_names, col_count=len(feature_names), datatype=json_to_string_type(gradio_input_types), # row_count=5, ), outputs=gr.Textbox(label=metric.name), description=( metric.info.description + "\nISCO codes must be wrapped in double quotes." # " Alternatively you can use a JSON-formatted list as input." ), title=f"Metric: {metric.name}", article=parse_readme(local_path / "README.md"), # TODO: load test cases and use them to populate examples examples=[parsed_test_cases], ) if __name__ == "__main__": demo.launch() else: return demo module = evaluate.load("danieldux/isco_hierarchical_accuracy") if __name__ == "__main__": launch_gradio_widget(module, test_cases)